Skip to the content.

D2L 锚框

Contact me


锚框

图像高h,宽w,以每个像素为中心生成不同形状的锚框。大小$s\in (0,1]$,宽高比$r > 0$,锚框的宽高为$ws\sqrt{r}$和$hs\sqrt{r}$。

设定一组大小 $s_1, \dots, s_n$,一组宽高比$r_1,\dots, r_m$。那么可以得到$whnm$个锚框。由于计算复杂度高,因此只使用包含$s_1$或$r_1$的组合:

\[(s_1, r_1), (s_1, r_2), \dots, (s_1, r_m)\]

\[(s_2, r_1), (s_3, r_1), \dots, (s_n, r_1)\]

一共$n+m-1$个,整个图像一共$wh(n+m-1)$。

交并比

\[J(A,B) = \frac{A \cap B}{A \cup B}\]

标注训练集的锚框

每个锚框需要标注两类标签:锚框所含目标的类别,真实边界框相对锚框的偏移量。如何为锚框分配相似的真是边界框?

设锚框为$A_1,A_2,\dots,A_{n_a}$,真实边界框为$B_1,B_2,\dots,B_{n_b}$,$n_a \ge b_b$。定义矩阵为$\mathbf{X} \in \mathbb{R}^{n_a \times n_b}$,其中$x_{ij}$为锚框$A_i$和$B_j$的交并比。首先找到$\mathbf{X}$中的最大元素,坐标为$i_1,j_1$,给锚框$A_{i_1}$分配真实边界框$B_{j_1}$。显然这个匹配对相似度最高。接下来将该行和该列的元素丢弃,找到剩余最大元素,然后同样找最匹配的。直到全部丢弃。这样给$n_b$个锚框各分配了一个真实边界框。

接下来,遍历剩余的$n_a - n_b$个锚框,给定 $A_i$,根据第i行找到交并比最大的真实边界框$B_j$,大于阈值,为$A_i$分配真实边界框$B_j$。

如果锚框$A$分配了边界框$B$,将$A$的类别设为$B$的类别,根据$B$和$A$的中心坐标相对位置和相对大小标注偏移量。由于位置大小各异,需要变换让偏移量分布更均匀。设锚框$A$和边界框$B$的中心坐标为$(x_a,y_a)$和$(x_b,y_b)$,宽分别为$w_a$和$w_b$,高为$h_a$和$h_b$。常用技巧是:

\[(\frac{\frac{x_b - x_a}{w_a} - \mu_x}{\sigma_x}, \frac{\frac{y_b - y_a}{w_a} - \mu_y}{\sigma_y},\frac{\log \frac{w_b}{w_a} - \mu_w}{\sigma_w},\frac{\log \frac{h_b}{h_a} - \mu_h}{\sigma_h})\]

如果没有分配到边界框,类别设置为背景。

输出预测边界框

锚框数量较多时,同一个目标上可能输出较多预测边界框。为了使效果简洁,可以移除相似的预测边界框。方法为非最大值抑制(NMS)。

对于边界框$B$,模型计算各个类别的预测概率。设最大的预测概率为p,对应的类别为预测类别,也称为置信度。同一个图像上,非背景的置信度从高到低排序得到列表$L$。从$L$中选取置信度高的预测边界框$B_1$作为基准,与$B_1$交并比大于某阈值的非基准预测边界框从$L$中移除。接下来选取置信度第二高的预测边界框$B_2$为基准,结冰比大于某阈值的非基准边界框移除。直到$L$中所有的预测边界框都曾作为基准。