paper
code
我们提出了RON。出发点是如何结合基于区域的方法(FasterRCNN)和区域无关的方法(SSD)。在全卷积框架下,RON主要解决两个问题:(a)多尺度目标定位(b)负样本挖掘。为解决a,设计了反向连接,能够让网络在CNN多个尺度下进行检测。为解决b,使用目标先验知识,有效减少目标搜索空间。我们把反向连接,目标先验,以及目标检测通过多任务损失函数结合在一起。这样一来,RON就能从不同尺度的特征下直接预测最终的检测结果。
在三个数据集上进行实验(VOC2007,2012, COCO),RON效果还不错。当使用VGG16和低分辨率的图片(384x384)作为输入时,voc2007的mAP达到81.3%,voc2012达到80.7%。当数据集变大且目标变得很难检测时,RON的优势就体现出来了。测试时占用1.5G显存,15fps,比fasterRCNN快3倍。
网络准备
使用vgg16。原始的vgg16有13层卷积层和3层全连接层。把1全连接层FC6、FC7换成卷积层,并使用核为2x2步长为2的卷积来降采样。conv5-3(1/16),conv6(1/32),conv7(1/64)。最后一层FC8没有使用。
结合细节信息和抽象信息可以帮助检测不同尺度下的目标。基于区域的的检测器使用多个CNN层次下融合的特征图进行提取候选区域。由于所有的目标都在固定的特征图下进行检测,所以优化变得很难。SSD在多个CNN尺度进行检测,然而最开始的那一层所包含的信息本身就很有限,这就是为什么SSD对小目标的检测效果很差的原因。
受残差连接的启发,它可以训练很深的网络。我们在CNN中提出反向连接。这种反向连接让前面的层拥有了语音信息。后面层通过反卷积和前一层通过一个卷积处理的结果以元素相加的形式进行融合。整个网络有4个不同尺度的反向融合。
相比于只使用一层特征图进行目标检测,使用多个特征图表达可以更有效地检测各种 不同尺度下的目标。更重要的是,这种反向连接是可以更新参数的,前一层可以很有效地丰富语音信息。这个特征使得RON比SSD更有效。
RON能产生不同尺度的特征图。我们设计了框框的分布,以使得不同尺度的特征图对不同尺度的目标有响应。框框的长宽比都取这些{1/3,1/2,1,2,3},尺度则按照下面这个式子取:(假定 smin =100)
k=1,S=(100,200); k=2,S=(300,400); k=3,S=(500,600); k=4,S=(700,800);
总体来说,对于每个尺度的特征图,有2个尺度和5个长宽比。 smin 取得是输入图片的1/10(如果输入320像素,则 smin 取32)。最后所有这个框框的预测,我们就涵盖了各种目标尺度和外形。
上面提出了很多个proposal,然而只有很少的一部分真正的框住了目标。目标和非目标的样本数量非常不均衡。基于区域的检测方法通过rpn来处理这个不平衡的问题。然而,候选框和参考框相比,多出了一些平移变化。这就导致FastRCNN方法在候选框之后还需要一个网络,这就带来了重复计算。相比之下,我们增加目标先验来帮助引导目标搜索。具体来说,用一个3x3x2的卷积加一个softmax来指示参考狂里面有没有目标。目标先验的特征图的通道是10,因为每个位置有10个参考框(2个长宽比,5个尺度)。
论文的图1表示了一张特定的图得到的多个尺度的目标先验图。为了可视化,对10个目标先验特征图沿着通道方向取了平均。可以发现,目标先验特征图可以很明显地反映有没有一个目标。这样目标的搜索空间就大大减少了。不同尺度的目标会在对应尺度的特征图上有所反映,我们会在训练和测试的时候,以一种端到端的方式实现这种对应关系的匹配。
不同于目标先验模块,检测模块需要把这些区域分成20+1类(voc)或者80+1类(coco)。在特征图上使用inception进行检测。具体来说,(见论文图5,一图胜千言)。
训练的时候,给每个候选区域指定一个二进制label。然后,如果候选区域包含目标,就再指定一个类别label。对每一个gt box,找到和它重叠面积最大的候选区域。对每个候选区域,找到和它重叠面积大于0.5的gt。这种匹配策略保证了每一个gt都至少有一个候选框和它对应。对于重叠面积小于0.3的,分配负样本label。
每一个参考框有两个label,一个是不是目标的label,另一个类别label。在训练的时候,网络会根据目标先验动态更新类别label。在前向传播时,网络首先产生目标先验,并进行类别检测。但是当反向传播时,网络首先会产生目标先验,然后对于检测,只会在objectness得分大于某个阈值的区域内进行目标检测。额外的计算仅仅在于为反向传播选择训练样本。当选择合适的阈值时(我们选择阈值为0.03),样本的数量减少了,这样反向传播的时间就缩短了。
对于我们的网络有三个输出。第一个是目标置信度,由softmax对2xA(A=10)个通道的目标先验图进行处理得到。用 Lobj 表示这部分的损失。第二部分是边界框回归的损失,记为 Lloc 。使用光滑L1损失。第三个输出是分类损失 Lcls|obj ,对每个参考框,21个类别。给定目标置信度得分 pobj ,首先会排除得分低于 op 阈值的区域。然后就想计算 Lobj 一样, Lcls|obj 也是在每一个位置,计算21类的softmax。使用多任务损失把这些损失组合在一起。各个参数之间使用一些超参数来平衡各个损失之间的权重。我们对每一项loss用它的输入数量进行归一化,在这种归一化下,这三项损失设置为等权重。
训练阶段,每一次SGD的mini-batch是从N张图片(数据集中随机选择N张图片)中构建出来的。在每个mini-batch中,(a)对于目标先验,选择全部的正样本,随机选取负样本,保证正负样本的比例为1:3。(b)对于检测,先用目标先验的得分减少样本数量,然后选择全部的正样本,随机选取负样本,保证正负样本的比例为1:3。FasterRCNN和RFCN常常用多步骤训练来训练联合损失,相比之下,我们这种端到端的训练方法更有效率。训练初期,目标先验是一片吵杂。随着训练的进行,目标先验图越来越集中在目标附近。
数据增强 使用如下策略:1. 水平翻转。2. 从原图中按照{4/10,5/10,6/10,7/10,8/10,9/10}的比例从原图中扣局部图,保证每个局部图中包含目标的中心。这些方法对于大目标可以很好地增加数量,但是对于目标效果就不行。所以针对小目标,增加一个小尺度进行训练。某个尺度下的大目标在较小的尺度下,就会变成小目标。这个训练策略可以避免对特定目标的尺寸过拟合。
预测 在预测阶段,我们把 pobj 和 pcls|obj 相乘,得到最后的得分。对每个box产生得分后,用回归的结果修正框的位置。最后用nms得到最后的检测结果。
本方法总结:
1. basenet: vgg16
2. 特征图:采用类似lateral connection的方法,用basenet不同尺度的层组合产生不同尺度的特征图,即“多特征图”。
2. 参考框产生办法:滑动窗口
3. 参考框修正办法:无位置修正,增加mask选择,用学习到的mask过滤掉大部分框
和fasterRCNN相比:
相同点
1. 多任务损失函数
2. Y型收尾(one for classification, another for bounding box regression)
3. 两阶段型检测方法,虽然作者非要强调end to end
不同点
1. FRCN仅使用conv5-3作为特征图,进行后面的操作。本方法通过添加一些连接,得到不同尺度多个特征图,进行后面的操作。“一些连接”有很多连接方法,本文算一种。是否存在一种最佳的连接方式?
2. 目标先验和rpn的区别:rpn的作用是对每一个滑动窗口产生的参考框进行score和bbreg。在产生后面需要的框框时,根据score选取前300个(比如说)作为proposal,给后面的分类器。而目标先验是对每一个参考框score,取score大于0.03(文中用的阈值)的参考框,作为后面分类器的输入数据。目标先验是否仅仅是没有了bbreg的rpn?
3. 由于多特征图,而且最后并没有把所有的特征图融合在一张(很多文章就是这么干的),所有二阶段的分类器就需要每个尺度的特征图都配备一个,各个之间是独立的。这是否会引入重复计算呢?如果各个二阶段的分类器之间可以有某种信息共享?
4. 二阶段的分类器(分类/回归)的两支有所区别。一般都是用一个conv层,本文对于bbreg用的2层卷积,对于score用的2个inception。这种改变一定是有原因的。文中并没有阐述这么做的原因,也许是实验试出来的。是否score和bbreg这两个任务,所需要的建模能力有所不同?
以上问题已向作者询问,静候答复。