最近这段时间,我一直在死磕一个课题:单目转头短视频的静态头部重建(基于 3DGS)。
从最初只有一个“泛泛的想法”,到现在终于在服务器上搭起了一条真实的实验生产线,这中间经历了不少自我怀疑和“面向 Bug 编程”的深夜。
今天写下这篇博客,复盘一下项目“前半程打地基”的完整过程。目前的我已经不再是刚接触这个课题时不知从何下手的新手,而是正式跨入了第一轮真实的实验迭代期。
以下是我的通关记录。
一、 从零开始:跑通官方 Baseline 与夯实基建
1. 验证跑通官方 3DGS Baseline
这不是仅仅“看了论文”或“配了环境”,而是将官方的链路完整走了一遍。我从官方 GitHub 仓库拉取代码,用 Demo 数据依次跑通了 train.py、render.py 和 metrics.py,并成功拿到了第一批指标和渲染结果。
这一步的意义在于建立信任底座:它验证了我的 AutoDL + RTX 4090 + 当前环境 + 官方 Repo 是完全可用的,提前排除了后续实验中环境带来的干扰变量。
2. 建立规范的代码与环境管理 为了走向“可复现研究”,我并没有打算只当个“跑一次就扔”的过客。
- 我 Fork 了官方仓库,配置了 Git 用户信息,处理了
.gitignore,清晰地界定哪些文件该进版本库。 - 保存了环境快照,记录了
pip freeze和conda env export。
这不仅是工程习惯的养成,也是为后续长期的消融实验买了一份保险。
二、 搭建“流水线”:把想法变成可执行的数据链路
我原本的目标是“单目转头短视频 → 静态头部重建”,现在我已经把它拆解成了一条真实可执行的生产线:
拍视频 → 抽帧/筛帧 → 做 A/B Set → 跑 COLMAP → 送进官方 3DGS → 看输出 → 失败分析
为了支撑这条流水线,我用视频预处理基础设施(如 process_video.py),实现了自动化流程:
- 从视频中按固定步长读取并采样帧。
- 引入 Laplacian variance(拉普拉斯方差) 计算图像清晰度,自动过滤运动模糊帧,并控制最终保留数量。
- 统一分辨率,输出筛选后的图片,自动生成处理报告和模糊度曲线。
这意味着,我拥有了属于自己的数据前处理工具链。
三、 直面真实数据:踩坑、重拍与构建 A/B 测试
1. 发现第一版数据的致命问题:视角严重失衡
在处理第一轮自己拍摄的视频时(A_set),我发现筛完的帧分布极其不均:左脸很多,但正脸和右脸极少。数据分布对 3D 重建结果具有决定性作用,这不是靠算法能弥补的小瑕疵。
2. 拒绝“死调参”,选择重拍闭环 很多新手会在错误的数据(Garbage In)上死磕网络参数,但我选择了另一条路:
- 先承认第一版数据不行,但保留它作为**“失败对照组”**。
- 重新拍摄一条视角更均衡的视频。
- 重新跑筛帧流程,最终生成了包含 80 张高质量图片的
B_set。
3. 跑通 COLMAP 拿到场景结构
利用重拍的 B_set,我成功跑出了 database.db 以及 sparse/0/*.bin 文件。这是我自己拍的视频,第一次真正转换成了 3DGS 官方链路所需的前置格式。
四、 摸清系统边界:直击工程痛点与初次训练
在这条通路上,我踩到了一个非常真实的工程大坑:相机模型不兼容。
当我兴冲冲地把 B_set 送进官方 train.py 时,迎面撞上了关键报错:
Error: only undistorted datasets (PINHOLE or SIMPLE_PINHOLE cameras) supported.
它让我深刻认识到:“COLMAP 成功” 绝不等于 “能直接训练 3DGS”。这强迫我去处理 COLMAP 的相机畸变(Distortion)问题,也让我真正摸到了官方数据接口的真实边界。
解决问题后,我终于完成了一轮完整的训练。这标志着我正式跨越了“准备期”,进入了“自己的数据 → 训练 → 渲染/评估/对比”的实质性产出阶段。
五、 阶段性总结与 Next Steps
为了支撑后续的多轮对比和失败复盘,我建立了一个结构化的项目目录(包含 dataset/、runs/、reports/compare/、notes/ 和 scripts/ 等),为写出论文级的实验记录做好了准备。
回顾这段时间,我的认知发生了几个重要的跃迁:
- 清扫环境障碍: 从“不会配环境” $\rightarrow$ “官方 baseline 顺利跑通”。
- 打通数据链路: 从“只有原始视频” $\rightarrow$ “能稳定产出结构化训练输入”。
- 建立数据直觉: 从“凭感觉拍” $\rightarrow$ 深刻理解“视角分布会如何毁掉重建结果”。
- 形成实验思维: 从“乱试” $\rightarrow$ 知道如何利用失衡旧数据与重拍新数据进行 A/B 对照分析。
一句话概括:我已经把这个课题从一个“方向想法”,推进成了一个真正能跑、能出错、能比较、能复盘的实验系统。
🚀 下一步计划 (Action Items)
当前阶段最重要的不再是盲目扩充新路线,而是沉淀这一轮的成果:
- 整理出详细的
run_log.md和failure_notebook.md。 - 完成
A_set与B_set之间严格的 Render 结果对比与结论分析。 - 基于对比结果做一个关键战略决策:下一步是优先继续优化数据源(Data-centric),还是开始突进 head-aware / GPHM 风格的技术路线(Model-centric)?
地基已经打好,好戏才刚刚开始。 我们下篇科研日志见!