Skip to content

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子文件夹的文件夹.

训练结果如下:

image

training_result->demo

使用SIBR软件可视化训练的结果, 这里推荐在WINDOWS上面下载: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/binaries/viewers.zip

把训练结果文件夹搬回到WINDOWS, 然后运行命令(要先进入工作目录): .\bin\SIBR_gaussianViewer_app -m output

然后就可以可视化了!

image

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里面.

或者参考该链接: 依赖库:Ceres-solver-2.0.0安装_ceres2.0.0-CSDN博客

那么源码编译中, 需要在CMakeList中手动加入CUDA_COMPILER的信息: set(CMAKE_CUDA_COMPILER /usr/local/cuda-11.6/bin/nvcc)(注意是把nvcc指定进去)

那么ceres源码编译完成之后, 就可以源码编译colmap了. 同样, 需要在colmap的CMakeList中加入CUDA_COMPILER路径的指定. 除此之外, 还有部分的地方需要修改:

  1. CMakeList中需要加入: set(CMAKE_CUDA_ARCHITECTURES "native")
  2. /usr/local/lib/cmake/Ceres/FindGlog.cmake中, #add glog::glog target部分全部注释掉
  3. 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)出点云,最后经过训练,终于可以可视化出非常好的结果如下图。

image

可视化的效果非常好,甚至上面的生产日期等细节都还原的非常到位。值得注意的是,在录制的时候:

  1. 可以不环绕这个物体摄像,可以只拍摄一半视角的;而且仰角可以丰富一点
  2. 摄像移动的速度不要太快,尽可能将视频的时间控制在45秒-1分钟左右比较合适。如果是10-20秒,实测,最后挑出的数据集的照片非常少,就会导致训练就是一坨。
  3. 如果要本地viewer运行服务器上训练的结果,电脑应该配有N卡(实测核显会报错)