1. 简介
目标定位导致程序的复杂,且存在两个挑战:一,必须处理大量的候选推送区,二,这些候选推送区仅提供了粗略的定位,得到精确定位必须被再次处理。这影响了速率、精确率、简单性。
我们简化了最先进的基于卷积网络的目标检测器的训练过程,提出一个单阶段训练算法来进行目标推送分类和修正其空间位置。
1.1 R-CNN 与 SPPnet 的局限
R-CNN的局限:
- 训练是多阶段流水。首先,R-CNN在目标推送阶段使用 log损失对ConvNet进行微调;然后,将ConvNet得到的特征送入SVM,这些SVM作为目标探测器代替了由微调学到的softmax分类器;最后,学习边界框回归器。
- 训练需要的时间空间花销大。SVM和bounding-box回归训练时,将特征从每张图片的每个推送区抽取出来,写入硬盘。这需要极大的时间与空间。
- 目标检测慢。测试时,需要将特征从每张测试图片的各个目标推送区提取出来,导致检测变慢。
R-CNN之所以慢,是因为其将每个推送区都送入ConvNet,没有共享计算。SPPnets(Spatial pyramid pooling networks)提出通过共享计算来加快R-CNN。SPPnet方法为所有输入图片计算一个卷积feature-map,然后用从共享的feature-map中提取的特征向量对每个推送区分类。通过最大池化推送区内的部分feature map到一个固定大小(6×6)的输出中,来为推送区提取特征。池化后,连接成空间金字塔池。SPPnet至少将R-CNN加速10到100倍,由于更快的特征提取,训练时间也减少3倍。
SPPnet的局限:
- 像R-CNN一样,训练是一个多级流水线,涉及提取特征,使用log损失对网络进行微调,训练SVM分类器,最后bounding-box回归。特征也写入磁盘。
- 与R-CNN不同的是,微调算法不能更新在空间金字塔池之前的卷积层。
- 固定的卷积层限制了深层网络的精度。
1.2 贡献
提出一种新的训练算法—fast R-CNN,可以提升R-CNN与SPPnet的速度与精确度,在训练和测试阶段都快。Fast R-CNN的优点:
- 更高的测试质量(mAP)
- 训练是使用多任务损失(multi-task loss)的单阶段训练
- 训练能更新所有网络层
- 特征缓存不需要硬盘存储
Fast R-CNN用python和C++写成(Caffe)。https://github.com/rbgirshick/fast-rcnn
2. Fast R-CNN的结构与训练
Fast R-CNN结构如图所示。
- Fast R-CNN将一张完整的图片和一个推送区集合作为输入。
- 先对完整的图片进行处理,用几个conv和max-pooling层产生一个conv feature-map。然后,对每个推送区,RoI(region of interest,感兴趣区)池化层从feature-map中提取固定长度的特征向量。
- 每个特征向量被送入一系列全连接层,最终分支为两个同级输出层:一个生成K个对象类加一个包罗一切的“背景”类的softmax概率估计;另一个为每个K对象类输出4个实数,每一个由四个实数组成的集合修正了K类对象中一个类的bounding-box位置。
2.1 RoI池化层
RoI池化层使用max-pooling将任何有效的RoI内的特征转换成固定大小的小特征图,大小为H×W(如,7×7),其中H和W是独立于任何特定的RoI的层的超参数。在本文中,RoI是卷积feature-map中的一个矩形窗口。 每个RoI由一个四元组(r,c,h,w)定义,其中,(r,c)为左上角,(h,w)为高和宽。
RoI max-pooling通过将h×w的RoI窗口分割成H×W的子窗口网格,子窗口大小约为h/H×w/W,然后对每个子窗口进行最大池化后输出到相应的网格单元中。像标准的最大池化一样,RoI池化操作独立应用于每个feature map。RoI层只是SPPnets 中使用的空间金字塔池层的特殊情况,其只有一个金字塔层。 我们使用的池化子窗口计算方法由[11]提供。
2.2 预训练网络的初始化
在三个预训练ImageNet网络上进行试验,每个网络有五个最大池化层和5~13个卷积层。当预训练网络初始化一个Fast R-CNN网络,需要对其做三个变化。
第一,用一个RoI池化层代替最后一个最大池化层,设置H和W与网络的第一个全连接层兼容(例如,对于VGG16,H=W=7)。
第二,网络的最后一个全连接层和softmax(被训练用于1000路分类)由两个同级输出层代替(全连接层+用于分类的Softmax ,全连接层+类别特定的bounding-box回归器)。
第三,修改网络,使其能接受两个数据输入:图像列表和这些图像中的RoI列表。
2.3 对检测的微调
对于Fast R-CNN来说,用反向传播来训练所有网络权重是一个重要能力。
首先,说明为什么SPPnet无法更新低于空间金字塔池化层的权重。根本原因在于,当每个训练样本(如,RoI)来自于不同的图片,反向传播通过SPPnet时是很没有效果的,这正是R-CNN和SPPnet网络如何被训练。低效的原因在于每个RoI可能有一个很大的感受野,经常包含整个输入图片。由于前向传播必须处理整个感受野,训练输入很大(通常是整个图像)。
分层采样
提出一个更有效的训练方法——在训练时共享特征。在Fast R-CNN训练时,SGD小批量分层采样,先对N个图像进行采样,然后对来自各个图像的R/N个RoI进行采样。值得注意的是,在前向与后向处理时,来自于同一图像的RoI共享计算和内存。减小N就减少了mini-batch计算。比如,N=2,R=128时,得到的训练方案比从128个不同的图采样RoI(R-CNN和SPPnet的方案)快64倍。
这个新方案可能导致训练收敛变慢,因为来自同一图像的RoIs是互相关联的。这似乎不是问题,我们使用N = 2 和 R = 128,使得SGD迭代比R-CNN更少,能获得良好结果。
优化过程
除了分层采样,Fast R-CNN使用一个流线型的训练过程与一个微调阶段,共同优化softmax分类器和限定框回归器,而不是分三个阶段分别训练softmax分类器,SVMs和回归器。该阶段的组成描述如下(损失、小批量采样、通过RoI池化层的反向传播和SGD超参数):
多任务损失(multi-task loss):
一个Fast R-CNN网路有两同级输出层。第一个输出K+1个类别的离散型概率分布(对每个RoI),p=(p0,……,pk),p由一个全连接层的K+1输出上的softmax的来计算。第二个输出K个目标类中每一类的bouding-box回归补偿,tk = (tkx,tky,tkw,tkh)。我们使用[9]中给出的tk参数化方法,其中,tk指定一个相对于推送区的尺度不变平移和log空间高/宽变化。
每个用于训练的RoI有一个真实分类标签u和一个真实bouding-box回归值v。对每个带标签的RoI使用多任务损失L,达到共同训练分类问题与bouding-box回归问题的目的:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c101734a50dcf7c191ad08970cfd620a.png)
- Lloc:被定义在类别u的一个元组(tu,v)上
- v:bouding-box的真实回归值,v = (vx,vy,vw,vh)。需要将真实回归目标vi标准化,使其均值和单位方差为零
- p:离散型概率分布,p =(p0,……,pk),k+1个分类
- tu:第u类的bouding-box的预测值,tu =(tux,tuy,tuw,tuh)
- [u≥1]:u≥1的时候值等于1,其他情况等于0
- λ:超参数,控制分类任务与定位任务损失的平衡。所有试验中 λ = 1
1. Lcls(p,u) = -logpu:真实分类 u 的对数损失 ,用于评估分类代价。
2. Lloc:bounding-box的损失,用于评估bounding-box定位代价。按惯例,背景类的标签u=0,背景 RoI 没有bounding-box真实值概念,此处Lloc被忽略。bounding-box回归 loss公式:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e5a2f0fa0524471a0b8d683d3854b009.png)
相比于R-CNN与SPPnet中使用的 L2 公式,L1 loss公式更健壮,对异常值不敏感。当回归值没有限制,用L2训练,为了防止梯度爆炸,需要细心调整学习率,而L1没有这个问题。
小批量采样(mini-batch sampling):
微调时,随机抽取N = 2张图为一个SGD mini-batch(按惯例,我们实际上遍历数据集的排列),对每张图采样64个RoI(R = 128)。
通过RoI池化层的反向传播:
反向传播通过RoI池化层发送导数。为了清晰,假设N = 1,其效果能直接应用到 N > 1,因为前向传播独立地处理每张图片。
RoI池化层进行最大池化,表达为计算公式:yrj = xi*(r,j),i*(r,j) = argmax xi’,i’∈R(r,j)。
xi∈R,是Rol池化层的第i个激活输入。
yrj,是第r个RoI的第j个输出。
R(r,j),是输出单元yrj所在最大池化子窗口的输入索引集,xi可能对应多个不同的输出yrj。
RoI池层的求导函数计算损失函数对每个输入变量xi的偏导数:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/90f6f49840ab051ba89e3fe7fe60d91f.png)
SGD超参数:
用于softmax分类和bounding-box回归的全连接层用均值为0,标准差为0.01和0.001的高斯分布进行初始化。bias初始化为0。所有层有单独的权重学习速率1和偏差学习速率2,全局学习速率为0.001。
2.4 尺寸不变性
有两种实现比例不变目标检测的方法[11]:
(1)蛮力学习。在训练与测试时,每张图需处理为预定义的像素尺寸,网络必须从训练数据直接学习尺寸不变目标探测。
(2)图像金字塔。多尺寸方法通过图像金字塔向网络提供近似尺度不变性。测试时,图像金字塔用于对每个推送区进行近似尺寸标准化。训练时,每次采样图像都随机抽取一个金字塔尺度作为数据增强的一种形式。由于GPU内存限制,我们仅对小一点的网络进行多尺寸训练试验。
3. Fast R-CNN 检测
一旦Fast R-CNN经过微调,检测相当于一个前向传递过程(假设推送区是预先计算好的),网络将图像(或图像金字塔,编码为图像列表)和R个推送区列表作为输入进行评分。测试时,一般R ≈ 2000,
但我们考虑其更大(≈ 45k)。当用一个图像金字塔,每个RoI被缩放,缩放后的RoI大约2242像素。
对于每个测试RoI r,前向传播输出类别后验概率分布 p 和相对于 r 的预测bounding-box纠正集合(K个类别均获得其自己的改善后的预测bounding-box)。对每个类别,我们使用估计概率Pr(class=k|r)≜pk,为每个 r 设置检测可信度。然后,我们使用R-CNN的算法和设置,对每个类别独立执行非极大值抑制。
3.1 使用删节的SVD进行更快的检测
对于完整图像分类,全连接层计算花费的时间比卷积层小。相反,为了检测,要处理的RoI很多,近一半的前向传递时间用于全连接层计算(Figure 2),可用删节的SVD压缩来加速[5,23]。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e9ed867b0bab85e5c60369078d84781f.png)
SVD将参数从u*v减少到 t(u+v)个,如果 t 远小于 min(u,v),SVD作用很大。 在这种技术中,权重矩阵W(u×v)通过SVD被近似分解为:
W ≈ UΣtVT
- U:一个u×t 维的矩阵,包括W的前t个左奇异向量
- Σt: t×t 的对角矩阵,其包含W的前t个奇异值
- V:v×t 矩阵,包括W的前 t 个右奇异向量
为了压缩网络,对应于W的单个全连接层由两个全连接层替代,它们之间没有非线性关系。第一层使用权重矩阵ΣtVT(没有bias),第二层使用U(其中原始bias与W相关联)。当RoI的数量大时,这种简单的压缩方法加速效果不错。
4. 主要结果
三个主要贡献:
- 在VOC07,2010和2012上有最优的mAP。
- 相比R-CNN,SPPnet,训练和测试速度更快。
- 在VGG16中微调卷积层提升了mAP。
References
[1] J. Carreira, R. Caseiro, J. Batista, and C. Sminchisescu. Semantic segmentation with second-order pooling. In ECCV, 2012. 5
[2] R. Caruana. Multitask learning. Machine learning, 28(1), 1997. 6
[3] K. Chatfield, K. Simonyan, A. Vedaldi, and A. Zisserman. Return of the devil in the details: Delving deep into convolutional nets. In BMVC, 2014. 5
[4] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei- Fei. ImageNet: A large-scale hierarchical image database. In CVPR, 2009. 2
[5] E. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus. Exploiting linear structure within convolutional networks for efficient evaluation. In NIPS, 2014. 4
[6] D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014. 3
[7] M. Everingham, L. Van Gool, C. K. I.Williams, J.Winn, and A. Zisserman. The PASCAL Visual Object Classes (VOC) Challenge. IJCV, 2010. 1
[8] P. Felzenszwalb, R. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part based models. TPAMI, 2010. 3, 7, 8
[9] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014. 1, 3, 4, 8
[10] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Regionbased convolutional networks for accurate object detection and segmentation. TPAMI, 2015. 5, 7, 8
[11] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014. 1, 2, 3, 4, 5, 6, 7
[12] J. H. Hosang, R. Benenson, P. Doll´ar, and B. Schiele. What makes for effective detection proposals? arXiv preprint arXiv:1502.05082, 2015. 8
[13] Y. Jia, E. Shelhamer, J. Donahue, S. Karayev, J. Long, R. Girshick, S. Guadarrama, and T. Darrell. Caffe: Convolutional architecture for fast feature embedding. In Proc. of the ACM International Conf. on Multimedia, 2014. 2
[14] A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012. 1, 4, 6
[15] S. Lazebnik, C. Schmid, and J. Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. In CVPR, 2006. 1
[16] Y. LeCun, B. Boser, J. Denker, D. Henderson, R. Howard, W. Hubbard, and L. Jackel. Backpropagation applied to handwritten zip code recognition. Neural Comp., 1989. 1
[17] M. Lin, Q. Chen, and S. Yan. Network in network. In ICLR, 2014. 5
[18] T. Lin, M. Maire, S. Belongie, L. Bourdev, R. Girshick, J. Hays, P. Perona, D. Ramanan, P. Doll´ar, and C. L. Zitnick. Microsoft COCO: common objects in context. arXiv e-prints, arXiv:1405.0312 [cs.CV], 2014. 8
[19] P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In ICLR, 2014. 1, 3
[20] K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015. 1, 5
[21] J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013. 8
[22] P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. In CVPR, 2001. 8
[23] J. Xue, J. Li, and Y. Gong. Restructuring of deep neural network acoustic models with singular value decomposition. In Interspeech, 2013. 4
[24] X. Zhu, C. Vondrick, D. Ramanan, and C. Fowlkes. Do we need more training data or better models for object detection? In BMVC, 2012. 7
[25] Y. Zhu, R. Urtasun, R. Salakhutdinov, and S. Fidler. segDeepM: Exploiting segmentation and context in deep neural networks for object detection. In CVPR, 2015. 1, 5