神经网络的认识(九)Fast R-CNN

框架如此
在这里插入图片描述
与 R-CNN 框架图对比, 可以发现主要有两处不同: 一是最后一个卷积层后加了一个 ROI pooling layer, 二是损失函数使用了多任务损失函数(multi-task loss), 将边框回归直接加入到 CNN 网络中训练。

  1. ROI pooling layer 实际上是 SPP-NET 的一个精简版, SPP-NET 对每个 proposal 使用了不同大小的金字塔映射, 而 ROI pooling layer 只需要下采样到一个 7x7 的特征图。对于 VGG16 网络 conv5_3 有 512 个特征图,这样所有 region proposal 对应了一个 77512维度的特征向量作为全连接层的输入。
  2. R-CNN 训练过程分为了三个阶段, 而 Fast R-CNN 直接使用 softmax 替代 SVM 分类, 同时利用多任务损失函数边框回归也加入到了网络中, 这样整个的训练过程是端到端的(除去region proposal 提取阶段)。
  3. Fast R-CNN 在网络微调的过程中,将部分卷积层也进行了微调,取得了更好的检测效果。

Fast-RCNN 主要贡献在于对 RCNN 进行加速,快是我们一直追求的目标,问题在以下方面得到改进:

  • 卖点 1 - 借鉴 SPP 思路,提出简化版的 ROI 池化层(注意,没用金字塔),同时加
    入了候选框映射功能,使得网络能够反向传播,解决了 SPP 的整体网络训练问题;
  • 卖点 2 - 多任务 Loss 层
    1. SoftmaxLoss 代替了 SVM, 证明了 softmax 比 SVM 更好的效果;
    2. SmoothL1Loss 取代 Bouding box 回归。将分类和边框回归进行合并(又一个开创性的思路),通过多任务 Loss 层进一步整合深度网络,统一了训练过程,从而提高了算法准确度。
    3. 全连接层通过 SVD 加速,这个大家可以自己看,有一定的提升但不是革命性的。
    4. 结合上面的改进, 模型训练时可对所有层进行更新, 除了速度提升外(训练速度是SPP 的 3 倍, 测试速度 10 倍), 得到了更好的检测效果(VOC07 数据集 mAP 为 70,注:mAP, mean Average Precision)。

接下来分别展开这里面的两大卖点:
前面已经了解过可伸缩的池化层,那么在训练中参数如何通过 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):
在这里插入图片描述
性能对比数据:
在这里插入图片描述
在这里插入图片描述

  • Fast R-CNN 优点:
    Fast R-CNN 融合了 R-CNN 和 SPP-NET 的精髓, 并且引入多任务损失函数, 使整个网络的训练和测试变得十分方便。在 Pascal VOC2007 训练集上训练,在VOC2007 测试的结果为66.9%(mAP),如果使用 VOC2007+2012 训练集训练,在 VOC2007 上测试结果为 70%(数据集的扩充能大幅提高目标检测性能)。使用 VGG16 每张图像总共需要 3s 左右。
  • Fast R-CNN 缺点:
    SPP 的第三个问题还没有解决,依然是耗时的候选框提取过程:Region Proposal 的提取使用 selective search, 目标检测时间大多消耗在这上面(提Region Proposal2~3s, 而提特征分类只需 0.32s), 无法满足实时应用, 而且并没有实现
    真正意义上的端到端训练测试(region proposal 使用 selective search 先提取处来) 。那么有没有可能直接使用 CNN 直接产生 Region Proposal 并对其分类? Faster R-CNN 框架就是符合这样需要的目标检测框架。

步骤图
**在这里插入图片描述**

  1. 与R-CNN相⽐, Fast R-CNN⽤来提取特征的卷积神经⽹络的输⼊是整个图像,而不是各个提议区域。而且,这个⽹络通常会参与训练,即更新模型参数。设输⼊为⼀张图像,将卷积神经⽹络的输出的形状记为1 × c × h1 × w1。
  2. 假设选择性搜索⽣成n个提议区域。这些形状各异的提议区域在卷积神经⽹络的输出上分别标出形状各异的兴趣区域。这些兴趣区域需要抽取出形状相同的特征(假设⾼和宽均分别指定为h2和w2)以便于连结后输出。 Fast R-CNN引⼊兴趣区域池化(region of interestpooling, RoI池化)层,将卷积神经⽹络的输出和提议区域作为输⼊,输出连结后的各个提议区域抽取的特征,形状为n × c × h2 × w2。
  3. 通过全连接层将输出形状变换为n × d,其中超参数d取决于模型设计。
  4. 预测类别时,将全连接层的输出的形状再变换为n × q并使⽤sofmax回归(q为类别个数)。预测边界框时,将全连接层的输出的形状变换为n × 4。也就是说,我们为每个提议区域预测类别和边界框。
发布了163 篇原创文章 · 获赞 117 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/u010095372/article/details/91318498