文章目录
论文链接:https://arxiv.org/pdf/1707.01691.pdf
1. Introduction
目前目标检测主要分为两类,第一类是faster R-CNN系列的两阶段方法,第一步推荐候选框,第二步利用fast rcnn网络进行分类。第二类是以SSD,YOLO为代表的一阶段方法,省略了推荐候选框阶段。显而易见,第一类方法比第二类方法准确,但是比较耗费时间。第二类方法没那么准确的主要原因是不包含物体的候选框比包含物体的候选框多太多了,虽然可以利用难例挖掘的方法。本文针对的问题
- 多尺度目标定位,也就是针对不同大小的特征图生成不同大小的推荐框。
- 解决正负样例不均衡问题,提出objectness prior。
2. 网络结构
上图是ron的网络结构,使用的是VGG-16经典的网络模型,有13个卷积层,3个全链接层。不过这里将FC6(第14层)和FC7第(15)层变成了卷积层,使用的是2x2的卷积核,步长是2,所以后续使用到的特征图尺寸依次是输入特征图的1/8 (conv 4 3), 1/16 (conv5 3), 1/32 (conv 6) and 1/64 (conv 7)倍。
2.1 反链接
受到residual connection的影响,这里也适用反卷积从最后一层开始一层反卷积和上一层连接,这样的好处是使得上一层的特征图语义更加丰富,自从这个思想提出以后,几乎所有的目标检测文章都用这个方法。
2.2 推荐框
从上图中可以看出来,不同的特征层的特征图会有不同的感受野,我们可以设计这个推荐框的分布,使得精确的特征图坐标可以被学习对应物体的尺寸。我们设最小的基本scale是
s
m
i
n
,
S
k
是
每
个
特
征
图
对
应
的
b
o
x
尺
寸
,
每
一
层
有
两
个
推
荐
尺
度
s_{min},S_k是每个特征图对应的box尺寸,每一层有两个推荐尺度
smin,Sk是每个特征图对应的box尺寸,每一层有两个推荐尺度
S
k
=
{
(
2
k
−
1
)
∗
S
m
i
n
,
2
K
∗
S
m
i
n
}
S_k = \{(2k-1)*S_{min},2K*S_{min}\}
Sk={(2k−1)∗Smin,2K∗Smin}
其中
k
=
{
1
,
2
,
3
,
4
}
k = \{1,2,3,4\}
k={1,2,3,4},分别对应上图中的conv4,conv5,conv6,conv7,并且每一个上述box设计不同的方向比例
1
/
3
,
1
/
2
,
1
,
2
,
3
{1/3,1/2,1,2,3}
1/3,1/2,1,2,3,所以每一个位置一共有十种不同的default box
2.3 objectness prior
这是本文提出的新想法,用来解决默认推荐框正负样例不均衡的问题。这么多的推荐框只有一小部分会有物体,其他的全都是背景框,在faster rcnn中使用RPN相当于第一次筛选,过滤掉大部分背景框。。在本文,我们添加了一个objectness prior用来引导搜索目标。实现上就是分别在4个rf-map层后先接一个卷积核数量为20的3*3卷积层,20的含义是2(bg/fg)*10(anchors);再加上一个softmax层就得到每个bbox的2分类概率,这一部分其实和RPN网络的分类支路类似,只不过一方面这里是对4个融合特征层rf-map都执行二分类操作,这里和faster rcnn的RPN还是有所不同的,RPN需要进行坐标回归,因此最后需要计算的损失是二分类+坐标误差+最终分类,所有的误差绑定一起回传,而faster rcnn的正规训练是RPN和fast Rcnn的误差交替训练的。
2.4 识别和边框回归
上图是类别识别过程的网络图,底下的网络层输出经过flatten后会有(k+1)×10维,依次代表十个框属于每个类别的概率。
这是一个inceptin block的结构
2.5 结合objectness prior和检测
objectness prior是用来辅助目标检测的,我们对于标题2产生的候选框建立二分类标签,这和faster rcnn建立标签的标准差不多,真实标签的标准:(1)和每个真实框iou最大的候选框设为true,(2) 候选框和任意真实框iou大于0.5的设为true。这个分配策略使得每个真实框都至少有一个候选框。iou值小于0.3的设为false标签。
在前向传播阶段,网络会同时跑objectness prior和分类检测,但是在反向传播阶段,首先会进行objectness prior,然后根据这个得分值进行筛选,如果得分大于阀值$ O_p$则会被选中,这样仅有一小部分default boxes会进行反向传播,这样大大的减少了计算量,同时也对default boxes进行了筛选
训练和测试
1 loss function
我们的网络有三个同级的输出分支,第一个输出是目标置信度得分 p o b j = { p 0 o b j , p 1 o b j } p^{obj} = \lbrace p_0^{obj},p_1^{obj}\rbrace pobj={p0obj,p1obj},通过一个softmax计算得到的,softmax输出是2xA维度的,A=10,我们记录这个objectness loss 为 L o b j L_{obj} Lobj,第二个输出分支损失是边框的回归值,记为 L l o c L_{loc} Lloc,由预测offsets t = ( t x , t y , t w , t h ) 和 真 实 标 签 t ∗ = ( t x ∗ , t y ∗ , t w ∗ , t h ∗ ) t=(t_x,t_y,t_w,t_h)和真实标签t^* = (t_x^*,t_y^*,t_w^*,t_h^*) t=(tx,ty,tw,th)和真实标签t∗=(tx∗,ty∗,tw∗,th∗)计算得到,不同于fast rcnn对于每一个类别都要进行一次回归,我们不区分类别的只进行一次回归计算。第三个输出分支的loss是对于每一个default box计算分类的 L c l s ∣ o b j L_{cls|obj} Lcls∣obj,这个值的计算是以 L o b j L_{obj} Lobj为先验概率,排除那些 L o b j L_{obj} Lobj小于阀值的候选框,然后通过softmax计算属于K+1个类别的概率, p c l s ∣ o b j = { p 0 c l s ∣ o b j , p 1 c l s ∣ o b j , p 2 c l s ∣ o b j , . . . , p K c l s ∣ o b j p^{cls|obj}=\lbrace p_0^{cls|obj},p_1^{cls|obj},p_2^{cls|obj},...,p_K^{cls|obj} pcls∣obj={p0cls∣obj,p1cls∣obj,p2cls∣obj,...,pKcls∣obj
总体的损失函数为:
这里设置
α
=
β
=
1
/
3
\alpha=\beta=1/3
α=β=1/3
2 策略
一个训练阶段使用SGD mini-batch由N张图片构建的(1)对于objectness prior,所有的正例样本都被选中进行训练,负例样本随机选中使得正例和负例比例1:3(2) 对于detection阶段利用objectness prior进行筛选和之对应,所有的正例被选中,正负比例1:3。
我的总结
这篇论文提出的目的是平衡一阶段和二阶段目标检测方法,想主要解决的问题是样本正负样例不均衡,负例比正例多太多,提出了objectness prior,其实就是增加了一个网络,对每一个default box进行预测,如果有物体则设置为true,如果没有物体,则设置为false,本文对每一个位置设置了2×5个default box,每一个box都要进行objectness prior预测,这其实相当于一个先验结果,对后面objcet detection需要用的候选框进行一次筛选