SSD( Single Shot MultiBox Detector)
SSD 论文地址:https://arxiv.org/abs/1512.02325
SSD 论文中使用 VGG16 提取特征图。再使用 Conv4_3 层检测对象,是经典的ones stage网络。网络结构:
算法步骤
- 输入一幅图片,让图片经过卷积神经网络(CNN)提取特征,并生成 feature map
- 抽取其中六层的feature map,(多尺度),然后再 feature map 的每个点上生成 default box
- 将生成的所有 default box 都集合起来,全部丢到 NMS(极大值抑制)中,输出筛选后的 default box,并输出
SSD结合了YOLO中的回归思想和Faster-RCNN中的Anchor机制(论文中称为Defalut Box),使用全图各个位置的多尺度区域进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster-RCNN一样比较精准,SSD的核心是在不同尺度的特征特征图上采用卷积核来预测一系列Default Bounding Boxes的类别、坐标偏移,SSD核心设计主要有下面三点:
一、多尺度
SSD算法中使用到了conv4_3,c,conv8_2,conv7_2,conv8_2,conv9_2,conv10_2,conv11_2这些大小不同的feature maps,其目的是为了能够准确的检测到不同尺度的物体,因为在低层的feature map,感受野比较小,高层的感受野比较大,在不同的feature map进行卷积,可以达到多尺度的目的。
在较大尺度的特征图(a)上匹配较小的目标,在较深层的特征图(b)上匹配较大的目标,
二、用卷积层代替全连接层进行预测
SSD 不使用全连接层。 它使用小型卷积滤波器计算位置和类别分数。 提取特征图后,SSD 对每个单元应用 3×3 卷积滤波器进行预测。 (这些滤波器计算结果就像常规的 CNN 过滤器一样。)每个滤波器输出 25 个通道:每个类的 21 个分数加上一个边界框。
三、设置先验框
default boxes(Prior Box)类似于RPN当中的滑动窗口生成的候选框,SSD中也是对特征图中的每一个像素生成若干个框。
name | Out_size | prior_box_name | Total_num |
---|---|---|---|
conv4_3 | 38x38 | 4 | 5776 |
conv5_2 | 19x19 | 6 | 2166 |
conv7_2 | 10x10 | 6 | 600 |
conv9_2 | 5x5 | 6 | 150 |
conv10_2 | 3x3 | 4 | 36 |
conv11_2 | 1x1 | 4 | 4 |
8732 |
先验框相当于faster rcnn里的anchors,预设一些box,网络根据box,通过分类和回归给出被检测到物体的类别和位置。每个window都会被分类,并回归到一个更准的位置和尺寸上。
论文中对conv4_3,conv10_2,conv11用4个default boxes,其他三个设置6个default boxes。对于default boxes的数量(prior_box_name)以及尺寸设置计算根据下表:
图片来源:SSD算法理论
训练与预测
输入->输出->结果与ground truth标记样本回归损失计算->反向传播, 更新权值
先将prior box与ground truth box做匹配进行标记正负样本,每次并不训练8732张计算好的default boxes, 先进行置信度筛选,并且训练指定的正样本和负样本, 如下规则:
正样本:
匹配与GT(标记值-ground truth)最大IOU的 default box 为正样本,对于任一ground truth IOU 大于0.5也设为正样本。
图片截取原论文
负样本:
对于confidence loss 越大,导致损失越大,选择排在前面的值为负样本,在训练时, default boxes按照正负样本控制positive:negative=1:3
损失计算
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)=\frac{1}{N}\left(L_{c o n f}(x, c)+\alpha L_{l o c}(x, l, g)\right. L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g)
L conf ( x , c ) = − ∑ i ∈ P o s N x i j p log ( c ^ i p ) − ∑ i ∈ N e g log ( c ^ i 0 ) where c ^ i p = exp ( c i p ) ∑ p exp ( c i p ) L_{\text {conf }}(x, c)=-\sum_{i \in P o s}^{N} x_{i j}^{p} \log \left(\hat{c}_{i}^{p}\right)-\sum_{i \in N e g} \log \left(\hat{c}_{i}^{0}\right) \quad \text { where } \quad \hat{c}_{i}^{p}=\frac{\exp \left(c_{i}^{p}\right)}{\sum_{p} \exp \left(c_{i}^{p}\right)} Lconf (x,c)=−i∈Pos∑Nxijplog(c^ip)−i∈Neg∑log(c^i0) where c^ip=∑pexp(cip)exp(cip)
- N是match到GT(Ground Truth)的prior box数量
- c ^ i p \hat{c}_{i}^{p} c^ip 为预测的第 i i i 个 default box对应GT box的类别概率 P \mathrm{P} P
- x i j p = { 0 , 1 } x_{i j}^{p}=\{0,1\} xijp={ 0,1} 为第 i i i 个default box匹配到的第 j \mathrm{j} j 个 GT box(类别是 P \mathrm{P} P )
参考文献:
SSD: Single Shot MultiBox Detector
SSD object detection: Single Shot MultiBox Detector for real-time processing
目标检测|SSD原理与实现
深度学习 – SSD 算法流程详解