SSD解读-lidawei0124

SSD解读-lidawei0124

学习笔记

1 优点:

快,准 58fps 72.1%

取消了RPN(region proposal network)区域生成网络

把边界框的输出(以一个点为中心的边界框有无穷多个),经过离散化为默认的4-9个(实际操作中选择和真实框重叠度最高的那个)

2 网络结构:

基于前馈卷积网络, 产生固定大小的边界框,以及框中对象类别的分数然后是非极大值抑制,以产生最终检测

基础网络+额外特征层(层尺寸逐渐减小(这样做不仅仅是为了减少计算与内存的需求,还有个好处就是,最后提取的 feature map 就会有某种程度上的平移与尺度不变性。))(可以得到不同尺度检测的预测值)

ssd在基础网络的末尾添加了几个特征层,这些层预测了不同尺度和宽高比对默认框的偏移及相关自信度

知识补充:

高和宽减半块

为了在多尺度检测目标,下面定义高和宽减半块。它串联了两个填充为 1 的 3×3 卷积层和步幅为 2 的 2×2 最大池化层。我们知道,填充为 1 的 3×3 卷积层不改变特征图的形状,而后面的池化层直接将特征图的高和宽减半。由于 1×2+(3−1)+(3−1)=6,输出特征图中每个单元在输入特征图上的感受野形状为 6×6。可以看出,高和宽减半块使得输出特征图中每个单元的感受野变得更广阔。

3 损失函数:

4 算法流程:

5 SSD提高精度的方法:

5.1. 数据增强:包括水平翻转、裁剪、放大和缩小等。论文明确指出,数据增强可以明显的提高算法的性能

5.2. Hard Negative Mining技术:将正负样本的比例控制在positive:negative=1:3,这样会取得更好的效果。如果我们不加控制的话,很可能会出现Sample到的所有样本都是负样本

5.3. 匹配策略(即如何重多个default box中找到和ground truth最接近的box)

知识补充:

交并比

我们刚刚提到某个锚框较好地覆盖了图像中的狗。如果该目标的真实边界框已知,这里的“较好”该如何量化呢?一个直观的方法是衡量锚框和真实边界框之间的相似度。我们知道,Jaccard 系数(Jaccard index)可以衡量两个集合相似度。给定集合  和 ,它们的 Jaccard 系数即二者交集大小除以二者并集大小:

J(,)=|∩||∪|.

实际上,我们可以把边界框内的像素区域看成是像素的集合。如此一来,我们可以用两个边界框的像素集合的 Jaccard 系数衡量这两个边界框的相似度。当衡量两个边界框的相似度时,我们通常将 Jaccard 系数称为交并比(Intersection over Union,简称 IoU),即两个边界框相交面积与相并面积之比,如图 9.2 所示。交并比的取值范围在 0 和 1 之间:0 表示两个边界框无重合像素,1 表示两个边界框相等。

交并比是两个边界框相交面积与相并面积之比。

在本节的剩余部分,我们将使用交并比来衡量锚框与真实边界框,以及锚框与锚框之间的相似度。

Defalut box

图8 default bounding box

如上图所示,在特征图的每个位置预测K个BB,对于每一个BB,预测C个类别得分,以及相对于Default box的4个偏移量值,这样总共需要(C+4)* K个预测器,则在m*n的特征图上面将会产生(C+4)* K * m * n个预测值。

为了训练目标检测模型,我们需要为每个锚框标注两类标签:一是锚框所含目标的类别,简称类别;二是真实边界框相对锚框的偏移量,简称偏移量(offset)。

有一个问题: 如何找到与当前猫框所匹配的真实边界框?

我们知道,在目标检测的训练集中,每个图像已标注了真实边界框的位置以及所含目标的类别。在生成锚框之后,我们主要依据与锚框相似的真实边界框的位置和类别信息为锚框标注。那么,该如何为锚框分配与其相似的真实边界框呢?

具体就牵涉到后面的匹配策略:

