1 SSD介绍
Single Shot MultiBox Detector(SSD,
单步多框
目标检测)
2 SSD结构
SSD 基础网络结构使用VGG
全部结构如下:
重用Faster R-CNN的Anchors机制,在feature map上提取各种不同尺度大小的default box,也就是类似Anchor的一系列大小固定的框
1 先使用VGG中的Conv4_3特征图来类似RPN的操作进行分类和回归来生成候选框,对于Con4_3的数据提取的时候,会先对feature map做一个L2 norm的操
作,因为层次比较靠前,防止出现数据值过大的情况
2 在使用FC7层(被替换成卷积层)提取的特征图来生成候选框
3 再使用被卷积两次的特征图来生成候选框,以此类推,直到卷积为特征图为1x1大小为止
上图结构中基础网络结构使用VGG,并且将FC6Layer和FC7 Layer转换为卷积层,并将原来的Max Pooling5的大小从2x2-s2变 化为3x3-s1,这样pooling5操作后 feature map还是保持较大的尺寸,
重要
可以保证每个区域提取出重要特征
为了保障感受野以及利用到原来的FC6和FC7的模型参数,使用atrous algorithm的方式来增大感受野,也就是
膨胀卷积/空洞卷积,
类似下面的图,图中下面部分黑色块,就是提取这些特征,其他的设置为0
主要是通过conv2d的函数中
dilation的参数来控制,
当
dilation=2
时,在这种情况下,使用3x3的卷积核实际上会覆盖5x5的输入区域
膨胀卷积核尺寸=膨胀系数*(原始卷积核尺寸-1)+1
Conv6(fc6)中卷积核kernel为3,pad为6, dilation为6,所以相当于真实的卷积核大小为13,pad为6是为了保障输出feature map大小尺度不变,仍为19x19。
比较大的特征图负责小样本检测,比较小的特征图负责大样本检测
结合R FCN网络的优点, 将所有的全连接网络全部更改为全卷积网络结构。
使用卷积来提取候选框特征(offset box+score)
总共得到候选框如下图
3 先验框的提取
在提取先验框的时候,主要通过
尺度(大小)
和
长宽比
两个方面来进行设置,其中在先验框尺度上遵守一个线性递增规则:
随着特征图大小降低,先验框
尺度线性增加
下图中的意思为如果在输入图像尺寸为300x300的情况下,
conv4-3
层的缩放因子为0.1,因此默认锚框的尺寸为
300 * 0.1 = 30
像素。同理,
conv11-2
层的缩放因子为0.9,所以其默认锚框的尺寸为
300 * 0.9 = 270
像素。这样的设计允许模型在多个尺度上检测对象,有助于提高模型对不同大小对象的检测能力
在提取先验框的时候,主要通过
尺度(大小)
和
长宽比
两个方面来进行设置,在长宽比上,论文中建议比率值选择范围为: [1, 2, 3, 1/2, 1/3]。对于Conv4-3、Conv10-2以及Conv11-2这三层,由于仅使用4个先验框,不使用1:3和3:1的这个比例值
除了使用上述5个长宽比外,还引入一个特殊尺度并且长宽比为1的先验框。 引入这个框的主要目的是为了体现最终的候选框中出现两个长宽比为1但是 大小不同的正方形先验框。
就是说,右边的特殊尺度是左边两个数用左边公式所得,最后一层加一个虚拟值来完成最后一个的特殊尺度的数
下图为得到的候选框的像素大小
4 训练/预测阶段
1 训练正负样本获取
在训练阶段,选取正样本为iou大于0.5的先验框,小于等于0.5的为负样本,控制在正样本与负样本的比例为1:3,又因为,负样本肯定远大于正样本数量,所以采用
Hard Negative Mining 难负样本挖掘算法
对数据进行处理,具体介绍在图下
训练数据类别给定标准:
1 正样本:若先验框和Ground Truth框匹配,
那么认为当前先验框为正样本;
2 负样本:若先验框和所有Ground Truth框都不匹配,那么认为当前先验框为负样本。
NOTE: 采用hard negative mining(难负样本挖掘算法)选择loss大的样本作为负样本,正负样本比例1:3;
SSD的先验框与Ground Truth的匹配原则主要有几点:
1.
对于图片中每个Ground Truth,找到与其IoU最大的先验框,该先验框与其匹配,
2. 对于剩余的未匹配先验框,若其和某个Ground Truth的 IoU 大于某个阈值(一般是0.5),那么该先验框也与这个Ground Truth进行匹配。这意味着某个Ground Truth可能与多个先验框匹配,这是可以的。
3. 如果某个先验框和多个Ground Truth的IoU值大于阈值或者是最大IoU的先验框,那么这个先验框仅和IoU最大的那个Ground Truth匹配。
2 Hard Negative Mining
在生成先验框后,会产生很多符合Ground Truth Box的先验框,但是不符合的边框会更多,也就是negative boxes的数目远多于positive boxes的数目,也就会导致数据之间极度不均衡的情况出现,训练的时候比较难收敛。故在SSD中,采用R-CNN中介绍的
难负样本挖掘算法
对数据进行处理。将每个物体位置上对应的default boxes是negative的boxes按照前向loss的大小进行排序,获取loss比较大的N个negative boxes参与模型训练,最终保证正负样本比例在1:3左右。
就是要那种判断负样本是背景的loss比较大的,这样选取的先验框负样本,相对不容易判断是背景和物体,这样可以更好的训练模型的分类能力。
3 数据增强
Data augmentation(数据增强)
1 水平翻转(Horizontal Flip)
2 随机剪裁加颜色扭曲(Random Crop & Color Distortion)
3 随机采集块域(Randomly sample a path)
4 损失计算
SSD(Single Shot MultiBox Detector)的损失函数是多任务损失函数,它由两部分组成:定位损失(loc)和置信度损失(conf)。定位损失用于衡量预测边界框和真实边界框之间的差异,通常使用Smooth L1损失来计算;置信度损失用于衡量预测的类别和真实类别之间的差异,通常使用交叉熵损失来计算。
5 预测阶段
-
前向传播:输入图像通过SSD网络,网络会生成一系列不同尺度的特征图。
-
生成预测框:每个特征图上的每个单元格会根据一组默认的锚框(anchor boxes)生成预测框(也叫做候选框)。每个预测框都有对应的类别置信度和位置偏移量。
-
过滤背景类:对于每个预测框,首先根据类别置信度确定其类别(置信度最大者),并过滤掉属于背景的预测框。
-
置信度阈值过滤:然后根据置信度阈值(如0.5)过滤掉置信度较低的预测框。
-
解码预测框:对于留下的预测框,根据默认框(anchor box)和预测的偏移量对它们进行解码,得到预测框的实际坐标。
-
坐标裁剪(Clipping):解码后的坐标可能超出图像边界,需要裁剪它们以确保预测框完全位于图像内。
-
降序排列:根据置信度对解码后的预测框进行降序排列。
-
选择Top-k:选取排在前k个的预测框进行后续处理,k的值取决于实际应用的需求。
-
非极大值抑制(NMS):使用NMS算法移除那些具有高度重叠并且置信度较低的预测框。这一步骤是为了确保每个物体只被检测一次。
-
最终检测框:NMS过后剩余的预测框就是最终的检测结果。
在实际应用中,IoU阈值、置信度阈值、Top-k的值和NMS阈值都是可调的超参数,可以根据不同的应用场景进行优化。
在SSD(Single Shot MultiBox Detector)模型中,"clip"这一步骤指的是将预测框的坐标限制在图像边界内。由于模型的预测可能会生成超出原始图像边界的框坐标,"clip"操作确保所有的预测框坐标都不会超过图像的宽度和高度。
具体来说,如果预测框的某个坐标(比如左上角的x坐标)小于0,那么这个坐标会被设置为0;同样地,如果预测框的某个坐标(比如右下角的x坐标)大于图像的宽度,那么这个坐标会被设置为图像的宽度。这个过程适用于框的所有四个坐标(左上角的x和y,右下角的x和y)。
"clip"操作是预测后处理的一部分,它在预测框解码后进行,确保了检测结果在逻辑上是合理的,因为检测框不可能存在于图像的外部。这也有助于后续的非极大值抑制(NMS)步骤,因为它依赖于框的准确坐标来计算重叠度
5 简单总结
1. 使用anchor box作为候选框,特定的anchor box的计算规则;
2. 在不同层次的feature map上提取anchor box,用来预测不同尺度大小的图像;
3. 在同一个feature map上,使用不同高宽比的anchor box;
4. 使用膨胀卷积增大感受野;
5. 正负样本的划分方式;