SSD简介
\space\space\space\space\space\space
SSD(Single Shot MultiBox Detector)和YOLO一样也是一个one-stage的检测网络。在特征图的每个像素内都会有一系列给定的不同大小以及不同长宽比的候选框,用这些给定的候选框去检测目标物体。在预测时,每一个bounding box都会产生类别预测以及大小位置的调整。此外,网络的预测结合了不同分辨率大小的特征图,来针对检测各种大小的目标物体。
\space\space\space\space\space\space
相比于two-stage的网络(如Faster R-CNN),SSD没有预先生成候选区域的过程,以及随后对候选区域对应特征的重采样来进行分类和回归的阶段,它将所有计算过程封装在一个网络中,所以SSD很简单,速度很快;通过结合不同分辨率大小的特征图的预测结果,它的精度也可以达到two-stage的网络(Faster R-CNN)可以达到的精度。
SSD的特点:
1.比YOLO速度还要快,精度更高,可以达到two-stage的网络(Faster R-CNN)可以达到的精度。
2.SSD的核心是通过应用于特征图上的小卷积核来预测一组默认的bounding box(类似于Faster R-CNN RPN中的anchor),预测这些bounding box的类别和偏移量。
3.为了达到较高的检测精度,我们在不同尺度的特征图中生成不同尺度的预测。
4.由于这样的设计,训练和预测都是端到端的。而且精度很高,即使输入图像分辨率比较低。
SSD细节
模型结构
\space\space\space\space\space\space
SSD通过卷积网络提取特征,生成固定数量的bounding box集合,并预测它们所属类别,最终通过非极大值抑制产生最终的检测结果。
\space\space\space\space\space\space
SSD的网络结构如上图上半部分所示。首先是一个VGG-16的基础网络(base network,只有卷积层)用来提取特征(其他的分类网络也可以),然后,在VGG-16的后面添加了一些额外的结构用来进行目标检测:
1.多尺度特征图:在基础网络的后面添加了一些卷积层,特征图经过这些卷积层后尺寸下降的很快,然后网络结合这些不同尺度的特征图进行目标检测。
2.用于检测的小卷积核:与Faster R-CNN中的RPN一样,对于添加的卷积层生成的特征图以及VGG-16最后一层输出的特征图(这些特征图都要先做1x1的padding),在其上滑过一个3x3的卷积核,预测与之对应的像素(3x3区域的中心点)中包含的默认候选框的类别以及偏移量(YOLO是通过全连接层产生一个7x7xC的张量进行预测)。偏移量是指每一个预测的bounding box相对于对应默认框的偏移。
3.默认框及长宽比例:对于添加的卷积层生成的特征图以及VGG-16最后一层输出的特征图,其中每一个像素都会对应一系列的默认框。在预测的时候,每一个像素会预测出相应数量的bounding box,其偏移量是相对于对应默认框的位置和大小的偏移,其类别是根据输出的每一个类别的分数最终决定bounding box的类别。如果特征图的每一个像素生成
k
k
k个bounding box,每一个bounding box预测
c
c
c个类别分数以及4个(中心点坐标以及长宽)相对于默认框位置和形状的偏移量,所以,特征图的每个像素都会生成
(
c
+
4
)
k
(c+4)k
(c+4)k维的向量,对于一个
m
×
n
m\times n
m×n的特征图,最终会预测出
(
c
+
4
)
k
m
n
(c+4)kmn
(c+4)kmn的张量。默认框如下图所示。不同像素大小的特征图中的默认框大小比例不同。这些默认框离散化所有可能的输出,用这些离散的框取逼近真实框(这一点与YOLO不同,YOLO直接回归)。
训练
1.ground truth box与默认框的匹配策略:
在训练中,我们需要将ground truth box分配给默认框。SSD的分配策略是:1.首先将ground truth box分配给与之有最大IoU的默认框(对所有特征图上的默认框计算IoU并进行比较);2.其次将ground truth box分配给和它IoU超过阈值(0.5)的默认框(这一策略和RPN很像)。这简化了学习问题,有助于让网络给多个重叠bounding box打高分(有助于检测相邻物体),而不是要求网络只选择与ground truth box IoU最大的框(YOLO只选择与ground truth box IoU最大的框)。
2.loss:
SSD的loss是基于MultiBox的目标函数修改的。令
x
i
j
p
=
{
1
,
0
}
x_{ij}^p=\{1,0\}
xijp={1,0}表示第i个默认框是否被分配第j个ground truth box,这个ground truth box中目标物体所属类别为
p
p
p。由匹配策略可知
∑
i
x
i
j
p
≥
1
\sum_ix_{ij}^p\geq1
∑ixijp≥1(每一个ground truth box至少有一个默认框与之匹配)。loss函数如下所示:
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)),其中
(1).
N
N
N是匹配的默认框的数量;
(2).
L
l
o
c
L_{loc}
Lloc是smooth L1 loss,与Fast R-CNN一样,是预测框和默认框的偏移与ground truth box和默认框偏移的差,详见Fast R-CNN;
L
l
o
c
(
x
,
l
,
g
)
=
∑
i
∈
P
o
s
N
∑
m
∈
{
c
x
,
c
y
,
w
,
h
}
x
i
j
p
smooth
L
1
(
l
i
m
−
g
^
j
m
)
L_{loc}(x,l,g)=\sum\limits_{i\in Pos}^N\sum\limits_{m\in\{cx,cy,w,h\}}x_{ij}^p\text{smooth}_{L1}(l_i^m-\hat{g}_j^m)
Lloc(x,l,g)=i∈Pos∑Nm∈{cx,cy,w,h}∑xijpsmoothL1(lim−g^jm)
g
^
j
c
x
=
(
g
j
c
x
−
d
i
c
x
)
/
d
i
w
\hat{g}_j^{cx}=(g_j^{cx}-d_i^{cx})/d_i^w
g^jcx=(gjcx−dicx)/diw
~~~~~
g
^
j
c
y
=
(
g
j
c
y
−
d
i
c
y
)
/
d
i
h
\hat{g}_j^{cy}=(g_j^{cy}-d_i^{cy})/d_i^h
g^jcy=(gjcy−dicy)/dih
g
^
j
w
=
log
(
g
j
w
d
i
w
)
\hat{g}_j^{w}=\text{log}(\dfrac{g_j^{w}}{d_i^w})
g^jw=log(diwgjw)
~~~~~
g
^
j
h
=
log
(
g
j
h
d
i
h
)
\hat{g}_j^{h}=\text{log}(\dfrac{g_j^{h}}{d_i^h})
g^jh=log(dihgjh)
其中
l
l
l是预测框,
g
g
g是ground truth box,
d
d
d是默认框,
(
c
x
,
c
y
)
(cx,cy)
(cx,cy)是中心点坐标,
w
,
h
w,h
w,h是宽和高。
(3).
L
c
o
n
f
L_{conf}
Lconf是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\limits_{i\in Pos}^Nx_{ij}^plog(\hat{c}_i^p)-\sum\limits_{i\in Neg}log(\hat{c}_i^0)~~~where~\hat{c}_i^p=\dfrac{exp(c_i^p)}{\sum_pexp(c_i^p)}
Lconf(x,c)=−i∈Pos∑Nxijplog(c^ip)−i∈Neg∑log(c^i0) where c^ip=∑pexp(cip)exp(cip)
(4).权值 α \alpha α设为1(通过交叉验证得出);
3.为默认框选择尺寸大小及长宽比:
在不同特征图上设计了不同大小的默认框,以便特定的特征图学会响应目标的特定比例。假设最终使用
m
m
m个特征图进行检测预测,每一个特征图上的默认框尺寸计算如下:
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,即在网络中最靠前的特征图(像素尺寸最大)对应尺度
s
m
i
n
=
0.2
s_{min}=0.2
smin=0.2,在网络中最后一个特征图(像素尺寸最小)对应尺度
s
m
a
x
=
0.9
s_{max}=0.9
smax=0.9,其他中间的特征图默认框对应尺度从0.2到0.9渐变。对每一个像素对应的默认框设置不同的长宽比
a
r
∈
{
1
,
2
,
3
,
1
2
,
1
3
}
a_r\in\{1,2,3,\frac{1}{2},\frac{1}{3}\}
ar∈{1,2,3,21,31},所以宽为
w
k
a
=
s
k
a
r
w_k^a=s_k\sqrt{a_r}
wka=skar,高为
h
k
a
=
s
k
/
a
r
h_k^a=s_k/\sqrt{a_r}
hka=sk/ar(不改变面积的情况下改变长宽比)。在长宽比为1的情况下,文章还添加了尺度
s
k
′
=
s
k
s
k
+
1
s_k^{'}=\sqrt{s_ks_{k+1}}
sk′=sksk+1,所以特征图每个位置有6个默认框。默认框中心点坐标设置为
(
i
+
0.5
∣
f
k
∣
,
j
+
0.5
∣
f
k
∣
)
(\frac{i+0.5}{|f_k|},\frac{j+0.5}{|f_k|})
(∣fk∣i+0.5,∣fk∣j+0.5),其中
∣
f
k
∣
|f_k|
∣fk∣为第
k
k
k个特征图的大小,
i
,
j
∈
[
0
,
∣
f
k
∣
)
i,j\in[0,|f_k|)
i,j∈[0,∣fk∣)。
4.难样本挖掘:
只有很少一部分默认框会分配到ground truth box作为正样本参与分类和坐标偏移量的预测,大部分都是负样本,正负样本极度不平衡。为了解决这个问题,按分类的loss(
L
c
o
n
f
L_{conf}
Lconf)将负样本由大到小排序,然后选取loss最大的默认框。经过这样处理,正负样本比例大约为1:3。
5.数据增强:
为了使模型对于不同大小的目标更稳定,文章随机挑选以下策略作为训练的输入图像:
- 使用整张原始图片作为输入
- 随机挑选一个patch,此patch与目标物体的最小IoU为0.1,0.3,0.5,0.7或0.9
- 随机选取一个patch
patch的大小取原始图像的[0.1,1]区间,长宽比在[ 1 2 , 2 \frac{1}{2},2 21,2]之间。只要ground truth box的中心落在patch内,就保留此ground truth box。然后将patch resize到固定大小并以0.5的概率水平翻转。此外还有一些扭曲操作。
预测
\space\space\space\space\space\space
预测会产生8732个(如下图所示)bounding box,其中很多bounding box的置信度都非常低。通过设置阈值(0.01)可以过滤掉大多数的box。然后利用非极大值抑制,筛选每个类IoU大于0.45的bounding box,每张图保留置信度最高的200个检测结果。
论文地址:SSD: Single Shot MultiBox Detector