DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

时间:2024-03-20 08:53:13

介绍

DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现
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文件夹
DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

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的信息列表,表示驱动安装成功。
DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

(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,检查是否安装成功。
DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

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

删除掉无用的压缩包,最终目录如图
DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

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

DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

安装cuda8.0

#下载cuda8.0:https://developer.nvidia.com/cuda-80-ga2-download-archive
DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现
#安装依赖

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 测试是否安装成功
DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

(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在ubuntu16.04+显卡GT740+cuda8.0上的实现
DynamicFusion效果(项目视频):
DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现
视频地址:https://www.youtube.com/watch?v=i1eZekcc_lM