Maskrcnn_Benchmark Ubuntu18.04 環境配置踩坑流程

折騰了兩天總算跑通了demo,走了不少彎路。參考了很多文章,這裏就不詳細一一列出了,就總結一下。

Github : https://github.com/facebookresearch/maskrcnn-benchmark/

環境:

Ubunut 18.04
CUDA 9.0
Anaconda 4.7.12

硬件

GTX 1080TI (*2)

先多一句,裝顯卡驅動的時候並沒有想象的那麼複雜,不需要關什麼桌面,進不去系統之類的問題。也許是官方良心發現,裝顯卡驅動在Ubunut系統上bug百出,於是改良了很多,目前,我採用軟件與更新中的驅動更新一下就能把有效的驅動裝上。顯卡驅動對CUDA向前兼容,所以版本越高越好,目前自己-430。這方面在這裏不多作介紹,默認已經有了驅動。

注意 上述的環境十分重要,之所以選擇這樣的配置,是因爲目前的MaksRCNN_Benchmark(略稱mask) 在說明中需要安cudatoolkit=9.0,那一定是有道理的。儘管我們使用pytorch的時候哪怕不裝CUDA(官網上下載的),只有cudatoolkit 一樣跑一些網絡沒問題,也有GPU支持,但是一旦涉及到pytorch擴展C模塊的時候,便需要完整的CUDA(通常幾個G),可以理解爲官網上的是完整版,而conda的cudatoolkit是閹割版(通常300m)。我們mask需要build apex庫,且貌似在build mask的時候也需要CUDA,所以必須要從官網上下載CUDA9.0的runfile安裝在總環境中。不必擔心,CUDA的版本切換僅僅需要改變幾個東西就能切換(自行谷歌),在Ubuntu系統中,不同版本CUDA可以共存

由於CUDA9.0似乎官方不支持Ubunut18,我這裏下載了ubuntu17的runfile依然成功。一定要把CUDA9.0那些修補的包都打上,按順序一個不露,安裝方法和CUDA9.0安裝相同。注意 這裏會遇到gcc版本過高的問題,自行查找方法降級,本人用的gcc-6.5
(ps:空格 可以加速協議翻越的速度=.= ,給我看了五次冗長的協議也是夠了。。

採用其INSTALL.md中的第一個方法,嘗試用conda進行安裝

這裏沒有安裝任何的cudnn

首先 檢查自己的nvcc輸出是否正確

nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

以下一步步排自己安裝中遇到的坑

1、

conda create --name maskrcnn_benchmark -y
conda activate maskrcnn_benchmark

沒啥毛病 名字自己可以給短一點 這裏python默認爲3.7

2、

conda install ipython pip

這是爲了確保之後用pip的時候,別pip到總系統裏,運行完成後,輸入

which pip
which conda
which python

確定這些輸出的路徑都在虛擬環境裏。

3、

pip install ninja yacs cython matplotlib tqdm opencv-python

這裏安裝一些依賴,在運行MaskRCNN_demo的時候,發現少了一個庫requests,也可以在這裏加上。

4、

conda install -c pytorch pytorch-nightly torchvision cudatoolkit=9.0

本人嘗試了cudatoolkit=9.2/10等,似乎都不太行,尤其是這個pytorch-nightly,不知道它對應的是庫裏的哪個包。在pytorch1.2裏我裝pytorch-nightly有時候卻沒有這個包,但是包名後面dev可能暗示這是一個正在開發中的版本。。
總之按照它的來吧。

注意 安裝完成後,首先在python裏測試以下語句

>>>import torch
>>>torch.cuda.is_aviliable()
>>>import torchvision

第一句沒啥問題,如果有說明torch安裝失敗。
第二句有問題說明顯卡有問題。。。想辦法排除(驅動問題或cudatoolkit有問題)。在總系統裏沒有安裝CUDA,只有cudatoolkit的時候,這句話依然返回True(原因開頭介紹過)。
第三句一般有問題,torchvision的0.3版本調用_c庫有錯誤引用,通過降級torchision可以解決:

pip install torchvision==0.2.2

再次輸入上述的python代碼檢驗。
以上都沒有問題了,說明大環境已成。

5、

export INSTALL_DIR=$PWD
cd $INSTALL_DIR
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
python setup.py build_ext install

安裝cocoapi,自己沒有遇到問題。

6、

下面有大問題,先別輸入

cd $INSTALL_DIR
git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install --cuda_ext --cpp_ext

我推測作者可能用的是Ubuntu16版本,所以沒啥問題,這個apex很要求你的torch版本,CUDA版本,以及gcc版本。
需要torch版本,CUDA版本相互對應,儘量不要是諸如CUDA=9.2而torch cudatoolkit=9.0這樣的存在(坑死我了爲何不能兼容)。如果只想跑cpu看看效果,把參數 --cuda_ext去除。
如果想gpu訓練,那麼首先要確認自己的gcc環境,與CUDA環境,經過嘗試,我的gcc版本降到了5.5(6.5,7.5都有錯),配合CUDA9.0,能夠順利安裝apex。如果安裝中有錯,請刪除apex所有文件(or build文件夾)再執行上面的代碼。安裝CUDA的時候的gcc版本(也許是6.5和我一樣)似乎不影響這裏。檢驗gcc版本如下:

gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.5.0-12ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.5.0 20171010 (Ubuntu 5.5.0-12ubuntu1) 

如果沒有任何error,那麼說明沒有問題。

7、

cd $INSTALL_DIR
git clone https://github.com/facebookresearch/maskrcnn-benchmark.git
cd maskrcnn-benchmark

# the following will install the lib with
# symbolic links, so that you can modify
# the files if you want and won't need to
# re-build it
python setup.py build develop

這裏如果前面安裝的沒有問題,應該不會有問題。這裏就算配置完成了。

8、檢驗

手頭並沒有webcam,可以嘗試運行jupyter notebook的一個腳本 MaskRcnn_demo。這裏有介紹裏的那個圖的運行效果,從網上加載訓練參數直接進行推斷,網速較差需要提前下載好。該腳本默認檢驗cup下的效果,如果要gpu,需要註釋In[4]中的代碼

cfg.merge_from_list(["MODEL.DEVICE", "cpu"])

這樣就默認是GPU了。

如果Demo卡在In[8]的run_on_opencv_image,很大可能是由於apex配置出現問題導致的,可以將其放到Pycharm裏斷點調試看看哪裏有問題(我是在rpn,顧名思義,區域推薦網絡的一個test_forward出了問題,調用底層apex的C函數似乎出現了bug,導致內核崩潰)。如果apex的build過程中有問題,有可能連CPU版本都跑不了,找到問題後,首先刪了(or uninstall)apex重新安裝,之後刪了(or uninstall)mask重新安裝。

之後就可以好好的研究maskrcnn是怎麼實現的啦。。。

經過長時間的觀察,明白了MaskRCNN的網絡結構,列出一些資源:
https://github.com/matterport/Mask_RCNN 一個十分簡潔清晰的Maskrcnn例子,基於tensorflow,簡單跑通,除了Keras沒有其他特別的第三方庫.
另外 tensorflow.model 裏也有實現的MaskRCNN版本,可以調用OpenCV C++使用!看上去對實際應用很方便,有待進一步調查。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章