论文笔记:Fast R-CNN

一、基本信息

标题:Fast R-CNN
时间:2015
论文领域:物体检测
引用格式:Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE international conference on computer vision. 2015.

二、研究背景

R-CNN是多阶段模型,需要使用Selective Search选择proposals,然后对每个proposals进行resize,卷积,全连接。可以发现缺点就是每个proposal都需卷积,而且尺寸固定。Fast R-CNN了借鉴SPPnet的空间金字塔池化层思想,但是解决了SPPNet对卷积层进行后向传播效率太低的缺点

SPPNet原理就是利用ROI池化层将CNN的输入从固定尺寸改为任意尺寸,通过最大池化层,可以将任意宽度的、高度的卷积特征转换成固定长度的向量,原始图像中的候选框,实际也可以对应到卷积特征中相同位置的框。利用SPP层可以将不同形状的特征对应到相同长度的向量特征。与R-CNN相比比,SPPNet具有更快的速度。但是SPPNet难以(效率低)对SPP层下面所有的卷积层进行后向传播:
在这里插入图片描述

严格说,SPP-Net也可以反向传播,但是会复杂很多,所以用connot update the convolutional layers其实是不算太准确的说法。Ross大神在Fast R-CNN中给出的解释是:SPP训练样本来自不同图像导致反向传播效率低下。我的理解是:SPP-Net中fine-tuning的样本是来自所有图像的所有RoI打散后均匀采样的,即RoI-centric sampling,这就导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的Feature Map,过程变得expensive. Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再采样出R个RoI,具体到实际中,N=2,R=128,同一图像的RoI共享计算和内存,也就是只用计算和存储2张图像,消耗就大大减少了。
作者:知乎用户
链接:https://www.zhihu.com/question/66283535/answer/275678219
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

三、创新点

主要是2点 ROI Pooling layer 和 Multi-task loss


ROI池化层

在这里插入图片描述
可以看到先对原图进行卷积,得到卷积层,在将Selective Search选择的proposals对应到卷积层。由于proposal尺寸不一样,需要进行RoI pooling,比如下面是卷积层:
在这里插入图片描述
有一个proposals:
在这里插入图片描述
划分网格,paper里设置的是7 * 7,下图是2 * 2:
在这里插入图片描述
每个网格选最大值(max pooling一个意思):
在这里插入图片描述
动画:

和SPP对比,就是只有一层(尺度)的SPP
在这里插入图片描述

Multi-task loss

proposals给出bbox是粗糙的,还需要细化,R-CNN是直接再训练一个模型专门用于检测bbox,而Fast R-CNN是把这个任务加入到类别检测里了,组成了Multi-task loss:
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L\left(p, u, t^{u}, v\right)=L_{\mathrm{cls}}(p, u)+\lambda[u \geq 1] L_{\mathrm{loc}}\left(t^{u}, v\right) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)
其中,
真实类标为 u u u
类标为 u u u的bbox区域: v = ( v x , v y , v w , v h ) v = \left(v_{\mathrm{x}}, v_{\mathrm{y}}, v_{\mathrm{w}}, v_{\mathrm{h}}\right) v=(vx,vy,vw,vh)
预测的结果为: p = ( p 0 , … , p K ) p=\left(p_{0}, \ldots, p_{K}\right) p=(p0,,pK),包括背景有K+1类
预测的bbox位置: t u = ( t x u , t y u , t w u , t h u ) t^{u}=\left(t_{\mathrm{x}}^{u}, t_{\mathrm{y}}^{u}, t_{\mathrm{w}}^{u}, t_{\mathrm{h}}^{u}\right) tu=(txu,tyu,twu,thu)

分类损失

L c l s ( p , u ) = − log ⁡ p u L_{\mathrm{cls}}(p, u)=-\log p_{u} Lcls(p,u)=logpu是个log形式的损失函数,即对真实分类的概率取负log

理解log损失(交叉熵损失)
在这里插入图片描述
就是og(真实类对应输出的概率乘)再取负号

bbox预测损失

