← 返回作品

空间产品工程个人项目演示· Shanks Engine 重建训练管线

高斯泼溅重建与训练管线

面向单相机与多相机刚性阵列的 3DGS 端到端流水线,具备状态机、质量门禁与断点续跑,减少手工脚本的不可复现问题。

  • Python 3.11
  • COLMAP 4.2
  • FFmpeg
  • Brush
  • Nerfstudio splatfacto
  • Docker

实验场(渲染产物):管线产物的 3DGS 渲染演示

我的角色
独立设计与开发(编排内核、SfM 质量门禁、训练后端接入)
职责边界
编排内核、SfM 质量门禁、训练后端接入
材料说明
项目资料与演示
幂等阶段(prepare → supersplat)
6
SfM 门禁(有效图像数 / 注册率)
≥ 20 / ≥ 0.85
GPU 训练后端(Brush / splatfacto)
2
其余 1 项指标与口径
GPU 训练后端(Brush / splatfacto)
2
3DGS 训练管线从输入、SfM 门禁到训练与导出的流程示意
训练管线结构示意(非运行截图)
本页目录

背景问题

单相机视频与多相机阵列采集的数据,需要经过抽帧、去畸变、SfM、训练与导出等多步骤。手工脚本存在三个问题:结果不可复现、SfM 失败后仍会空耗 GPU 训练时间、中途崩溃无法续跑。

下游创作、编译与查看发布见Scene 离线三维创作与发布工具链,本篇只覆盖训练侧。

约束

  • 编排层尽量只依赖 Python 标准库,降低部署环境的依赖面。
  • Windows 与 Linux/Docker 两套环境并存,配置需要保持键集合一致。
  • 外部工具(COLMAP、FFmpeg、训练后端)版本要可锁定、可校验。

架构

视频 / 多路鱼眼 Rig
  └─ FFmpeg 抽帧 + FishPoly 去畸变 + 位姿先验
      └─ COLMAP SfM(rig 约束)──► sfm_validation.json(门禁)
          └─ Brush 0.3.0(Windows)或 Nerfstudio splatfacto(Docker/CUDA)
              └─ 导出 .ply ──► splat-transform 生成 .compressed.ply / .sog / 独立查看器

关键决策与取舍

  • 状态机而非脚本:prepare、sfm、convert、train、export、supersplat 六个阶段解耦。重跑某阶段时自动清理本阶段产物并使下游失效,--from-stage 支持断点续跑。
  • 门禁前置:训练前读取 sparse/0,检查有效图像数与注册率,不达标直接中止,避免算力空耗。
  • 工具版本锁定:tools/manifest.toml 记录工具来源、版本与 SHA-256,bootstrap 时校验,不静默升级。
  • 训练后端二选一:Windows 用 Brush(WebGPU/Vulkan),生产 Linux 用 splatfacto,两者共用上游数据契约。

结果

  • 同一份输入在两个后端之间的前后处理保持一致,失败点可以定位到具体阶段。
  • 测试全部使用标准库 unittest,并校验两套配置的键集合一致。

局限与后续优化

  • SfM 门禁为静态阈值(有效图像数 / 注册率),对弱纹理与重复纹理场景仍依赖人工复核输入质量。
  • Brush 与 splatfacto 共用上游数据契约,但训练参数未完全对齐,跨后端结果存在不可比差异。
  • 当前面向本机与单机 GPU 编排,未纳入分布式或队列优先级调度。

我的职责

  • 编排内核与状态机设计,阶段产物与级联失效规则。
  • SfM 门禁、rig 配置生成与鱼眼去畸变链路。
  • 目录队列 Worker、事件流与 Docker 双 target 构建。

OPEN TO WORK

正在招聘相关方向?

Web 图形、空间数据与 AI 业务集成方向的岗位欢迎联系;也承接 3D 查看器与编辑器定制。