TensorFlow 之Faster-RCNN

本文介绍如何使用TensorFlow和Faster-RCNN进行行人检测。首先准备环境并安装必要的Python库,然后从GitHub获取代码及预训练模型。接着编译代码并用测试样例验证模型效果,最后详细讲解如何训练自己的数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 环境准备 

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

1. 准备 TensorFlow 环境

    Tensorflow (>= 1.0.0) 

     安装对应 python 库:

[cpp]  view plain  copy
  1. sudo apt-get install cython python-opencv python-tk python-scipy python-yaml  
  2. sudo pip install easydict  
  3. sudo pip install matplotlib  
  4. sudo python -m pip install Pillow  

2. Gtihub 代码

    代码下载:【Github

3. 下载训练好的网络

    在 TFFRCNN-master 下新建文件夹 model,存放要下载入的 net(参考 Github 下载地址),推荐下载:

    2.VGG16 - TFFRCNN (0.689 mAP on VOC07)

    3.VGG16 - TFFRCNN (0.748 mAP on VOC07)

    5.Resnet50 - TFFRCNN (0.712 mAP on VOC07)

二. 编译运行

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

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

1. 编译

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

[cpp]  view plain  copy
  1. ## if you install tf using already-built binary, or gcc version 4.x, uncomment the two lines below  
  2. g++ -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  
  8. cd ..  
  9.   
  10.   
  11. # add building psroi_pooling layer  
  12. cd psroi_pooling_layer  
  13. nvcc -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  
  20. g++ -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:
[cpp]  view plain  copy
  1. cd ./lib  
  2. make # compile cython and roi_pooling_op, you may need to modify make.sh for your platform  

2. 运行

    根目录下执行如下命令:

[cpp]  view plain  copy
  1. cd ..  
  2. python ./tools/demo.py --model model/VGGnet_fast_rcnn_iter_150000.ckpt    # your model path  

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



三. 训练公网数据

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

1. 下载数据集

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

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

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

[cpp]  view plain  copy
  1. tar xvf VOCtrainval_06-Nov-2007.tar  
  2. tar xvf VOCtest_06-Nov-2007.tar  
  3. tar xvf VOCdevkit_08-Jun-2007.tar  

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

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

2. 下载 VGG16 的预训练数据

    下载地址:【VGG16 Pretrained

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

3. 训练

     运行如下脚本:

[cpp]  view plain  copy
  1. 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  

4. 查看结果

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

浅入浅出TensorFlow 7 - 行人检测之Faster-RCNN

一. 环境准备 

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

1. 准备 TensorFlow 环境

    Tensorflow (>= 1.0.0) 

     安装对应 python 库:

[cpp]  view plain  copy
  1. sudo apt-get install cython python-opencv python-tk python-scipy python-yaml  
  2. sudo pip install easydict  
  3. sudo pip install matplotlib  
  4. sudo python -m pip install Pillow  

2. Gtihub 代码

    代码下载:【Github

3. 下载训练好的网络

    在 TFFRCNN-master 下新建文件夹 model,存放要下载入的 net(参考 Github 下载地址),推荐下载:

    2.VGG16 - TFFRCNN (0.689 mAP on VOC07)

    3.VGG16 - TFFRCNN (0.748 mAP on VOC07)

    5.Resnet50 - TFFRCNN (0.712 mAP on VOC07)

二. 编译运行

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

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

1. 编译

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

[cpp]  view plain  copy
  1. ## if you install tf using already-built binary, or gcc version 4.x, uncomment the two lines below  
  2. g++ -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  
  8. cd ..  
  9.   
  10.   
  11. # add building psroi_pooling layer  
  12. cd psroi_pooling_layer  
  13. nvcc -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  
  20. g++ -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:
[cpp]  view plain  copy
  1. cd ./lib  
  2. make # compile cython and roi_pooling_op, you may need to modify make.sh for your platform  

2. 运行

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

[cpp]  view plain  copy
  1. cd ..  
  2. python demo.py --model model/VGGnet_fast_rcnn_iter_150000.ckpt    # your model path  

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



三. 训练公网数据

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

1. 下载数据集

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

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

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

[cpp]  view plain  copy
  1. tar xvf VOCtrainval_06-Nov-2007.tar  
  2. tar xvf VOCtest_06-Nov-2007.tar  
  3. tar xvf VOCdevkit_08-Jun-2007.tar  

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

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

2. 下载 VGG16 的预训练数据

    下载地址:【VGG16 Pretrained

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

3. 训练

     运行如下脚本:

[cpp]  view plain  copy
  1. 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  

4. 查看结果

[cpp]  view plain  copy
  1. # install a visualization tool  
  2. sudo apt-get install graphviz    
  3. ./experiments/profiling/run_profiling.sh   
  4. # generate an image ./experiments/profiling/profile.png  
# 工程内容 这个程序是基于tensorflow的tflearn库实现部分RCNN功能。 # 开发环境 windows10 + python3.5 + tensorflow1.2 + tflearn + cv2 + scikit-learn # 数据集 采用17flowers据集, 官网下载:http://www.robots.ox.ac.uk/~vgg/data/flowers/17/ # 程序说明 1、setup.py---初始化路径 2、config.py---配置 3、tools.py---进度条和显示带框图像工具 4、train_alexnet.py---大数据集预训练Alexnet网络,140个epoch左右,bitch_size为64 5、preprocessing_RCNN.py---图像的处理(选择性搜索、数据存取等) 6、selectivesearch.py---选择性搜索源码 7、fine_tune_RCNN.py---小数据集微调Alexnet 8、RCNN_output.py---训练SVM并测试RCNN(测试的时候测试图片选择第7、16类中没有参与训练的,单朵的花效果好,因为训练用的都是单朵的) # 文件说明 1、train_list.txt---预训练数据,数据在17flowers文件夹中 2、fine_tune_list.txt---微调数据2flowers文件夹中 3、1.png---直接用选择性搜索的区域划分 4、2.png---通过RCNN后的区域划分 # 程序问题 1、由于数据集小的原因,在微调时候并没有像论文一样按一个bitch32个正样本,128个负样本输入,感觉正样本过少; 2、还没有懂最后是怎么给区域打分的,所有非极大值抑制集合canny算子没有进行,待续; 3、对选择的区域是直接进行缩放的; 4、由于数据集合论文采用不一样,但是微调和训练SVM时采用的IOU阈值一样,有待调参。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值