YOLO算法详解

论文地址:You Only Look Once: Unified, Real-Time Object Detection

创新点

YOLO实现了实时处理图片,达到45FPS;Fast YOLO达到155FPS,但是检测准确率不高。

优势:

  1. 速度快。
  2. 做预测时全局了解图像,对背景预测错误出现的概率比Fast R-CNN小。
  3. YOLO学习目标的一般特征,具有较高通用性,应用到新领域,不太可能发生故障。

但是YOLO检测准确性不高,虽然可以快速识别图像中的对象,但是很难准确定位一些目标,尤其是小目标。

算法概述

YOLO使用整张图片的特征预测bounding box。

  1. 将图片分为S\times S的网格。如果某个目标中心落在一个网格,则该网格负责检测该目标。有些目标中心点可能落在多个网格的边界,可通过nms进行筛选。
  2.  每个网格预测B个bounding box及其置信度。置信度反映了bounding box包含对象的信心程度,以及bounding box预测目标的准确程度。置信度定义为:Pr(Object))\ast IOU_{pred}^{truth}。如果不含目标,则confidence=0,如果含有目标,则confidence=IOU_{pred}^{truth}
  3. 每个bounding box包括5个预测值:x,y,w,h及置信度。(x,y)表示bounding box中心坐标,与网格相关,训练过程将x,y,w,h进行归一化。
  4. 每个网格预测C个条件类别概率Pr(Class_i\mid Object)。不论每个网格中bounding box有多少个,每个网格只预测一组类别概率。
  5. 在测试阶段,我们将条件类别概率与bounding box置信度相乘,Pr(Class_i\mid Object) \ast Pr(Object))\ast IOU_{pred}^{truth}=Pr(Class_i) \ast IOU_{pred}^{truth},得到每个bounding box属于特定类别的confidence score。
  6. 因此最终预测值变为S\times S\times (B\ast 5+C)的张量。

YOLO在VOC数据集上测试,参数S=7,B=2,因为VOC数据集含有20类,因此设置C=20,最终预测值为7\times 7\times 30的张量。

算法详解

1. 网络结构

YOLO网络有24个卷积层,紧跟2个全联接层,整体网络结构如图所示。

Fast YOLO网络使用较少卷积层,只有9个。

YOLO算法详解_第1张图片

2. 训练过程

在ImageNet数据集上使用网络前20个卷积层紧接着一个平均池化层及一个全连接层进行预训练,我们添加4个卷积层和2个全连接层,并进行初始化。为了增加细粒度信息,我们将网络输入分辨率由224\times 224提高到448 \times 448

网络最后一层采用线性激活函数,其他层采用pRelu(修正线性激活函数):

\phi (x)= \left\{\begin{matrix} x, & if\ x > 0\\ 0.1x, &otherwise \end{matrix}\right.

3. 损失函数

作者采用sum-squared error(平方和)的方式把坐标误差和分类误差整合到一起。但如果二者的权值一致,容易导致模型不稳定,训练发散。因为很多grid cell是不包含物体的,因此grid cell的confidence score为0。所以采用设置不同权重方式来解决,一方面提高坐标误差的权重,另一方面降低不包含目标的bounding box的confidence loss权值,loss权重分别是\lambda _{ccoord}=5,\lambda _{noobj}=0.5。而对于包含object的box的confidence loss权值还是原来的1。损失函数如下所示:

YOLO算法详解_第2张图片

YOLO算法详解_第3张图片

第一项Loss表示bounding box中心坐标误差,第二项Loss表示bounding box宽与高的误差,之所以使用平方根,为了提高对小目标的检测准确性。比如大目标w=8,预测值w=10;小目标w=1,预测值w=3.不采用平方根,对于大小目标误差相同为4;而采用平方根,对于大目标误差为0.11,小目标误差为0.54.

第三项与第四项分别为该网格的bounding boxes有目标与无目标情况下的confidence Loss。

第五项表示预测类别的误差。

实验结果

1. 实时性系统比较

YOLO算法详解_第4张图片

YOLO在实时检测方面,准确性较高,相比于Faster R-CNN等非实时检测,虽然mAP较低,但FPS较高,满足实时性要求。

2. 误差分析

YOLO算法详解_第5张图片

  • Correct: correct class and IOU > :5

  • Localization: correct class, :1 < IOU < :5

  • Similar: class is similar, IOU > :1

  • Other: class is wrong, IOU > :1

  • Background: IOU < :1 for any object

YOLO相比于Fast R-CNN,有较多定位误差,Fast R-CNN有较多背景误判。

3. Fast R-CNN与YOLO结合

YOLO算法详解_第6张图片

提升mAP,但是耗费时间增加。

4. VOC12上测试结果

YOLO算法详解_第7张图片

5. YOLO在其他数据集上测试

YOLO算法详解_第8张图片

YOLO算法缺点

  1. 依照论文,每张图产生49个网格,98个bounding box,最多检测出49个目标,对于距离较近的成群小目标,检测效果差。
  2. 定位不准。Loss主要来自于定位误差,小误差对小bounding box影响远大于同等误差对大bounding box影响。
  3. 不擅长检测特征相似的某类物体,擅长实时检测多类物体。

你可能感兴趣的:(论文详解,深度学习,YOLO,算法详解)