前言
在深度学习学习过程,学习理论和读懂源码都是同等重要的,之前看了许多 paper,也积累了许多理论知识,不过当真的要落实到代码上,还是无从下手,还是停留在用的层面上。最近自由时间比较多,所以也想静下心来,通过实现一些经典框架来培养自己将 paper 转为 code 的能力。
位置损失函数
这部分内容是之前上一篇文章关于位置损失的补充
这里采用了 损失函数
回归参数 表示第 个 GT 框中心点 x 偏移量 GT 减去第 个默认框 的差除以第 默认框的宽度,那么
默认框(Default box)的缩放尺度和宽高比
在 SSD 提供不同大小特征图,这样设计是为了能够检测出不同大小的目标。在不同尺度的特征图下,如何定义默认框(default box)的尺度和宽高比呢? 这是这部分内容要回答的问题,在 SSD 中,是有
值得注意在 SSD 这里每一个网格会给出一些默认框(Default box),这里名字和锚框区分一下
在靠前(左侧)的特征图,也就是分辨率比较高的特征图主要用来检测比较小的目标,而靠后(右侧)特征图主要用来检测比较大的目标。
这里提供一个计算公式
计算 的公式
这里 和 分别的缩放比例分别是 0.2 和 0.95 ,
- 表示第 k 特征层,那么 k 取值范围也就是 1 到 m,当 k 取 1 时, = ,当 取 m 时候 就等于 这一点不难看出
- 假设 , 和 条件下,那么公式就等于
关于 的取值如下
举一个例子
还是以上面 、、 和 取值作为已知条件来计算当 时候比例。
这里还得特殊说明一下,在当 时候,还会额外添加一个默认的默认框(default box),这个锚框计算比例用 来表示,和 计算的公式约有不同
那么也就是说每一个锚点都提供 5 + 1 也就是 6 默认的默认框。其实代码实现与 paper 上关于尺度和宽高比略有不同。
这里还要说明一下,在图上橘黄色表示输出特征层上,仅有 4 个 default box 分别是 而其他位置输出特征层上 default box 为 6 个
对于默认框中心点的取值
那么对于中心点又该如何取值呢? 我们知道不同特征图大小不同, 这里下标表示第 k 层输出特征图,,那么默认框(Default box)默认中心点坐标 就可以用下面公式来计算
下面通过一张表来展示特征图中默认框
特征层 | 特征层的大小 | 默认框尺寸 | 默认框宽高比 | 默认框数量 |
---|---|---|---|---|
1 | 21 | 1,2,1/2 | ||
2 | 45 | 1,2,3,1/2,1/3 | ||
3 | 99 | 1,2,3,1/2,1/3 | ||
4 | 153 | 1,2,3,1/2,1/3 | ||
5 | 207 | 1,2,1/2 | ||
6 | 261 | 1,2,1/2 |
我们可以结合上面这张图来解释
- 较远处目标,有 1 个特征图负责预测,也就是会给出 4 个默认框(default boxes)分别是 1,2,1/2 还有在不比例下计算的比例为 1 的边界框
- 较近处的目标,可能由 4 特征图负责预测,那么就是给出 6 默认框
推理
我们知道在 SSD 一共有 6 输出特征层,那么如何在在 6 个输出特征层上进行预测呢?其实使用一个 的卷积进行预测每一个位置的输出。
在推理过程中,例如对于 这里 m 和 n 是特征层的大小,而 p 为通道数,在预测过程中,会用 卷积核来预测分类和边界框相对于默认框的偏移量。使用这样卷积核数量是根据预测输出数据结构所确定的,每一个位置会为 k 个默认框每一个默认框输出一个类别概率分布和 一个中心点和宽高偏移量的值。那么也就是 。
注意这里 c 是包括背景,例如对于 pascal VOC 20 个类别来说,C 就应该是 20 + 1 = 21,对于每一个默认框只有 4 的位置回归,这个与类别无关
正负样本不均衡
现在来看一看在 SSD 中,是如何解决正负样本不均衡的问题,那么在 SSD 关于正负样本定义又是如何定义的呢?
- 正样本: 对于正样本选择,只要满足以下两个条件之一即可,默认框(default box)与真实框(ground truth)的 IoU 最大的默认框,还有就是对于默认框只要满足与任意真实框的 IoU 大于 0.5
- 负样本: 其实不满足正样本的默认框都应该计算为负样本,之前我们已经计算过了一共生成了 8700 多个默认框,所以还需要在这么多负样本中筛选,通过 high confidence loss 进行排序,这里 confidence loss 越大也就是网络越容易将其预测为正样本的概率越大(也就是默认框在背景处却给出很高存在目标的分数),然后按照排序从负样本中选取数量,选取的负样本数量和正样本数量保持 3:1 的比例。
这里负样本通常是 IoU 小于 0.3 的默认框会记做负样本。
Atrous/Dilated Convolution
膨胀卷积也称空洞卷积,关于这可能以后会用一次分享来解释,这里现在只是清楚用来进行上采样,这里采用膨胀卷积主要加快速度,并且增加了视野域,这里关于膨胀卷积不做为重点,如果想了更多关于膨胀卷积(Dilated Convolution)的信息可以去看 SAPP 这篇论文。
参考文献
- SSD: Single Shot MultiBox Detector
我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿。