介绍
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)驱动安装
a.驱动下载
#查看显卡型号
1 |
lspci | grep -i nvidia |
nvidia官网 https://www.geforce.cn/drivers 搜索显卡型号对应的驱动,下载(别用最新的)后放到home文件夹
b.禁用nouveau驱动
1 |
sudo gedit /etc/modprobe.d/blacklist.conf |
在文本最后添加:
12 |
blacklist nouveauoptions nouveau modeset=0 |
然后执行:
1 |
sudo update-initramfs -u |
重启后,屏幕分辨率可能不对不用管,命令行执行:lsmod | grep nouveau
,如果没有屏幕输出,说明禁用nouveau成功。
c.禁用X-Window服务
#注意:这会关闭图形界面,提前用手机或者笔记本看下面的步骤
1 |
sudo service lightdm stop |
按Ctrl-Alt+F1
进入命令行界面,输入用户名和密码登录。
d.命令行安装驱动
#给驱动run文件赋予执行权限:
1 |
sudo chmod +x NVIDIA-Linux-x86_64-384.59.run |
#后面的参数不可省略:
1 |
sudo ./NVIDIA-Linux-x86_64-384.59.run –no-opengl-files |
按照提示安装,回车确定,成功安装后在命令行输入:sudo service lightdm start
,恢复到图形界面,此时屏幕分辨率恢复正常,重启。
e.驱动测试
1 |
sudo nvidia-smi |
若列出GPU的信息列表,表示驱动安装成功。
(2)cuda7.5安装
cuda7.5可以使用命令行安装,到了cuda8.0以及往上就不行了
12 |
sudo apt-get updatesudo 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 依赖安装
123 |
sudo apt-get install cmake libvtk5-dev libsuitesparse-dev liblapack-dev --fix-missingsudo apt-get install libblas-dev libgtk2.0-dev pkg-config libopenni-dev --fix-missingsudo apt-get install libusb-1.0-0-dev wget zip clang --fix-missing |
(2)安装gflags、glog、Eigen、Ceres
进入dynamicfusion-master
文件夹的上一目录
安装gflags、glog、Eigen
#安装 gflags
12345 |
git clone https:cd gflagsmkdir -p build/ && cd buildcmake .. && make cd ../../ |
#安装 glog
12345 |
git clone https://github.com/google/glog.gitcd glogmkdir -p build/ && cd build/cmake .. && makecd ../../ |
#安装 Eigen 3.3.4
1234567 |
wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gztar -xf 3.3.4.tar.gzcd eigen-eigen-5a0156e40febmkdir -p build && cd buildcmake ..sudo make installcd ../../ |
配置ceres-solver
#下载ceres-solver:https://github.com/ceres-solver/ceres-solver 并解压到dynamicfusion-master文件夹的上一目录
,将ceres-solver-master重命名为ceres-solver
#配置 Ceres
123456 |
cd ceres-solvermkdir -p build/ && cd build/cmake ..make -j4sudo make installcd ../../ |
(3)安装OpenCV 2.4.13
注:opencv的下载过程非常非常慢,建议前天晚上下载,第二天再接着配置
12345678 |
git clone https://github.com/opencv/opencvcd opencv/git checkout 2.4.13.3mkdir -p build && cd buildcmake -DWITH_VTK=ON -DBUILD_opencv_calib3d=ON -DBUILD_opencv_imgproc=ON -DWITH_CUDA=OFF ..make -j4sudo make installcd ../../ |
(4)安装Boost
大专栏 DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现gutter">
1234567 |
wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gztar -xf boost_1_64_0.tar.gzcd boost_1_64_0sudo ./bootstrap.sh./b2sudo ./b2 installcd .. |
删除掉无用的压缩包,最终目录如图
3、代码修改与dataset获取
(1)配置deps/terra
12345 |
cd dynamicfusion-master/depswget https://github.com/zdevito/terra/releases/download/release-2016-03-25/terra-Linux-x86_64-332a506.zipunzip terra-Linux-x86_64-332a506.ziprm terra-Linux-x86_64-332a506.zipmv terra-Linux-x86_64-332a506 terra |
(2)配置deps/Opt
#下载Opt:https://github.com/niessner/Opt/tree/c6012e7e4c67fa3bea96161ba24fe88a2b79deed ,并解压到deps,重命名为Opt
12 |
cd Opt/API/make -j4 |
(3)修改kfusion/src/warp_field.cpp
为了解决之后运行代码会出现的报错
12 |
.../dynamicfusion/kfusion/src/warp_field.cpp:158:10: error: ‘struct ::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文件夹中,运行
12345678910 |
mkdir -p data/umbrella/depthmkdir -p data/umbrella/color mv umbrella_data.zip data/umbrellacd data/umbrellaunzip umbrella_data.ziprm *.txtmv *color*.png color/mv *depth*.png depth/rm umbrella_data.zip |
4、运行
(1)编译
进入dynamicfusion-master文件夹,运行
123 |
mkdir -p build && cd buildcmake -DOpenCV_DIR=~/opencv/build -DBOOST_ROOT=~/boost_1_64_0/ -DOPENNI_INCLUDE_DIR=/usr/include/ni -DOpenCV_FOUND=TRUE ..make -j4 |
(2)运行与报错
进入dynamicfusion-master文件夹,运行
1 |
./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
1 |
sudo apt-get autoremove nvidia-cuda-toolkit |
安装cuda8.0
#下载cuda8.0:https://developer.nvidia.com/cuda-80-ga2-download-archive
#安装依赖
1 |
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev |
#安装cuda8.0
12 |
sudo chmod 777 cuda_8.0.61_375.26_linux.run sudo ./cuda_8.0.61_375.26_linux.run |
执行后会先出现一个声明,需要阅读到100%才会开始安装,直接ctr+c跳过
按照提示输入回答就行,位置全部选择默认,注:第二个选择是否安装nvidia驱动时,一定要选择否
安装完依赖后,如果仍然提示
12 |
Installing the CUDA Toolkit in /usr/local/cuda-8.0 … Missing recommended library: libXmu.so |
不用管
#添加环境变量
1 |
sudo gedit ~/.bashrc |
将以下内容写入到~/.bashrc尾部:
12 |
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)运行与结果
1 |
sudo apt-get install nvidia-cuda-dev nvidia-cuda-toolkit nvidia-nsight nvidia-prime |
#编译
进入dynamicfusion-master文件夹,运行
123 |
mkdir -p build && cd buildcmake -DOpenCV_DIR=~/opencv/build -DBOOST_ROOT=~/boost_1_64_0/ -DOPENNI_INCLUDE_DIR=/usr/include/ni -DOpenCV_FOUND=TRUE ..make -j4 |
#运行
进入dynamicfusion-master文件夹,运行
1 |
./build/bin/dynamicfusion data/umbrella |
#结果
DynamicFusion效果(项目视频):
视频地址:https://www.youtube.com/watch?v=i1eZekcc_lM
原文地址:https://www.cnblogs.com/liuzhongrong/p/12251305.html