天天看点

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

前面文章我们介绍过两阶段Two-Stage算法(​​目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)​​​),先产生候选框再用SVM或者CNN进行分类,一阶段One-Stage算法(​​目标检测系列之三(SSD)​​),直接对输入图像学习候选框和类别和定位,下面继续介绍一代更比一代强的一阶段算法。

内容目录

1 YOLO V11.1 Bounding Box1.2 损失函数1.3 YOLO的缺点2 YOLO V22.1 YOLO V2的改进2.2 更快更强的改进3 YOLO V33.1 Backbone网络结构3.2 多尺度预测3.3 损失函数

1 YOLO V1

论文题目是《You Only Look Once: Unified, Real-Time Object Detection》

论文地址:https://arxiv.org/abs/1506.02640

YOLO的思想是将目标检测任务作为回归来解决,卷积神经网络是基于GoogLeNet进行改进,但没有使用inception模块,采用1x1和3x3的卷积层代替。输入图像大小为448x448,输入图像模型可以得到所有目标的位置和所属类别置信度,输出大小为7x7x(2x5+20)。

算法步骤:

1) 给定输入图像,划分成7x7的网格

2) 每个网格生成2个Bounding box(包含5个预测值)和N个类别概率值

3) 对上一步产生的7x7x2=98个目标窗口,由IOU阈值和NMS去掉冗余窗口

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

1.1 Bounding Box

YOLO将输入图像分为SxS个格子(比如7x7),每个格子都可以检测是否包含目标,如果目标的中心位置在格子里,则判断为检出,每个格子可以输出B个(比如2)Bounding Box和C个(比如20)目标属于某个类别的概率值。每个Bounding box包含5个数值,分别为x,y,w,h,confidence,代表检测框的中心坐标、宽高和置信度,但实际训练时w和h使用图像的宽高来归一化到[0,1]区间,x和y使用中心坐标与当前格子的偏移量并归一化到[0,1]区间,最后网络的输出维度为SxSx(Bx5+C),在YOLO论文中输出维度为7x7x(2x5+20)=1470。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3
目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

上图中可以看到在真实训练过程中x,y,w,h是怎么定义的,假设红色框Bounding box的中心坐标为(Xc,Yc),所在的小格子为(Xcol,Yrow),图像的宽高为(Wi,Hi),格子S=7,那么归一化的offset为:

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

预测的Bounding box宽高为Wb,Hb,归一化之后为:

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

Confidence置信度的计算是由两部分组成,一部分是判断格子内是否含有目标,另一部分是含有目标的置信度概率,如果格子里有目标,Pr(Object)=1,否则Pr(Object)=0,IOU为Bounding Box和Ground Truth之间的重叠率。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

由于YOLO在每个格子预测B个Bounding box时,最终只选择与Ground Truth的IOU最大的Bounding box,当图像中有比较密集的小目标时每个格子只检测出一个目标,是有问题的。

1.2 损失函数

YOLO采用均方误差作为损失函数,并引入权重因子

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

来平衡不同的损失,

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

1.3 YOLO的缺点

1) 由于每个格子只预测两个框,并且只属于一个类,对于小目标或者密集的目标检测效果不好

2) 由于每个格子都是正规的矩形,如果遇到不均衡的不常见的长宽比形状目标,泛化能力比较差

3) YOLO采用多个下采样层,学到的目标特征不精细,影响检测效果

4) 大目标和小目标的IOU误差对总损失函数影响接近

5) YOLO的定位准确率较差

下图展示了YOLO与Fast R-CNN的对比:YOLO对背景内容的误判率(4.75%)比fast rcnn的误判率(13.6%)低很多。但是YOLO的定位准确率较差,占总误差比例的19.0%,而fast rcnn仅为8.6%。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

2 YOLO V2

论文题目《YOLO9000: Better, Faster, Stronger》

论文地址:https://arxiv.org/pdf/1612.08242.pdf

YOLO9000顾名思义,可以检测超过9000个目标,可以运行在不同大小的图像上(YOLO1要求输入图像大小固定),同时权衡了速度和精度,并且采用了联合训练算法,同时在检测数据集和分类数据集上训练目标检测器,用检测数据集学习物体的准确位置,用分类数据集增加分类的类别量,提升泛化能力。这些分类信息学习自ImageNet分类数据集,而物体位置检测则学习自 COCO 检测数据集。YOLO V2的主要改进是提高召回率和定位能力。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

2.1 YOLO V2的改进

Batch Normalization

YOLO V2在每个卷积层后增加Batch Normalization,有助于规范化模型。

