如何運行Faster RCNN的tensorflow代碼


0.目的

  剛剛學習faster rcnn目標檢測算法,在嘗試跑通github上面Xinlei Chen的tensorflow版本的faster rcnn代碼時候遇到很多問題(我真是太菜),代碼地址如下:

https://github.com/endernewton/tf-faster-rcnn

1. 運行環境配置

  代碼的README里面說明了,環境要求既有是這個git里面的,還有就是rbg的caffe代碼中也有了一些環境。基本上包括:

python2.7

CUDA(並行計算庫)>=6.0

cudnn(深度學習庫)

cython,

opencv-python

easydict=1.6

  當然這只是跑通代碼的環境,並沒有那么苛刻的。

1.1 檢查環境

  檢查環境的目的是為了安裝TensorFlow,首先是

1.1.1 Linux 內核和發行版

  需要查看 linux內核和發行版,來確定后續一些軟件的安裝版本選擇。《如何查看LINUX發行版的名稱及其版本號》:https://www.qiancheng.me/post/coding/show-linux-issue-version

  查看Linux內核

uname -a

  查看Linux發行版

cat /etc/redhat-release #centos下面的命令

  

  我用的是 centos,在運行demo期間沒發現什么問題,但最好是用Ubutu 14或者16吧

 

1.1.2 檢查cuda 和cudnn的版本

chen 推薦的是 TensorFlow 的 r1.2 版本,應該是安裝r1.2推薦的cuda和cudnn,但是因為我沒有服務器的root權限,無法更改cuda和cudnn,所以只能選擇一個和本機環境相對應的tensorflow版本了。

注意這里如果不安裝匹配的版本,可能會出現cudnn庫找不到的情況,(別問我怎么知道的),https://stackoverflow.com/questions/42013316/after-building-tensorflow-from-source-seeing-libcudart-so-and-libcudnn-errors,如果有root權限的,最好是裝r1.2版本的,當然要查好r1.2支持的cuda和cudnn,方法也在下面。

查看cuda的版本:http://blog.csdn.net/zhangjunhit/article/details/76532196

cat /usr/local/cuda/version.txt

查看cudnn版本:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

  我的cuda=8,cudnn=6

  到tensorflow 的官網上查對應的TF版本:https://www.tensorflow.org/install/install_sources#common_installation_problems

如果沒有GPU的就安裝cpu版本,README里面說cpu也是能運行的,我沒試。

1.2 安裝Anaconda 和TensorFlow

  tensorflow r1.4的安裝教程:https://www.tensorflow.org/versions/r1.4/install/install_linux?hl=zh-cn,我是按照Anaconda的方法弄的,比較簡單。

  因為我的系統上面安裝了anaconda,之前裝了python3。為了方便,直接用anaconda新開了一個環境,裝了python2.7。教程:https://www.jianshu.com/p/d2e15200ee9b

  創建環境:

conda create -n tensorflow python=2.7

  進入環境:

source activate tensorflow 

  前面這樣顯示就對了(我的名字叫python27,你的應該是tensorflow)

  使用pip安裝tensorflow:

pip install --ignore-installed --upgrade tfBinaryURL

  注意這里的 tfBinaryURL 是 URL of the TensorFlow Python package ,但這里面都是谷歌的鏡像,要是沒掛科學上網的話應該是訪問不到的,我是用的阿里的鏡像:http://mirrors.aliyun.com/pypi/simple,自己找合適的版本,我用的是http://mirrors.aliyun.com/pypi/packages/68/b4/8731e144a68a6044b8eba47f51f0a862c696b0c016c8512ca2aa3916f62a/tensorflow_gpu-1.4.0rc1-cp27-cp27mu-manylinux1_x86_64.whl。

  更多鏡像在:https://www.jianshu.com/p/502638407add

  輸入上面的命令之后就成功了,運行了一下官方的測試:

  成功輸出:Hello,TensorFlow!

1.3 安裝其他依賴

  保持在tensorflow這個環境中,繼續用pip安裝cythonopencv-pythoneasydict這三個庫。

pip install cython
pip install opencv-python
pip install easydict==1.6

  

 

  鏈接cython模塊的時候出現了一個警告,具體什么原因我也不太清楚,就暫時沒有管它,最后也是能運行demo的。

cc1plus: 警告:command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [默認啟用]
In file included from /home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1816:0,
                 from /home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:18,
                 from /home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                 from nms/gpu_nms.cpp:346:
/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: 警告:#warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
 #warning "Using deprecated NumPy API, disable it by " \
  ^
