文章目录
一、核心思想
YOLOv1是You Only Look Once系列目标检测算法的开山之作,YOLOv1将目标检测任务转化为一个回归问题,摒弃了传统的两阶段目标检测方法中先提取候选区域再进行分类的步骤。将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。
二、网络架构
网络结构借鉴了 GoogLeNet 。24个卷积层,用于对输入图像进行特征提取,不断地提取图像的抽象特征,2个全链接层,第一个全连接层将卷积得到的分布式特征映射到样本标记空间,把输入图像的所有卷积特征整合到一起;第二个全连接层将所有神经元得到的卷积特征进行维度转换,最后得到与目标检测网络输出维度相同的维度。。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )
最终输出的7×7意味着7×7个grid cell,30表示每个grid cell包含30个信息,其中2个预测框,每个预测框包含5个信息(x y w h c),分别为中心点位置坐标,宽高以及置信度,剩下20个是针对数据集的20个种类的预测概率(即假设该grid cell负责预测物体,那么它是某个类别的概率)。
三、损失函数
YOLO-V1算法最后输出的检测结果为7x7x30的形式,其中30个值分别包括两个候选框的位置和有无包含物体的置信度以及网格中包含20个物体类别的概率。那么YOLO的损失就包括三部分:位置误差,confidence误差,分类误差。
损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification这个三个方面达到很好的平衡。
1.位置误差
对于每个网格的两个边框中,选择与真实物体具有最大IOU(交并比)的那个边框,并计算该边框的预测值与真实值的位置误差。位置误差包括中心点坐标的误差和宽高的误差,并且对宽高进行平方根处理,降低对物体尺寸的敏感度,强化小物体的损失权重。如下图:
其中 1 i j o b j 1_{ij}^{obj} 1ijobj表示第i个网格中的第j个预测框是否负责obj这个物体的预测,如果负责则为1,否则为0。
2.置信度误差
这里分成了两部分,一部分是包含物体时置信度的损失,一个是不包含物体时置信度的值。其中前一项表示有无人工标记的物体落入网格内,如果有,则为1,否则为0.第二项代表bounding box和真实标记的box之间的IoU。值越大则box越接近真实位置。
3.分类误差
其中 1 i o b j 1_i^{obj} 1iobj表示有无object的中心点落到网格i中,如果网格中包含有物体object的中心的话则为1,那么就负责预测该object的概率。
四、置信度
1.置信度
置信度 ( c o n f i d e n c e ) = 类概率 ∗ l O U 置信度(confidence)=类概率*lOU 置信度(confidence)=类概率∗lOU
w e d e f i n e c o n f d e n c e a s P r ( O b j e c t ) ∗ I O U " we define confdence as Pr(Object) * IOU" wedefineconfdenceasPr(Object)∗IOU"
Pr(Object)是边界框内存在对象的概率,若存在对象,Pr(Object)=1,否则Pr(Object)=0;IOU是真实框(ground truth)与预测框(predicted box)的交并比
2.loU (Intersection over Union ratio)
实际上就是预测框和真实框面积的交集与并集的比值(两边界框相交部分面积与相并部分面积之比)。我们认为只有loU>0.5的priorbox才是有价值的。
3.非极大值抑制
由于目标可能被多次检测到,因此会产生多个重叠或相近的边界框。非极大值抑制的作用就是去除这些冗余的边界框,只保留最有可能包含目标物体的边界框。
如下图:
图中经过极大值抑制处理后,便只会留下数值为0.81的边界框。
五、优缺点
YOLO V1存在的优缺点:
优点
- 速度快、简单:YOLOv1能够快速地处理图像,标准版本每秒可以处理45帧图像,轻量版本甚至可以每秒处理150帧图像,完全满足视频的实时检测要求。
缺点
- 检测精度低:对于小物体以及靠得特别近的物体,检测效果不好。因为每个网格只有两个边框做预测,并且只有一个类别,当多个目标的中心都落在同一个网格里的时候,只能预测出来一个。
- 定位不准确:在损失函数中,大物体与小物体的位置损失权重是一样的,导致同等比例的位置误差,大物体的损失会比小物体大。