High Resolution Classifier

在之前的目标检测网络中,输入图像会被缩放至较小的分辨率(如224x224),分辨率不高会导致检测和定位误差较大,YOLO V2将输入图像的分辨率提高到448x448。

Convolution with Anchor Boxes

YOLO为了加速运算采用全连接层对边界框进行回归,缺少空间信息导致定位准确率不高,YOLO V2重新借鉴Faster R-CNN的anchor思想,在网络结构中删掉了全连接层,缩减网络并降采样后最终得到13x13的特征图,每个点预测9个anchor box,那么会得到13x13x9=1521个anchor box,而在YOLO V1中只有7x7x2=98个Bounding box,准确率小幅降低但召回率提升较大。

Dimension Cluster维度聚类

和以前的精选boxes维度不同,作者使用了K-means聚类方法(​​​机器学习系列(八)K均值(kMeans)​​)来训练bounding box,自动找到更好的boxes宽高,这里采用的评价标准是IOU得分避免欧氏距离与box的尺度相关,如下左图为聚类的k个数和IOU的关系图

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

最终k值设定为5,平衡了模型复杂度和召回率,选择了5种大小的box维度进行定位监测,其召回率和Faster R-CNN的9种box维度结果相当。

Direct Location Prediction直接位置预测

由于采用anchor box会导致模型训练不稳定,作者发现不稳定主要是由于预测bounding box的(x,y)位置,因此作者直接预测中心点,并使用Sigmoid函数将偏移量限制在0-1之间,网络更容易学习,也更稳定。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

Fine-Grained Features细粒度特征

为了同时增强大目标和小目标的检测精度,作者采用Passthrough

Layer将浅层特征图(26x26)连接到深层特征图(13x13),将高分辨率特征与低分辨率特征联系在一起(堆积在不同的channel中),从而将26x26x512的特征向量变成13x13x2048维度,获得细粒度特征,获得了1%的提升性能。

Multi-Scale Training

和YOLO V1训练时网络输入图像尺寸固定不同,YOLO V2在训练时每迭代10次就会随机选择新的输入图像尺寸{320,352,…,608},都为32的倍数,便于下采样操作,这种网络可以适应更多不同尺度的输入。

下图为在数据集VOC2007上的速度和精度对比

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

2.2 更快更强的改进

为了进一步提高速度,YOLO V2使用了一个新的分类网络Darknet-19作为特征提取部分,采用了较多的3x3卷积,每次池化之后都把通道数翻倍,并且使用全局平均池化(Global Average Pooling),网络包含19个卷积层、5个最大池化层,imagenet图片分类top-1准确率72.9%,top-5准确率91.2%。

论文提出了一种联合训练机制,使用识别数据集训练目标识别部分,使用分类数据集训练目标分类部分。作者提出了一种层级分类方法(Hierarchical classification),根据各个类别之间的从属关系,建立一种树结构的WordTree,混合了COCO检测数据集与ImageNet的Top9000类。下图来自知乎用户:

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

3 YOLO V3

论文题目《YOLOv3: An Incremental Improvement》

论文地址:https://arxiv.org/abs/1804.02767

YOLO V3通过多种先进方法的融合,将YOLO V1和V2系列的缺点全部修正。如下图,横轴是每张图像的预测推理时间,纵轴是在COCO数据集上测试的精度,无论在速度还是精度都完胜。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

3.1 Backbone网络结构

为了达到更好的效果,作者在Darknet-19中添加残差网络,使用连续的3x3和1x1卷积层,设计了Darknet-53,包含5个下采样操作(用步长为2的卷积代替池化),

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

3.2 多尺度预测

YOLO V3提供3种尺度不一的边界框,在每个尺度预测3个box,采用聚类方法得到9个聚类中心,在COCO数据集上,这9个聚类分别是:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116 × 90)、(156 × 198)、(373 × 326)。

YOLO V3也采用了和V2一样的passthrough layer,连接了后面三层的13x13、26x26和52x52特征图,一共三个尺度,每个尺度有3个边界框,当输入图像大小为416x416时,实际共有(52×52+26×26+13×13)×3=10647个proposal box。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3
目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3
目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3
目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

3.3 损失函数

YOLO V3对图像中的目标检测执行多分类标签,但没有用softmax,因为softmax依赖于目标分类是相互独立的前提,文章采用的是logistic regression来预测每个类别得分并使用一个阈值来对目标进行多标签预测。比阈值高的类别就是这个边界框真正的类别。

目标检测系列(IV):YOLO V1、YOLO V2、YOLO V3

继续阅读