【注】:本文地址:【3D】姿态检测网络PoseCNN复现过程记录.时光清浅,岁月嫣然 若转载请于明显处标明出处。
ps.搬一下自己在博客园写的文章。
最近在研究室内6D姿态检测相关问题,计划在PoseCNN网络基础上进行改进实现。但是在第一步的复现过程中踩了无数的坑,最终成功运行了demo,目前网络训练完毕,test结果照原文要差一点。 有问题欢迎一起交流进步!
本文重点讲解网络代码复现过程,对于原文的讲解可以阅读这篇文章,满满干货!《论文笔记——PoseCNN》
本人系统环境:
Ubuntu 16.04Tensorflow 1.8(from source)Python 2.7Cuda 10.0 & cuddn 7.3.1第一步,创建专属于PoseCNN的虚拟环境,之后install的包都在此虚拟环境中。 虚拟环境的好处不用多说了吧,反正对Ubuntu系统的折腾越少越好!!! 我用 conda 创建的环境:
conda create -n posecnn python=2.7 激活环境: conda activate posecnn 如果不用这个环境,记得deactivate: conda deactivate posecnn如果不行试一下: sudo apt-get install libopencv-dev
pip install mock enum34 pip install matplotlib numpy keras Cython Pillow easydict transforms3d pip install OpenEXR sudo apt-get install libsuitesparse-dev libopenexr-dev metis libmetis-dev注意一定要从源码安装,虽然很繁琐,但是经过实践证明,pip install安装出来的TensorFlow不好用。。 此外,使用gcc 4.8和g++ 4.8对后续的依赖包进行编译。
sudo apt-get install gcc-4.8
sudo apt-get install g+±4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 30
sudo update-alternatives --config gcc 输入选择 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g+±4.8 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g+±5 30
sudo update-alternatives --config g++ 输入选择 1
测试一下gcc和g++的版本,显示4.8就更换完毕了:
gcc --version
g++ --version
接下来安装bazel,并选择0.10.0版本,本文选择下载sh文件进行安装,
下载地址:https://github.com/bazelbuild/bazel/releases/download/0.10.0/bazel-0.10.0-installer-linux-x86_64.sh 下载好之后,安装:
chmod +x bazel-0.10.0-installer-linux-x86_64.sh 修改文件权限 ./bazel-0.10.0-installer-linux-x86_64.sh --user 进行安装 接着添加环境变量: gedit ~/.bashrc export PATH="$PATH:$HOME/bin"下面下载安装TensorFlow:
git clone https://github.com/tensorflow/tensorflow.gitcd tensorflowgit checkout r1.8./configure 这一步,配置文件会问很多问题,对应回答y/n即可:注意 Python 及其sitepackage的路径要与你之后环境路径相对应 比如我在posecnn虚拟环境中运行的话,我的python路径就是 …/.conda/env/posecnn/bin/python 大部分都选择n,但是询问cuda时,要根据你的电脑实际选择
然后编译源文件:
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package 生成安装包:bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/software/tensorflow 最后安装:pip install /tmp/tensorflow_pkg/tensorflow-1.8.0-cp27-cp27mu-linux_x86_64.whl 至此,TensorFlow的源码安装大功告成,可以import测试一下。至此,所有依赖包配置完毕,下面针对源代码进行编译运行。
先注释掉/usr/local/cuda/include/crt/common_functions.h的第75行 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported. Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead." 因为这个issue 要是只读权限无法修改,就用sudo chmod 777 /usr/local/cuda/include/crt/common_functions.h修改一下权限。
cd kinect_fusion mkdir build cd build cmake .. make编译完记得取消注释刚刚的common_functions.h第75行
Compile the new layers under $ROOT/lib we introduce in PoseCNN. (注意下面的$ROOT要换成你实际的PoseCNN代码路径!!!)
cd $ROOT/lib sh make.shrun python setup: python setup.py build_ext --inplace
Add pythonpaths
Add the path of the built libary libsynthesizer.so to python path
export PYTHONPATH=$PYTHONPATH:$ROOT/lib:$ROOT/lib/synthesize/build至此,环境配置完毕。接下来直接贴出原作者步骤:
Download our trained model on the YCB-Video dataset from here, and save it to $ROOT/data/demo_models.
run the following script
./experiments/scripts/demo.sh # 默认用0号GPU运行! # 或者 ./experiments/scripts/demo.sh --gpuid 1 # 指定1号(也可以选择你喜欢的GPU)运行空格很重要!Download the YCB-Video dataset from here.数据集上一步已经下好了,这一步不用管~
Create a symlink for the YCB-Video dataset (the name LOV is due to legacy, Learning Objects from Videos) 建立软连接,让代码知道你数据集放哪了。
cd $ROOT/data/LOV ln -s $ycb_data data ln -s $ycb_models modelsTraining and testing on the YCB-Video dataset
cd $ROOT # training ./experiments/scripts/lov_color_2d_train.sh $GPU_ID # testing ./experiments/scripts/lov_color_2d_test.sh $GPU_ID更多可以看下面的参考链接,很详细。更多多的希望通读代码!通读代码!通读代码!
参考:
PoseCNN RSE-Lab,RSE-LabPoseCNN GitHub代码,yuxngYCB-Video数据集下载,提取码52xx,wangg12PoseCNN代码实现大纲,Kaju-BubanjaPoseCNN代码实现详细,Luedeke《论文笔记——PoseCNN》,XJTU_Bugdragon