3DGS上手第二期:自制数据集跑通3DGS全流程
3DGS上手第二期:自制数据集跑通3DGS全流程
从手机视频到 3D 模型,手把手教你用自己的素材跑通 3DGS
目录
- 前言
- 数据集核心要求与拍摄建议
- 前置工具安装:COLMAP/FFmpeg/ImageMagick
- 第一步:视频转图片
- 第二步:COLMAP 稀疏重建(手动 UI 版)
- 第三步:数据集格式转换
- 第四步:小 GPU 极速训练(从 48s/it 到 100it/s)
- 训练后:3D 模型查看
- 总结与参考资料
前言
上一期我们搞定了 3DGS 的环境安装,解决了 Windows 下的各种兼容坑,这一期我们来实操:用自己手机拍的视频,制作属于自己的 3DGS 数据集,从拍摄、COLMAP 重建,到格式转换、小 GPU 极速训练,全流程手把手教你,让你不用再用官方的测试数据集,真正把 3DGS 用起来。
一、数据集核心要求与拍摄建议
在开始之前,我们先搞懂 3DGS 的数据集到底需要什么,还有拍摄的时候要注意什么,这直接决定了你最后重建的效果:
3DGS 数据集核心要求
3DGS 数据集需包含三大核心内容:
- 图像序列:多角度、无遮挡、均匀覆盖目标场景
- 相机内参:焦距、畸变系数等
- 相机外参:每个图像的位姿:旋转矩阵 + 平移向量
- 稠密点云:可选,用于初始化高斯分布
而 COLMAP 的核心作用,就是自动帮我们计算相机参数与位姿,生成 3DGS 兼容的格式,不用我们手动去算。
拍摄建议(直接影响重建质量)
拍摄的时候一定要注意这些,不然 COLMAP 可能重建失败,或者效果很差:
- ✅ 相邻照片重叠区域足够:最好 > 60%,所以视频运镜要慢,别太快
- ✅ 避免无纹理区域:别拍纯白墙、纯玻璃、强反光,这些地方特征点太少,COLMAP 匹配不上
- ✅ 锁定曝光 / 对焦:减少跨帧亮度漂移,不然特征点匹配会出错
- ✅ 绕一圈拍摄:不要只在一条线上拍,要把物体的所有面、所有细节都拍进去
- ✅ 分辨率不用太高:3DGS 目标图像分辨率在 1~1.6K 像素范围内,所以 1080P 的视频就够了,太高了反而增加计算量
二、前置工具安装
我们需要先装三个工具:COLMAP(重建用)、FFmpeg(视频转图片用)、ImageMagick(可选,调整分辨率用)
1. 安装 COLMAP
COLMAP 是用来做三维重建的核心工具,直接下载预编译版本就行,不用自己编译:
- 下载地址: https://github.com/colmap/colmap/releases
- 下载对应 Windows 的安装包,安装好之后,把 COLMAP 的安装路径下的
bin文件夹,加到系统的Path环境变量里

- 验证:打开终端,输入
colmap.bat,如果能正常打开 COLMAP,说明安装成功了

2. 安装 FFmpeg
FFmpeg 用来把我们拍的视频,抽成一张张的图片,方便 COLMAP 处理:
- 下载地址: https://ffmpeg.org/download.html
- 下载对应 Windows 的版本,解压后,把里面的
bin文件夹,加到系统的Path环境变量里

- 验证:打开终端,输入
ffmpeg -version,如果能输出版本信息,说明安装成功了
3. 安装 ImageMagick(非必须)
如果你的视频 / 图片分辨率超过了 1.6K,或者你想自动调整分辨率,可以装这个工具,3DGS 的 convert.py 脚本会自动调用它:
- 下载地址: https://imagemagick.org/script/download.php
- 下载对应 Windows 的版本,默认安装就行

- 验证:打开终端,输入:
magick logo: logo.gif
magick identify logo.gif
如果没有报错,说明安装成功了

三、第一步:视频转图片
工具都装好了,接下来开始处理我们的视频:
- 用手机拍 1分钟左右的视频,注意前面的拍摄建议,另外,时间不宜过长,会极大影响COLMAP制作数据集和模型训练的时间,参考1分钟400张图片,数据集制作约两个半小时
- 把视频传到电脑上,重命名为简单的名字,比如
input.mp4 - 在视频同目录下,创建一个
input文件夹,用来放抽出来的图片 - 执行下面的命令,把视频转成图片:
ffmpeg -i input.mp4 -vf "setpts=0.2*PTS" input/image_%04d.jpg

