Fast R-CNN

论文信息

原文地址:Fast R-CNN

系列论文:地址

代码实现:地址

作者:Ross Girshick

成就:同样使用最大规模的网络,Fast R-CNN 和 R-CNN相比,训练时间从 84 小时减少为 9.5 小时,测试时间从 47 秒减少为 0.32 秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间。

R-CNN 的缺点

  • R-CNN网络训练、测试速度都很慢:

    R-CNN网络中,一张图经由selective search算法提取约 2k 个候选框,这 2k 个候选框大量重叠,而所有建议框变形后都要输入 AlexNet 网络提取特征,即约 2k 次特征提取,会出现上述重叠区域多次重复提取特征,提取特征操作冗余。

  • R-CNN网络训练、测试繁琐:

    R-CNN 网络训练过程分为 ILSVRC 2012 样本下有监督预训练、PASCAL VOC 2007 该特定样本下的微调、20 类即 20 个 SVM 分类器训练、20 类即 20 个 Bounding-box 回归器训练,该训练流程繁琐复杂。

    同理测试过程也包括提取建议框、提取 CNN 特征、SVM 分类和Bounding-box 回归等步骤,过于繁琐。

  • R-CNN 网络训练需要大量存储空间:

    R-CNN 网络中,20 类即 20 个 SVM 分类器和 20 类即 20 个Bounding-box 回归器在训练过程中需要大量特征作为训练样本,这些从 CNN 提取的特征数据会占用大量存储空间。

  • R-CNN 网络需要对候选框变形:

    R-CNN 网络需要对候选框形变为 227 × 227 227×227 227×227 的大小,再输入 AlexNet 提取特征,其实 AlexNet 等网络在提取特征过程中对图像的大小并无要求,只是在提取完特征进行全连接操作的时候才需要固定特征尺寸。

Fast R-CNN 算法改进

  • 规避 R-CNN 中冗余的特征提取操作,只对整张图像全区域进行一次特征提取。

  • 用 RoI pooling 层取代最后一层 max pooling 层,同时引入候选框信息,提取相应候选框特征。

  • Fast R-CNN 网络末尾采用并行的不同的全连接层,可同时输出分类结果和窗口回归结果,实现了end-to-end的多任务训练(候选框提取除外),也不需要额外的特征存储空间。

  • 采用 SVD 对 Fast R-CNN 网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度。

Fast R-CNN 网络结构

  1. 使用尺寸任意的图片输入 CNN 网络,经过若干卷积层与池化层,得到特征图。

  2. 在尺寸任意的图片上采用 selective search 算法提取约 2k 个建议框。

  3. 根据原图中建议框到特征图映射关系,在特征图中找到每个建议框对应的特征框(深度和特征图一致),并在 RoI Pooling 中将每个特征框池化到 H × W H×W H×W (VGG-16网络是7×7)的大小。

  4. 固定 H × W H×W H×W 大小的特征框经过全连接层得到固定大小的特征向量。

  5. 在第4步所得特征向量,经由各自的全连接层(由 SVD 分解实现),分别得到两个输出向量:一个是 softmax 的分类得分,一个是 Bounding-box 窗口回归。

  6. 利用窗口得分,分别对每一类物体进行非极大值抑制剔除重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口。

分类器的选择

  • 作者对比了采用 SVM分类和采用softmax 分类的mAP结果,发现不管AlexNet(S for small)、VGG_CNN_M_1024(M for medium)、VGG-16(L for large)中任意网络,采用 softmax 的 mAP 都比采用 SVM 的 mAP 高 0.1%~0.8%

  • 作者认为这是由于softmax在分类过程中引入了类间竞争,分类效果更好。

  • 于此同时,Fast R-CNN 去掉了 SVM 这一步,所有的特征都暂存在显存中,就不需要额外的磁盘空间。

