浅入浅出TensorFlow 7 — Faster-RCNN

Posted 深度学习与神经网络

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅入浅出TensorFlow 7 — Faster-RCNN相关的知识,希望对你有一定的参考价值。

上篇,Amusi带着大家学习了如何,今天继续给大家介绍linolzhang大佬的TensorFlow系列课程,带大家学习如何利用Faster-RCNN实现目标检测


正文


一. 环境准备

本文通过 TensorFlow 实现基于 Faster-RCNN 的行人检测,网络模型基于 VGG16 or ResNet。

1. 准备 TensorFlow 环境

Tensorflow (>= 1.0.0)

安装对应 python 库:

1sudo apt-get install cython python-opencv python-tk python-scipy python-yaml  
2sudo pip install easydict  
3sudo pip install matplotlib  
4sudo python -m pip install Pillow


2. Gtihub 代码

代码下载:https://github.com/CharlesShang/TFFRCNN


3. 下载训练好的网络

  • VGG16 - TFFRCNN (0.689 mAP on VOC07)

链接:https://drive.google.com/file/d/0B_xFdh9onPagX0JWRlR0cTZ5OGc/view?usp=sharing


  • VGG16 - TFFRCNN (0.748 mAP on VOC07)

链接:https://drive.google.com/file/d/0B_xFdh9onPagVmt5VHlCU25vUEE/view?usp=sharing


  • Resnet50 - TFFRCNN (0.712 mAP on VOC07)

链接:https://drive.google.com/file/d/0B_xFdh9onPagbXk1b0FIeDRJaU0/view?usp=sharing


二. 编译运行

编译代码,并利用训练好的模型运行测试样例。

模型是基于 VGG16 在 PASCAL VOC 2007 上的训练结果做的检测。

1. 编译

打开 lib文件夹下的 make.sh,根据提示修改,如果是 binary版本的 TensorFlow,需要关闭 D_GLIBCXX_USE_CXX11_ABI:

 1## if you install tf using already-built binary, or gcc version 4.x, uncomment the two lines below  
2g++ -std=c++11 -shared -D_GLIBCXX_USE_CXX11_ABI=0 -o roi_pooling.so roi_pooling_op.cc \  
3    roi_pooling_op.cu.o -I $TF_INC -fPIC -lcudart -L $CUDA_PATH/lib64  
4
5#
for gcc5-built tf  
6#g++ -std=c++11 -shared -D_GLIBCXX_USE_CXX11_ABI=1 -o roi_pooling.so roi_pooling_op.cc \  
7#   roi_pooling_op.cu.o -I $TF_INC -fPIC -lcudart -L $CUDA_PATH/lib64  
8cd ..  
9
10
11#
add building psroi_pooling layer  
12cd psroi_pooling_layer  
13nvcc -std=c++11 -c -o psroi_pooling_op.cu.o psroi_pooling_op_gpu.cu.cc \  
14    -I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC -arch=sm_52  
15
16#
g++ -std=c++11 -shared -o psroi_pooling.so psroi_pooling_op.cc \  
17#   psroi_pooling_op.cu.o -I $TF_INC -fPIC -lcudart -L $CUDA_PATH/lib64  
18
19#
# if you install tf using already-built binary, or gcc version 4.x, uncomment the two lines below  
20g++ -std=c++11 -shared -D_GLIBCXX_USE_CXX11_ABI=0 -o psroi_pooling.so psroi_pooling_op.cc \  
21    psroi_pooling_op.cu.o -I $TF_INC -fPIC -lcudart -L $CUDA_PATH/lib64


执行命令行 make:

1cd ./lib  
2make # compile cython and roi_pooling_op, you may need to modify make.sh for your platform  


2. 运行

将 faster_rcnn/ 文件夹下的 demo.py copy到根目录下,执行如下命令:

1cd ..  
2python demo.py --model model/VGGnet_fast_rcnn_iter_150000.ckpt    # your model path


看一下测试效果(0.748 的 mAP,远端检测效果还是很不错的):


三. 训练公开数据

需要下载 PASCAL VOC 数据集,训练过程也比较简单(也可以参考 Github 对应的说明流程):

1. 下载数据集

下载 VOC 数据集,用于下一步数据训练:

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


新建 VOCdevkit 文件夹,并将下载的 tar 文件放到文件夹内,并解压缩:

1tar xvf VOCtrainval_06-Nov-2007.tar  
2tar xvf VOCtest_06-Nov-2007.tar  
3tar xvf VOCdevkit_08-Jun-2007.tar


将数据格式按照下面的格式存放:

1$VOCdevkit/                           # development kit  
2$VOCdevkit/VOCcode/                   # VOC utility code  
3$VOCdevkit/VOC2007                    # image sets, annotations, etc.  
4# ... and several other directories ...  



2. 下载 VGG16 的预训练数据

放到指定文件夹下:./data/pretrain_model/VGG_imagenet.npy


3. 训练

运行如下脚本:

1python ./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 


4. 查看结果

1# install a visualization tool  
2sudo apt-get install graphviz    
3./experiments/profiling/run_profiling.sh  
4# generate an image ./experiments/profiling/profile.png




往期精彩回顾









--------我是可爱的分割线--------




点击下述“阅读原文”,可以直接访问原文~

若喜欢,给个赞呗~

以上是关于浅入浅出TensorFlow 7 — Faster-RCNN的主要内容,如果未能解决你的问题,请参考以下文章

「游戏引擎 浅入浅出」前言

「游戏引擎 浅入浅出」前言

「游戏引擎 浅入浅出」前言

「游戏引擎 浅入浅出」前言

浅入浅出EmguCvEmguCv打开指定视频

「游戏引擎 浅入浅出」项目介绍