YOLO 算法

YOLO 算法

假设你要训练一个算法去检测三种对象,行人、汽车和摩托车,你还需要显式指定完整的背景类别。这里有 3 个类别标签,如果你要用两个 anchor box,那么输出 y 就是 3×3×2×8,其中 3×3 表示 3×3 个网格,2 是 anchor box 的数量,8 是向量维度,你可以将它看成是 3×3×2×8,或者 3×3×16。要构造训练集,你需要遍历 9 个格子,然后构成对应的目标向量y。

 YOLO 算法

先看看第一个格子(编号 1),里面没什么有价值的东西,行人、车子和摩托车,三个类别都没有出现在左上格子中,所以对应那个格子目标 y 就是这样的:

 YOLO 算法

第一个 anchor box 的 pc 是 0,因为没什么和第一个 anchor box 有关的,第二个 anchor box 的 pc也是 0。假设你的训练集中,对于车子有这样一个边界框(编号 3),水平方向更长一点。所以如果这是你的 anchor box,这是 anchor box 1(编号 4),这是 anchor box 2(编号 5),然后红框和 anchor box 2 的交并比更高,那么车子就和向量的下半部分相关,这里和 anchor box 1 有关的 pc是 0,剩下这些分量都是不关心,,然后你的第二个pc = 1,然后你要用这些(bx,by,bh,bw)来指定红边界框的位置,然后指定它的正确类别是 2(c1 = 0, c2 = 1, c3 = 0),对吧,这是一辆汽车,这就是神经网络做出预测的过程。

 YOLO 算法

所以你这样遍历 9 个格子,遍历 3×3 网格的所有位置,你会得到这样一个向量,得到一个 16 维向量,所以最终输出尺寸就是 3×3×16,然后你训练一个卷积网络,输入是图片,可能是 100×100×3,然后你的卷积网络最后输出尺寸是,在我们例子中是 3×3×16 或者3×3×2×8。最后你要运行一下这个非极大值抑制,如果你使用两个 anchor box,那么对于 9 个格子中任何一个都会有两个预测的边界框,其中一个的概率pc很低。但 9 个格子中,每个都有两个预测的边界框,比如说我们得到的边界框是是这样的,注意有一些边界框可以超出所在格子的高度和宽度,然后抛弃概率很低的预测。这就是 YOLO 对象检测算法,这实际上是最有效的对象检测算法之一。

上一篇:YOLO v3 从decode函数看v3如何预测图片中物体的位置


下一篇:YOLO V5创建属于自己的模型