一、论文题目来源
《Rich feature hierarchies for accurate oject detection and semantic segmentation》arxiv.org 《Fast R-CNN》arxiv.org 《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》arxiv.org二、R-CNN 2014
Object detection 就是要在图像中精准地找到目标的位置同时给出目标的类别。
R-CNN Fast R-CNN Faster R-CNN 的目标检测思路都是提取候选框 再对候选框进行CNN的分类网络运算,再对候选框进行回归,实现目标检测的目的。
这篇文章的算法流程如图所示:首先在输入图片中提取2000个候选框,再将这2000候选框拉伸后放入CNN网络中进行特征提取,根据提取到的特征图用SVM进行分类,达到识别物体类别的目的,再对候选框进行回归,使目标提取更精确。
因此,R-CNN算法主要包括三部分:Selective Search 进行候选框提取,CNN网络进行特征提取,SVM算法进行分类。
1.Selective Search
输入: 一张图片
输出:候选的目标位置集合L
算法:
Step1: 利用切分方法得到候选的区域集合
Step2: 初始化相似集合S = ϕ
Step3: foreach 遍历邻居区域对do
Step4: 计算相似度
Step5: S = S,
Step6: while S not=ϕ do
Step7: 从S中得到最大的相似度s=max(S)
Step8: 合并对应的区域
Step9: 移除对应的所有相似度:S = Ss
Step10: 移除对应的所有相似度:S = Ss()
Step11:: 计算对应的相似度集合:
Step12: S = S
Step13: R = R
Step14: L = R中所有区域对应的边框
2.特征抽取
R-CNN 抽取了一个 4096 维的特征向量,采用的是 Alexnet。需要注意的是 Alextnet 的输入图像大小是 227x227,但提取的候选框大小不一致,这篇文章在将候选框输入CNN前其缩放,缩放分为两种:各向同性缩放和各向异性缩放。
(1)各向同性缩放:图片的长款缩放相同的倍数,在把region proposal变成长方形时使用灰色填充或使用原始像素填充。
(2)各向异性缩放:不管图片是否扭曲,长宽缩放的比例可能不一样,直接将
长宽缩放到227*227。
3.SVM分类
测试时将带检测图像提取出约2000个候选区域,将每个区域都进行缩放,然后将缩放后的图片输入CNN进行特征提取,对CNN输出的特征用SVM进行打分。然后对打分好的区域使用NMS即非极大值抑制(Non-maximum Suppression)
NMS原理:对于Bounding Box的列表B及其对应的置信度S,采用下面的计算方式.选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的IoU大于阈值的框从B中移除.重复这个过程,直到B为空。
假设有六个框定位为一辆车,先按照类别分类器的分类概率进行从低到高排序,假设分别为A,B,C,D,E,F.那属于车辆的检测框概率最高的为F。将其从B集合中移除到M中,假设阈值设为0.5(一般情况下设为0.3-0,5),除F外其余五个候选框有B,D与F的IoU超过0.5,则移除B,D候选框(抑制)。剩下的A,C,E候选框中仍选择概率最大的例如A,若C,E与A的IoU超过阈值则抛弃,重复此过程,直到列表B为空,选出所有被保留的候选框。
在CNN的fine-tune阶段和训练SVM分类器阶段使用的positive和negetive example 是不一样的规则。
R-CNN采取迁移学习,提取在ILSVRC 2012中的模型和权重,然后在VOC上进行fine-tune. R-CNN将候选区域与Ground True中的box标签进行比较,若IoU>0.5则认为该候选区域为Positive,否则为negetive。
而在分类器中,R-CNN选择的threshold为0.3,一个区域与Ground Trueth 的IoU<0.3则认为为negetive,Ground Truth 认为是Positive,介于0.3—1之间的则抛弃。
4、结果
R-CNN在PASCAL-VOC 2010的表现
上面四行是与当时强劲的object detection的算法进行了比较。
5、框架精简
AlexNet 有 7 层,那么那些层是关键指标呢?哪些层可有可无呢?
fc6 与 pool5 构成全连接,为了计算 feature 它会乘以一个 4096x9216 的权重矩阵,然后在与一组 bias 相加,所以它有 3700 多万的参数。
fc7 是最后一层,它的权重矩阵是 4096x4096,它的参数有 1678 万多的参数。
但经过作者在 PASCAL 上不做 fine-tune 处理,直接测试,可以发现 fc7 的意义没有 fc6 大,甚至移除它之后,对于 mAP 结果指标没有影响。
移除 fc7 就表示可以减少将近 1800 万个参数。
但同时移除 fc6 和 fc7 并没有多大的损失。
所以,神经网络最神奇的力量来自卷积层,而不是全连接层。
在有fine-tune的情况下,结果证明,fine-tune 后 fc6 与 fc7 提升的效果明显。结果如下图。
三、Fast R-CNN 2015
- RoI池化层
RoI Pooling可以说是SPP(spatial pyramid pooling)的简化版。
简单说一下SPPNet
SPPNet主要有两处亮点 1)他解决了深度卷积网络的输入必须是固定尺寸的问题。
2)在目标检测领域提高特征提取的速度
一般卷积神经网络的全连接层在设计的时候要求其输入必须要固定尺寸,那往前推就要求卷积层的输入也是固定尺寸。而SPPNet 则在全连接层之前设计了spatial pyramid pooling(空间金字塔池化) 论文中举例:把卷积操作之后的特征图(feature maps),以不同大小的块(池化框)来提取特征,分别是4 * 4,2 * 2,1 * 1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial Bins),这样一来,无论输入图片的尺寸大小为多少,都可以得到相同维数得特征向量送入全连接层
第二点SPPNet 最开始也是使用选择性搜索选出候选区域,但并不像R-CNN一样对每个候选区域都进行特征提取(这样会消耗大量得时间),他是只将一张图片送入卷积层,得到feature map后将之前得候选区域映射到feature map上,在送入空间金字塔池化,得到相同大小得特征向量,在用分类网络进行分类,这样就可以节省每个候选区域送入卷积网络进行特征提取得时间。至于具体怎么映射的,没来得及看,下回分解吧就。
Fast R-CNN中的ROI pooling去掉了SPP的多尺度池化,直接用MxN的网格,将每个候选区域均匀分成M×N块,对每个块进行max pooling。从而将特征图上大小不一的候选区域转变为大小统一的特征向量,送入下一层。
2、特征提取
Fast R-CNN在特征提取上可以说很大程度借鉴了SPPnet,首先将图片用选择搜索算法(selective search)得到2000个候选区域(region proposals)的坐标信息。另一方面,直接将图片归一化到CNN需要的格式,整张图片送入CNN(本文选择的网络是VGG),将第五层的普通池化层替换为RoI池化层,图片然后经过5层卷积操作后,得到一张特征图(feature maps),开始得到的坐标信息通过一定的映射关系转换为对应特征图的坐标,截取对应的候选区域,经过RoI层后提取到固定长度的特征向量,送入全连接层。
3、结果
3.1—mAP
3.2—速度
四、Faster R-CNN 2016
继Fast R-CNN后,新的目标检测算法就是著名的Faster R-CNN,先展示Faster R-CNN 的网络结构,与Fast R-CNN 不同的是 ,它没有先使用选择性搜索选出候选框,作者认为selective search会导致Fast R-CNN 耗时较长,因此,本篇论文提出了Region Proposal Networks(RPN)来提取候选框。
1、RPN
RPN可以理解为一种全卷积网络,输入是任意大小的Feature map(经过共享卷积网络)目标是和Fast R-CNN 共享目标检测的网络(Fast R-CNN的目标检测网络是VGG16)输出是一系列的矩形候选框。RPN后将链接两个全连接层,原文将其称为sibiling full-connected layers,一个用于分类,一个用于回归。
2、Anchor
文章提出anchor的概念,anchors可以理解为一些预设大小的框,anchors的种类用k表示,在原文中k=9,由3种面积(,)和三种长宽比组成(1:1,1:2,2:1).假设CNN得到的feature map的大小为w*h,则生成的anchor数量为9*w*h,即每个像素点都生成9个anchor。假设原图的大小为W*H,则有W=S*w, H=S*h, S为之前所有层stride size 相乘,所以feature map上的点乘以S即为anchors的原点位置,得到所有框的原点位置以及大小就可以得到原图上的anchors区域了。
3、RPN的输出和anchor的关系
假设在conv5 feature map中每个点上有k个anchor(原文如上k=9),而每个anchor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates(scores和coordinates为RPN的最终输出)
4、RPN的训练
每个mini-batch 选择256个anchors(128个positive和128个negetive)
Positive 是 anchor和ground truth 的IoU最大的作为正样本,IoU<0.3作为负样本。
本文用四步使RPN 网络和Fast R-CNN目标检测网络公用一个网络。第一步,先训练一个RPN 网络,这个网络使用在ImageNet 上预训练过的网络来初始化。第二部,使用Fast R-CNN 和第一步中RPN 得到的候选框来训练一个检测网络,此时两个网络还没有实现公用卷积层。第三步将检测网络初始化RPN网络,并且不改变共享卷积层,只改变RPN特有的层。第四步,固定共享卷积层不变,改变Fast R-CNN 特有的层。
5、结果
下面是anchors的种类选择对精确度的影响:
五、总结
Fast R-CNN 的创新点就在于不在原图上提取候选框,而是在卷积网络得到的feature map中,节省了对每个候选框都进行特征提取的时间,另外,提出ROI pooling,使得无论候选框的尺寸如何,都可以送入全连接层进行运算。Faster R-CNN 则是在此基础上,抛弃了候选框提取算法Selective Search,提出RPN,和检测网络共用卷积层,节省运算时间,同时提出anchor的概念。