【3D】姿態檢測網路PoseCNN復現過程記錄
阿新 • • 發佈:2020-04-07
最近在研究室內6D姿態檢測相關問題,計劃在PoseCNN網路基礎上進行改進實現。但是在第一步的復現過程中踩了無數的坑,最終成功運行了demo,但目前資料集train還是遇到了一些問題。有問題歡迎一起交流進步!
本文重點講解網路程式碼復現過程,對於原文的講解可以閱讀這篇文章,滿滿乾貨![《論文筆記——PoseCNN》](https://blog.csdn.net/nwu_NBL/java/article/details/83176353)
本人系統環境:
- Ubuntu 16.04
- Tensorflow 1.8(from source)
- Python 2.7
- Cuda 10.1 & cuddn 7.3.1
***
#### 1.搭建虛擬環境
第一步,建立專屬於PoseCNN的虛擬環境,之後install的包都在此虛擬環境中。
虛擬環境的好處不用多說了吧,反正對Ubuntu系統的折騰越少越好!!!
我用 conda 建立的環境:
- 2.pip install
-
- 3.TensorFlow
注意一定要從原始碼安裝,雖然很繁瑣,但是經過實踐證明,pip install安裝出來的TensorFlow不好用。。
此外,使用gcc 4.8和g++ 4.8對後續的依賴包進行編譯。
>
> -
> - 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](https://github.com/BVLC/caffe/issues/5994)
要是隻讀許可權無法修改,就用`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
```
至此,環境配置完畢。更多可以看下面的參考連結,很詳細。
----------
參考:
- [PoseCNN RSE-Lab](https://rse-lab.cs.washington.edu/projects/posecnn/),RSE-Lab
- [PoseCNN GitHub程式碼](https://github.com/yuxng/PoseCNN),yuxng
- [YCB-Video資料集下載](https://pan.baidu.com/s/1FG7_wrNbBdFcJmh1UxuDFg),提取碼52xx,wangg12
- [PoseCNN程式碼實現大綱](https://github.com/Kaju-Bubanja/PoseCNN),Kaju-Bubanja
- [PoseCNN程式碼實現詳細](https://github.com/yuxng/PoseCNN/issues/76),Luedeke
- [《論文筆記——PoseCNN》](https://blog.csdn.net/nwu_NBL/java/article/details/83176353),XJTU_B
conda create -n posecnn python=2.7
啟用環境:
- conda activate posecnn
如果不用這個環境,記得deactivate:
- conda deactivate posecnn
***
#### 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
***
#### 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](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測試一下。
***
####