假设图像中锚框分别为 A1,A2,…,Ana,真实边界框分别为 B1,B2,…,Bnb,且 na≥nb。定义矩阵 X∈ℝna×nb,其中第 i 行第 j 列的元素 xij 为锚框 Ai 与真实边界框 Bj 的交并比。 首先,我们找出矩阵 X 中最大元素,并将该元素的行索引与列索引分别记为 i1,j1。我们为锚框 Ai1 分配真实边界框 Bj1。显然,锚框 Ai1 和真实边界框 Bj1 在所有的“锚框—真实边界框”的配对中相似度最高。接下来,将矩阵 X 中第 i1 行和第 j1 列上的所有元素丢弃。找出矩阵 X 中剩余的最大元素,并将该元素的行索引与列索引分别记为 i2,j2。我们为锚框 Ai2 分配真实边界框 Bj2,再将矩阵 X 中第 i2行和第 j2 列上的所有元素丢弃。此时矩阵 X 中已有两行两列的元素被丢弃。 依此类推,直到矩阵 X 中所有 nb 列元素全部被丢弃。这个时候,我们已为 nb 个锚框各分配了一个真实边界框。 接下来,我们只遍历剩余的 na−nb 个锚框:给定其中的锚框 Ai,根据矩阵 X 的第 i 行找到与 Ai 交并比最大的真实边界框 Bj,只有当该交并比大于预先设定的阈值时,才为锚框 Ai 分配真实边界框 Bj。

如图 9.3(左)所示,假设矩阵 X 中最大值为 x23,我们将为锚框 A2 分配真实边界框 B3。然后,丢弃矩阵中所有第 2 行第 3 列的元素,找出剩余阴影部分的最大元素 x71,为锚框 A7 分配真实边界框 B1。接着如图 9.3(中)所示,丢弃矩阵中所有第 7 行第 1 列的元素,找出剩余阴影部分的最大元素 x54,为锚框 A5 分配真实边界框 B4。最后如图 9.3(右)所示,丢弃矩阵中所有第 5 行第 4 列的元素,找出剩余阴影部分的最大元素 x92,为锚框 A9 分配真实边界框 B2。之后,我们只需遍历除去 A2,A5,A7,A9 的剩余锚框,并根据阈值判断是否为剩余锚框分配真实边界框。

为锚框分配真实边界框。

现在我们可以标注锚框的类别和偏移量了。如果一个锚框 A 被分配了真实边界框 B,将锚框 A 的类别设为 B 的类别,并根据 B 和 A 的中心坐标相对位置以及两个框的相对大小为锚框 A 标注偏移量。由于数据集中各个框的位置和大小各异,这些相对位置和相对大小通常需要一些特殊变换,才能使偏移量的分布更均匀从而更容易拟合。设锚框 A 及其被分配的真实边界框 B 的中心坐标分别为(xa,ya),(xb,yb),A 和 B 的宽分别为 wa,wb,高分别为 ha,hb,一个常用的技巧是将 A 的偏移量标注为

⎛⎝⎜⎜xb−xawa−μxσx,yb−yaha−μyσy,logwbwa−μwσw,loghbha−μhσh⎞⎠⎟⎟,

其中常数的默认值为 μx=μy=μw=μh=0,σx=σy=0.1,σw=σh=0.2。如果一个锚框没有被分配真实边界框,我们只需将该锚框的类别设为背景。类别为背景的锚框通常被称为负类锚框,其余则被称为正类锚框。

5.4. Atrous Algothrim(获得更加密集的得分映射)

图13 Atrous Algothrim理解1

作用:既想利用已经训练好的模型进行fine-tuning,又想改变网络结构得到更加dense的score map。同时是特征图变大,同时也使得感受野变大(同时变大)

6 各部件对性能的影响:

7 其他补充:

VGG16 :

长宽从224到112 到56到28到14到7到1,但是通道从3 到64到128到256到512到4096到1000

基础网络VGG16+额外特征层:

猜你喜欢

转载自blog.csdn.net/lidawei0124/article/details/84203994
今日推荐