-
SSD
算法详解
default
box
本文提出的
SSD
算法是一种直接预测目标类别和
bounding
box
的多目标检测算法。
与
faster
rcnn
相比,该算法没有生成
proposal
的过程,这就极大提高了检测速度。针对<
/p>
不同大小的目标检测,传统的做法是先将图像转换成不同大小
(图
像金字塔),然后分别检
测,最后将结果综合起来(
NMS
p>
)。
而
SSD<
/p>
算法则利用不同卷积层的
feature map
进行综合也能达到同样的效果。
算法的主网
络结构
是
VGG16
,将最后两个全连接层改成卷积层,并随后增加了
4
个卷积层来构造网络
结构。对其中<
/p>
5
种不同的卷积层的输出(
featur
e map
)分别用两个不同的
3
×
3
的卷积核
进行卷积,
一个输出分类用的
confidence
,
每个
default box
生成
21
个类别
confidence
< br>;
一个输出回归用的
localization
,每个
default box<
/p>
生成
4
个坐标值(
x, y, w, h
)。
此外,
这
5
个
feature
map
还经过
PriorBox
层生成
prior box
(生成的
是坐标)。上述
5
个
feature
map
中每一层的
default box
的数量是给定的
(8732
个
)<
/p>
。最后将前面三个计算
结果分别合并然后传给
loss
层。
Default
box
文章的核心之一是作者同时采用
lower
和
upper
的
feat
ure map
做检测。
如图
Fig 1
所示,
这里假定有
8
×
8
和
4
×
4
两种不同的
feature
map
。
第一个概念是
feature
map cell
,
feature
map cell
是指
feature map
中每一个小格子,如图中分别有
64
和
16
个
cell
。另外有一
个概念:
default
box
,是指在
feature map
的每个小格
(cell)
上都有一系
列固定大小的
box
,如下图有
4
p>
个(下图中的虚线框,仔细看格子的中间有比格子还小的
一个
box
)。
假设每个
feature map cell
< br>有
k
个
default
box
,那么对于每个
default box
都需要预测
c
个类别
scor
e
和
4
个
of
fset
,那么如果一个
feature map
的大小是
m
×
n
,也就是有
m*n
个
fe
ature map cell
,那么这个
feature m
ap
就一共有(
c+4
)
*k * m*n
个输出。这些输
出个数的含义是
:采用
3
×
3
的卷积核对该层的
feature map
卷积时卷积核的个数
,包含两
部分(实际
code
是分别用
不同数量的
3*3
卷积核对该层
fea
ture map
进行卷积):数量
c*k*m*n
是
confidence
输出,
< br>表示每个
default box
的
confidence
,
也就是类别的概率;
数量
4*k*m*n
是
lo
calization
输出,表示每个
default box
回归后的坐标)。训练中还有
一个东西:
prior box
,是指实际中选择的
default
box
(每一个
feature map cell
不是
k
个
defaul
t box
都取)。
也就是说
default
box
是一种概念,
prior box
则是实际的选取。训练中一张完整的图片送
进网络获得各个
f
eature map
,
对于正样本训练来说,
需要先将
prior
box
与
ground truth
box
做匹配,匹配成功说明这个
prior
box
所包含的是个目标,但离完整目标的
ground
truth box
还有段距离,
训练
的目的是保证
default box
的分类
< br>confidence
的同时将
prior
box
尽可能回归到
ground
truth box
。
举个列子:假
设一个训练样本中有
2
个
ground
truth box
,所有的
feature
map
中获取的
prior box
一
共有
8732
个。
那个可能分别有
p>
10
、
20
个
p>
prior box
能分别与这
2
个
ground
truth
box
匹配上。训练的损失包含定位损失和回归损失两部分。
作者的实验表明
default box
的
shape
数量越多,效果越好。
这里用到的
default
box
和
Faster
RCNN
中的
anchor
很像,
在
Faster
RCNN
中
anchor
只用在最后一个卷积层,
但是在本文中,
def
ault box
是应用在多个不同层的
feature
map
上。
那么
default box
的
scale
(大小)和
aspect rat
io
(横纵比)要怎么定呢?假设我们用
m
个
feature maps
做预测,
那么对于每个
featuer
map
而言其
default box
的
scale
是按以
下公式计算的:<
/p>
Sk=Smin+Smax
?
Sminm
?
1(k
?
1),k
∈
[1,m]
这里
smin
是
0.2
p>
,表示最底层的
scale
是
0.2
;
smax
是
0.9
,表示最高层的
scale
是
0.9
。
至于
aspect ratio
,用<
/p>
a_r
表示为下式:注意这里一共有
5<
/p>
种
aspect ratio
a_r
= {1, 2, 3, 1/2, 1/3}
因此每个
default
box
的宽的计算公式为:
w_k^a=s_ksqrt{a_r}
高的计算公式为:(
很容易理解宽和高的乘积是
scale
的平方)
h_k^a=s_k/sqrt{a_r}
另外当
aspect ratio
为<
/p>
1
时,作者还增加一种
scale
的
default
box
:
s_k^{'}=sqrt{s_{k}s_{k+1}}
因此,对于每个
feature map cell
而言,一共有
6
种
def
ault box
。
可以看出这种
default box
在不同的
feature
层有不同的
s
cale
,在同一个
feature
层
又有
不同的
aspect ratio
,因此基本上可以覆盖输入图像中的各种形状和大小的
object
!
(训练自己的样本的时候可以在
FindMatch()
之后检查是否能覆盖了所有的
ground truth
box
)
源代码中的
ssd_
设计了上面几个参数值,
caffe
源码
prior_box_
中
Forward_cpu()
实现。
最后会得到
(
38*38*4 +
19*19*6 + 10*10*6 + 5*5*6 + 3*3*4 +
1*1*4
)
=
8732
个
prior
box
。
Fig.2 SSD
框架
正负样本
将
prior
box
和
grount truth box
按照
IOU
(
Jaccar
dOverlap
)进行匹配,匹配成功则这
个
prior box
就是
positive exam
ple
(正样本),如果匹配不上,就是
negative e
xample
(负样本),显然这样产生的负样本的数量要远远多于正样本。这里将前向
loss
进行排序,
选择最高的
num_sel
个
prior
box
序号集合
D
。
那么如果
Match
成功后的正样本序号集合
P
。
那么最后正样本集为
P -
Dcap{P}
,
负样本集为
D -
Dcap{P}
。
同时可以通过规范
n
um_sel
的数量(是正样本数量的三倍)来控制使得最后正、负样本的比例在
1
:
3
左右。
Fig.3 positive and negtive sample VS
ground_truth box
1.
正样本获得
我们已经在图上画出了
prior
box
,
同时也有了
ground t
ruth
,
那么下一步就是将
prio
r box
匹配到
ground
truth
上,这是在
src/caffe/utlis/bbox_
的
FindM
atches
以及子
函数
MatchB
Box
函数里完成的。值得注意的是先是从
groudtrut
h box
出发给每个
groudtruth
box
找到了最匹配的
prior
box
放入候选正样本集,然后再从
prior
box
出发
为
prior
box
集中寻找与
groundtruth box
满足
IOU>0.5
的一个
IOU
最大的
prior box
(
如果有的话)放入候选正样本集,这样显然就增大了候选正样本集的数量。
2.
负样本获得
-
-
-
-
-
-
-
-
-
上一篇:词汇谐音记忆方法
下一篇:(完整版)剑桥国际英语教程1词汇单词表