美文网首页
SSD: Single Shot MultiBox Detect

SSD: Single Shot MultiBox Detect

作者: ganyd | 来源:发表于2020-10-13 22:07 被阅读0次

    原作者: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

     

    网络结构

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

    • VGG Backbone
    • Extra Layers
    • Multi-box Layers

    <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的偏移量,得到输出空间,用非极大值抑制得到检测结果。

    相关文章

      网友评论

          本文标题:SSD: Single Shot MultiBox Detect

          本文链接:https://www.haomeiwen.com/subject/zpsbpktx.html