YOLO系列:V1,V2,V3,V4简介

YOLO vs Faster R-CNN

1.统一网络:YOLO没有显示求取region proposal的过程。Faster R-CNN中尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fast rcnn网络.相对于R-CNN系列的"看两眼"(候选框提取与分类),YOLO只需要Look Once.
2.OLO统一为一个回归问题,而R-CNN将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题)

YOLOV1

检测原理

YOLO v1之前的RCNN系列目标检测算法,其本质仍是一个分类问题,基本思路是通过滑窗在图像上滑动,遍历完整个图像,分别判断窗口图像的分类,再通过回归方法调整物体精确边框,达到检测和定位的目的。其后改进的fast-RCNN系列在速度上做了提升,基本流程是先通过CNN生成大量的region proposal,即潜在的目标区域,再用另一个CNN去提取该潜在目标区域的特征,进行类别判断。

与RCNN的先定位出潜在位置,再判断分类不同,YOLO v1是一个端到端的目标检测算法,通过一个CNN网络就可以输出物体的类别以及物体的位置(还有类别的置信度)。相较于其他先进的物体检测系统,YOLO的物体定位精度略低,对小物体的检测效果不太好,但是在背景上预测出不存在的物体(false positives)的情况会少一些。

以下是YOLO论文中作者给出的流程示意图:


示意图

YOLO检测简易流程
1.将图像resize到448*448作为网络的输入。
2.运行神经网络,得到一些bounding box坐标位置,物体的置信度和20个类别概率。
3.进行非极大值抑制,筛选Boxes

相比之前的目标检测算法,YOLO结构简单,端到端,不需要预先提取region proposal,不存在重叠区域反复预判的情况,所以YOLO最大的优点就是检测快速。

YOLO v1 首先将图片resize 到448x448(imagenet的2倍),再将图像分割成7x7个小网格,每个网络会输出:
1.2个bounding box。这个bounding box包含5个值,分别是检测到物体的中心点坐标x和y,物体的宽度和高度w,h,还有一个置信度参数C(当前box中属于某一类的概率)
2.当前网格整体上属于哪个分类的概率,取前20个分类的概率
所以每张图片经过YOLO的CNN后的最终输出是7x7x(2x5+20)=7730维的Tensor向量,如下图所示:

YOLO在获取到的7730维向量的基础上,根据每个小框的类别概率、每个小框的相对位置、小框内物体所属的分类以及分类置信度等信息综合判断,预测出图片上物体的位置、类别以及相应的概率,这个过程的示意图如下:


YOLO v1的网络结构与GoogLeNet的网络结构类似,但没有使用GoogLeNet的inception modules,而是用1x1+3x3的卷积核的组合来代替,整个YOLOv1网络结构包含24个卷积层和2个全连接层,网络的最终输出是 7x7x30维的Tensor。结构图如下:

YOLO训练

YOLO的训练分成两部分,先是物体的分类识别训练,再是物体的检测定位训练。
首先使用YOLO网络的前20层卷积层,加上一个平均池化层和一个全连接层,组成一个预训练网络,在ImageNet数据集上(图像尺寸:224×224)训练1000个类别的分类识别网络,最终达到Top-5精度88%,与GoogleNet的精度相当。
之后取该预训练网络的前20层,加上YOLO网络的后4个卷积层和2个全连接层,组成识别+检测定位网络,在PASCAL VOC2007数据集上(图像尺寸:448×448,含训练图片5011张,测试图片4952幅张,共包含20个种类)训练。网络最终的输出包括物体的Bounding box位置坐标信息(X,Y,W,H)和类别概率,将值归一化到[0,1],使用Leaky Relu作为激活函数,并在第一个全连接层后接了一个ratio=0.5的Dropout 层,以防止过拟合。

损失函数

YOLO的损失函数包含3部分,分别是位置坐标损失函数,置信度损失函数和类别预测损失函数(注意置信度跟类别预测的区别,置信度是7×7个小区域里预测出来2个分类的置信度,共有7×7×2个,类别预测是7×7个小区域整体上分别属于20个类别的概率,共有7×7×20。那么为什么不干脆只记录每个小区域所属的最大概率对应的类别呢,这样是不是数据维度是7×7×1就ok了?这是为了在最后做整体上的综合整合),如何在这3部分损失函数之间找到一个平衡点,YOLO主要从以下几个方面考虑:

  1. 坐标损失函数方面,每个小区域上输出的8维位置坐标偏差的权重应该比20维类别预测偏差的权重要大,因为首先从体量上考虑,20维的影响很容易超过8维的影响,导致分类准确但是位置偏差过大,再者最后还会在整体的分类预测结果上综合判断物体的类别,所以单个小区域的分类误差稍微大一点不至于影响最终的结果。最终设置位置坐标损失和类别损失函数的权重比为5:1
    2.置信度损失函数方面,在不含有目标物体的网格上,物体的置信度是0,并且图像上大部分区域都是不含目标物体的,这些过多的置信度为0对梯度的贡献会远远大于含目标物体的网格对梯度的贡献,这就容易导致网络不稳定或者发散,也就是说网络会倾向于预测每个小网格不含有物体,因为大部分情况下这种预测都是正确的。所以需要减弱不含目标物体的网格的贡献,取权重系数为0.5,含目标物体的网格的权重正常取1
    3.目标物体大小不等方面,考虑到目标物体有大有小,对于大的物体,坐标预测存在一些偏差无伤大雅,但是对于小的目标物体,偏差一点可能就是另外一个东西了。为了解决这个问题,作者将位置坐标的W和H分别取平方根来代替原本的W和H,以达到值越小,对同等大小改变的相应越大的目的,对于这一点,可以从下图上更直观的看出来:

    上图中可见对于水平方向上同等尺度的增量,基准值越小,其在平方根上产生的偏差就越大,如图中的绿色段明显大于红色段。

基于以上3点考虑,YOLO综合的损失函数可以总结如下图:


缺点:

1.由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。
2.虽然每个格子可以预测B个bounding box,但是最终只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。
3.YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。

你可能感兴趣的:(YOLO系列:V1,V2,V3,V4简介)