【3D】姿態檢測網絡PoseCNN復現過程記錄

最近在研究室內6D姿態檢測相關問題,計劃在PoseCNN網絡基礎上進行改進實現。但是在第一步的復現過程中踩了無數的坑,最終成功運行了demo,但目前數據集train還是遇到了一些問題。有問題歡迎一起交流進步!

本文重點講解網絡代碼復現過程,對於原文的講解可以閱讀這篇文章,滿滿乾貨!《論文筆記——PoseCNN》

本人系統環境:

  • Ubuntu 16.04
  • Tensorflow 1.8(from source)
  • Python 2.7
  • Cuda 10.1 & 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  # 提取解壓壓縮包  # 重命名文件夾為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的第64行,因為這個issue
要是只讀權限無法修改,就用sudo chmod 777 /usr/local/cuda/include/crt/common_functions.h修改一下權限。

cd kinect_fusion  mkdir build  cd build  cmake ..  make  

編譯完記得取消注釋剛剛的common_functions.h第64行


11.Compile lib/synthesize

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

至此,環境配置完畢。更多可以看下面的參考鏈接,很詳細。


參考: