SSD算法学习记录
一、SSD算法理论介绍
在faster rcnn中,采用的是two_stage,即先使用rpn结构选取一定数量的anchors,再对选取的anchors进行分类和计算边界框回归参数。这样的优点是模型检测的精度较高(因为这里对边界框相当于进行了两次回归的操作),但是由于两次的边界框回归,使得模型的检测速度慢。在SSD算法中,采用one_stage的方法,即一步就可以完成对目标的分类以及计算边界框回归参数,使得检测速度有所提高。
在目标检测中,一般先使用特征提取网络作为网络的backbone,接着将提取到的特征图输入至后续的网络中做后续的处理。对于SSD算法,论文中提到采用的是以VGG16作为backbone。简单介绍一下VGG16模型。

https://zhuanlan.zhihu.com/p/42233779
下图显示了vgg模型的网络架构以及每层的特征信息。

在SSD论文中,使用如下的网络结构

在VGG16-SSD网络中,backbone部分一直延续到conv5_3,并且将上图中橙色部分的maxpooling由2×2、步距为2,改为了3×3、步距为1。接着又添加一些列的额外添加层,构成了整个SSD网络模型(输入图像尺寸需调整为300×300的大小),整个流程用类似于上面的图可以表示为:

这里选取conv4_3、FC7(conv7)、conv8_2、conv9_2、conv10_2、conv11_2共6个预测特征层,在上图中已经用红色标注。需要注意的是,在conv10_2和conv11_2中,padding=0。
SSD模型每个预测特征层上采用3×3大小的卷积,在预测特征层的每个ceil的位置生成k(4或6)个default box,以3×3大小的feature map为例:

对于每个预测特征层,在每个点生成不同数量的default box,具体如下:
| 特征层 | 预测特征层大小 | default_box大小 | default_box数量 |
|---|---|---|---|
| conv4_3 | 38×38 | 21{1/2 1 2};sqrt(21×45){1} | 38×38×4 |
| FC7 | 19×19 | 45{1/3 1/2 1 2 3};sqrt(45×99){1} | 19×19×6 |
| conv8_2 | 10×10 | 99{1/3 1/2 1 2 3};sqrt(99×153){1} | 10×10×6 |
| conv9_2 | 5×5 | 153{1/3 1/2 1 2 3};sqrt(153×207){1} | 5×5×6 |
| conv10_2 | 3×3 | 207{1/2 1 2};sqrt(207×261){1} | 3×3×4 |
| conv11_2 | 1×1 | 261{1/2 1 2};sqrt(261×315){1} | 1×1×4 |
{}前的数字表示default box的尺寸,{}中的数字表示该尺寸对应的比例。由表格可知,在6个预测特征层上共生成的default box的数量为:
38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4 = 8732
对于每个default box,会生成c个类别概率以及4个坐标偏移量

关于正负样本的选择:
正样本:(1)与ground_truth的IOU值最大的default box
(2)与ground_truth的IOU值大于0.5
负样本:负样本与正样本的比例为3:1(Hard Negtive Mining,选出负样本中得分排在前面的,即把难判断的选出来进行训练)
关于损失的计算:
L(x,c,l,g)=1N[Lconf(x,c)+αLloc(x,l,g)] L(x,c,l,g)=\frac{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)]
式中,N表示匹配到的正样本的个数,α=1
Lconf(x,c)=−∑i∈posNxijPlog(c^iP)−∑i∈neglog(c^iP)c^iP=exp(ciP)∑Pexp(ciP)Lloc(x,l,g)=∑i∈pos∑m∈(cx,cy,w,h)xijksmoothL1(lim−g^jm) L_{conf}(x,c)=-\sum_{i∈pos}^{N}{x_{ij}^{P} \log(\hat{c}_i^P)}-\sum_{i∈neg}{\log(\hat{c}_i^P)}\\ \hat{c}_i^P=\frac{exp(c_i^P)}{\sum_P{exp(c_i^P)}}\\ L_{loc}(x,l,g)=\sum_{i∈pos}\sum_{m∈(cx,cy,w,h)}{x_{ij}^{k}}smoothL_1(l_i^m-\hat{g}_j^m) Lconf(x,c)=−i∈pos∑NxijPlog(c^iP)−i∈neg∑log(c^iP)c^iP=

本文详细介绍了SSD(Single Shot MultiBox Detector)算法,包括其理论基础、网络结构、default box的生成与可视化、数据预处理中的自定义随机裁剪和正负样本划分,以及损失函数的计算。SSD作为一种one-stage目标检测方法,相比两阶段方法如Faster R-CNN,具备更快的检测速度。在实现中,通常选择VGG16或ResNet50作为backbone,并通过特定方式生成和匹配default box,以实现高效的检测任务。
最低0.47元/天 解锁文章
3570

被折叠的 条评论
为什么被折叠?



