环境配置
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的脚本中