建立Anchor Boxex的目的: 是为了处理两个或多个对象出现在同一个格子(候选框)的情况。
行人的中点和汽车的中点在同一个格子中, 对于那个格子y输出向量为[pc, bx,by,bh,bw,c1,c2,c3],此时这个方格中分类会有两个输出为1, 表示这个格子有两个物体。
例如: 首先,需要预先定义2个不同形状的anchor box,(一般来说可能会遇到更多anchor box, 如5个甚至更多),现在要做的是定义类别标签y,y标签如下:(前8个表示anchor box 1),
因为行人的形状更像anchor box 1, 所以前8个值用来表示行人, 后面8个值用来表示汽车边界框等等。
总结:
不适用anchor box:
1. 对于训练集图像中的每个对象都根据那个对象中点位置,分配到对应的格子中,图片是3*3的,所以每个格子输出3*3*8的向量, 3*3表示训练集划分成3*3的格子, *8表示一个向量,有pc, 位置坐标, 和c1,c2,c3三个分类
使用anchor box:
1.现在每个对象分配到对应的格子中, 每个对象分配到对应的格子,还分配一个对应的anchor box,(这个anchor box是和对象形状IoU值较高的anchor box,人为选择),所以如果你的对象是一个长方形,此时有多个anchor box,人为观察哪一个anchor box的形状与对象的形状IoU值更高, 那个anchor box就分配给这个对象。 所以现在的输出y=3*3*16=3*3*2*8,因为有2个anchor box,y是8维的,
举例:
所以行人更适合Anchor box 1的形状,我们将行人分配到向量的上半部分, 下半部分表示汽车的预测, y表示某一个格子(候选框)的输出,
假设此时某一个格子(候选框)只有汽车, 那么它的输出 y=[0??????? 1 bx by bh bw 0 1 0 ]这样的向量, 因为这个格子没有行人,所以anchor box 1 的pc=0, 那么它的 位置和分类就不重要了,只关系anchor box 2的汽车向量就好了。