ubuntu16.04 Detectron目標檢測庫配置(包含GPU驅動,Cuda,Caffee2等配置梳理)


Detectron概述

Detectron是Facebook FAIR開源了的一個目標檢測(Object Detection)平台。

用一幅圖簡單說明下Object Detection。如Mask R-CNN已經能夠做到多目標的Instance Segmentation。

object detection

圖片來源: Fei-Fei Li, Andrej Karpathy & Justin Johnson (2016) cs231n, Lecture 8 - Slide 8, Spatial Localization and Detection (01/02/2016). Available: http://cs231n.stanford.edu/slides/2016/winter1516_lecture8.pdf 

 

Detectron項目項目自 2016 年 下半年啟動,基於Caffe2 ,目前支持大量機器學習算法和已經訓練好的模型。項目地址:https://github.com/facebookresearch/Detectron

其中目標檢測算法的實現包括:

Mask R-CNN (https://arxiv.org/abs/1703.06870)—Marr Prize at ICCV 2017

RetinaNet (https://arxiv.org/abs/1708.02002)—Best Student Paper Award at ICCV 2017

Faster R-CNN (https://arxiv.org/abs/1506.01497)

RPN (https://arxiv.org/abs/1506.01497)

Fast R-CNN (https://arxiv.org/abs/1504.08083)

R-FCN (https://arxiv.org/abs/1605.06409)

這些目標檢測算法主要使用以下卷積網絡架構:

ResNeXt{50,101,152} (https://arxiv.org/abs/1611.05431)

ResNet{50,101,152} (https://arxiv.org/abs/1512.03385)

Feature Pyramid Networks (https://arxiv.org/abs/1612.03144) (with ResNet/ResNeXt)

VGG16 (https://arxiv.org/abs/1409.1556)

Detectron配置
想要使用和理解其中各個方法,最基礎的一步就是能夠先配置好環境,將示例跑通,接下去也接着配置Detectron的機會,把GPU相關的配置再梳理一下。

1、GPU驅動

以往在linux下安裝顯卡驅動是一段非常東痛苦的經歷,搞得不好,一重啟就黑屏。如果是多顯卡的機器,也會遇到無法切換,或者各種版本不兼容的問題。

這兩年在ubuntu社區和NVIDIA官方的努力下,社區的PPA專有驅動基本已經相對穩定。

a)在安裝之前,首先確認你的電腦是否在BIOS上有secure boot,如果有進入BIOS,把secure boot 設置成disable。 (這設置十分重要,不然會出現無法安裝CUDA的情況)

b)如果之前已經自帶的NVIDIA驅動,需要刪除老的驅動

sudo apt-get –purge remove nvidia-glx nvidia-glx-new
sudo apt-get –purge remove nvidia-settings nvidia-kernel-common

c)確保萬無一失,在原有驅動刪除之后,需要將Ubuntu集成的開源驅動加入黑名單,即修改/etc/modprobe.d/blacklist.conf文件:

sudo gedit /etc/modprobe.d/blacklist.conf

d)在該文件中增加如下兩行:
blacklist nouveau
options nouveau modeset=0

e)然后需要確定你的顯卡對應的驅動版本,知道自己的顯卡型號后,可以利用官方提供的驅動下載查詢界面: NVIDIA 驅動查詢

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

f)接着在軟件中心的 software & updates中的Additional Drivers的標簽,找到和之前查到GPU驅動版本一致的條目,點擊apply changes
重啟之后應該就安裝好了。

Tips:在16.04中有遇到過,在Additional Drivers那個界面選擇了GPU驅動后,點擊apply changes無法更改的尷尬情況。

解決方法是直接使用命令行
sudo apt-get install nvidia-××× nvidia-prime  (XXX為對應的驅動型號)

 

測試驅動是否安裝成功

nvidia-smi
如果出現了你的GPU列表,則說明驅動安裝成功了。

 

2、Cuda

cuda的安裝根據自己的系統選擇合適的版本,為了避免一系列可能會出現的問題,在安裝CUDA之前,可以進行一下安裝前的自檢,自檢可以參照官方給的文檔(CUDA安裝前自檢)

官網下載 cudnn 需要注冊帳號並登錄。官方下載網址 

下載完成后,在文件所在的文件夾
sudo dpkg -i cuda-repo-ubuntu1604-×××××_amd64​.deb (××××為官方版本號)
sudo apt-get update
sudo apt-get install cuda​

如果是CUDA8.0可能會遇到gcc版本的不兼容問題,可以給GCC降級。

 

安裝完之后,配置cuda的環境變量,在文件~/.bashrc之后加上
gedit ~/.bashrc
export PATH=/usr/local/cuda-××/bin:$PATH  (××是版本號)
export LD_LIBRARY_PATH=/usr/local/cuda-××/lib64:$LD_LIBRARY_PATH (××是版本號)

然后設置環境變量和動態鏈接庫,在命令行輸入
sudo gedit /etc/profile
在打開的文件里面加上(注意等號兩邊不能有空格)
export PATH=/usr/local/cuda/bin:$PATH
保存之后,創建鏈接文件
sudo gedit /etc/ld.so.conf.d/cuda.conf
在打開的文件中添加如下語句:
/usr/local/cuda/lib64
保存退出執行命令行:
sudo ldconfig
使鏈接立即生效。

 

Tips:之前在配置ZED雙目相機的,如果是 下載Local版的CUDA,都會在安裝ZED SKD時出現找不到CUDA8的提示。

在試了很多次之后,偶爾一次使用了CUDA下載頁面中的 deb(network)版本,然后就成功了。 所以建議采用deb的方式安裝。

 

測試Cuda是否安裝成功:

cd /usr/local/cuda-××/samples/1_Utilities/deviceQuery (××為版本號)
sudo make
sudo ./deviceQuery

 

3、CuDNN

CuDNN是NVIDIA推出的針對深度學習的Cuda優化庫,可以幫助提升算法效率

官方下載網址

ubuntu下使用deb比較方便,不需要自己設置環境變量

先安裝runtime庫,這里以cuda9.0為例。

sudo dpkg -i libcudnn7_7.0.3.11-1+cuda9.0_amd64.deb
再安裝dev庫
sudo dpkg -i libcudnn7-dev_7.0.3.11-1+cuda9.0_amd64.deb

4、配置Caffee2

Caffe2的安裝相比於caffe的安裝要簡單很多,不需要自己去配置Makefile.config,可以在make的時候,自動檢測GPU以各種庫,例如OpenCV。如果沒有就自動選擇不使用。

官方的安裝說明永遠是最好的說明

https://caffe2.ai/docs/getting-started.html?platform=linux&configuration=compile

這里也簡單梳理下流程。

首先確定系統和安裝方式,這里采用直接編譯源碼的方式。

安裝需要的庫

sudo apt-get update
sudo apt-get install -y --no-install-recommends \
      build-essential \
      cmake \
      git \
      libgoogle-glog-dev \
      libgtest-dev \
      libiomp-dev \
      libleveldb-dev \
      liblmdb-dev \
      libopencv-dev \
      libopenmpi-dev \
      libsnappy-dev \
      libprotobuf-dev \
      openmpi-bin \
      openmpi-doc \
      protobuf-compiler \
      python-dev \
      python-pip                          
sudo pip install \
      future \
      numpy \
      protobuf

libgflags2根據系統選擇

# 對於 Ubuntu 14.04
sudo apt-get install -y --no-install-recommends libgflags2
# 對於 Ubuntu 16.04
sudo apt-get install -y --no-install-recommends libgflags-dev

 

對於GPU的相關依賴我們已經在上面完成配置了,caffe2也給了官方GPU配置的說明,也可以作為一種參考。

另外如opencv庫也可以根據自己的需要進行安裝

 

完成准備工作后就可以下載源碼進行編譯。

git clone --recursive https://github.com/caffe2/caffe2.git && cd caffe2
make && cd build && sudo make install

 

測試caffe2是否安裝成功

cd ~ && python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"

如果是failure,試着cd到caffe2/build的文件夾里,然后執行

python -c 'from caffe2.python import core' 2>/dev/null

如果successful,說明是環境變量的設置問題,如果還是失敗,則會有具體的提示。

配置環境變量,編輯~/.bashrc

export PYTHONPATH=/usr/local:$PYTHONPATH
export PYTHONPATH=$PYTHONPATH:/home/**/devapp/caffe2/build  (**為計算機名)
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

 

5、Detectron配置

還是那句話,最好的教程是官方的文檔。

https://github.com/facebookresearch/Detectron/blob/master/INSTALL.md


找個合適的文件位置進行clone
git clone https://github.com/facebookresearch/detectron

編譯python庫
cd DETECTRON/lib && make (DETECTRON表示你clone下來的文件夾)
測試是否編譯成功
python2 $DETECTRON/tests/test_spatial_narrow_as_op.py (DETECTRON表示你clone下來的文件夾)

如果遇到缺少庫的問題,可以根據報錯的信息把庫加上

另外的問題可以參見官方的Troubleshooting

 

6、Detectron簡單使用

參考

https://github.com/facebookresearch/Detectron/blob/master/GETTING_STARTED.md

訓練相關的我們放到之后去說,這里先說下利用已經訓練好的模型和算法框架來進行目標的檢測。

根據不同的需求,對象檢測可以分為幾種,1)Bounding box,2)Mask,3)KeyPoints

這里給出兩個例子,用mask和

python2 tools/infer_simple.py \
    --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
    --output-dir /tmp/detectron-visualizations \
    --image-ext jpg \
    --wts https://s3-us-west-2.amazonaws.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl \
    demo

python2 tools/infer_simple.py \
    --cfg configs/12_2017_baselines/e2e_keypoint_rcnn_R-101-FPN_s1x.yaml \
    --output-dir /tmp/detectron-visualizations \
    --image-ext jpg \
    --wts https://s3-us-west-2.amazonaws.com/detectron/37698009/12_2017_baselines/e2e_keypoint_rcnn_R-101-FPN_s1x.yaml.08_45_57.YkrJgP6O/output/train/keypoints_coco_2014_train%3Akeypoints_coco_2014_valminusminival/generalized_rcnn/model_final.pkl \
    demo

下面第一和第二個圖是Bounding box和Mask的效果,第三和第四個圖是Bounding box和人體骨骼keypoints的效果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM