Anchor Boxes
如果我们想让一个格子检测出多个对象,我们怎么做呢?
假设你有这样一张图片,对于这个例子,我们继续使用 3×3 网格,注意行人的中点和汽车的中点几乎在同一个地方,两者都落入到同一个格子中。所以对于那个格子,如果 y 输出这个向量,对于检测这三个类别,行人、汽车和摩托车,它将无法输出检测结果,所以我必须从两个检测结果中选一个。
anchor box 的思路是,像这样子,预先定义两个不同形状的 anchor box,或者 anchor box 形状,你要做的是把预测结果和这两个 anchor box 关联起来,一般来说,你可能会用更多的 anchor box,然后定义类别标签,用的向量不再是上面这个:,而是重复两次:,
前面的pc、bx、by、bh、bw、 c1、 c2,、c3是和 anchor box 1 关联的 8 个参数,后面的 8 个参是和 anchor box 2 相关联。因为行人的形状更类似于 anchor box 1 的形状,而不是 anchor box 2 的形状,所以你可以用这 8 个数值(前8 个参数),,这么编码pc = 1,代表有个行人,用bx、by、bh和bw来编码包住行人的边界框,然后用c1, c2, c3(c1 = 1, c2 = 0, c3 = 0)来说明这个对象是个行人。同样用后面的8个参数来标记汽车。
每个对象都和之前一样分配到同一个格子中,分配到对象中点所在的格子中,以及分配到和对象形状交并比最高的 anchor box中,所以这里有两个 anchor box,你就取这个对象,然后你观察哪一个 anchor box 和实际边界框的交并比更高,不管选的是哪一个,这个对象不只分配到一个格子,而是分配到一对,这就是对象在目标标签中的编码方式,因此我们看到的y现在是 16 维的,如果我们有更多对象,那么y 的维度会更高。