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程序

1.首先下载训练好的网络VGG-Fast RCNN-iter_70000.ckpt
2.然后调用demo.py

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的脚本中
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_33297776/article/details/79751370
今日推荐