Title: Fast R-CNN(2015)
Link: paper , code
Tips:
- R-CNN and SPPnet 的缺点以及 Fast R-CNN 的优点(1.1)
- Fast R-CNN 的框架及检测流程(2,3)
- RoI 的含义(2.1)
- 使用预训练网络初始化的思想,如何把已有网络改成需要的网络(2.2)
- 尺度不变的检测(2.4)
- 如何分析实验结果(4)
- 如何设计对比实验(5)
Summary:
R-CNN 问题:
- R-CNN 的训练是多阶段的(multi-stage):预训练 CNN→针对检测微调→训练分类器→训练边界框回归器
- 时间空间消耗大:为了训练 SVM 分类器和边界框回归器,每个区域的特征都要提取出来,并且存到磁盘上
- 检测慢:检测时需要提取每个区域的特征,但生成的区域有重叠,所以计算也有重叠。
Fast R-CNN 创新点:
- 与 R-CNN、SPPnet 相比有更高的检测精度(mAP)
- 训练是单阶段的(single-stage),损失是多任务的(multi-task),指把预训练的 CNN 针对检测任务微调后,分类和回归任务能一起完成
- 训练可以更新所有网络层
- 特征缓存不需要磁盘存储
相比 R-CNN 模块的改变:
- 网络输入:图片组以及每幅图片的一组 RoI
- CNN 模块:最后一个最大池化层由 RoI 池化层代替
- 分类模块:Fast R-CNN 使用 softmax classifier,R-CNN 和 SPPnet 使用 one-vs-rest linear SVMs。
- 分类和定位:CNN 网络的最后一个全连接层和 softmax 替换为两个同级层,R-CNN 是独立的两个模块,需要单独训练
Fast R-CNN 检测流程的改变:
- R-CNN 先用 SS 从图片生成 proposal(然后图片就不用了),把 proposal 输入CNN 提取特征,因为生成的区域有重叠,所以计算重复;Fast R-CNN 先用 SS 从图片生成 proposal,兵分两路,先把整幅图输入 CNN 一次性提取特征生成 feature map,对于每个 object proposal,用一个 RoI 池化层从上一层的 feature map 中提取定长的特征向量。
- R-CNN 对分类和回归模块分别训练,Fast R-CNN 网络末尾采用并行的两个全连接层,可同时输出分类结果和窗口回归结果,实现了 end-to-end 的多任务训练
Fast R-CNN 训练流程:
- 有监督的预训练,得到 CNN
- 特定领域的微调:首先改变模型,就是上面提到的输入改变,CNN 的 ROI 池化引入,还有分类回归模块的改变;
- 接着,输入图片和区域后,就能实现端到端的多任务训练,不需要单独训练分类和回归模块。
Fast R-CNN 检测流程:
- 输入一张多目标图像
- 采用 selective search 得到的预选区域
- 用卷积层和池化层处理 whole image,生成 feature map;
- 对于每个 object proposal,用一个region of interest (RoI) 池化层从上一层的 feature map 中提取定长的特征向量;
- 同时完成分类回归任务:每个 feature vector 送入一系列全连接层,这些全连接层最后会分支成 two sibling output layers: 一个可以在K个对象类以及一个笼统的“背景”类上生成 softmax 概率估计;另一层为 K 个对象类中的每一个输出四个实数值(编码精确的边界框位置)。
文章目录
Abstract
这篇文章提出了一种基于快速区域的卷积用于物体检测的网络方法(Fast R-CNN)。Fast R-CNN以先前的工作为基础,使用深度卷积网络对目标提议进行有效分类。与以前的工作相比,Fast R-CNN采用了多项创新技术来提高训练和测试速度,同时还提高了检测精度。
1. Introduction
与图像分类相比,对象检测是一项更具挑战性的任务,需要更多复杂的方法来解决。
检测的复杂性来源于精确定位,产生的挑战有:必须处理多个候选对象位置(通常称为“proposals”)。其次,这些候选对象仅提供粗略的 localization,必须对其进行细化以实现精确的localization 。这些问题的解决方案通常会损害速度,准确性或简便性。
我们提出了一种 single-stage 训练算法,该算法可共同学习以对 object proposal 进行分类并优化其空间位置。
1.1. R-CNN and SPPnet
R-CNN(Region-based Convolutional Network method) 通过使用深度卷积网络给对象 proposal 分类得到了不错的检测准确率,但是它也有 drawbacks:
- 训练是多阶段的流程;
- 时间空间消耗大;
- 检测慢(网络为每个 proposal 传递,而不是共享计算)。
SPPnets(Spatial pyramid pooling networks) 通过共享计算加速 RNN,但是它也有 drawbacks:
- 训练是多阶段的流程;
- 特征需要写回磁盘,时间空间花费大;
- 无法更新空间金字塔池之前的卷积层,此限制(固定的卷积层)限制了网络的准确性。
1.2. Contributions
这篇文章提出了一个新算法—— Fast R-CNN,修正了 R-CNN 和 SPPnet 的缺点,还提高了速度和准确性。
Advantages:
- 与 R-CNN、SPPnet 相比有更高的检测精度(mAP)
- 训练是单阶段的(single-stage),损失是多任务的(multi-task)
- 训练可以更新所有网络层
- 特征缓存不需要磁盘存储
2. Fast R-CNN architecture and training
图1 是网络框架,整个网络流程如下:
- 输入 whole image和一些 object proposals (红框,selective search 得到的预选区域);
- 用卷积层和池化层处理 whole image,生成 feature map;
- 对于每个 object proposal,用一个region of interest (RoI) 池化层从上一层的 feature map 中提取定长的 feature vector;
- 每个 feature vector 送入一系列全连接层(fc layer);
- 这些全连接层最后会分支成 two sibling output layers: 一个可以在K个对象类以及一个笼统的“背景”类上生成softmax概率估计;另一层为 K 个对象类中的每一个输出四个实数值(编码精确的边界框位置)。
2.1. The RoI pooling layer
RoI池化层使用 max pooling 把 feature map 变成具有固定空间范围 H×W 的小特征图。
在本文中,RoI是进入转换特征图的矩形窗口。每个RoI由一个四元组(r,c,h,w)定义,该四元组指定其左上角(r,c)以及其高度和宽度(h,w)。
RoI 层只是 SPPnet 中使用的空间金字塔池化层的特殊情况,其中仅一个金字塔层。
2.2. Initializing from pre-trained networks
使用三个经过预训练的ImageNet 网络进行实验,每个网络具有五个最大池化层以及五个到十三个卷积层。
当预训练的网络初始化Fast R-CNN网络时,它将经历三个转换:
- 最后一个最大池化层由RoI池化层代替
- 网络的最后一个全连接层和softmax替换为前面描述的两个同级层
- 修改网络输入:图片组以及每幅图片的一组 RoI。
2.3. Fine-tuning for detection Training
在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池层传递导数。
backwards function:
2.4. Scale invariance
我们探索了两种实现尺度不变物体检测的方法:
(1)通过“蛮力”学习和(2)通过使用图像金字塔。
在蛮力方法中,在训练和测试期间,每个图像均以预定义的像素大小进行处理。网络必须直接从训练数据中学习尺度不变对象检测。
相比之下,多尺度方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,图像金字塔用于近似缩放每个 object proposal 的尺寸。
3. Fast R-CNN detection
一旦把 R-CNN 调好,检测就相当于“拿到通行证”。
检测过程:
- 将图像(或图像金字塔,编码为图像列表)和 R 个object proposals 列表作为输入进行评分;
- 对于每个测试RoI r,网络都会输出一个类别后验概率分布 p 和相对于 r 的一组预测边界框偏移量;
- 使用估计的概率将检测置信度分配给每个对象类别 k 的RoI 。然后,使用R-CNN的算法和设置为每个类别独立执行非最大抑制。
3.1. Truncated SVD for faster detection
对于全图像分类,与卷积层相比,计算完全连接的层所花费的时间少。
相反,用于检测的RoI数量很大,并且前向通过时间的近一半花费在计算全连接的层上。
通过使用截断的SVD压缩,可以轻松地加速大型全连接层。
因式分解:使用SVD将由u×v权重矩阵W参数化的图层近似分解
当RoI数量很大时,这种简单的压缩方法可以提供良好的加速效果。
4. Main results
三个主要结果支持了文章的贡献:
- 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
4.1. Experimental setup
使用了网上的三个预训练的 ImageNet 模型 (Link),根据网络规模分别命名为S,M,L。
4.2. VOC 2010 and 2012 results
实验结果如下,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。
4.3. VOC 2007 results
在VOC07上,我们将Fast R-CNN与R-CNN和SPPnet进行了比较。
与SPPnet相比,Fast R-CNN的改进表明,即使Fast R-CNN使用单尺寸的训练和测试,对conv层进行微调也可以在mAP方面实现较大的改进(从63.1%到66.9%)
4.4. Training and testing time
快速的训练和测试时间是第二个主要结果。
对于VGG16(L),快速R-CNN处理图像的速度比不带SVD截断的R-CNN快146倍,使用SVD则快213倍。
截断的SVD可以将检测时间减少30%以上,而且mAP的下降很少(0.3个百分点),并且在模型压缩后无需执行其他微调。
4.5. Which layers to fine-tune?
通过实验验证 RoI 池化层的训练对于 very deep 网络非常重要,而不是 SPPnet 论文中说的 “微调全连接层就足够了”。
但不是每个卷积层都需要fine-tune。对于小网络 S 和 L,conv1 的学习对 mAP 影响不大,对于大型网络 VGG16,只需要更新第三层以上的卷积层(13层中的9层)。
5. Design evaluation
5.1. Does multi-task training help?
对于三个规模的网络,第一列只有 classification loss,第二列是在第一列的基础上加 multi-task loss。
比较第一二列可得,在所有三个网络中,多任务与仅针对分类的训练相比,可提高准确性。
比较第三四列可得,多任务训练比分段训练的 mAP 高。
5.2. Scale invariance: to brute force or finesse?
我们比较了实现尺度不变的物体检测的两种策略:蛮力学习(单尺度)和图像金字塔(多尺度)。无论哪种情况,我们都将图像的比例尺s定义为其最短边的长度。
从图中可以看出,单尺度处理提供了速度和精度之间的最佳折衷,特别是对于非常深的模型。
5.3. Do we need more training data?
为了验证训练数据是否有必要增加,我们用VOC12训练集来扩充VOC07训练集,从表1可以看出,扩大训练范围可使VOC07测试的mAP从66.9%提高到70.0%。
同理,在VOC10和VOC12上也做了类似的实验(表2 3),都发现 mAP 提高。
说明训练数据的增强是有必要的。
5.4. Do SVMs outperform softmax?
Fast R-CNN 使用 softmax classifier,R-CNN 和 SPPnet 使用 one-vs-rest linear SVMs。
为比较哪个分类器表现更好,做了如下实验:
表8显示了所有三个网络的softmax略胜于SVM,当然影响不大。
5.5. Are more proposals always better?
有两种类型的对象检测器:使用稀疏 object proposal set(例如选择性搜索)和使用密集object proposal set(例如DPM)。
我们发现,随着 proposal 数量的增加,mAP上升,然后略有下降(图3,蓝色实线)。该实验表明,添加更多的 proposal 对深度分类器的准确性无济于事,甚至有一点损害。
6. Conclusion
这篇文章提出了Fast R-CNN,它是一种 R-CNN 的快速版本。
除了报告最新的检测结果外,文章还提供了详细的实验,希望能提供新的见解。