三者的比较:RCNN、Fast RCNN、 Faster RCNN
一、框架的对比
1.三者都是二阶算法,网络框架比较:
2.三者的优缺点比较:
RCNN
一、RCNN系列简介
R-CNN系列(R-CNN,fast-RCNN,faster-RCNN)是使用深度学习进行物体检测的鼻祖论文,其中fast-RCNN 以及faster-RCNN都是延续R-CNN的思路。
R-CNN新提出了CNN卷积特征提取方法和微调。
R-CNN全称region with CNN features,其实它的名字就是一个很好的解释。用CNN提取出Region Proposals中的featues,然后进行SVM分类与bbox的回归(定位置)。
【RCNN网络结构】
二、RCNN算法流程的4个步骤
重要思想:
(1)通过专门模板去生成候选框(RPN),寻找前景以及调整边界框(基于锚框)
(2)基于之前生成的候选框进行进一步分类以及调整边界框(基于建议框)
具体步骤:
1.一张图像生成1k~2k个候选区域(使用Selective Search方法)
2.对每个候选区域,使用深度网络提取特征(CNN)
3.特征送入每一类的SVM分类器,判别是否属于该类(SVM)
4.使用回归器精细修正候选框位置
步骤详解:
三、RCNN存在的问题
1.测试速度慢
2.训练速度慢(过程复杂,cnn、svm、回归网络都要训练)
3.训练所需空间大
四、论文解析补充
1.R-CNN提出了两个问题
1.如何用CNN定位目标
2.标注数据太少,使用迁移学习的思想(微调)
关于迁移学习(微调):什么是微调?
图像分类:Image:Net 目标检测:PASCAL VOC
2.重要结论
1.在选择图片的时候,会选择比区域大16个像素的图片,这样边缘信息也会利用上。在卷积的时候信息可能丢失。实验证明扩充16个像素 效果会更好
2.最后分类会多出来一类,这一类代表的是背景类。
3.CNN和SVM使用不同的正负样本划分方法。类别分类器使用0.3的阈值
4.可视化学习的特征:高层提取的特征高层每一个不同的通道,学习的就是不一样的东西。eg:1学的是人,2学的是点状
5.R-CNNBB(Bounding box regression)边界框回归
这是RCNN定准确定位的关键,定位正确的位置什么是R-CNNbb?
6.这里的△x,△y…都是通过训练SVM模型实现回归任务得到的。
上述公式预测的是△x,△w,而作者预测的是dx,dw,这是为什么?
1.因为△w是宽放大的比例,这里只可能为正数,但是通过svm模型预测出来的可能存在负数。通过先预测出来dw (也可能是正负),那么通过exp的函数一定是正数即可保证△w为正数。
2.如下图所示,当使用d计算的话,对于两张相同预测和真实之间的损失函数的值相同。
fast-RCNN
一、fast-RCNN简介
Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal VOC数据集上)。
注意:
这里与RCNN有明显的不同,RCNN是独立的四步,这里只有两步,所以大大加快了训练速度。
二、fast-RCNN算法的3个步骤
1.一张图像生成1K~2K个候选区域(使用Selective Search方法)
2.将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
3.将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
注意:
与RCNN在第二步有所不同,RCNN是把候选框送入CNN,而fast-RCNN是把整张图片送进去。
1.概念:训练数据的采样(正负样本)
1.正样本就是感兴趣的部分,负样本就是没有我们需要的样本(可以理解为背景)
2.训练的时候不是用ss算法中的全部候选框
,只是使用了一部分:只要候选框和我们的真实的目标边界框的iou大于0.5,那么就认为是正样本,不是所有的正样本都会被使用,也是随机选择使用的。
3.RoI Pooling Layer
2.分类器
3.边界框回归器
4.多任务损失函数
三、论文解析补充
1.R-CNN的缺点
1.训练是多阶段的
2.训练需要大量的空间和时间
3.因为每张图片需要2000个候选框,所以训练的很慢
主要原因:R-CNN需要一个CNN前向传播,但是没有使用到共享计算。这里使用SPPnet的思路
下边介绍一下SPPnet引入的新思想 什么是SPPnet?
这里使用到sppnet思想空间金字塔池化层
和RCNN的区别
RCNN一般使用的是3*3步长为2的最大池化层,spp层就是限制了输出的尺寸,动态池化控制输出尺寸,不需要想RCNN限制输入图片的尺寸了
。
新思想:
不传候选区域,直接传整张图片。这一块解决了上述CNN因为候选框太多处理图片慢的问题。
缺点:
无法更新空间金字塔池化之前的卷积层
2.Fast R-CNN方法的几个优点
1.mAP高于R-CNN、SPPnet
2.训练是单阶段的,使用多任务损失
3.训练可以更新所有网络层 (包括卷积层和全连接层)
4.特性缓存不需要磁盘存储
3.Fast R-CNN引入Rol层
RoI层只是SPPnets中使用的空间金字塔池化层的特殊情况,其中只有一个金字塔层。
4.尺度不变性
有两个目标,一个目标大,一个小,如果都能被识别,证明模型有很好的尺度不变性。
5.最长时间的花费地方
对于检测,要处理的roi数量很大,并且近一半的前向通过时间花在计算全连接层上
6.SVD压缩参数
中间的对角矩阵,左上的最重要,右下的相对不重要,故取左上一部分。把nn 变tt.相当于把n压缩到t,压缩的越多,后续的参数越少。
7.重要结论
1.sppnet只微调全连接层,把卷积层全部冻结。
fastrcnn证明了微调卷积层也是很重要的,实验证明调越靠前的卷积层,效果会更好。
2.多任务训练能提高平均精度。
3.多尺度训练能提高平均精度。
4.大量的训练数据能提高平均精度。
5.使用softmax替换SVM能提高平均精度。
6.使用更多的候选框不一定能提高平均精度。会出现先上升再向下的趋势
7.不需要再单独训练分类器和边界框回归器了
Faster RCNN
一、Faster RCNN简介
Faster RCNN 是作者 Ross Girshick 继 RCNN 和 Fast RCNN后的又一力作。同样使用 VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及cOco竞赛中获得多个项目的第一名。
二、Faster RCNN算法流程
Faster RCNN = RPN + Fast RCNN
RPN 是指 Region Proposal Network,建议区域生成网络。 Faster RCNN 中用 RPN 来代替了 Fast RCNN 中的SS算法。
1.算法流程
(1)将图像输入网络得到相应的特征图。
(2)使用RPN网络生成候选框,将RPN生成的候选框投影到特征图上获得ROI区域的特征矩阵。
(3)将每个ROI区域的特征矩阵通过 ROI pooling 层缩放到7x7大小的特征图,接着将特征图展平为vector,之后通过一系列全连接层得到预测结果。
2.Faster RCNN 网络的基本结构
3.RPN网络(Region Proposal Network)
3.1RPN网络结构
图中的 conv feature map 是图像输入网络得到相应的特征图,通过sliding window处理之后产生一个256-d的一维向量。该向量通过两个全连接层,分别输出分类概率scores和边界框回归参数coordinates,其中k是指 k个 anchor boxes,2k个scores是每个 anchor box 分别为前景和背景的概率(注意这里只区分前景和背景,所有的类别都归为前景),4k个coordinates是因为每个anchor box 有四个参数。
注意
2k cls的2分别代表是背景不是背景
4k reg的4代表中心坐标、宽、高
3.2 anchor的定义
anchor不是候选框(Proposal),后面会提到二者的区别。
我们在特征图中找一个点,就可以在原图中找到对应的一个像素点,以该像素点为中心,画出9个不同大小和长宽比的框,称为anchor 。如下图所示,这些anchor里面可能包含目标,也可能没有目标。因为我们在一张图中想找的的目标的大小和长宽比并不是固定的,所以这里用9个不同大小和长宽比的anchor来进行预测。
注意
这里要做特征图向原图的映射
如果找?
x = 原图的宽度/特征图的宽度(取整)* 3 (x = 步距 * 滑动窗口大小)
y = 原图的高度/特征图的高度(取整)* 3 (y = 步距 * 滑动窗口大小)
为什么是9个anchor呢?
论文中给出了每个anchor的面积和长宽比:
所以特征图中的每个位置在原图中都会生成 33=9 个anchor,如下图所示,蓝色的三个anchor是面积为128128的,红色是面积为256256的,绿色是512512的。
如何计算感受野?
论文细节
3.3 RPN生成proposal的过程
对于一张 1000x600x3 的图像(三通道),用3x3的卷积核进行特征提取得到60x40的特征图,则共有 60x40x9 (约2w个)个anchor。忽略超过图片边界的 anchor 后,剩下约 6000 个anchor。
对于这6000 个 anchor,通过RPN生成的边界框回归参数将每个 anchor 调整为proposal(前面提到了每个anchor经过RPN都输出2个概率和4个边界框回归参数),这里就能看到anchor和proposal的区别。这个过程就是 RPN 生成候选框的过程。
RPN 生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩下 2000 个候选框。
4.Faster RCNN框架
Faster RCNN 在Fast RCNN的基础上更进一步,将候选框生成也融入到CNN网络中,使得 候选框生成、特征提取、候选框分类、候选框边界回归这四大部分都结合在一个CNN网络中,避免了分步训练,实现了真正端到端的目标检测。
三、论文解析补充
1.fastrcnn分配两种anchor
1)与目标框相交最大的anchor 2)IOU>0.7的anchor
2.三种训练网络
1)交替训练本篇论文使用的就是交替训练
2)近似联合训练存在的问题:RPN在反向传播时,不能计算偏导数。所以求出来的值只是一个近似值。
3)非近似联合训练
3.交替训练的过程
1)单独训练RPN网络
2)单独训练RCNN网络,并且使用第1步训练的RPN网络
3)使用RCNN网络初始化RPN网络(这里固定了卷积层,仅仅微调了RPN独有的结构)
4)固定了卷积层,仅仅微调了RCNN独有的结构
4.感受野的问题
ZF感受野171
VGG感受野228
为什么能预测的比感受野更大?
根据可见部分,可以粗略预测(人们在看东西的时候,也可以根据已知推未知)
5.小知识点
1)coco数据集上小目标图像比较多
2)RPN上只跑了300个候选区域(通过实验所得)