1. 程式人生 > >SmallCorgi/TF-Faster RCNN測試

SmallCorgi/TF-Faster RCNN測試

環境配置

Github上給出SmallCorgi的連結TF-Faster RCNN,按照要求配置環境。

sudo pip install cython
sudo pip install easydict
sudo pip install opencv-python

進入lib資料夾,make編譯原始碼。
————————————注意————————————————
後面測試的時候仍然有bug,需要修改一下make.sh
BUG:. undefined symbol: _ZTIN10tensorflow8OpKernelE
這個問題卡得最久,因為make.sh 檔案中缺少了TF_LIB 編譯引數,還需要新增 -D_GLIBCXX_USE_CXX11_ABI=0

TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
CUDA_PATH=/usr/local/cuda/
CXXFLAGS=''

if [[ "$OSTYPE" =~ ^darwin ]]; then
    CXXFLAGS+='-undefined dynamic_lookup'
fi

cd roi_pooling_layer

if
[ -d "$CUDA_PATH" ]; then nvcc -std=c++11 -c -o roi_pooling_op.cu.o roi_pooling_op_gpu.cu.cc \ -I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC $CXXFLAGS \ -arch=sm_37 g++ -std=c++11 -shared -o roi_pooling.so roi_pooling_op.cc \ roi_pooling_op.cu.o -I $TF_INC -D GOOGLE_CUDA=1
-fPIC $CXXFLAGS \ -lcudart -L $CUDA_PATH/lib64 -L $TF_LIB -D_GLIBCXX_USE_CXX11_ABI=0 else g++ -std=c++11 -shared -o roi_pooling.so roi_pooling_op.cc \ -I $TF_INC -fPIC $CXXFLAGS fi cd .. #cd feature_extrapolating_layer #nvcc -std=c++11 -c -o feature_extrapolating_op.cu.o feature_extrapolating_op_gpu.cu.cc \ # -I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC -arch=sm_50 #g++ -std=c++11 -shared -o feature_extrapolating.so feature_extrapolating_op.cc \ # feature_extrapolating_op.cu.o -I $TF_INC -fPIC -lcudart -L $CUDA_PATH/lib64 #cd ..

測試Demo程式

python ./tools/demo.py --model ./model/VGGnet_fast_rcnn_iter_70000.ckpt 

demo.py程式碼中有一處需要修改的
(1)程式第1行新增下面的程式碼,用來解決伺服器端plt不正常的問題

import matplotlib
matplotlib.use('Agg')

(2)使用自己的圖片進行測試,測試結果如下:
這裡寫圖片描述
這裡寫圖片描述

使用VOC2007資料進行訓練

根據專案的ReadMe進行操作即可。

1. 首先下載資料

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

2. 然後解壓上面的檔案

tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

3. 重新命名資料夾

重新命名資料夾VOCdevkit為VOCdevkit2007,因為在程式碼中是這樣的格式,需要帶上年份。

4. 下載預訓練的網路(VGG16)

下載地址 密碼:tyrv
下載後的檔案儲存在路徑/data/pretrain_model/中

5. 執行指令碼

進入專案根目錄後執行下面的指令碼

./experiments/scripts/faster_rcnn_end2end.sh $DEVICE $DEVICE_ID VGG16 pascal_voc

需要制定DEVICE是CPU還是GPU,同時還要指定DIVICE_ID。可以通過nvidia-smi伺服器當前的GPU使用情況。
這裡寫圖片描述

6. 出現的問題

1. 提示“沒有找到experiments/logs/沒有那個檔案或目錄”

這裡寫圖片描述

解決方式:在experiments下面建立一個logs的資料夾

2. 沒有生成ckpt檔案

在測試過程中會反覆提示“warning for VGGnet-fast-rcnn-iter-70000.ckpt”。
錯誤來源:
Tensorflow V1ckpt檔案,但是在V2版本中生成的是下面三個檔案。而在測試過程中,層序希望讀取的仍然是ckpt檔案,故由於找不到檔案而一直出現waiting for的錯誤提示。
這裡寫圖片描述
解決方式:
將儲存的方式改成使用TensorflowV1的方式,與測試時讀取相匹配。將$TF-FasterRCNNRoot/fast_rcnn/train.py 的程式碼作下面的修改:

self.saver = tf.train.Saver(max_to_keep=100,write_version=saver_pb2.SaverDef.V1)

然後在改檔案引用:

from tensorflow.core.protobuf import saver_pb2

問題就解決了!!!

7. 訓練結果

程式最後輸出了在測試集上進行測試的結果。為了能夠縮短訓練時間,我將指令碼中的我在end2end的指令碼中
這裡寫圖片描述