SSD: Single Shot MultiBox Detect

2020-10-13  本文已影响0人  ganyd

原作者:Wei Liu1, Dragomir Anguelov2等      笔记整理:ganyongdong 2020.10.6
 如有错误或者不清楚之处,欢迎指正交流,如需转载请注明出处

论文:https://arxiv.org/abs/1512.02325
代码:https://github.com/weiliu89/caffe/tree/ssd 推荐->https://github.com/lufficc/SSD.git
参考:https://zhuanlan.zhihu.com/p/79854543https://zhuanlan.zhihu.com/p/65484308

摘要

  1. 设置默认框(default box),类似于anchor box,具有不同的尺寸和宽高比。
  2. 联合多种分辨率下的特征图来检测不同尺寸的object,而不是直接对图像resize。
  3. 一阶段目标检测方法,实现了简单的端到端训练。
  4. 实验结果显示:在VOC2007,300x300输入,TitanX情况下,mAP=74.3%,FPS=59

 

网络结构

整个网络是由三大部分组成:

<img src="../image/ssd网络结构.png" width = "800" alt="ssd网络结构" align=center />

把vgg16后面3个全连接层替换成卷积层,用3x3卷积提取不同尺寸的特征图,在不同尺寸的特征图进行预测,之后用非极大值抑制得到结果。

 

默认框(default box)

在每个特征图的单元格的中心设置一系列尺度和大小不同的初始框,这些初始框都会反向映射到原图的某一个位置,如果某个初始框的位置正好和真实目标框的位置重叠度很高,那么就通过损失函数预测这个初始框的类别,同时对这些初始框的形状进行微调,以使其符合我们标记的真实目标框。
和yolo的anchor不同的是,ssd将其应用于几个不同分辨率的特征图,在多个特征图上使用不同形状的默认框。

ssd先验框.png

 

多尺度特征图

在backbone网络末端,替换成了卷积层,这些卷积层尺寸逐渐缩小,并允许网络在多个尺度上预测。

 

训练过程的匹配策略(默认框和真实标签框关联匹配)

将默认框与所有的真实标签框配对,只要两者之间的雅可比重叠值(jaccard overlap)大于某个阈值(比如 0.5)

 

损失函数

损失函数L由位置损失L_{loc}和分类置信度损失L_{conf}的加权和成
x_{ij}^p=\{1,0\} :第i个默认框和第p类的第j个真实标签框相匹配的指示器,大于重叠阈值为1,小于重叠阈值为0

L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha{L_{loc}(x,l,g)})

其中:
N:已经匹配好的默认框的个数(如果N=0,就设置当前损失为0)
l:预测框和默认框之间的偏移
g:真实标签框和默认框之间的偏移

L_{loc}(x,l,g)=\sum_{i\in{Pos}}^{N}\sum_{m\in\{cx,cy,w,h\}}x_{i,j}^ksmooth_{L1}(l_i^m-\hat{g}_j^m)
\hat{g}_j^{cx}=(g_j^{cx}-d_i^{cx})/d_i^w
\hat{g}_j^{cy}=(g_j^{cy}-d_i^{cy})/d_i^h
\hat{g}_j^w=log(\frac{g_j^w}{d_i^w})
\hat{g}_j^h=log(\frac{g_j^h}{d_i^h})

其中:
d:默认框

L_{conf}(x,c)=-\sum_{i\in{Pos}}^Nx_{ij}^plog(\hat{c}_i^p)-\sum _{i\in{Neg}}log(\hat{c}_i^0)

\hat{c}_i^p=\frac{exp(c_i^p)}{\sum_pexp(c_i^p)}

 

选择默认框的尺寸和宽高比

对选择默认框有作者给出了一套推荐公式,但是针对不同数据集还是不同,如何最优是一个开放性的问题。

S_k=S_{min}+\frac{S_{max}-S_{min}}{m-1}(k-1), k\in[1,m]

其中,S_{min}是0.2,S_{max}是0.9。意味着最底层是0.2,最高层是0.9,期间所有大小按规律递增。

设定5种宽高比 a_r\in\{1,\,2,\,3,\,0.5,\,0.3333\},则计算每个默认框的长度与宽度:
w_k^a=s_k\sqrt{a_r}
h_k^a=s_k/\sqrt{a_r}
对于长宽比为1的,另外增加一个默认框,s_k^,=\sqrt{s_ks_{k+1}},所以特征图每个位置有6个默认框。

 

正负样本平衡(难例挖掘)

没有使用所有的负样本,而是先把负样本根据置信度损失进行从大到小排序,然后为每个默认框只选择分值最高的那些样本,这样做的目的是使得正负样本的比例不超过1:3。这样还可以使得优化更快,训练更平稳。

 

数据增强

对每个图像随机采取以下策略之一进行采样:

  1. 使用整张原始输入图像
  2. 采样一个片段,使得与目标物体的最小的雅可比重叠为0.1,0.3,0.5,0.7,0.9之一。
  3. 随机采样一个部分

每个采样部分的大小为原图的[0.1,1],长宽比在1/2和2之间。如果真实标签框的中心位于采样部分内,则保留重叠部分。在上述采样步骤之后,将每个采样片大小调整为固定大小,并以0.5的概率进行水平翻转,还有对图片做一些光度扭曲的操作。

 

预测的时候

对图像提取不同尺寸的特征图,每个特征图平铺分布着默认框,然后为每个default box生成每个类别的得分和box的偏移量,得到输出空间,用非极大值抑制得到检测结果。

上一篇下一篇

猜你喜欢

热点阅读