论文名称:《 Fast R-CNN 》
论文下载:https://arxiv.org/pdf/1504.08083.pdf
论文代码:https://github.com/rbgirshick/fast-rcnn
1、R-CNN:RCNN流程主要是SS提取Region proposals,然后Crop/wap到归一化尺寸,输入到CNN进行训练,提取特征向量。最后将CNN提取的特征向量输入到SVM中进行分类,得到Region Proposals的labels。由于Region Proposals的Bounding Box与Ground Truth存在偏差,可能导致最终识别不准确,因此作者加入了一个BBox Regression,它的作用主要是微调Bounding Box的框,使得其尽可能与Ground Truth吻合。
2、SPP-Net:SPP-Net流程与RCNN最大的区别是用整图训练CNN,这样就避免了RCNN存在的重复训练问题。首先对原始图片同时进行两个操作,一个是将整图输入到CNN进行训练,一个是利用SS提取若干Region Proposals,Region Proposals的信息在CNN上不使用,就只是保存着。在整图CNN训练结束以后,Conv5可以获得一个全图的特征图。这时候利用原图与特征图的映射(主要通过感受野实现),获取每个Region Proposals的特征图。后面就和RCNN类似,SVM对fc输出的特征向量进行分类,然后用BBox回归。由于fc的输入需要是一个固定的尺寸,而Region Proposals的特征图的尺寸与Region Proposals的本身大小有关,所以不可能一致,对特征图也不存在Crop/Wrap方式来归一化,那么该怎么办呢?SPP-Net利用了图像金字塔原理,利用几种核将特征图归一化为固定尺寸。
3、上述二者的改进空间:
(1)RCNN和SPP-Net训练的时候,pipeline是隔离的,他要首先提取Region Proposals,然后输入CNN训练,训练完成以后再输入SVM训练,最后还要再做一个BBox Regression。一个网络模型分了好几个单独的步骤。而FRCN将SVM和BBox Regression都做进了CNN,实现了end-to-end的joint training。
(2)RCNN和SPP-Net的训练的时间和空间开销比较大,RCNN由于是CNN与SVM分开的,因此在CNN训练结束之后,需要大量的磁盘空间来存储训练得到的Region Proposals的特征,时间方面,RCNN需要对每一个Region Proposals做CNN,时间开销大。在FRCN中,利用image-centric的训练方式通过卷积的share特性来降低运算开销,同时,由于它是一个end to end的训练方式,去掉了SVM这一步,所以所有的特征都暂存在显存中,不需要额外的磁盘开销。
(3)RCNN测试的时间开销大,RCNN测试时,需要先对原图做SS提取~2k张Region Proposals 。然后针对每个Region Proposals还要训练,开销很大。SPP-Net对此已有改进,FRCN中进一步通过single scale testing和SVD分解全连接来提速。其中single scale testing指的是在ROI中不再利用多尺度的图像金字塔,而是一个固定的模板,不存在尺度的缩放。
一、 网络结构:
将整幅图像作为卷积网络的输入,经过一些列卷积和最大池化层后,得到整幅图的conv feature map.同时用Selective Search 方法提取2k个object proposals,找出整幅图的卷积特征映射中每个object proposals所对应的feature map, 它们经过一个ROI pooling layer 形成一个固定长度的feature map(全连接层要求输入大小相同),再经过两个全连接层,生成固定长度的feature vector。使用softmax网络进行分类,最后再进行边界框的回归。
ROI pooling层能实现training和testing的显著加速,并提高检测accuracy。该层有两个输入:
ROI pooling具体操作如下:
(1)根据输入image,将ROI映射到feature map对应位置;
(2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
(3)对每个sections进行max pooling操作;
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。
1、Fast R-CNN和SPP-Net一样,对原图主要有两个操作,一个是对原图使用SS提取~2k个Region Proposals,另一个是将原图输入到CNN网络中,进行训练,在Conv5得到原图的特征图后,利用Region Proposals和特征图的对应关系,获得Region Proposals的特征图,然后利用ROI对将特征图归一化,这边ROI是SPP-Net中的SPP层的特殊化。然后在FC层就可以得到归一化的特征向量。然后将其分别输入到BBox回归和Softmax分类中。
2、Fast-RCNN 主要贡献在于对 RCNN 进行加速。
1)亮点 1 :提出简化版的 ROI 池化层(注意,没用金字塔),同时加入了候选框映射功能,使得网络能够反向传播,解决了 SPP 的整体网络训练问题;
2)亮点 2 :多任务 Loss 层
A)SoftmaxLoss 代替了 SVM,证明了 softmax 比 SVM 更好的效果;
B)SmoothL1Loss 取代 Bouding box 回归。
将分类和边框回归进行合并(又一个开创性的思路),通过多任务 Loss 层进一步整合深度网络,统一了训练过程,从而提高了算法准确度。
3)全连接层通过 SVD 加速
这个大家可以自己看,有一定的提升但不是革命性的。
4)结合上面的改进,模型训练时可对所有层进行更新,除了速度提升外(训练速度是 SPP 的 3 倍,测试速度 10 倍),得到了更好的检测效果(VOC07 数据集 mAP 为 70,注:mAP,mean Average Precision)。
3、接下来分别展开描述:
前面已经了解过可伸缩的池化层,那么在训练中参数如何通过 ROI Pooling 层传导的?根据链式求导法则,对于 yj = max(xi) 传统的 max pooling 的映射公式:
其中 为判别函数,为 1 时表示选中为最大值,0 表示被丢弃,误差不需要回传,即对应 权值不需要更新。如下图所示,对于输入 xi 的扩展公式表示为:
(i,r,j) 表示 xi 在第 r 个框的第 j 个节点是否被选中为最大值(对应上图 y0,8 和 y1,0),xi 参数在前向传导时受后面梯度误差之和的影响。
多任务 Loss 层(全连接层)是第二个核心思路,如上图所示,其中 cls_score 用于判断分类,bbox_reg 计算边框回归,label 为训练样本标记。
其中 Lcls 为分类误差:
px 为对应 Softmax 分类概率,pl 即为 label 所对应概率(正确分类的概率),pl = 1 时,计算结果 Loss 为 0, 越小,Loss 值越大(0.01 对应 Loss 为 2)。
Lreg 为边框回归误差:
即在正确分类的情况下,回归框与 Label 框之间的误差(Smooth L1), 对应描述边框的 4 个参数(上下左右 or 平移缩放),g 对应单个参数的差异,|x|>1 时,变换为线性以降低离群噪声:
Ltotal 为加权目标函数(背景不考虑回归 Loss):
(1)任意size图片输入CNN网络,经过若干卷积层与池化层,得到特征图;
(2)在任意size图片上采用selective search算法提取约2k个建议框;
(3)根据原图中建议框到特征图映射关系,在特征图中找到每个建议框对应的特征,并在RoI池化层中将每个特征框池化到H×W的size;
(4)固定H×W大小的特征框经过全连接层得到固定大小的特征向量;
(5)第4步所得特征向量经由各自的全连接层,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归;
(6)利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口。
(1)实现大部分end-to-end训练(提proposal阶段除外): 所有的特征都暂存在显存中,就不需要额外的磁盘空间。joint training (SVM分类,bbox回归 联合起来在CNN阶段训练)把最后一层的Softmax换成两个,一个是对区域的分类Softmax(包括背景),另一个是对bounding box的微调。这个网络有两个输入,一个是整张图片,另一个是候选proposals算法产生的可能proposals的坐标。(对于SVM和Softmax,论文在SVM和Softmax的对比实验中说明,SVM的优势并不明显,故直接用Softmax将整个网络整合训练更好。对于联合训练: 同时利用了分类的监督信息和回归的监督信息,使得网络训练的更加鲁棒,效果更好。这两种信息是可以有效联合的。)
(2)提出了一个RoI层,算是SPP的变种,SPP是pooling成多个固定尺度,RoI只pooling到单个固定的尺度 (论文通过实验得到的结论是多尺度学习能提高一点点mAP,不过计算量成倍的增加,故单尺度训练的效果更好。)
(3)指出SPP-net训练时的不足之处,并提出新的训练方式,就是把同张图片的Proposals作为一批进行学习,而proposals的坐标直接映射到conv5层上,这样相当于一个batch一张图片的所以训练样本只卷积了一次。文章提出他们通过这样的训练方式或许存在不收敛的情况,不过实验发现,这种情况并没有发生。这样加快了训练速度。 (实际训练时,一个batch训练两张图片,每张图片训练64个RoIs(Region of Interest))。