SSD:Single Shot MultiBox Detector
Abstract
- 首先SSD目标检测器是一个端到端的目标检测器即
One Stage
。 - 本文对于可能存在目标的输出空间进行离散化处理,针对特征图的每一个位置预设了一系列长宽比和尺度的
bounding boxes
(文中将这些框称为default boxes
)。 - 预测阶段阶段网络为每一个
default boxes
生成类别分数以及与实际目标框的偏移量进行更好的拟合目标形状。 - 检测器结合不同深度卷积层的感受野大小不同,利用多尺度特征图进行不同大小目标的检测。
Introduction
- 目前主流的目标检测系统主要针对一下几个方面进行改进:
- 假设
bounding boxes
位置 - 为每个
box
区域采样像素和特征表示 - 针对采样得到的特征进行分类处理
- 假设
- 本文的改进点在于减少了
bounding box
提出和特征重采样阶段- 利用小卷积核去预测类别概率和
bounding box
的偏移量 - 针对不同长宽比的使用不同的预测器
- 多尺度特征图预测
- 利用小卷积核去预测类别概率和
The Single Shot Detector
Model
-
使用VGG-16网络作为骨架网络。
-
在骨架网络的尾部增加了几层卷积层,使得特征图大小逐步减小,使得后续可以进行多尺度检测。
-
在不同尺度的特征图上增加了预测头(预测类别概率和坐标偏移量),预测头也是利用卷积层实现。
-
每个特征图单元预设了一系列
default boxes
,最终每个单元格预测一个类别概率和相对于default boxes
的偏移量。- 假设每个单元格有
k
k
k个
default boxes
,类别数目为 c c c,坐标偏移量需要4个参数控制,即对于 m × n m \times n m×n的特征图会产生 k ( c + 4 ) m n k(c + 4)mn k(c+4)mn个输出。
- 假设每个单元格有
k
k
k个
Training
- 关键区别是真实的标签信息需要分配给检测器的输出。
- 训练流程涉及的方面
- 如何选择默认框的集合
- 检测框的尺度选择
- 难负样本挖掘
- 数据增强策略
- Matching strategy
- 训练期间需要确定那些默认框和真实框对应。
- 对于每一个真实框我们从所有默认框(包括不同长宽比、尺度、不同位置)中选择一个
IOU
最大的默认框作为匹配项。 - 然后匹配默认框和所有真实框中
IOU
大于阈值(文中设为0.5)。
- Training Objective
- 整体的目标损失函数主要由定位损失和置信度损失两部分组成。
L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g) = \dfrac {1} {N}(L_{conf}(x, c) + \alpha L_{loc}(x, l, g)) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g)) - N表示匹配默认框的个数,如果为0该损失设置为0
- 定位损失使用的是
Smooth L1 loss
在predicted box(l)
和ground truth box(g)
之间的参数。 - 需要注意的是对于坐标参数网络实际回归的是偏移量,即框的中心
(cx,cy)
相对于default bounding box(d)
。
L l o c ( x , l , g ) = ∑ i ∈ P o s N ∑ m ∈ { c x , c y , w , h } x i j k s m o o t h L 1 ( l i m − g ^ j m ) L_{loc}(x, l ,g) = \sum_{i \in Pos}^N \sum_{m \in \{cx, cy, w, h\}} x_{ij}^k smooth_{L1}(l_i^m - \hat{g}_j^m) Lloc(x,l,g)=i∈Pos∑Nm∈{cx,cy,w,h}∑xijksmoothL1(lim−g^jm)
g ^ j c x = ( g j c x − d i c x ) / d i w g ^ j c y = ( g j c y − d i c y ) / d i h \hat {g}_j^{cx} = (g_j^{cx} - d_i^{cx}) / d_i^w \qquad \hat {g}_j^{cy} = (g_j^{cy} - d_i^{cy}) / d_i^h g^jcx=(gjcx−dicx)/diwg^jcy=(gjcy−dicy)/dih
g ^ j w = l o g ( g j w d i w ) g ^ j h = l o g ( g j h d i h ) \hat {g}_j^w = log(\dfrac {g_j^w} {d_i^w}) \qquad \hat {g}_j^h = log(\dfrac {g_j^h} {d_i^h}) g^jw=log(diwgjw)g^jh=log(dihgjh) - x i j k x_{ij}^k xijk表示第i个默认框和第j个真实框相匹配,且真实框的类别信息为k。
- 置信度损失函数使用
softmax loss
。
L c o n f ( x , c ) = − ∑ i ∈ P o s N x i j p l o g ( c ^ i p ) − ∑ i ∈ N e g l o g ( c ^ i 0 ) w h e r e c ^ i p = e x p ( c i p ) ∑ p e x p ( c i p ) L_{conf}(x, c) = - \sum_{i \in Pos}^N x_{ij}^p log(\hat {c}_i^p) - \sum_{i \in Neg} log(\hat {c}_i^0) \quad where \quad \hat{c}_i^p = \dfrac {exp(c_i^p)} {\sum_p exp(c_i^p)} Lconf(x,c)=−i∈Pos∑Nxijplog(c^ip)−i∈Neg∑log(c^i0)wherec^ip=∑pexp(cip)exp(cip)
- 整体的目标损失函数主要由定位损失和置信度损失两部分组成。
- Choosing scales and aspect ratios for default boxes
- 文中框的尺度采用线性均匀划分的处理方式,浅层的特征图对应小的尺度用于捕捉小的目标,深层的特征图对应大的尺度。
s k = s m i n + s m a x − s m i n m − 1 ( k − 1 ) , k ∈ [ 1 , m ] s_k = s_{min} + \dfrac {s_{max} - s_{min}} {m -1}(k -1), k \in [1, m] sk=smin+m−1smax−smin(k−1),k∈[1,m] - 其中 s m i n s_{min} smin设为0.2, s m a x s_{max} smax设为0.9。
- 长宽比 a r ∈ { 1 , 2 , 3 , 1 / 2 , 1 / 3 } a_r \in \{1, 2, 3, 1/2, 1/3\} ar∈{1,2,3,1/2,1/3}, w k a = s k a r h k a = s k / a r w_k^a = s_k \sqrt{a_r} \quad h_k^a = s_k / \sqrt{a_r} wka=skarhka=sk/ar。
- 对于长宽比为1的默认框增加了 s ′ = s k s k + 1 s' = \sqrt{s_k s_{k+1}} s′=sksk+1的尺度。
- 设置默认框的中心坐标为 ( i + 0.5 ∣ f k ∣ , j + 0.5 ∣ f k ∣ ) (\dfrac {i+0.5} {|f_k|}, \dfrac {j+0.5} {|f_k|}) (∣fk∣i+0.5,∣fk∣j+0.5), ∣ f k ∣ |f_k| ∣fk∣表示特征图的大小, i , j ∈ [ 0 , ∣ f k ∣ ] i,j \in [0, |f_k|] i,j∈[0,∣fk∣],即默认框的中心坐标是每个单元格的中心位置,此处进行了归一化处理。
- 文中框的尺度采用线性均匀划分的处理方式,浅层的特征图对应小的尺度用于捕捉小的目标,深层的特征图对应大的尺度。
- Hard negative mining
- 默认框和真实框匹配完成后会导致大量的负样本存在,出现正负样本不均衡的问题。
- 利用置信度损失进行负样本排序,选择置信度损失高的作为负样本使得正负样本比例保持在 1 : 3 1:3 1:3.。