这个命令会把视频的帧率提高,抽出来的图片会更密集,保证相邻图片的重叠度足够。
完成以上步骤后,3DGS提供的convert.py脚本可以根据图片文件夹,自行调用colmap和ImageMagick【非必须】对图片进行处理,生成数据集,执行指令如下(注意需要在3DGS根目录下运行):
conda activate gaussian_splatting
python convert.py -s <location> [--resize] #If not resizing, ImageMagick is not needed
参数位置填数据集的地址,即前面创建的data文件夹的地址,注意不是填input文件夹的地址
如果这里执行报错,显示找不到两个程序的位置,可以使用可选参数 --colmap_executable 和 --magick_executable 指向相应的路径
注意,如果这里选择使用convert自动生成数据集,那么后面的所有与生成数据集相关的内容都可以忽略了(四~六)
不过,这里我演示一下使用colmap的UI界面处理数据集的办法,如下:
四、第二步:COLMAP 稀疏重建(手动 UI 版)
接下来,我们用 COLMAP 来做稀疏重建,这里我演示一下手动 UI 版的步骤,比自动脚本更直观,方便你排查问题:
1. 准备数据集目录
首先,在 3DGS 的源码文件夹下,创建一个data文件夹,作为我们的数据集根目录:
- 把刚才转好的
input图片文件夹,移到data文件夹里 - 在
data文件夹里,创建一个distorted文件夹,用来放 COLMAP 的输出
2. 新建 COLMAP 项目
- 打开 COLMAP,点击左上角
File -> New project

- 在弹窗里:

- 点击
New,在data/distorted文件夹下,创建database.db文件

- 点击
Select,选择我们的data/input图片文件夹 - 点击
Save
3. 特征提取
- 点击
Processing -> Feature extraction

- 弹窗里直接点击
Extract,开始提取图片的特征点,等待完成

4. 特征匹配
- 特征提取完成后,点击
Processing -> Feature matching

- 弹窗里直接点击
Run,开始匹配不同图片之间的特征点,等待完成

5. 稀疏重建
- 匹配完成后,点击
Reconstruction -> Start reconstruction,开始稀疏重建

- ⚠️ 注意:这个过程非常耗时!我用的是 i5-13500H 的笔记本 CPU,测试了不同数量的图片:
- 100 张 1080P 图:20 分钟以内
- 300 张图:1 小时左右
- 465 张图:花了整整 3 小时!

- 而且时间是非线性的,越到后面越慢,所以大家要评估好时间,在图片数量和重建质量之间做取舍
五、第三步:整理数据集结构
COLMAP 重建完之后,我们要把它整理成 3DGS 要求的数据集结构,不然 3DGS 找不到文件:
标准数据集结构
3DGS 要求的 COLMAP 数据集结构是这样的:
<location> # 数据集根目录(就是我们的data文件夹)
|---input # 输入图像目录
| |---image_0001.jpg
| |---image_0002.jpg
| |---...
|---distorted
|---database.db
|---sparse # 稀疏重建结果
|---0
|---cameras.bin
|---images.bin
|---points3D.bin
导出 COLMAP 模型
- 首先,把之前的
colmap_output文件夹改名为distorted(如果之前叫别的名字的话) - 在
distorted文件夹里,创建sparse/0这两级文件夹 - 回到 COLMAP 的界面,切换到点云最多的那个模型(注意:最新的模型不一定是最好的,要选点云最多的)

- 点击左上角
File -> Export model,把模型导出到distorted/sparse/0文件夹下

- 检查一下,
sparse/0文件夹里,是不是有这三个文件:cameras.bin、images.bin、points3D.bin,有就说明对了

可选:稠密重建
如果觉得稀疏重建的效果不够好,你还可以做稠密重建,不过会更耗时:
- 点击
Reconstruction -> Dense Reconstruction - 选择我们的
input图片文件夹 - 先做
Undistortion图像校正 - 然后做
Stereo视差图计算,这个会更慢,耐心等待就行
具体操作参考 colmap三维重建(自制数据集) - 知乎
六、第四步:数据集格式转换
COLMAP 的数据集,还需要转换成 3DGS 能直接用的格式,用官方的convert.py脚本就行:
- 打开终端,激活我们的 3DGS 的 conda 环境:
conda activate gaussian_splatting
- 执行转换命令,这里我们用
--skip_matching参数,跳过 COLMAP 重建的部分,因为我们已经手动做完了:
python convert.py -s ./data --skip_matching [--resize]
-s后面填我们的数据集根目录,也就是data文件夹的路径--resize是可选的,如果你装了 ImageMagick,就可以用它自动把图片缩到合适的分辨率- 如果之前找不到 COLMAP 的路径,可以加参数:
--colmap_executable指向 COLMAP 的 exe 路径,--magick_executable指向 ImageMagick 的路径
执行完之后,格式就转换好了,接下来就可以训练了!
七、第五步:小 GPU 极速训练(从 48s/it 到 100it/s)
最开始我用默认参数训练,465 张图,速度居然是 48 秒一次迭代?3 万次迭代的话要快一个月?这谁受得了!

后来我装了加速的光栅化器,再优化了参数,直接把速度提到了 100 次每秒,差距太大了!
1. 安装加速光栅化器
首先,我们要把原来的 diff-gaussian-rasterization,换成加速的3dgs_accel分支:
# 卸载原来的版本
pip uninstall diff-gaussian-rasterization -y
# 切换到加速分支,重新编译
cd submodules/diff-gaussian-rasterization
rm -r build
git checkout 3dgs_accel
# 如果pip安装报错,就用python setup.py install
pip install .
# 或者 python setup.py install
cd ../..
2. 优化训练参数
然后,我们用优化后的训练命令,所有的加速参数都加好了:
python train.py -s ./data ^
--optimizer_type sparse_adam ^
--iterations 10000 ^
-r 2 ^
--sh_degree 1 ^
--densify_until_iter 7000 ^
--densification_interval 200 ^
--test_iterations 7000 10000 ^
--save_iterations 7000 10000
每个参数的提速原理
| 参数 | 作用 | 提速效果 |
|---|---|---|
--optimizer_type sparse_adam |
核心! 加速优化器,官方直接带来 2.7 倍训练加速,这是最大的提速点 | 直接把 48s/it 砍到 17s/it 以内 |
--iterations 10000 |
总迭代从 3 万砍到 1 万,官方验证:1 万次已经足够 99% 的场景收敛,后面 2 万次都是微调到肉眼不可见 | 总时间直接省 2/3 |
-r 2 |
图像分辨率降到 1/2,大幅减少像素处理量,小 GPU 友好,视觉上几乎没差别 | 再提速 30%,同时节省显存 |
--sh_degree 1 |
球谐函数阶数从 3 降到 1,减少颜色计算,大部分场景视觉差别极小 | 再提速 20% |
--densify_until_iter 7000 |
提前结束高斯点密集化,7000 次后就不再增加新的点,后面迭代速度越来越快 | 避免后期密集化拖慢速度 |
--densification_interval 200 |
密集化频率从 100 次一次改成 200 次一次,减少密集化耗时 | 再提速 15% |
--test_iterations/save_iterations |
减少测试和保存的次数,避免频繁渲染浪费时间 | 省掉大量额外的渲染耗时 |
优化完之后,速度直接起飞,我这里直接跑到了 100 次每秒,原来要一个月的训练,现在几分钟就跑完了!

⚠️ 注意:为了速度,我们牺牲了一点质量,所以最后出来的 3D 模型会有点模糊,不过大体的特征都能展现出来,如果你想要更高的质量,可以把参数调回去,在速度和质量之间做平衡就行。

)
八、训练后:3D 模型查看
训练完之后,就可以用查看器看我们的 3D 模型了,和上一期一样,用官方的预编译查看器就行:
- 下载预编译查看器: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/binaries/viewers.zip
- 解压后,在终端执行:
./bin/SIBR_gaussianViewer_app.exe -m <path to trained model>
,填你训练好的模型路径,一般在 ./output/下面的随机命名文件夹里

查看器快捷键
和之前一样,默认的 FPS 导航器:
W/A/S/D/Q/E:控制相机平移I/K/J/L/U/O:控制相机旋转- 鼠标拖动:旋转视角,滚轮缩放
九、总结
到这里,我们就完成了从手机视频,到 3D 模型的全流程:
- 拍摄视频,转成图片
- 用 COLMAP 做稀疏重建,计算相机参数
- 整理数据集,转换成 3DGS 的格式
- 安装加速模块,优化参数,小 GPU 也能快速训练
- 查看训练好的 3D 模型
整个流程下来,只要几个小时,你就能得到自己的 3D 重建模型了,是不是很简单?
参考资料
- 3DGS 官方仓库: https://github.com/graphdeco-inria/gaussian-splatting
- COLMAP 官方文档: https://colmap.github.io/
- CSDN 教程: https://blog.csdn.net/qq_63521473/article/details/156314637
- CSDN 教程: https://blog.csdn.net/jingpide9527/article/details/154948030
- 知乎教程: https://zhuanlan.zhihu.com/p/708739737
- Youtube视频教程:https://www.youtube.com/watch?v=UXtuigy_wYc
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)