文章目录
SSD框架:
1.在几个不同feature map的scales的每个位置上,用卷积的方式评估一些不同aspect ratios的默认框。
2.对每个默认框,预测box外形的偏移和全部类别的置信度。
3.在训练的时候,首先将gt-box和默认框匹配,匹配上的是正样本,其他的是负样本,然后对负难例进行挖掘。
3.模型的loss是每个回归loss和置信度loss的和。(回归是Smooth L1,置信度是Softmax)
网络结构图
1. Model
方法概括:SSD方法基于前向传播网络,生成一些固定大小的边界框集合,然后评估在这些框里的物体的置信度并且调整框。
流程
基础网络:
网络的前面基础部分是一个用来为高质量图像分类提供特征的网络(VGG16),叫做base network。
生成多尺度特征图:
在base network之后加上size逐渐减小的多尺度的特征层,用来检测目标的每个卷积模型在每个特征层都不一样(每个特征层尺度不同,要检测的大小也不同,所以卷积模型不同很合理)。
\
对多尺度特征图进行卷积:
对于 m × n × p m\times n\times p m×n×p维度的feature map(在base network后添加的层),我们使用 3 × 3 × p 3\times 3\times p 3×3×p的过滤器,就可以生成一些固定维度的检测预测。
这个过滤器既可以生成置信度分数,也可以生成边界框偏移(相对于feature map的每个cell的anchor的偏移),在 m × n m\times n m×n的每个cell上都会产生一个输出。(yolo使用的是全连接层,而不是卷积过滤器)
设置默认框:
对feature map中的每个cell预测偏移框(4个值)和分类分数(c个类,c个值),假如每个cell有k个框,那么过滤器的数量就是 ( c + 4 ) × k (c+4)\times k (c+4)×k,整个feature map提取之后就是 ( c + 4 ) × k × m × n (c+4)\times k \times m \times n (c+4)×k×m×n个参数。默认框的概念和Faster RCNN的anchor boxes类似。
训练的时候只预测正样本的anchor,而推理的时候全部都预测
2. Training
SSD的不同之处在于,真实边界框需要被分配给特定的检测的输出。
一旦上述分配被固定,loss和反向传播被端到端应用。
训练还涉及到选择一些默认框,检测尺度,负难例挖掘,数据增强策略。
1.数据增强
为了让模型对多种输入图片的尺寸和形状更加鲁棒,每个image都挑选下面一种方法进行处理:
- 使用全部原始图片
- 采样一小块,让和目标的最小jaccard 重叠部分是0.1,0.3,0.5,0.7,或0.9
- 随即采样一小块
每一小块的尺寸是原始尺寸的[0.1,1],长宽比是[0.5,2],如果ground truth box的中心在采样patch中,我们就保留它的重叠部分。
在上述采样之后,每个被采样的部分都被resize成固定的大小,并以50%的概率水平反转。
2.选择默认框的长宽比和比例
对于每个特征图来说,SSD引入初始框的概念,也就是说在每个特征图的单元格的中心设置一系列尺度和大小不同的初始框,这些初始框都会反向映射到原图的某一个位置,如果某个初始框的位置正好和真实目标框的位置重叠度很高,那么就通过损失函数预测这个初始框的类别,同时对这些初始框的形状进行微调,以使其符合我们标记的真实目标框。
\
通过利用来自几个不同的特征层的特征,也能达到用不同的size处理图片然后将前向传播的结果组合在一起的效果,而且还有共享参数的效果。使用底层卷积可以更好地获得输入图片的细节。
通过[Looking wider to see better]中,添加全局环境池化能对平滑和分割结果产生帮助,引发了作者的,即使用低层的特征也使用高层的特征来进行检测。(idea)
一个网络中不同的层级的感受野不同,然而在SSD中,默认框不需要对应每一层的实际的感受野。作者让默认框平铺(像瓷砖一样),然后用一个公式来计算默认框在每个特征图上的缩放:
\
其中, m m m是检测特征图的个数, s m i