YOLO系列的目标检测算法相较于R-CNN系列的目标检测算法,最明显的优势就是检测速度快,同时YOLO采用端到端的设计思路,让它的模型更加的容易理解,它的主要思想就是将目标检测问题转换成一个回归问题,从回归的结果中得到预测框的位置以及预测框中包含的物体类别。
下面将对YOLOv1进行讲解:
1、网络架构
从上图中,我们可以知道整个YOLOv1的网络架构。首先,输入一张图片,经过主干特征提取网络得到特征图,随后对特征图进行一系列的卷积操作,这是为了对提取到的特征进行加强,之后与全连接层进行连接,再reshape成的形状,就得到了模型想要的输出。
2、对模型输出结构进行解释
<1>、为什么模型最后输出的形状是
这是因为,YOLOv1将输入图片划分成的网格,在每个网格当中需要预测两个bounding box,每个bounding box除了自己的位置信息之外,还需要预测出一个confidence,也就是每个bounding box包含5个值(x,y,w,h,confidence)。同时每个网格需要预测出该网格中包含物体的种类信息,共两个bounding box使用(注意,这里与YOLOv2、v3都不同,这也是YOLOv1如果网格中包含两个物体只能检测出一个的原因)。这样,我们就知道了=+(YOLOv1实现的是20分类)
<2>、confidence表示的含义
confidence包含两重含义,第一重就是该网格是否负责预测物体。在YOLO目标检测算法中都这样规定,如果物体真实框的中心落在了某个网格当中,那么就由该网格负责预测。负责预测Pr=1,不负责预测Pr=0。第二重就是如果负责预测,那么产生的预测框到底准不准,这里的准不准是通过与真实框的IOU值来衡量的。
<3>、计算每个bounding box的得分
我们将每个网格预测出的分类信息与bounding box预测出的condidence信息进行相乘,就可以得到每个bounding box的得分:
通过每个bounding box的得分信息,我们会筛选出哪些得分比较高的预测框,然后再对这些预测框进行非极大值抑制,以得到最终的预测框
3、负责预测的概念
如果一个物体的中心点落在了某个网格当中,每个网格当中又会预测出两个bounding box,那么是这两个bounding box都会负责预测这个物体吗?
YOLOv1的做法是:求bounding box与ground true box的IOU,选择那个IOU值大的bounding box来负责预测物体,主要是因为这个bounding box更逼近ground true box,可以更快的收敛。这种做法称作bounding box predictor的specialization(专职化)。
如果一张图片中包含3个物体,也就是有3个ground true box,而我们预测会产生772=98个bounding box,在这98个bounding box当中,只有三个bounding box是负责预测物体的,其他的都不负责预测物体。(因此会产生负样本过多的情况,那么通过计算负样本与ground true box的IOU值,然后设置IOU阈值,小于阈值的负样本得以保留,大于阈值的负样本就忽略,这样就可以使得正负样本达到平衡。)
4、损失函数
从上面的损失函数可以知道,YOLOv1的损失函数包含三个部分:位置回归损失、置信度损失、分类损失,其中位置回归损失和分类损失只计算正样本,而置信度损失要计算正负样本
5、总结
看完YOLOv1之后最大的感受就是,它不再需要候选框了,直接通过神经网络就预测bounding box,非常的直接。但是由于它对相互靠的很近的物体,还有小的物体检测效果不好,这是因为一个网格中只预测两个框,并且只能预测出一个类别,主要原因就是没有多尺度特征融合以及使用anchor box机制,在YOLOv2、v3中就进行了加强。