了解YOLOv1

YOLO的基本思想

将输入的图像分成S×S个格子,若每个物体的Ground truth的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体,如下图:
了解YOLOv1
每个格子预测B个bounding box和其置信度,以及C个类别概率,bounding box信息包含5个数据值,分别是x,y,w,h,和confidence。其中x,y是指当前格子预测得到的物体的bounding box的中心位置的坐标。w,h是bounding box的宽度和高度。注意:实际训练过程中,w和h的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。
置信度反映是否包括物体及在包含物体下的准确性,定义为:
了解YOLOv1
若bounding box包含物体,则P(object) = 1;否则P(object) = 0。

检测

了解YOLOv1
检测分三步:

  1. 将图像缩放到448*448;
  2. 通过神经网络进行检测和分类
  3. NMS抑制,输出最终结果

YOLO网络结构

了解YOLOv1

1.YOLO检测网络包括24个卷积层和2个全连接层,其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。

2.YOLO网络最终的全连接层的输出维度是SS(B5 + C)。YOLO论文中,作者训练采用的输入图像分辨率是448x448,S=7,B=2;采用VOC 20类标注物体作为训练数据,C=20。因此输出向量为77*(20 + 2*5)=1470维.

损失函数

YOLO全部使用了均方和误差作为loss函数,由三部分组成:坐标误差、IOU误差和分类误差:
了解YOLOv1
每个图片的每个单元格不一定都包含object,如果没有object,那么confidence就会变成0,这样在优化模型的时候可能会让梯度跨越太大,模型不稳定。为了平衡这一点,在损失函数中,设置两个参数λ(corrd)=5和λ(noobj)=0.5,其中λcorrd控制bbox预测位置的损失,λnoobj控制单个格内没有目标的损失。
PS : x,y,w,C,p为网络预测值,x,y,w,C,p帽 为标注值

训练

  • 预训练。使用ImageNet1000类数据训练YOLO网络的前20个卷积层+1个average池化层+1个全连接层。训练图像分辨率resize到224x224。
  • 用步骤1)得到的前20个卷积层网络参数来初始化YOLO模型前20个卷积层的网络参数,然后用VOC 20类标注数据进行YOLO模型训练。为提高图像精度,在训练检测模型时,将输入图像分辨率resize到448x448。

训练细节

  • 最后一层使用的是标准的线性**函数,其他的层都使用leaky rectified linear activation:

总结

优点:
1.速度快。YOLO将物体检测作为回归问题进行求解,使用单个网络完成整个检测过程。
2.召回率低,表现为背景误检率低。YOLO可以get到图像的整体信息,相比于region proposal等方法,有着更广阔的“视野”。
3.泛化能力强,对其他类的东西,训练后效果也是挺好的。
缺点:
虽然YOLO中把物体检测的思路转成回归问题的思路可以获得较好的准确率,但是bounding box的定位不是很好。

参考链接:
https://blog.csdn.net/hrsstudy/article/details/70305791
https://blog.csdn.net/liuxiaoheng1992/article/details/81983280