YOLOv1

YOLOv1模型精学

    • **YOLO介绍**
    • **YOLO的网络结构**
    • **YOLO网络的训练**
    • **总结**

论文地址:《CVPR 2016 | Only Look Once: Unified, Real-Time Object Detection》

代码地址:http://pjreddie.com/yolo/

YOLO介绍

YOLO将目标检测统一为一个回归问题,直接从图像像素得到边界框的坐标和类别概率。论文主要强调YOLO模型只需要看一眼(only look once)即可预测存在的对象及其位置,YOLOv1是单阶段目标检测的开创者,此前主流目标检测工作主要是借鉴了图像分类模型,比如DPM类的网络采用滑动窗口(sliding window)使得分类器可在整张图上均匀间隔地进行工作;R-CNN网络使用候选框(region proposal)方法,首先在图像中生成潜在的边界框,然后在这些边界框内使用分类器进行工作,为双阶段目标检测框架

YOLO的网络结构

YOLOv1_第1张图片


YOLOv1_第2张图片
YOLO的网络结构非常简单,主要流程pipeline为:

  1. 首先将图片resize为448x448,将图片划分为SxS个网格,如果一个物体的中心点落在某个网格中,则这个网格负责该物体的预测
  2. 经过网络处理后,每个网格需要预测B个边界框和置信度值(confidence),另外每个网格还需要预测C个类别概率,最终网络的输出张量大小为S x S x (B * 5 + C),论文中S设置为7,B设置为2,数据集为VOC,类别数C为20,所以输出大小为7x7x30
  3. 对预测结果进行NMS计算,得到最终的检测结果

YOLO网络的训练

以论文中S=7,B=2,C=20来说明YOLO网络的训练流程

步骤1:对数据集图片进行数据增强,论文原话“在20%的原始图像上引入了随机缩放和平移、在HSV颜色空间中以1.5倍率随机调整图像的曝光率和饱和度”;

步骤2:对图片resize为448x448,每张图片处理后的标签张量尺寸为7x7x25,表示将图片划分为7*7=49个网格,标注信息包含标志位、真实物体的边界框和类别三个信息,其中标志位为1代表真实物体的中心点落在该网格中,当标志位为0时,则其他两个信息也都置0;
YOLOv1_第3张图片
步骤3:将图片输入YOLO网络,网络的输出为7x7x30,对应7*7=49个网格,每个网格有30个预测值;

步骤4:每个网格的预测值中包含了2个边界框(x1,y1,w1,h1)和(x2,y2,w2,h2),也就是总共有49*2=98个预测框,将这些预测框划分为两类,A.对应网格的标签中标志位为1,且与真实边框bbox的IOU最大的预测框;B.对应网格的标签中标志位为1,但与真实边框bbox的IOU小于其他的预测框,以及对应网格的标签中标志位为0的预测框

计算损失函数前,作者提到了几点tips:

  • 损失函数采用的是误差平方和函数,如果对定位误差和分类误差进行同等加权会导致结果不理想,并且在每个图像中,许多的网格是不包含任何物体的,这些网格的置信度分数趋于零,通常会压制包含物体的网格的梯度,这可能导致模型不稳定、训练在早期出现分歧,为了解决这些问题,增加了边界框坐标预测的损失大小,并且减少了不包含目标的边界框的置信度预测的损失,使用了两个权重 λ c o o r d λ_{coord} λcoord λ n o o b j λ_{noobj} λnoobj,并分别赋值5和0.5;
  • 误差平方和对大边框和小边框的错误进行同等的加权,论文中为了反映大边界框中的小偏差比小边界框的小偏差更重要,坐标损失中计算的是边界框宽度和高度的平方根
  • YOLO对每个网格会预测B个边界框,作者希望在训练的时候,模型只对与真实框具有最大IOU的预测框“负责”;
  • 定义了预测框的置信度为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)IOUpredtruth,如果该网格中不包含物体(指的是不存在真实物体的中心点落在网格内)则置信度分数应为零,否则置信度分数等于预测框和真实框的IOU

步骤5坐标损失的计算, 1 i j o b j 1^{obj}_{ij} 1ijobj对A类预测框取1,B类取0,也就是说一个真实物体最多只会有一个预测框会参与坐标损失的计算,也就对应了上面tips中的第三点;置信度损失的计算, 1 i j n o o b j 1^{noobj}_{ij} 1ijnoobj 1 i j o b j 1^{obj}_{ij} 1ijobj相反,对A类取0,B类取1,包含物体时置信度损失的计算中 C i C_{i} Ci表示预测框的置信度, C ^ i \hat{C}_{i} C^i表示预测框和真实框的IOU、不包含物体时置信度损失的计算中 C i C_{i} Ci表示预测框的置信度, C ^ i \hat{C}_{i} C^i为0,对应了上面tips的第四点;类别损失的计算, 1 i o b j 1^{obj}_{i} 1iobj的值等于该网格标签中的标志位,代表只计算真实物体中心点所在位置的网格的分类损失
YOLOv1_第4张图片

总结

YOLO的优点:
1. 速度非常快,可以达到实时检测。
模型结构简单;相比于R-CNN需要从2000个anchor中进行建议框的搜索,YOLO只需要处理7x7x2=98个预测框
2. YOLO的背景误检(将背景误判为对象)率低,不到Faster R-CNN的一半
因为YOLO是直接在整张图上根据全局上下文进行推理的
3. 泛化能力强


YOLO的缺点:

  1. 准确率落后于SOTA模型,YOLO虽然可以快速识别图像中的物体,但很难精确定位,尤其是小物体
  2. 每个网格只能预测两个框,当出现长宽比不常见(训练数据不覆盖)或相互靠的很近的物体时,检测效果比较差

你可能感兴趣的:(#,YOLO系列,深度学习,计算机视觉,目标检测)