Anchor Boxes算法介绍

主要参考吴恩达的深度学习教程
利用卷积滑窗检测时,如果出现多个物体,例如两个不同的物体(Anchor Box算法对更多的物体以及两个物体外形相似没有很好的应对办法)的中心点同时出现在一个单元格中,那么按照原有的算法只会输出一个物体,如下图所示,人和车的中心都位于同一个单元格的一个位置,这时就需要使用Anchor Boxes算法
Anchor Boxes算法介绍
Anchor Boxes的思路是对于不同的物体事先采用不同的框,例如人相对于车属于瘦高的,所以使用下图中的Anchor Box 1,相反车辆就使用Anchor Box 2.
之前输出的向量为y=[Px,bx,by,bh,bw,C1,C2,C3]y=[P_x,b_x,b_y,b_h,b_w,C_1,C_2,C_3],最后输出的矩阵大小(以下图为例)是(3,3,8),但是这样只能确定一个物体。
为了输出不同的物体,可以将上述结果重复输出分别对应两个Anchor Box,也就是y=[Px,bx,by,bh,bw,C1,C2,C3,Px,bx,by,bh,bw,C1,C2,C3]y=[P_x,b_x,b_y,b_h,b_w,C_1,C_2,C_3,P_x,b_x,b_y,b_h,b_w,C_1,C_2,C_3],输出矩阵是(3,3,16),也可以是(3,3,2,8)
Anchor Boxes算法介绍
总结起来Anchor Box算法和之前的算法区别如下:
之前的算法:
对于训练集图像中的每个对象,都根据那个对象的中点位置分配到对应的格子中,所以在上面的示例中输出y就是(3,3,8)
Anchor Boxes算法
现在每个对象都和之前一样分配到同一个格子中,即对象中心所在的格子。不同的是也需要分配到和对象形状交并比最高的Anchor Box
例如下图中的红色框不仅要分配到其中心所在的图像上的格子中,而且还需要分配到与其交并比最大的Anchor Box中,即竖条的紫色方格

Anchor Boxes算法介绍
需要注意的是例如有两个Anchor Box而单元格中只剩一个对象,则选取交并比高的,另一个的输出PcP_c则为0,如下图
Anchor Boxes算法介绍

本文中的例子最终输出结果如下所示
图中人的对应Anchor Box 1, 输出值对应图中的黄色字体;车辆同理,对应绿色字体
Anchor Boxes算法介绍