Title: Fast R-CNN(2015)
Link: paper , code
Tips:
Summary:
R-CNN 问题:
Fast R-CNN 创新点:
相比 R-CNN 模块的改变:
Fast R-CNN 检测流程的改变:
Fast R-CNN 训练流程:
Fast R-CNN 检测流程:
这篇文章提出了一种基于快速区域的卷积用于物体检测的网络方法(Fast R-CNN)。Fast R-CNN以先前的工作为基础,使用深度卷积网络对目标提议进行有效分类。与以前的工作相比,Fast R-CNN采用了多项创新技术来提高训练和测试速度,同时还提高了检测精度。
与图像分类相比,对象检测是一项更具挑战性的任务,需要更多复杂的方法来解决。
检测的复杂性来源于精确定位,产生的挑战有:必须处理多个候选对象位置(通常称为“proposals”)。其次,这些候选对象仅提供粗略的 localization,必须对其进行细化以实现精确的localization 。这些问题的解决方案通常会损害速度,准确性或简便性。
我们提出了一种 single-stage 训练算法,该算法可共同学习以对 object proposal 进行分类并优化其空间位置。
R-CNN(Region-based Convolutional Network method) 通过使用深度卷积网络给对象 proposal 分类得到了不错的检测准确率,但是它也有 drawbacks:
SPPnets(Spatial pyramid pooling networks) 通过共享计算加速 RNN,但是它也有 drawbacks:
这篇文章提出了一个新算法—— Fast R-CNN,修正了 R-CNN 和 SPPnet 的缺点,还提高了速度和准确性。
Advantages:
RoI池化层使用 max pooling 把 feature map 变成具有固定空间范围 H×W 的小特征图。
在本文中,RoI是进入转换特征图的矩形窗口。每个RoI由一个四元组(r,c,h,w)定义,该四元组指定其左上角(r,c)以及其高度和宽度(h,w)。
RoI 层只是 SPPnet 中使用的空间金字塔池化层的特殊情况,其中仅一个金字塔层。
使用三个经过预训练的ImageNet 网络进行实验,每个网络具有五个最大池化层以及五个到十三个卷积层。
当预训练的网络初始化Fast R-CNN网络时,它将经历三个转换:
在Fast R- CNN训练中,对随机梯度下降(SGD)小批次进行分层采样。
除分层采样外,Fast R-CNN使用简化的训练过程和一个微调阶段,可共同优化 softmax分类器和 bounding-box 回归器,而不是分三个阶段训练 softmax 分类器,SVM和回归器。
具体细节如下:
Multi-task loss
Fast R-CNN网络具有两个同级输出层。一个判断类别 ,一个输出位置(四元组)。
每个 RoI 都有 ground-truth 标签(class u 和 bounding-box regression target v), multi-task loss L 把分类和 bounding-box 的回归任务结合起来(参数 λ 设为 1,当 RoI 为背景时参数μ为0):
Mini-batch sampling
图片采取 N=2 的随机采样。训练时图片以0.5的概率水平翻转,除此之外,没有用到数据增强策略。
RoI 采取 R = 128 的采样,每张图片选择 64个 RoI:
25% 的 RoI 从与边界框的 ground-truth 至少有 0.5 Iou 的 object proposals 选取(因为重叠部分多,所以包含前景,即 μ ≥ 1),其余的 RoI 从那些和 GT 重叠少(Iou<0.5)的 object proposals 选取(这些就是背景,μ = 0)
Back-propagation through RoI pooling layers
反向传播通过RoI池层传递导数。
我们探索了两种实现尺度不变物体检测的方法:
(1)通过“蛮力”学习和(2)通过使用图像金字塔。
在蛮力方法中,在训练和测试期间,每个图像均以预定义的像素大小进行处理。网络必须直接从训练数据中学习尺度不变对象检测。
相比之下,多尺度方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,图像金字塔用于近似缩放每个 object proposal 的尺寸。
一旦把 R-CNN 调好,检测就相当于“拿到通行证”。
检测过程:
对于全图像分类,与卷积层相比,计算完全连接的层所花费的时间少。
相反,用于检测的RoI数量很大,并且前向通过时间的近一半花费在计算全连接的层上。
通过使用截断的SVD压缩,可以轻松地加速大型全连接层。
因式分解:使用SVD将由u×v权重矩阵W参数化的图层近似分解
当RoI数量很大时,这种简单的压缩方法可以提供良好的加速效果。
三个主要结果支持了文章的贡献:
- State-of-the-art mAP on VOC07, 2010, and 2012
- Fast training and testing compared to R-CNN, SPPnet
- Fine-tuning conv layers in VGG16 improves mAP
使用了网上的三个预训练的 ImageNet 模型 (Link),根据网络规模分别命名为S,M,L。
实验结果如下,Fast R-CNN 简称为 FRCN。
Fast R-CNN 以 65.7% 的 mAP 在 VOC12 上取胜。
VOC10 上,与Fast R-CNN相比,SegDeepM实现了更高的mAP(67.2%对66.1%),SegDeepM接受了VOC12训练和分段注释的训练。
当使用扩大的07 ++ 12训练集时,Fast R-CNN的 mAP 增加到 68.8%,超过SegDeepM。
在VOC07上,我们将Fast R-CNN与R-CNN和SPPnet进行了比较。
与SPPnet相比,Fast R-CNN的改进表明,即使Fast R-CNN使用单尺寸的训练和测试,对conv层进行微调也可以在mAP方面实现较大的改进(从63.1%到66.9%)
快速的训练和测试时间是第二个主要结果。
对于VGG16(L),快速R-CNN处理图像的速度比不带SVD截断的R-CNN快146倍,使用SVD则快213倍。
截断的SVD可以将检测时间减少30%以上,而且mAP的下降很少(0.3个百分点),并且在模型压缩后无需执行其他微调。
通过实验验证 RoI 池化层的训练对于 very deep 网络非常重要,而不是 SPPnet 论文中说的 “微调全连接层就足够了”。
但不是每个卷积层都需要fine-tune。对于小网络 S 和 L,conv1 的学习对 mAP 影响不大,对于大型网络 VGG16,只需要更新第三层以上的卷积层(13层中的9层)。
对于三个规模的网络,第一列只有 classification loss,第二列是在第一列的基础上加 multi-task loss。
比较第一二列可得,在所有三个网络中,多任务与仅针对分类的训练相比,可提高准确性。
比较第三四列可得,多任务训练比分段训练的 mAP 高。
我们比较了实现尺度不变的物体检测的两种策略:蛮力学习(单尺度)和图像金字塔(多尺度)。无论哪种情况,我们都将图像的比例尺s定义为其最短边的长度。
从图中可以看出,单尺度处理提供了速度和精度之间的最佳折衷,特别是对于非常深的模型。
为了验证训练数据是否有必要增加,我们用VOC12训练集来扩充VOC07训练集,从表1可以看出,扩大训练范围可使VOC07测试的mAP从66.9%提高到70.0%。
同理,在VOC10和VOC12上也做了类似的实验(表2 3),都发现 mAP 提高。
说明训练数据的增强是有必要的。
Fast R-CNN 使用 softmax classifier,R-CNN 和 SPPnet 使用 one-vs-rest linear SVMs。
为比较哪个分类器表现更好,做了如下实验:
表8显示了所有三个网络的softmax略胜于SVM,当然影响不大。
有两种类型的对象检测器:使用稀疏 object proposal set(例如选择性搜索)和使用密集object proposal set(例如DPM)。
我们发现,随着 proposal 数量的增加,mAP上升,然后略有下降(图3,蓝色实线)。该实验表明,添加更多的 proposal 对深度分类器的准确性无济于事,甚至有一点损害。
这篇文章提出了Fast R-CNN,它是一种 R-CNN 的快速版本。
除了报告最新的检测结果外,文章还提供了详细的实验,希望能提供新的见解。