[ u ≥ 1 ] [u\ge1] [u1]为1,反之为0。文中实验时 λ = 1 \lambda=1 λ=1
L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } smooth ⁡ L 1 ( t i u − v i ) L_{\mathrm{loc}}\left(t^{u}, v\right)=\sum_{i \in\{\mathrm{x}, \mathrm{y}, \mathrm{w}, \mathrm{h}\}} \operatorname{smooth}_{L_{1}}\left(t_{i}^{u}-v_{i}\right) Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)
其中
smooth ⁡ L 1 ( x ) = { 0.5 x 2  if  ∣ x ∣ < 1 ∣ x ∣ − 0.5  otherwise  \operatorname{smooth}_{L_{1}}(x)=\left\{\begin{array}{ll} 0.5 x^{2} & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise } \end{array}\right. smoothL1(x)={0.5x2x0.5 if x<1 otherwise 

文中认为 L 1 L_{1} L1对于噪点相比于 L 2 L_{2} L2更不敏感,所以使用 L 1 L_{1} L1正则的模型更为鲁棒。就是一个类似reverse Huber (berHu)的损失,在笔记有介绍
在这里插入图片描述


Fast R-CNN核心就上面2个内容,下面补充些paper东西

Fast R-CNN算法步骤:

feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
    patch = roi_pooling(feature_maps, ROI)
    class_scores, box = detector(patch)
    class_probabilities = softmax(class_scores)

来源:这里

Mini-batch sampling

Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再采样出R个RoI,具体到实际中,N=2,R=128,同一图像的RoI共享计算和内存,也就是只用计算和存储2张图像,消耗就大大减少了。解决的就是SPPNet中RoI-centric sampling导致反向传播卷积层效率低下问题。
在这里插入图片描述

我的理解是Fast R-CNN的sampling方式改了下,那SPPNet也改成这种sampling是不是也能方向传播到卷积层呢?

Back-propagation through RoI pooling layers

在这里插入图片描述
反向传播关键在ROI层,对每个proposals的网格做如下判断, x i x_i xi中的i是否对应当前,换句话说就是 [ i = i ∗ ( r , j ) ] [i=i^{*}(r,j)] [i=i(r,j)]表示i节点是否被候选区域r的第j个节点选为最大值输出。如果是就累加下一个proposals,这样就求出 ∂ L ∂ x i \frac{\partial L}{\partial x_{i}} xiL


剩余内容还有尺度不变性、SVD全连接层加速、、、没时间补了

四、实验结果

提升很多,,
Fast R-CNN在VOC12上获得最高结果,mAP为65.7%(加上额外数据为68.4%)

五、结论与思考

作者结论

微调哪些层?

对于在SPPnet论文中考虑的不太深的网络,仅微调全连接层似乎足以获得良好的精度。我们假设这个结果不适用于非常深的网络。为了验证微调卷积层对于VGG16的重要性,我们使用Fast R-CNN微调,但冻结十三个卷积层,以便只有全连接层学习。这种方式模拟单尺度SPPnet训练,将mAP从66.9%降低到61.4%(表5)。这个实验验证了我们的假设:通过RoI池化层的训练对于非常深的网是重要的。


这是否意味着所有卷积层应该微调?没有。在较小的网络(S和M)中,我们发现conv1(第一个卷积层)是通用的和任务独立的(一个众所周知的事实1)。允许conv1学习或不学习,对mAP没有很有意义的影响。对于VGG16,我们发现只需要更新conv3_1及以上(13个卷积层中的9个)的层。这种观察是实用的:(1)从conv2_1更新使训练变慢1.3倍(12.5小时对比9.5小时)和(2)从conv1_1更新GPU内存不够用。当从conv2_1学习时mAP仅为增加0.3个点(表5,最后一列)。 所有Fast R-CNN在本文中结果都使用VGG16微调层conv3_1及以上的层,所有实验用模型S和M微调层conv2及以上的层。在这里插入图片描述

SVM分类是否优于Softmax?

一句话:Softmax略优于SVM,mAP分别提高了0.1和0.8个点

更多的候选区域更好吗?

我们发现mAP上升,然后随着候选区域计数增加而略微下降(图3,实线蓝线)。这个实验表明,用更多的候选区域没有帮助,甚至稍微有点伤害准确性。

总结

本文提出Fast R-CNN,一个对R-CNN和SPPnet干净,快速的更新。 除了报告目前的检测结果之外,我们还提供了详细的实验,希望提供新的见解。 特别值得注意的是,稀疏目标候选区域似乎提高了检测器的质量。 过去探索这个问题过于昂贵(在时间上),但Fast R-CNN使其变得可能。当然,可能存在允许密集盒执行以及稀疏候选框的尚未发现的技术。这样的方法如果被开发,可以帮助进一步加速目标检测。

思考

参考

【论文翻译】Fast R-CNN
Fast R-CNN文章详细解读
Understanding Region-based Fully Convolutional Networks (R-FCN) for object detection

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值