目录
介绍
DynamicFusion构建了一个可以实时重建 非刚性变形 动态场景 的系统,随着新的数据融合进模型当中,模型得到降噪、细节更加精细。
论文地址:http://grail.cs.washington.edu/projects/dynamicfusion/papers/DynamicFusion.pdf
GitHub地址:https://github.com/mihaibujanca/dynamicfusion
注意:这个项目是对论文的复现,但是目前尚未准确复现论文内容
,运行速度仍然有待优化,10s/frame不满足实时运行,建议转换成离线数据,再进行运行。
这里记录DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现。(虽然可以实现,但是GT740真的是太慢慢慢慢了…电脑是刚重装完系统的机子)
1、驱动与cuda安装
(1)驱动安装
a.驱动下载
nvidia官网 https://www.geforce.cn/drivers 搜索显卡型号对应的驱动,下载(别用最新的)后放到home文件夹
b.禁用nouveau驱动
sudo gedit /etc/modprobe.d/blacklist.conf
在文本最后添加:
blacklist nouveau
options nouveau modeset=0
然后执行:
sudo update-initramfs -u
重启后,屏幕分辨率可能不对不用管,命令行执行:lsmod | grep nouveau
,如果没有屏幕输出,说明禁用nouveau成功。
c.禁用X-Window服务
#注意:这会关闭图形界面,提前用手机或者笔记本看下面的步骤
sudo service lightdm stop
按Ctrl-Alt+F1
进入命令行界面,输入用户名和密码登录。
d.命令行安装驱动
#给驱动run文件赋予执行权限:
sudo chmod +x NVIDIA-Linux-x86_64-384.59.run
#后面的参数不可省略:
sudo ./NVIDIA-Linux-x86_64-384.59.run –no-opengl-files
按照提示安装,回车确定,成功安装后在命令行输入:sudo service lightdm start
,恢复到图形界面,此时屏幕分辨率恢复正常,重启。
e.驱动测试
sudo nvidia-smi
若列出GPU的信息列表,表示驱动安装成功。
(2)cuda7.5安装
cuda7.5可以使用命令行安装,到了cuda8.0以及往上就不行了
sudo apt-get update
sudo apt-get install nvidia-cuda-dev nvidia-cuda-toolkit nvidia-nsight nvidia-prime
等待安装完成后,输入nvcc -V
,检查是否安装成功。
2、环境配置
下载DynamicFusion代码:https://github.com/mihaibujanca/dynamicfusion
整个配置过程参考dynamicfusion-master/build.sh 文件(不要直接运行build.sh会有各种报错)
(1)apt-get install 依赖安装
sudo apt-get install cmake libvtk5-dev libsuitesparse-dev liblapack-dev --fix-missing
sudo apt-get install libblas-dev libgtk2.0-dev pkg-config libopenni-dev --fix-missing
sudo apt-get install libusb-1.0-0-dev wget zip clang --fix-missing
(2)安装gflags、glog、Eigen、Ceres
进入dynamicfusion-master
文件夹的上一目录
安装gflags、glog、Eigen
#安装 gflags
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir -p build/ && cd build
cmake .. && make
cd ../../
#安装 glog
git clone https://github.com/google/glog.git
cd glog
mkdir -p build/ && cd build/
cmake .. && make
cd ../../
#安装 Eigen 3.3.4
wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz
tar -xf 3.3.4.tar.gz
cd eigen-eigen-5a0156e40feb
mkdir -p build && cd build
cmake ..
sudo make install
cd ../../
配置ceres-solver
#下载ceres-solver:https://github.com/ceres-solver/ceres-solver 并解压到dynamicfusion-master文件夹的上一目录
,将ceres-solver-master重命名为ceres-solver
#配置 Ceres
cd ceres-solver
mkdir -p build/ && cd build/
cmake ..
make -j4
sudo make install
cd ../../
(3)安装OpenCV 2.4.13
注:opencv的下载过程非常非常慢,建议前天晚上下载,第二天再接着配置
git clone https://github.com/opencv/opencv
cd opencv/
git checkout 2.4.13.3
mkdir -p build && cd build
cmake -DWITH_VTK=ON -DBUILD_opencv_calib3d=ON -DBUILD_opencv_imgproc=ON -DWITH_CUDA=OFF ..
make -j4
sudo make install
cd ../../
(4)安装Boost
wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz
tar -xf boost_1_64_0.tar.gz
cd boost_1_64_0
sudo ./bootstrap.sh
./b2
cd ..
删除掉无用的压缩包,最终目录如图
3、代码修改与dataset获取
(1)配置deps/terra
cd dynamicfusion-master/deps
wget https://github.com/zdevito/terra/releases/download/release-2016-03-25/terra-Linux-x86_64-332a506.zip
unzip terra-Linux-x86_64-332a506.zip
rm terra-Linux-x86_64-332a506.zip
mv terra-Linux-x86_64-332a506 terra
(2)配置deps/Opt
#下载Opt:https://github.com/niessner/Opt/tree/c6012e7e4c67fa3bea96161ba24fe88a2b79deed ,并解压到deps,重命名为Opt
cd Opt/API/
make -j4
(3)修改kfusion/src/warp_field.cpp
为了解决之后运行代码会出现的报错
.../dynamicfusion/kfusion/src/warp_field.cpp:158:10: error: ‘struct ceres::Solver::Options’ has no member named ‘num_threads_used’
options.num_threads_used = 8;
将第157行options.num_linear_solver_threads = 8;
注释掉
(4)dataset下载
下载地址 https://www.dropbox.com/sh/qgy2n9bmioofqnj/AABUnT7pi2ECpxSi80EmXOXna?dl=0 (给的数据挺多的,如果网站上不去可以下载我传到百度云的数据,只传了作为demo的umbrella_data.zip)
umbrella_data.zip下载链接:https://pan.baidu.com/s/1PRf7-xl5vgj2SUQVNiuk-g ,提取码:25s1
下载后放置到dynamicfusion-master文件夹中,运行
mkdir -p data/umbrella/depth
mkdir -p data/umbrella/color
mv umbrella_data.zip data/umbrella
cd data/umbrella
unzip umbrella_data.zip
rm *.txt
mv *color*.png color/
mv *depth*.png depth/
rm umbrella_data.zip
4、运行
(1)编译
进入dynamicfusion-master文件夹,运行
mkdir -p build && cd build
cmake -DOpenCV_DIR=~/opencv/build -DBOOST_ROOT=~/boost_1_64_0/ -DOPENNI_INCLUDE_DIR=/usr/include/ni -DOpenCV_FOUND=TRUE ..
make -j4
(2)运行与报错
进入dynamicfusion-master文件夹,运行
./build/bin/dynamicfusion data/umbrella
运行后报错 llvm: No such file or directory
,查看这里:https://github.com/mihaibujanca/dynamicfusion/issues/54
升级cuda7.5到8.0能够解决
(3)升级cuda7.5到8.0
卸载cuda7.5
sudo apt-get autoremove nvidia-cuda-toolkit
安装cuda8.0
#下载cuda8.0:https://developer.nvidia.com/cuda-80-ga2-download-archive
#安装依赖
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
#安装cuda8.0
sudo chmod 777 cuda_8.0.61_375.26_linux.run
sudo ./cuda_8.0.61_375.26_linux.run
执行后会先出现一个声明,需要阅读到100%才会开始安装,直接ctr+c跳过
按照提示输入回答就行,位置全部选择默认,注:第二个选择是否安装nvidia驱动时,一定要选择否
安装完依赖后,如果仍然提示
Installing the CUDA Toolkit in /usr/local/cuda-8.0 …
Missing recommended library: libXmu.so
不用管
#添加环境变量
sudo gedit ~/.bashrc
将以下内容写入到~/.bashrc尾部:
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
重启后,输入nvcc --version
测试是否安装成功
(4)运行与结果
sudo apt-get install nvidia-cuda-dev nvidia-cuda-toolkit nvidia-nsight nvidia-prime
#编译
进入dynamicfusion-master文件夹,运行
mkdir -p build && cd build
cmake -DOpenCV_DIR=~/opencv/build -DBOOST_ROOT=~/boost_1_64_0/ -DOPENNI_INCLUDE_DIR=/usr/include/ni -DOpenCV_FOUND=TRUE ..
make -j4
#运行
进入dynamicfusion-master文件夹,运行
./build/bin/dynamicfusion data/umbrella
#结果
DynamicFusion效果(项目视频):
视频地址:https://www.youtube.com/watch?v=i1eZekcc_lM