前语

深度学习学习进程,学习理论和读懂源码都是同等重要的,之前看了许多 paper,也积累了许多理论知识,不过确实的要落实到代码上,仍是无从下手,仍是逗留在用的层面上。最近自在时间比较多,所以也想静下心来,经过完成一些经典框架来培养自己将 paper 转为 code 的能力。

方位丢失函数

这部分内容是之前上一篇文章关于方位丢失的补充

这里采用了 L1smoothL_1^{smooth} 丢失函数

txj=(gxj−pxi)/pwityj=(gyj−pyi)/phitwj=log⁡(gwj/pwi)thj=log⁡(ghj/phi)t_x^j = (g_x^j – p_x^i)/p_w^i\\ t_y^j = (g_y^j – p_y^i)/p_h^i\\ t_w^j = \log(g_w^j/p_w^i)\\ t_h^j = \log(g_h^j/p_h^i)

回归参数 txjt_{x^j} 表明第 jj 个 GT 框中心点 x 偏移量 GT gxjg_x^j 减去第 ii 个默许框 pxip_{x^i} 的差除以第 ii 默许框的宽度,那么 twjt_{w^j}

默许框(Default box)的缩放标准和宽高比

在 SSD 供给不同巨细特征图,这样规划是为了能够检测出不同巨细的方针。在不同标准的特征图下,怎么界说默许框(default box)的标准和宽高比呢? 这是这部分内容要回答的问题,在 SSD 中,是有

目标检测系列(3)—又一个 one stage 的目标检测模型—SSD(下)

值得注意在 SSD 这里每一个网格会给出一些默许框(Default box),这里名字和锚框区分一下

在靠前(左侧)的特征图,也便是分辨率比较高的特征图主要用来检测比较小的方针,而靠后(右侧)特征图主要用来检测比较大的方针。

这里供给一个核算公式

(wka,hka)=(skar,sk/ar)(w_k^a,h_k^a) = (s_k\sqrt{a_r},s_k/\sqrt{a_r})

目标检测系列(3)—又一个 one stage 的目标检测模型—SSD(下)

核算 SkS_k 的公式
Sk=Smin+Smax−Sminm−1(k−1)S_k = S_{min} + \frac{S_{max} – S_{min}}{m – 1}(k-1)

这里 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.95m=6m=6 条件下,那么公式就等于
Sk=0.2+0.95−0.26−1(k−1)=0.2+0.15(1−k)S_k = 0.2 + \frac{0.95 – 0.2}{6-1}(k-1) = 0.2 + 0.15(1-k)
ara_r

关于 ara_r 的取值如下

ar∈{1,2,3,12,13}a_r \in \{1,2,3,\frac{1}{2},\frac{1}{3}\}
举一个例子

仍是以上面 Smin=0.2S_{min} = 0.2Smax=0.95S_{max} = 0.95m=6m=6ara_r 取值作为已知条件来核算当 k=1,ar=12k=1, a_r = \frac{1}{2} 时分份额。

S4=0.2+0.15(4−1)=0.65w4a=0.651/2=0.46h4a=0.65/1/2=0.92S_4 = 0.2 + 0.15(4-1) = 0.65\\ w_4^a = 0.65 \sqrt{1/2} = 0.46\\ h_4^a = 0.65 / \sqrt{1/2} = 0.92

这里还得特别阐明一下,在当 ar=1a_r = 1 时分,还会额定添加一个默许的默许框(default box),这个锚框核算份额用 Sk′S^{\prime}_k 来表明,和 SkS_k 核算的公式约有不同

Sk′=SkSk+1S_k^{\prime} = \sqrt{S_kS_{k+1}}
S5=0.2+0.15(1−5)=0.8S4=S4S5=0.650.8=0.72S_{5} = 0.2 + 0.15(1-5) = 0.8 \\ S_4 = \sqrt{S_4S_5} = \sqrt{0.65\times 0.8} =0.72

那么也便是说每一个锚点都供给 5 + 1 也便是 6 默许的默许框。其实代码完成与 paper 上关于标准和宽高比略有不同。

目标检测系列(3)—又一个 one stage 的目标检测模型—SSD(下)

这里还要阐明一下,在图上橘黄色表明输出特征层上,仅有 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 就能够用下面公式来核算

(cx,cy)=(i+0.5∣fk∣,j+0.5∣fk∣)(c_x,c_y) = \left( \frac{i+0.5}{|f_k|},\frac{j+0.5}{|f_k|} \right)

下面经过一张表来展现特征图中默许框

特征层 特征层的巨细 默许框尺度 默许框宽高比 默许框数量
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

目标检测系列(3)—又一个 one stage 的目标检测模型—SSD(下)

咱们能够结合上面这张图来解说

  • 较远处方针,有 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

我正在参加技能社区创作者签约计划招募活动,点击链接报名投稿。