Scalable Object Detection using Deep Neural Networks
阅读意图:在研究Inception全家桶的论文时发现本文这篇有被作为参考文献,并且该篇论文讲述了 B o u n d i n g B o x Bounding Box BoundingBox做目标检测的思想,也算是开山之作,想到YOLO的思路中也有用到 B o u n d i n g B o x Bounding Box BoundingBox的思想,我想有必要了解一下这方面的知识,以方便更好地了解应用在yolov的这部分技术。
论文
Scalable Object Detection using Deep Neural Networks
博客
论文理解
论文的方法
我们的目标是通过预测一组表示潜在对象的 B o u n d i n g B o x Bounding Box BoundingBox来实现与类无关的可伸缩对象检测。更准确地说,我们使用深度神经网络(DNN),它输出固定数量的 B o u n d i n g B o x Bounding Box BoundingBox。此外,它为每个表示包含对象的盒子的网络置信度的盒子输出一个分数。
训练一个DNN来预测每幅训练图像的 B o u n d i n g B o x Bounding Box BoundingBox和置信度,最高得分的框就能很好的很好的匹配图像中的 g r o u n d t r u t h ground\ truth ground truth物体。
训练时只优化与 g r o u n d t r u t h ground\ truth ground truth数据最匹配的预测框的子集,并且优化它们的位置以提高它们的匹配度和最大化它们的置信度。同时,将剩余预测的置信度最小化,认为这些预测不能很好的定位真实的物体。
为了实现上述目标,我们为每个训练示例制定一个分配问题。我们 x i j ∈ { 0 , 1 } x_{ij}∈\{0,1\} xij∈{0,1}表示赋值:如果第 i i i个预测被赋值给第 j j j个真实对象, x i j = 1 x_{ij}= 1 xij=1。这项任务的目标可以表述为:
- F m a t c h F_{match} Fmatch表示目标函数,类似均方误差
- l i l_i li表示第 i i i个 B o u n d i n g B o x Bounding Box BoundingBox的位置向量,包含了 B o u n d i n g B o x Bounding Box BoundingBox的左上角和右下角的坐标,是一个位置向量,这些坐标是归一化
- g j g_j gj表示被 B o u n d i n g B o x Bounding Box BoundingBox框住的第 j j j个对象
我们希望根据任务
x
x
x优化框的置信度。最大化指定预测的置信度能被表示为:
上述置信度基于交叉熵损失定义,其中
∑
j
x
i
j
=
1
\sum_{j}x_{ij}=1
∑jxij=1表示预测框
i
i
i已经匹配到一个
g
r
o
u
n
d
t
r
u
t
h
ground\ truth
ground truth。
c
i
c_i
ci表示第
i
i
i个
B
o
u
n
d
i
n
g
B
o
x
Bounding Box
BoundingBox的置信度,在
∑
j
x
i
j
=
1
\sum_{j}x_{ij}=1
∑jxij=1情况下,
c
i
c_i
ci被最大化, 而相反的情况
c
i
c_i
ci被最小化。
上述术语的另一种解释是:如果我们将 ∑ j x i j \sum_{j}x_{ij} ∑jxij看作预测框 i i i包含了一个感兴趣对象的概率,则上述损失函数为熵的负值,对应为最大熵损失。(这里不是很懂,为何loss为熵的负值)
最终的损失目标函数结合了匹配损失函数和置信度损失函数:
受公式(1)约束,
α
\alpha
α平衡了不同损失项的贡献。
对每个训练示例,我们求解一个预测到真实框的最优任务
x
∗
x^*
x∗:
公式(4)最小化损失目标函数
式子(5)
∑
i
x
i
j
=
1
\sum_{i}x_{ij}=1
∑ixij=1表示第
j
j
j个对象一定会被所有的
B
o
u
n
d
i
n
g
B
o
x
Bounding Box
BoundingBox中的其中仅有的一个包含。
训练方法:
采用三种方法能显著得达到更好得精度:
- 对 g r o u n d t r u t h ground\ truth ground truth的位置进行聚类,找到 K K K个这样的簇/质心,我们可以使用它们作为每个预测位置的先验知识。因此,对每个预测位置,学习算法被激励去学习一个残差到一个先验
- 在匹配过程中使用这些先验知识:我们在K个先验和 g r o u n d t r u t h ground\ truth ground truth之间找到最佳的匹配,而不是用K个预测匹配N个 g r o u n d t r u t h ground\ truth ground truth的位置。一旦匹配完成,目标置信度像之前一样计算。
- 此外,位置预测损失函数也没有改变:对于任何匹配的一对(目标,预测)位置,损失函数是由 g r o u n d t r u t h ground\ truth ground truth和匹配的先验相对应的坐标定义的。我们称先验的使用为先验匹配,并假设它使预测多样化。
应该注意的是,尽管我们以类不可知的方式定义了方法,但我们可以将其应用于预测特定类的对象框。要做到这一点,我们只需要在类的 B o u n d i n g B o x Bounding Box BoundingBox上训练模型。
实验结果:
网络结构和实验细节:
网络结构采用和AlexNet结构相同的网络,使用
A
d
a
g
r
a
d
Adagrad
Adagrad控制学习速率的衰减,使用迷你的batch_size为128个,在定位损失中使用先验(使用训练集上的
K
−
m
e
a
n
s
K-means
K−means计算的),我们也使用
α
=
0.3
\alpha = 0.3
α=0.3来平衡局部和置信损失。
非极大抑制采用了 0.5 0.5 0.5的 J a c c a r d Jaccard Jaccard相似度阈值,以此对 B o u n d i n g B o x Bounding Box BoundingBox进行修剪。
为了训练我们的定位网络,我们从训练集中生成了大约3000万幅图像。对于训练集中的每个图像,我们生成相同数量的方形样本,这样的样本数量大约是1000万。对于每一幅图像,样本都是按0-5%,5-15%,15-50%,50-100%的比例进行存储的,这些被 B o u n d i n g B o x Bounding Box BoundingBox覆盖的比率在给定的范围内都有相同数量的样本。
总结
论文读完之后,基本了解了作者的核心思想,通过DNN来训练出这些 B o u n d i n g B o x Bounding Box BoundingBox,通过匹配度和置信度来定义损失函数,以此训练,其中也利用了一些提高训练精度的方法。