g++ -pthread -shared -L/home/luoguiyang/env/anaconda3/envs/python27/lib -Wl,-rpath=/home/luoguiyang/env/anaconda3/envs/python27/lib,--no-as-needed build/temp.linux-x86_64-2.7/nms/nms_kernel.o build/temp.linux-x86_64-2.7/nms/gpu_nms.o -L/usr/local/cuda/lib64 -L/home/luoguiyang/env/anaconda3/envs/python27/lib -Wl,-R/usr/local/cuda/lib64 -lcudart -lpython2.7 -o /home/luoguiyang/projects/3dcnn/branch/tf-faster-rcnn/lib/nms/gpu_nms.so
rm -rf build

  

 3 下載代碼和數據

   到這一步,按照README里面的提示一步一步走就應該沒問題了(如果在本地測試的話)。

  1、clone github的倉庫

git clone https://github.com/endernewton/tf-faster-rcnn.git

  2、更新GPU的架構配置,到setup.py中找到 -arch 這個參數,改成自己的GPU架構就行了

cd tf-faster-rcnn/lib
# Change the GPU architecture (-arch) if necessary
vim setup.py

  對應的配置如右圖,github里面可能會對一些其他的顯卡更新參數。 

  3、鏈接cython 模塊,注意這也是在上一步那個lib 文件夾中進行的

make clean
make
cd ..

  4、安裝 Python COCO API,這是為了使用COCO數據庫

cd data
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
cd ../../..

  

 4 運行Demo 和測試預訓練模型

  1、下載預訓練模型

# Resnet101 for voc pre-trained on 07+12 set
./data/scripts/fetch_faster_rcnn_models.sh

  README里面也說了,下載鏈接可能會失效,sh文件里面給了一個備用鏈接也是不管用的,但是readme里面還給了備份的Google Drive的地址,我把其中的要用的模型 voc_0712_80k-110k.tgz 這個文件手動下載了(百度雲備份:https://pan.baidu.com/s/1kWkF3fT),下載之后放到 data文件夾中就行,(但是md5sum校驗值對不上,估計是下載地址不一樣的問題,也暫時忽略吧),運行以下命令解壓:

tar xvf voc_0712_80k-110k.tgz

  2、建立預訓練模型的軟連接

NET=res101
TRAIN_IMDB=voc_2007_trainval+voc_2012_trainval
mkdir -p output/${NET}/${TRAIN_IMDB}
cd output/${NET}/${TRAIN_IMDB}
ln -s ../../../data/voc_2007_trainval+voc_2012_trainval ./default
cd ../../..

  3、運行以下代碼就能測試demo了,主義是在tf-faster-rcnn 這個根文件夾中運行

# at repository root
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py

  這里還有一個問題,demo里面一個文件 import matlibplot.pyplot ,這時候如果是用終端連接的服務器的話,可能會出現DISPLAY 變量未設置這個bug,echo $DISPLAY 命令這時候肯定是什么不顯示的。錯誤如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/000456.jpg
Detection took 1.316s for 300 object proposals
Traceback (most recent call last):
  File "./tools/demo.py", line 153, in <module>
    demo(sess, net, im_name)
  File "./tools/demo.py", line 100, in demo
    vis_detections(im, cls, dets, thresh=CONF_THRESH)
  File "./tools/demo.py", line 50, in vis_detections
    fig, ax = plt.subplots(figsize=(12, 12))
  File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/pyplot.py", line 1177, in subplots
    fig = figure(**fig_kw)
  File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
    **kwargs)
  File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 46, in new_figure_manager
    return new_figure_manager_given_figure(num, thisFig)
  File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 53, in new_figure_manager_given_figure
    canvas = FigureCanvasQTAgg(figure)
  File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 76, in __init__
    FigureCanvasQT.__init__(self, figure)
  File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", line 68, in __init__
    _create_qApp()
  File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py", line 138, in _create_qApp
    raise RuntimeError('Invalid DISPLAY variable')
RuntimeError: Invalid DISPLAY variable

  這是因為matplotlib 輸出的圖像沒有輸出出來,有兩種方法:

  解決方法(1)設置X11轉發,具體方法Google一下,因為我的服務器沒有配置Xauth,我也沒有root權限,所以對我不適用了

  解決方法(2)改代碼,不要讓圖像show了,而是把圖像保存起來。錯誤里面可以看出引入matplotlib 的是 ./tools/demo.py 這個文件,教程:http://rootlu.com/blog/2017/10/08/MatplotlibInLinux.html/

    更改了兩處

    

    

   改完之后,圖片就保存在 tf-faster-rcnn 這里了,下載下來是這樣的(沒仔細改代碼,只保存了一幅)

 

  基礎的demo就可以運行了。后面調試的部分研究明白了再補上。

 


免責聲明!

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



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