初学者系列:基于Keras的Faster-RCNN的代码学习

2019 年 8 月 9 日 专知

【导读】目标检测(object detection),就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。目前学术和工业界出现的目标检测算法分成3类:传统的目标检测算法,候选区域/框 + 深度学习分类,基于深度学习的回归方法。Faster R-CNN属于第二种,本文将介绍Faster R-CNN原理以及它的代码学习。

一、faster-rcnn介绍

原理如图:

完整的faster_rcnn如下:

论文地址:

https://arxiv.org/abs/1506.01497

解读:可以看出原始图片,经过卷积层生成特征图,RPN用特征图输出推荐区域,RoIP将大小不同的推荐区域变成相同大小的区域,最后经过R-CNN分类,最终检测出了目标。所以,我们把faster rcnn分为4层:

  • feature extraction

  • proposal extraction 

  • bounding box regression

  • classification

二、原理及代码讲解

Github地址:

https://github.com/you359/Keras-FasterRCNN

我们将从这个程序中的train_frcnn.py中介绍faster-rcnn的原理。笔者提醒:运行这个程序需要gpu支持。

2.1


Image 原始图片

程序的数据集用的是Pascal VOC数据集,数据集分为20类,包括背景为21类,可以从以下网址获取:

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

解压放到项目根目录下,如图:

  • Annotations文件夹中存放的是xml格式的标签文件,每一个xml文件都对应于JPEGImages文件夹中的一张图片。

  • ImageSets存放的是训练集所要用到的图片文件名

    JPEGImages存放的是所有图片。

  • SegmentationClass的每一张图片都对应JPEGImages里面的相应编号的图片。这里面的图片的像素颜色共有20种,对应20类物体比如所有的飞机都是红色的。

  • SegmentationObject里的图片是对每一类的不同Object进行颜色标注区分。比如,飞机类的不同Object会有不同的颜色

用命令行python train_frcnn.py -p ./VOCdevkit/ 

执行程序,具体其他参数,要从train_frcnn.py写的程序里了解,如图:

tain_frcnn.py中的一行代码,用

pascal_voc_parser.py中的get_data函数加载了数据集

定义数据生成器:

2.2


feature extraction

此层利用已经训练好的卷积层对图片进行特征提取。原理如图:

基础卷积的选择可以选择vgg16或者resnet50,本项目用的是resnet50,可以从config.py中看到,如图:

不过,你也可以通过命令行参数改,如图所示:

train_frcnn.py中用了一句来进行卷积

shared_layers=nn.nn_base(img_input,trainable=True)

而nn_base定义在vgg.py中,如图:

2.3


proposal extraction

RPN即Region Proposal Network,中文翻译成区域推荐网络。RPN基于fature maps生成proposals。如下:

RPN是通过一个叫做锚点(anchor)的机制实现的。RPN对特征图上的每个点都生成一组锚点(9个),反推回原始图像,生成不同形状和大小的k个锚框(anchor box)。数学上,如果图片的尺寸是 w×h,那么特征图最终会缩小到尺寸为 w/r 和 h/r,其中 r 是次级采样率。如果我们在特征图上每个空间位置上都定义一个锚点,那么最终图片的锚点会相隔 r 个像素,在 VGG 中,r=16。原理如图:

原始图片的锚点中心如下图:

之后,RPN 会对锚点进行分类和回归,生成proposals。这里的分类并不是分成数据集中21种类,而是通过求锚是对象的概率而留下或舍弃锚点;回归是用于调整锚点以更好地适合物体。

回到代码,train_frcnn.py使用rpn如下:

rpn在vgg.py中的实现如下:

通过rpn函数定义,我们可以看出,RPN 是用完全卷积的方式高效实现的,用基础网络返回的卷积特征图作为输入。然后分类,回归。

2.4


bounding box regression

此层用RoI池收集输入的feature maps和proposals(不同形状和大小的bounding box),综合这些信息后提取固定大小的proposals,送入后续全连接层判定目标分类,原理如下

