R-CNN,Fast R-CNN,Faster R-CNN learning

R-CNN,Fast R-CNN,Faster R-CNN learningRCNN基础背景:
selective search
将n个预分割的区域,通过多种策略(多个判定标准),使用层次聚类的思想,将区域合并成需要的区域个数(2k~3k)

SVM
通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

hard negative mining
在正样本的数量远远小于负样本的情况下,对分类后得分较高的假阳性样本当成hard negative,扔进网络中再训练一次,加强分类器判定假阳性的能力。

Bounding-Box regression
已知proposal的(x,y,w,h)和ground truth的(x,y,w,h),通过回归方程最小二乘法求出(xˆ,yˆ,wˆ,hˆ),(x,y,w,h)具体指,(x,y)指propsal的中心点坐标,(w,h)指propsal的边框width和high

R-CNN具体过程
(1)输入测试图像;
(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
(3)将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
(4)将每个Region Proposal提取的CNN特征输入到SVM进行分类;
(5)对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标.

缺陷
(1) 训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;
(2) 训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;
(3) 速度慢:使用GPU,VGG16模型处理一张图像需要47s;
(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算;
(5) SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.

Fast RCNN背景知识:
SPP-NET
[1]传统方法:
crop:截取原图片的一个固定大小的patch
warp:将原图片的ROI缩放到一个固定大小的patch

R-CNN,Fast R-CNN,Faster R-CNN learning
[2]SPP-NET
由于每个Region Proposal的尺度不一样,所以每个卷积层特征输入到全连接层的尺度不一样,而全连接必须是固定的长度。SPP-NET通过对每个proposal使用了不同大小的金字塔映射(将图片划分成4*4,2*2,1*1个子图再分别对每个子图用pooling),解决了这个问题(输入的尺度不一样而输出的全连接的尺度却是相同的)

[2]ROI Pooling(SPP-NET简化版)
SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样7*7的特征图,对于VGG16网络con5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。实现了从原图区域映射到conv5区域最后pooling到固定大小的功能。

[3]softmax : pj=ejkek
[4]softmax-loss: L=jyjlogpj

[5]smooth L1 Loss
为了处理不可导的惩罚,Faster RCNN提出来的计算距离loss的smooth L1 Loss

FAST-RCNN具体实现
(1)输入测试图像;
(2)利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
(3)将整张图片输入CNN,进行特征提取;
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

相比R-CNN,主要两处不同:
(1)最后一层卷积层后加了一个ROI pooling layer;
(2)损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练

改进:
(1) 测试时速度慢:R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.
FAST-RCNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.
(2)训练时速度慢:R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.
FAST-RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.
(3) 训练所需空间大:R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.FAST-RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.

Faster RCNN背景知识:
RPN(Region Proposal Network)
RPN简易思路:
R-CNN,Fast R-CNN,Faster R-CNN learning
[1]feature map为51*39的256维的特征。
[2]考虑两个判断准则
【a】第一个通过预测rpn_cls_score来判断该anchor属于前景还是背景,一共有513992,(其中9表示每个特征图中每个像素的anchors的数量,2表示前景和背景两种可能,前景背景的真值给定是根据当前像素(anchor-box中心)是否在ground-truth-box内)。
【b】第二个针对feature map(上图conv-5-3共有256个feature-map)的每一个位置预测共(9*4=36)个参数,其中9代表的是每一个位置预设的9种形状的anchor-box,4对应的是每一个anchor-box的预测值(该预测值表示的是预设anchor-box到ground-truth-box之间的变换参数),上图中指向rpn-bbox-pred层的箭头上面的数字36即是代表了上述的36个参数,所以rpn-bbox-pred层的feature-map数量是36,而每一张feature-map的形状(大小)实际上跟conv5-3一模一样的.
loss function:【a】Lcls(pi,pi) 【b】Lreg(ti,ti)
L(pi,ti)=1NclsiLcls(pi,pi)+λ1NregipiLreg(ti,ti)
其中pi的取值为{0,1},将背景设为0,可以极大的减少计算量,且不影响结果。
注意:虽然是针对feature map取像素点,但anchors-box确实在原始图片中做的裁剪。可知feature map的像素点的位置信息可以在原始图片中获得,在做卷积过程中保留了点的位置信息

FASTER-RCNN具体实现
(1)输入测试图像;
(2)将整张图片输入CNN,进行特征提取;
(3)用RPN生成建议窗口(proposals),每张图片生成300个建议窗口;
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

参考目录:

目标检测方法系列——R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD

基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
Faster RCNN算法详解