今天一天将tensorflow下的faster rcnn实现了,运行demo.py并得到成果,从安装到运行。所以记录一下,我用的GPU工作站,GTX1080ti,内存11G。基础的CUDA配置这里就不详述了。由于是实验室的GPU,所以,在自己的目录下用Anaconda2创建自己的环境,其中Anaconda的配置详见上一篇文档。
其中tensorflow-gpu的版本1.3.0
其中github的代码:
https://github.com/CharlesShang/TFFRCNN
由于运行时会出现一些错误,这是由于Anaconda中并没有完全支持的一些库,需要安装tensorflow-gpu,会提示需要的依赖库,输入y,继续进行,将所有的依赖库都安装。这里给出我运行的
缺少python-opencv:
conda install -c https://conda.binstar.org/menpo opencv
conda install -c https://conda.binstar.org/auto easydict
这是不能通过conda install直接安装的,所以需要这样进行安装。
然后,下载训练好的模型,模型在github中,如下图所示
这里我下载了VGGnet_fast_rcnn_iter_100000,然后在TFFRCNN文件目录下新建model,存放下载下来的模型文件。
然后进行编译的环节,cd lib/ 然后修改make.sh,如果是 binary版本的 TensorFlow,需要关闭 D_GLIBCXX_USE_CXX11_ABI:0
如果还出现错误,提示psroi_pooling_op.cu的错误,这个就我出现了,所以,将修改成如下:
注释原来的代码,将下面的注释取消,如下
然后
cd ./lib
make
最后, 将 faster_rcnn/ 文件夹下的 demo.py copy到根目录下,执行如下命令:
cd ..
python demo.py --model model/VGGnet_fast_rcnn_iter_100000.ckpt
添加这么一行,用于没有图形GUI的情况下,
然后,修改最后,将图片保存,这样将替换原来的图片,
运行成功后,我们从工作站下载完成的图片。
效果如下:
训练数据Pascal VOC 2007:
下载训练,验证,测试数据:
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
并将下载的文件进行解压,这时会自动存放到VOCdevkit 文件夹中。
解压后VOCdevkit 的文件格式如下:
$VOCdevkit/ # development kit
$VOCdevkit/VOCcode/ # VOC utility code
$VOCdevkit/VOC2007 # image sets, annotations, etc.
# ... and several other directories ...
下载 VGG16的预训练集,并放到这个文件夹中:
./data/pretrain_model/VGG_imagenet.npy
然后运行脚本:
cd $TFFRCNN
python ./faster_rcnn/train_net.py --gpu 0 --weights ./data/pretrain_model/VGG_imagenet.npy --imdb voc_2007_trainval --iters 70000 --cfg ./experiments/cfgs/faster_rcnn_end2end.yml --network VGGnet_train --set EXP_DIR exp_dir
但是这时你会遇到一个错误:
python ./faster_rcnn/train_net.py --gpu 0 --restore 0 --weights ./data/pretrain_model//VGG_imagenet.npy --imdb voc_2007_trainval --iters 70000 --cfg ./experiments/cfgs/faster_rcnn_end2end.yml --network VGGnet_train --set EXP_DIR exp_dir
assert len(im_scales) == 1, "Single batch only"
AssertionError: Single batch only
解决:change the batch number to 1 in lib/fast_rcnn/configuration