YOLOv2 的时候,作者在 YOLOv1 的基础上运用了许多有效的 tricks,所以展示了它的 better、faster、stronger 因素,到了 YOLOv3 的时候,这个模型仍然在进化,保持速度的同时,把准确率给提升了许多。
速度始终是YOLO系列安身立命之本.
我面试过许多的求职者,大家在日常工作当中,最常用的模型还是 YOLO,这说明 YOLO 真的成为了工业界的事实标准,尤其是在边缘设备。
这是极具挑衅的一张性能对比图。
以实时性要求为分界,这世界上只有 2 种算法,YOLOv3 和其它。
他山之石可以攻玉
YOLO 作者是个很实诚的人,在论文中有解释道 YOLOv3 的改进借助于其他同行的很多 ideal。
bbox 预测
从 YOLOv2 开始,预测 bbox 就是借助于 anchor box。
anchor box 是通过尺寸聚类计算出来的。
每一个 bbox 预测 5 个数值,前 4 个为 tx,ty,tw,th,后 1 个为 ojectness score.
尺寸相关的预测值如下图:
tx,ty,tw,th 4 个是预测出来的值,最终通过上面公式得到归一化的数值:bx,by,bw,bh。
这里极具迷惑性的是,如何通过 bx,by,bw,bh 得到 bbox 的位置尺寸?
因为论文讲得不是很明白,所以需要结合自己的理解去做推断。
bx 是 tx 经过 sigmoid 转换,加上 cx 的结果。
因为 sigmoid 的函数取值是 0 到 1,所以 bx 的取值范围是 cx ~ cx + 1。
这显然不是在原始的输入图像上的位置关系。
实际上,YOLOv3 所有的检测都是在最后一层 featuremap 上的。
YOLOv3 产生了 3 个分支,分别产生了 13x13,26x26,52x52 三种尺寸的 featuremap。
每个 featuremap 的一个像素,也就一个点会生成 3 个 AnchorBox,所以,每个 AnchorBox 距离 featuremap 原点的距离也就是上图中的 cx,cy 是固定的,所以也可以解释了一些同学的疑问,cx 和 cy 要不要预测。
pw 和 ph 是 AnchorBox 的尺寸,这个尺寸也是基于 featuremap 而言的。
另外,有同学可能会注意 bw 和 bh 的公式。
b w = p w ∗ e t w b_{w} = p_{w}*e^{tw} b