• 【3D】姿态检测网络PoseCNN复现过程记录


    【注】:本文地址:【3D】姿态检测网络PoseCNN复现过程记录.时光清浅,岁月嫣然
    若转载请于明显处标明出处。

    最近在研究室内6D姿态检测相关问题,计划在PoseCNN网络基础上进行改进实现。但是在第一步的复现过程中踩了无数的坑,最终成功运行了demo,目前网络训练完毕,test结果照原文要差一点。
    有问题欢迎一起交流进步!

    本文重点讲解网络代码复现过程,对于原文的讲解可以阅读这篇文章,满满干货!《论文笔记——PoseCNN》

    本人系统环境:

    • Ubuntu 16.04
    • Tensorflow 1.8(from source)
    • Python 2.7
    • Cuda 10.0 & cuddn 7.3.1

    环境配置


    1.搭建虚拟环境

    第一步,创建专属于PoseCNN的虚拟环境,之后install的包都在此虚拟环境中。
    虚拟环境的好处不用多说了吧,反正对Ubuntu系统的折腾越少越好!!!
    我用 conda 创建的环境:

    • conda create -n posecnn python=2.7
      激活环境:
    • conda activate posecnn
      如果不用这个环境,记得deactivate:
    • conda deactivate posecnn

    2.pip install

    • pip install opencv-python

    如果不行试一下: 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

    3.TensorFlow

    注意一定要从源码安装,虽然很繁琐,但是经过实践证明,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.git
    • cd tensorflow
    • git 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测试一下。

    4.Eigen

    # 原网址没了(wget https://bitbucket.org/eigen/eigen/get/3.3.0.zip)
    # 用这个网址下载
    wget https://gitlab.com/libeigen/eigen/-/archive/3.3.0/eigen-3.3.0.zip
    # 提取解压压缩包
    # 重命名文件夹为eigen
    cd eigen
    mkdir build && cd build
    cmake ..
    make
    sudo make install
    

    5.Nanoflann

    wget https://github.com/jlblancoc/nanoflann/archive/ad7547f4e6beb1cdb3e360912fd2e352ef959465.zip
    # 提取解压压缩包
    # 重命名文件夹为nanoflann
    sudo apt-get install build-essential cmake libgtest-dev
    cd nanoflann
    mkdir build && cd build && cmake ..
    make && make test
    sudo make install
    

    6.Pangolin

    wget https://github.com/stevenlovegrove/Pangolin/archive/1ec721d59ff6b799b9c24b8817f3b7ad2c929b83.zip
    # 提取解压压缩包
    # 重命名文件夹为Pangolin
    cd Pangolin
    # Add folowing line to the CMakeLists.txt:
    # add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
    mkdir build
    cd build
    cmake ..
    cmake --build .
    

    7.Boost

    wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2
    # 提取解压压缩包
    # 重命名文件夹为boost
    cd boost
    ./bootstrap.sh
    sudo ./b2
    sudo ./b2 install
    

    8.Sophus

    wget https://github.com/strasdat/Sophus/archive/ceb6380a1584b300e687feeeea8799353d48859f.zip
    # 提取解压压缩包
    # 重命名文件夹为Sophus
    cd Sophus
    mkdir build && cd build
    cmake ..
    make
    sudo make install
    

    9.NLOPT

    wget https://github.com/stevengj/nlopt/archive/74e647b667f7c4500cdb4f37653e59c29deb9ee2.zip
    # 提取解压压缩包
    # 重命名文件夹为nlopt
    cd nlopt
    mkdir build
    cd build
    cmake ..
    make
    sudo make install
    

    至此,所有依赖包配置完毕,下面针对源代码进行编译运行。


    10.Compile lib/kinect_fusion

    先注释掉/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行


    11.Compile lib/synthesize

    cd ..
    cd ..
    cd synthesize
    mkdir build
    cd build
    cmake ..
    make
    

    Compile the new layers under $ROOT/lib we introduce in PoseCNN.
    (注意下面的$ROOT要换成你实际的PoseCNN代码路径!!!)

    cd $ROOT/lib
    sh make.sh
    
    • run 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
    

    12.下载数据集

    至此,环境配置完毕。接下来直接贴出原作者步骤:

    Running the demo

    1. Download our trained model on the YCB-Video dataset from here, and save it to $ROOT/data/demo_models.

    2. run the following script

      ./experiments/scripts/demo.sh # 默认用0号GPU运行!
      # 或者
      ./experiments/scripts/demo.sh --gpuid 1 # 指定1号(也可以选择你喜欢的GPU)运行空格很重要!
      

    Running on the YCB-Video dataset

    1. Download the YCB-Video dataset from here.数据集上一步已经下好了,这一步不用管~

    2. 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 models
      
    3. Training 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
      
      

    更多可以看下面的参考链接,很详细。更多多的希望通读代码!通读代码!通读代码!


    参考:

  • 相关阅读:
    Eclipse,到了说再见的时候了——Android Studio最全解析
    iOS 获取当前时间以及计算年龄(时间差)
    USACO inflate
    Hauntbox:用于控制你的自己主动化、电子创意家居的开源硬件盒子
    使用开源的PullToRefreshScrollView scrollTo和scrollby遇到的问题
    iOS "The sandbox is not in sync with the Podfile.lock"解决方式
    [衣裳饰品]谈谈西装、手工西装和西装定制_时尚资讯_天涯论坛
    高级服装制版师、高级男女西服全套裁艺培训、带学徒
    中式男装制作
    关于意大利马兰戈尼时装与设计学院_马兰戈尼学院
  • 原文地址:https://www.cnblogs.com/hatimwen/p/posecnn.html
Copyright © 2020-2023  润新知