前语
在深度学习学习进程,学习理论和读懂源码都是同等重要的,之前看了许多 paper,也积累了许多理论知识,不过确实的要落实到代码上,仍是无从下手,仍是逗留在用的层面上。最近自在时间比较多,所以也想静下心来,经过完成一些经典框架来培养自己将 paper 转为 code 的能力。
方位丢失函数
这部分内容是之前上一篇文章关于方位丢失的补充
这里采用了 L1smoothL_1^{smooth} 丢失函数
回归参数 txjt_{x^j} 表明第 jj 个 GT 框中心点 x 偏移量 GT gxjg_x^j 减去第 ii 个默许框 pxip_{x^i} 的差除以第 ii 默许框的宽度,那么 twjt_{w^j}
默许框(Default box)的缩放标准和宽高比
在 SSD 供给不同巨细特征图,这样规划是为了能够检测出不同巨细的方针。在不同标准的特征图下,怎么界说默许框(default box)的标准和宽高比呢? 这是这部分内容要回答的问题,在 SSD 中,是有
值得注意在 SSD 这里每一个网格会给出一些默许框(Default box),这里名字和锚框区分一下
在靠前(左侧)的特征图,也便是分辨率比较高的特征图主要用来检测比较小的方针,而靠后(右侧)特征图主要用来检测比较大的方针。
这里供给一个核算公式
核算 SkS_k 的公式
这里 SminS_{min} 和 SmaxS_{max} 别离的缩放份额别离是 0.2 和 0.95 ,
- kk 表明第 k 特征层,那么 k 取值规模也便是 1 到 m,当 k 取 1 时,SkS_k = SminS_{min},当 kk 取 m 时分 SkS_k 就等于 SmaxS_{max} 这一点不难看出
- 假设 Smin=0.2S_{min} = 0.2,Smax=0.95S_{max} = 0.95 和 m=6m=6 条件下,那么公式就等于
ara_r
关于 ara_r 的取值如下
举一个例子
仍是以上面 Smin=0.2S_{min} = 0.2、Smax=0.95S_{max} = 0.95、m=6m=6 和 ara_r 取值作为已知条件来核算当 k=1,ar=12k=1, a_r = \frac{1}{2} 时分份额。
这里还得特别阐明一下,在当 ar=1a_r = 1 时分,还会额定添加一个默许的默许框(default box),这个锚框核算份额用 Sk′S^{\prime}_k 来表明,和 SkS_k 核算的公式约有不同
那么也便是说每一个锚点都供给 5 + 1 也便是 6 默许的默许框。其实代码完成与 paper 上关于标准和宽高比略有不同。
这里还要阐明一下,在图上橘黄色表明输出特征层上,仅有 4 个 default box 别离是 (1,2,12)(1,2,\frac{1}{2}) 而其他方位输出特征层上 default box 为 6 个 1,2,12,3131, 2, \frac{1}{2}, 3 \frac{1}{3}
关于默许框中心点的取值
那么关于中心点又该怎么取值呢? 咱们知道不同特征图巨细不同,fkf_k 这里下标表明第 k 层输出特征图,i,j∈[0,∣fk∣]i,j \in [0,|f_k|],那么默许框(Default box)默许中心点坐标 cx,cyc_x,c_y 就能够用下面公式来核算
下面经过一张表来展现特征图中默许框
特征层 | 特征层的巨细 | 默许框尺度 | 默许框宽高比 | 默许框数量 |
---|---|---|---|---|
1 | 383838 \times 38 | 21 | 1,2,1/2 | 3838438 \times 38 \times 4 |
2 | 191919 \times 19 | 45 | 1,2,3,1/2,1/3 | 1919619 \times 19 \times 6 |
3 | 101010 \times 10 | 99 | 1,2,3,1/2,1/3 | 1010610 \times 10 \times 6 |
4 | 555 \times 5 | 153 | 1,2,3,1/2,1/3 | 5565 \times 5 \times 6 |
5 | 333 \times 3 | 207 | 1,2,1/2 | 3343 \times 3 \times 4 |
6 | 111 \times 1 | 261 | 1,2,1/2 | 1141 \times 1 \times 4 |
咱们能够结合上面这张图来解说
- 较远处方针,有 1 个特征图担任猜测,也便是会给出 4 个默许框(default boxes)别离是 1,2,1/2 还有在不份额下核算的份额为 1 的边界框
- 较近处的方针,或许由 4 特征图担任猜测,那么便是给出 6 默许框
推理
咱们知道在 SSD 一共有 6 输出特征层,那么怎么在在 6 个输出特征层上进行猜测呢?其实运用一个 333 \times 3 的卷积进行猜测每一个方位的输出。
在推理进程中,例如关于mnpm\times n\times p 这里 m 和 n 是特征层的巨细,而 p 为通道数,在猜测进程中,会用 33p3 \times 3 \times p 卷积核来猜测分类和边界框相关于默许框的偏移量。运用这样卷积核数量是根据猜测输出数据结构所确认的,每一个方位会为 k 个默许框每一个默许框输出一个类别概率分布和 一个中心点和宽高偏移量的值。那么也便是 k(c+4)k(c + 4)。
注意这里 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
我正在参加技能社区创作者签约计划招募活动,点击链接报名投稿。