3DGS_reproduction
dateset -> training
理论上, conda env create --file environment.yml
命令即可实现环境的配置. 然后数据集选择的是https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
的Scenes. 其中, 一个文件夹含有两个子文件夹: images sparse
.
环境配置没遇到什么大问题, 然后有了环境和数据集, 那么就可以运行试验了:
python train.py -s data -m data/output - 1
其中, -r
代表分辨率乘以\(\frac{1}{s}\), 不输入的话默认是1. 如果训练的时候遇到了CUDA_OUT_OF_MEMORY
(如果使用自己的数据而且数据很大; 一般官网提供的数据, 12GB显存就可以run), 那么就可以设置这个参数进行压缩. 而-s
是含有images和sparse子文件夹的文件夹.
训练结果如下:
training_result->demo
使用SIBR软件可视化训练的结果, 这里推荐在WINDOWS上面下载: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/binaries/viewers.zip
把训练结果文件夹搬回到WINDOWS, 然后运行命令(要先进入工作目录): .\bin\SIBR_gaussianViewer_app -m output
然后就可以可视化了!
raw mp4->dataset
如果要把mp4处理成代码能够利用的数据集, 需要经过两个步骤: 第一步是mp4截取出一帧帧照片, 第二步是根据图片生成点云.
想要把mp4截取出图片, 需要使用ffmpeg命令. 通过以下的bash就可以在root管理权限下安装了:
apt-get remove ffmpeg
apt-get purge ffmpeg
conda remove ffmpeg # 如果conda里面已经有了
apt-get install ffmpeg
那么之后如何调用colmap库从而生成点云是最麻烦的步骤: 安装colmap. 首先安装一下的dependencies:
apt-get install \
git \
cmake \
build-essential \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-system-dev \
libboost-test-dev \
libeigen3-dev \
libsuitesparse-dev \
libfreeimage-dev \
libmetis-dev \
libgoogle-glog-dev \
libgflags-dev \
libglew-dev \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libcgal-qt5-dev \
libflann-dev \
libsqlite3-dev \
libatlas-base-dev
然后把colmap的repo下到服务器里面. 这里我选的是colmap:COLMAP - Structure-from-Motion and Multi-View Stereo - GitCode链接进行下载.
之后是安装Ceres优化库: 具体教程链接: Installation — Ceres Solver (ceres-solver.org) 以及在这个官网里面可以下载压缩包. 注意这个ceres-solver
安装包要放在colmap
里面.
那么源码编译中, 需要在CMakeList
中手动加入CUDA_COMPILER
的信息: set(CMAKE_CUDA_COMPILER /usr/local/cuda-11.6/bin/nvcc)
(注意是把nvcc指定进去)
那么ceres
源码编译完成之后, 就可以源码编译colmap
了. 同样, 需要在colmap
的CMakeList中加入CUDA_COMPILER
路径的指定. 除此之外, 还有部分的地方需要修改:
CMakeList
中需要加入:set(CMAKE_CUDA_ARCHITECTURES "native")
/usr/local/lib/cmake/Ceres/FindGlog.cmake
中,#add glog::glog target
部分全部注释掉colmap/cmake/CMakeHelper.cmake
文件中,需要在macro(COLMAP_ADD_LIBRARY)
一段中, 在set(multiValueArgs NAME SRCS PRIVATE_LINK_LIBS PUBLIC_LINK_LIBS)
之后加入find_package(CUDAToolkit REQUIRED)
。
那么colmap
编译完成之后, 铺垫就完成了. 第一步是mp4处理成图片:
ffmpeg -i input.mp4 -vf "setpts=0.2*PTS" input/input_%4d.jpg
然后, 调用convert.py
程序: python convert.py -s data
之后就能看到data文件夹里面出现了images sparse
两个子文件夹. 那么之后的步骤同上.
Sample Result
上课摸鱼的时候录制了一段三得利麦茶的视频,然后经过ffmpeg分照片、convert(colmap)出点云,最后经过训练,终于可以可视化出非常好的结果如下图。
可视化的效果非常好,甚至上面的生产日期等细节都还原的非常到位。值得注意的是,在录制的时候:
- 可以不环绕这个物体摄像,可以只拍摄一半视角的;而且仰角可以丰富一点
- 摄像移动的速度不要太快,尽可能将视频的时间控制在45秒-1分钟左右比较合适。如果是10-20秒,实测,最后挑出的数据集的照片非常少,就会导致训练就是一坨。
- 如果要本地viewer运行服务器上训练的结果,电脑应该配有N卡(实测核显会报错)