yolo是单阶段检测算法的开山之作,最初的yolov1是在图像分类网络的基础上直接进行的改进,摒弃了二阶段检测算法中的RPN操作(基于滑窗的无类别object检测器),该算法不是先对图像进行区域划分再进行卷积提特征分类,直接对输入图像进行端到端的分类预测和回归,所以它相对于二阶段的目标检测算法而言,速度非常的快,但是精度会低很多;但是在迭代到目前的V4、V5版本后,yolo的精度已经可以媲美甚至超过二阶段的目标检测算法,同时保持着非常快的速度,是目前工业界内最受欢迎的算法之一。yolo的核心思想是将输入的图像经过backbone特征提取后,将得到的特征图划分为S x S的网格,物体的中心落在哪一个网格内,这个网格就负责预测该物体的置信度、类别以及坐标位置。
具体优势有:
1、为了缩小对象检测的范围,对图像进行小方格划分,使对象最好都能够分配到一个属于它的小方格中,判断依据是对象的中 心点是否在划分的方格中。这样输出的检测结果更准确,所以检测性能好;
2、当输入一张图片,通过网络卷积核池化,会输出一个nxnxm的三维矩阵,且1x1xm刚好代表一个小方格所检测出来的对象和类别,这样yolo检测算法速度就快了。
3、非极大值抑制,可以用IOU来在预测的bounding box中选出最终的答案。如果有n个同类的对象,则利用一次非极大值抑制就会得到n个概率高的输出(IOU小于0.5),如果有n个不同的对象,则需要循环迭代n次非极大值抑制算法;
4、Anchor box:解决两个对象中心点落在同一个小方格中的问题。假设一数据集有n个anchor box,有两个中心点落在了同一个方格中,则那个bounding box与anchor box的IoU最大,就放到对应anchor box的位置。但是anchor box对两个对象以上中心点落在同一个小方格的效果不好。