2.5


Classification

基于区域的卷积神经网络(R-CNN)是faster rcnn中的最后一步。在从图像中获取特征图之后,通过RPN得到proposals,再通过RoI池提取每个proposal的特征,我们最终需要使用这些特征进行分类。R-CNN使用全连接的层来输出每个可能的对象类的分数。原理如图:

此项目将RoI池化层与分类层写在了一个classifier函数中,如下:

到此,faster rcnn模型结构便结束了,之后便是编译模型,训练模型,测试模型。

以上部分内容引用自

https://towardsdatascience.com/faster-r-cnn-object-detection-implemented-by-keras-for-custom-data-from-googles-open-images-125f62b9141a

三、总结

faster rcnn相比于fast rcnn,综合性能有较大提高,在检测速度方面尤为明显。不过我相信还会有更好更快的目标检测解决方案。此文只是faster rcnn入门级教程,想要知道具体细节,还需读者自己有兴趣再去调查。


-END-


专 · 知

专知,专业可信的人工智能知识分发,让认知协作更快更好!欢迎登录www.zhuanzhi.ai,注册登录专知,获取更多AI知识资料!

欢迎微信扫一扫加入专知人工智能知识星球群,获取最新AI专业干货知识教程视频资料和与专家交流咨询

请加专知小助手微信(扫一扫如下二维码添加),加入专知人工智能主题群,咨询技术商务合作~

专知《深度学习:算法到实战》课程全部完成!550+位同学在学习,现在报名,限时优惠!网易云课堂人工智能畅销榜首位!

点击“阅读原文”,了解报名专知《深度学习:算法到实战》课程

登录查看更多
16

相关内容

R-CNN的全称是Region-CNN,它可以说是是第一个成功将深度学习应用到目标检测上的算法。传统的目标检测方法大多以图像识别为基础。 一般可以在图片上使用穷举法选出所所有物体可能出现的区域框,对这些区域框提取特征并使用图像识别方法分类, 得到所有分类成功的区域后,通过非极大值抑制(Non-maximumsuppression)输出结果。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
《深度学习》圣经花书的数学推导、原理与Python代码实现
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
116+阅读 · 2019年12月31日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
Mask-RCNN模型的实现自定义对象(无人机)检测
计算机视觉life
17+阅读 · 2019年8月12日
实战 | 源码入门之Faster RCNN
计算机视觉life
19+阅读 · 2019年4月16日
CNN与RNN中文文本分类-基于TensorFlow 实现
七月在线实验室
13+阅读 · 2018年10月30日
Faster R-CNN
数据挖掘入门与实战
4+阅读 · 2018年4月20日
深度学习入门篇--手把手教你用 TensorFlow 训练模型
全球人工智能
4+阅读 · 2017年10月21日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
用Kaggle经典案例教你用CNN做图像分类!
AI研习社
6+阅读 · 2017年7月23日
Interpretable CNNs for Object Classification
Arxiv
20+阅读 · 2020年3月12日
Single-frame Regularization for Temporally Stable CNNs
Arxiv
6+阅读 · 2018年2月6日
Arxiv
7+阅读 · 2018年1月24日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关资讯
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
Mask-RCNN模型的实现自定义对象(无人机)检测
计算机视觉life
17+阅读 · 2019年8月12日
实战 | 源码入门之Faster RCNN
计算机视觉life
19+阅读 · 2019年4月16日
CNN与RNN中文文本分类-基于TensorFlow 实现
七月在线实验室
13+阅读 · 2018年10月30日
Faster R-CNN
数据挖掘入门与实战
4+阅读 · 2018年4月20日
深度学习入门篇--手把手教你用 TensorFlow 训练模型
全球人工智能
4+阅读 · 2017年10月21日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
用Kaggle经典案例教你用CNN做图像分类!
AI研习社
6+阅读 · 2017年7月23日
相关论文
Top
微信扫码咨询专知VIP会员