RoI Pooling

  • RoI 池化层使用最大池化将任何有效的 RoI 内的特征转换成具有 H × W H×W H×W(例如,7×7)的固定空间范围的小特征图

  • 其中 H H H W W W 是层的超参数,独立于任何特定的 RoI。

  • RoI 是卷积特征图中的一个矩形窗口。 每个 RoI 由指定其左上角 ( r , c ) (r,c) (r,c) 及其高度和宽度 ( h , w ) (h,w) (h,w) 的四元组 ( r , c , h , w ) (r,c,h,w) (r,c,h,w) 定义。

  • RoI 最大池化通过将大小为 h × w h×w h×w 的 RoI 窗口分割成 H × W H×W H×W 个网格,子窗口大小约为 h / H × w / W h/H × w/W h/H×w/W,然后对每个子窗口执行最大池化,并将输出合并到相应的输出网格单元中。

  • 同标准的最大池化一样,池化操作独立应用于每个特征图通道。

尺度不变性

对于处理尺度不变性问题,作者使用两种方式处理:

  • brute-force(单一尺度):直接在训练和测试阶段将图像归一化为某种scale,直接输入网络训练,期望网络自己能够学习到 scale-invariance 的表达。

  • image pyramids(多尺度):在训练阶段随机从图像金字塔(缩放图片的scale得到,相当于扩充数据集)中采样训练,测试阶段将图像缩放为金字塔中最为相似的尺寸进行测试。

最令人惊讶的结果是,单尺度检测几乎与多尺度检测一样好。作者发现:深度卷积网络擅长直接学习尺度不变性。多尺度方法消耗大量的计算时间仅带来了很小的 mAP 增加。

损失函数

  • Fast R-CNN 网络之所以能够单阶段训练,就是因为巧妙地构造了损失函数。

  • Fast R-CNN网络具有两个同级输出层:

    第一个输出 K + 1 K+1 K+1 个类别上的概率 p = ( p 0 , ⋯ , p k ) p=(p_{0},\cdots,p_{k}) p=(p0pk)

    第二个输出检测框回归偏移, t k = ( t x k , t y k , t w k , t w k ) , k ∈ [ 0 , ⋯   , k ] t^{k}=(t^{k}_{x},t^{k}_{y},t^{k}_{w},t^{k}_{w}) ,k \in[0,\cdots,k] tk=(txk,tyk,twk,twk)k[0,,k]

  • 每个训练的 RoI 用类真值 u u u 和检测框回归目标 v v v 标记。

  • 多任务损失函数为:

    L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p, u, t^u, v) = L_{cls}(p, u) + \lambda \lbrack u \ge 1 \rbrack L_{loc}(t^u, v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)

  • 其中,分类损失为:

L c l s = − log ⁡ p u L_{cls}=-\log p_u Lcls=logpu

  • 检测框回归的真值元组 v = ( v x , v y , v w , v h ) v=(v_{x},v_{y},v_{w},v_{h}) v=(vx,vy,vw,vh),预测元组 t u = ( t x u , t y u , t w u , t h u ) t^{u}=(t^{u}_{x},t^{u}_{y},t^{u}_{w},t^{u}_{h}) tu=(txu,tyu,twu,thu) , 检测框定位损失如下:

    L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } s m o o t h L 1 ( t i u − v i ) L_{loc}(t^u, v) = \sum_{i \in \lbrace x, y, w, h \rbrace}smooth_{L_1}(t^u_i - v_i) Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)

    u ≥ 1 u≥1 u1 时,函数值为1,否则为0,这是因为背景类标记为 u = 0 u=0 u=0,背景 RoI 没有检测框真值的概念,因此 L l o c L_{loc} Lloc 被忽略。

    其中:

    s m o o t h L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ &lt; 1 ∣ x ∣ − 0.5 o t h e r w i s e smooth_{L_1}(x) = \begin{cases}0.5x^2 &amp; if \vert x \vert \lt 1 \\ \vert x \vert - 0.5 &amp; otherwise \end{cases} smoothL1(x)={0.5x2x0.5ifx<1otherwise

    是鲁棒的 L1 损失,对于异常值比 L2 更加不敏感。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值