本文是继RCNN[1],fast RCNN[2]之后,目标检测界的领军人物Ross Girshick团队在2015年的又一力作。简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%;复杂网络达到5fps,准确率78.8%。作者在github上给出了基于matlab和python的源码。
一、基于Region Proposal(候选区域)的深度学习目标检测算法
1.1 Region Proposal(候选区域):
就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率(IoU,Intersection-over-Union)。
Region Proposal方法比传统的滑动窗口方法获取的质量要更高。比较常用的Region Proposal方有:SelectiveSearch(SS,选择性搜索)、Edge Boxes(EB)。
1.2 基于Region Proposal目标检测算法的步骤如下:
1.3 常见的CNN模型介绍
https://blog.youkuaiyun.com/qq_17448289/article/details/52850223
1.4 边框回归(Bouding Box Regression)
是对RegionProposal进行纠正的线性回归算法,目的是为了让Region Proposal提取到的窗口与目标窗口(Ground Truth)更加吻合。
二、R-CNN、Fast R-CNN、Faster R-CNN三者关系
使用方法 |
缺点 |
改进 |
|
R-CNN (Region-based Convolutional Neural Networks) |
1、SS提取RP; 2、CNN提取特征; 3、SVM分类; 4、BB回归。 |
1、 训练步骤繁琐(微调网络+训练SVM+训练bbox); 2、 训练、测试均速度慢 ; 3、 训练占空间 |
1、 从DPM HSC的34.3%直接提升到了66%(mAP); 2、 引入RP+CNN |
Fast R-CNN (Fast Region-based Convolutional Neural Networks) |
1、SS提取RP; 2、CNN提取特征; 3、softmax分类; 4、多任务损失函数边框回归。 |
1、 依旧用SS提取RP(耗时2-3s,特征提取耗时0.32s); 2、 无法满足实时应用,没有真正实现端到端训练测试; 3、 利用了GPU,但是区域建议方法是在CPU上实现的。 |
1、 由66.9%提升到70%; 2、 每张图像耗时约为3s。 |
Faster R-CNN (Fast Region-based Convolutional Neural Networks) |
1、RPN提取RP; 2、CNN提取特征; 3、softmax分类; 4、多任务损失函数边框回归。 |
1、 还是无法达到实时检测目标; 2、 获取region proposal,再对每个proposal分类计算量还是比较大。 |
1、 提高了检测精度和速度; 2、 真正实现端到端的目标检测框架; 3、 生成建议框仅需约10ms。 |
Fast R-CNN框架与R-CNN有两处不同:
- ① 最后一个卷积层后加了一个ROI pooling layer;
- ② 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。
注:Fast R-CNN和Faster R-CNN是端到端(end-to-end)的;R-CNN不是端到端的。
三、Faster R-CNN目标检测
3.1 Faster R-CNN的思想
faster RCNN可以简单地看做“候选区域生成网络+fast RCNN“的系统,用区域生成网络代替fast RCNN中的Selective Search方法。本篇论文着重解决了这个系统中的三个问题:
- 1. 如何设计区域生成网络(RPN)
- 2. 如何训练区域生成网络
- 3. 如何让区域生成网络和fast RCNN网络共享特征提取网络
在整个faster RCNN算法中,有三种尺度。
原图尺度:原始输入的大小。不受任何限制,不影响性能。
归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。
3.2 Faster R-CNN框架介绍
Faster-R-CNN算法由两大模块组成:
- 1.PRN候选框提取模块;
- 2.Fast R-CNN检测模块。
其中,RPN是全卷积神经网络,用于提取候选框;Fast R-CNN基于RPN提取的proposal检测并识别proposal中的目标。
图1 Faster R-CNN基本结构(来自原文)
依作者看来,如图1,Faster RCNN其实可以分为4个主要内容:
- Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
- Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于foreground或者background,再利用bounding box regression修正anchors获得精确的proposals。
- Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
- Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。
所以本文以上述4个内容作为切入点介绍Faster R-CNN网络。
图2展示了python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构,可以清晰的看到该网络对于一副任意大小PxQ的图像,首先缩放至固定大小MxN,然后将MxN图像送入网络;而Conv layers中包含了13个conv层+13个relu层+4个pooling层;RPN网络首先经过3x3卷积,再分别生成foreground anchors与bounding box regression偏移量,然后计算出proposals;而Ro