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卡(实测核显会报错)