YOLO v2详细解读

简介: 《YOLO9000:Better, Faster, Stronger》Joseph Redmon∗†, Ali Farhadi∗†*University of Washington∗ , Allen Institute for AI*†**发表时间及期刊:2017 CVPR

YOLO v2概述


YOLO v1虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了提升定位准确度,改善召回率,YOLO v2在YOLO v1的基础上提出了几种改进策略,如下图所示,一些改进方法能有效提高模型的mAP。

image.png

YOLO v2 介绍


下面依次来看一下作者在YOLO v2中做出的几点尝试

(1)Batch Normalization(批归一化)


YOLO v2中在每个卷积层后加Batch Normalization(BN)层,去掉了dropout层。 Batch Normalization层可以起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。YOLO v2通过使用BN层使得mAP提高了2%。

(2)High Resolution Classifier(高分辨率预训练分类网络)


目前的大部分检测模型都会使用主流分类网络(如vgg、resnet)在ImageNet上的预训练模型作为特征提取器,而这些分类网络大部分都是以小于256 × 256 256×256256×256的图片作为输入进行训练的,低分辨率会影响模型检测能力。 YOLO v2将输入图片的分辨率提升448 × 448 448×448448×448,为了使网络适应新的分辨率,YOLO v2先在ImageNet上以448 × 448 448×448448×448的分辨率对网络进行10个epoch的微调,让网络适应高分辨率的输入。通过使用高分辨率的输入,YOLO v2的mAP提升了约4%。

(3)Convolutional With Anchor Boxes(带Anchor Box的卷积)


YOLO v1利用全连接层直接对边界框进行预测,导致丢失较多空间信息,定位不准。 YOLO v2去掉了 YOLO v1中的全连接层,使用Anchor Boxes预测边界框,同时为了得到更高分辨率的特征图, YOLO v2还去掉了一个池化层。由于图片中的物体都倾向于出现在图片的中心位置,若特征图恰好有一个中心位置,利用这个中心位置预测中心点落入该位置的物体,对这些物体的检测会更容易。所以总希望得到的特征图的宽高都为奇数。 YOLO v2通过缩减网络,使用416 × 416 416×416416×416的输入,模型下采样的总步长为32 3232,最后得到13 × 13 13×1313×13的特征图,然后对13 × 13 13×1313×13的特征图的每个cell预测5 55个anchor boxes,对每个anchor box预测边界框的位置信息、置信度和一套分类概率值。使用anchorboxes之后, YOLO v2可以预测13 × 13 × 5 = 845 13 × 13 × 5=84513×13×5=845个边界框,模型的召回率由原来的81%提升到88%,mAP由原来的69.5%降低到69.2%.召回率提升了7%,准确率下降了0.3%。

(4)Dimension Clusters(Anchor Box的宽高由聚类产生)


在Faster R-CNN和SSD中,先验框都是手动设定的,带有一定的主观性。 YOLO v2采用k-means聚类算法对训练集中的边界框做了聚类分析,选用boxes之间的IOU值作为聚类指标。综合考虑模型复杂度和召回率,最终选择5 55个聚类中心,得到5 55个先验框,发现其中中扁长的框较少,而瘦高的框更多,更符合行人特征。通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均IOU值,这使得模型更容易训练学习。

(5)New Network:Darknet-19


YOLO v2采用Darknet-19,其网络结构如下图所示,包括19 1919个卷积层和5 55个max pooling层,主要采用3 × 3 3×33×3卷积和1 × 1 1×11×1卷积,这里1 × 1 1×11×1卷积可以压缩特征图通道数以降低模型计算量和参数,每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool 做预测。采用 YOLO v2,模型的mAP值没有显著提升,但计算量减少了。

image.png

(6)Direct location prediction(绝对位置预测)


Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,会导致模型不稳定,加长训练时间。 YOLO v2沿用 YOLO v1的方法,根据所在网格单元的位置来预测坐标,则Ground Truth的值介于0到1之间。网络中将得到的网络预测结果再输入sigmoid函数中,让输出结果介于0到1之间。设一个网格相对于图片左上角的偏移量是c x , c y cx,cycx,cy。先验框的宽度和高度分别是p w 和 p h pw和phpw和ph,则预测的边界框相对于特征图的中心坐标( b x , b y ) (bx,by)(bx,by)和宽高b w 、 b h bw、bhbw、bh的计算公式如下图所示。

image.png

YOLO v2结合Dimention Clusters, 通过对边界框的位置预测进行约束,使模型更容易稳定训练,这种方式使得模型的mAP值提升了约5%。

(7)Fine-Grained Features(细粒度特征)


YOLO v2借鉴SSD使用多尺度的特征图做检测,提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。 YOLO v2提取Darknet-19最后一个max pool层的输入,得到26 × 26 × 512 26×26×51226×26×512的特征图。经过1 × 1 × 64 1×1×641×1×64的卷积以降低特征图的维度,得到26 × 26 × 64 26×26×6426×26×64的特征图,然后经过pass through层的处理变成13x13x256的特征图(抽取原特征图每个2x2的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与13 × 13 × 1024 13×13×102413×13×1024大小的特征图连接,变成13 × 13 × 1280 13×13×128013×13×1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features, YOLO v2的性能提升了1%.

passthroug具体是怎么1拆4的呢?并不是简单的“两刀切4块”,而是在每个2 × 2 2×22×2的小区域上都选择左上角块,具体看下图。

image.png

(8)Multi-Scale Training(多尺寸训练)


YOLO v2中使用的Darknet-19网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。 YOLO v2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸,由于Darknet-19下采样总步长为32,输入图片的尺寸一般选择32 3232的倍数{320,352,…,608}。采用Multi-Scale Training, 可以适应不同大小的图片输入,当采用低分辨率的图片输入时,mAP值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。

YOLO v2借鉴了很多其它目标检测方法的一些技巧,如Faster R-CNN的anchor boxes, SSD中的多尺度检测。除此之外, YOLO v2在网络设计上做了很多tricks,使它能在保证速度的同时提高检测准确率,Multi-Scale Training更使得同一个模型适应不同大小的输入,从而可以在速度和精度上进行自由权衡。

YOLO v2的训练


YOLO v2的训练主要包括以下三个阶段:

第①阶段:先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为224 × 224 224\times 224224×224,共训练160 160160个epochs。

第②阶段:将网络的输入调整为448 × 448 448\times 448448×448,继续在ImageNet数据集上finetune分类模型,训练10 1010个epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。

第③个阶段:修改Darknet-19分类模型为检测模型:即移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个3 × 3 × 2014 3\times 3 \times 20143×3×2014卷积层,同时增加了一个passthrough层,最后使用1 × 1 1\times 11×1卷积层输出预测结果,并在检测数据集上继续finetune网络。

YOLO 9000

发表时间:2017

YOLO 9000与YOLO v2的区别

YOLO 9000是在 YOLO v2的基础上提出的一种新的联合训练方法,YOLO 9000可以检测超过9000个类别的模型,所以被称为YOLO 9000。 YOLO v2混合了目标检测数据集和分类数据集,用目标检测数据集及其类别标记信息和位置标注信息训练模型学习预测目标定位和分类,用分类数据集及其类别标记信息进一步扩充模型所能识别的物体类别同时能增强模型的鲁棒性。

1. YOLO 9000是怎么组织数据的?


YOLO9000根据各个类别之间的从属关系建立一种树结WordTree, 将COCO数据集和ImageNet数据集组织起来。

WordTree的生成方式如下:

①首先遍历ImageNet中的类别名词。

②对每个名词,在WordNet(一种结构化概念及概念之间关系的语言数据库)上找到从它所在位置到根节点(设根节点为实体对象physical object)的最短路径,由于在WordNet中大多数同义词只有一个路径,所以先把将该路径上的词全都加到树中。

③迭代地检查剩下的名词,取它到根节点的最短路径,将该最短路径上的还没出现在层次树中的词加入到树中。

混合后的数据集形成一个有9418类的WordTree。生成的WordTree模型如下图所示。另外考虑到COCO数据集相对于ImageNet数据集数据量太少了,为了平衡两个数据集,作者进一步对COCO数据集过采样,使COCO数据集与ImageNet数据集的数据量比例接近1 : 4 1:41:4。

image.png

对于物体的标签,采用one-hot编码的形式,数据集中的每个物体的类别标签被组织成1个长度为9418的向量,向量中除在WordTree中从该物体对应的名词到根节点的路径上出现的词对应的类别标号处为1,其余位置为0。

2. YOLO 9000是怎么进行联合训练的?


YOLO9000采用 YOLO v2的结构,anchorbox由原来的5调整到3,对每个anchorbox预测其对应的边界框的位置信息x , y , w , h x,y,w,hx,y,w,h和置信度以及所包含的物体分别属于9418类的概率,所以每个anchorbox需要预测4 + 1 + 9418 = 9423 4 + 1 + 9418 = 94234+1+9418=9423个值。每个网格需要预测3 × 9423 = 28269 3 × 9423 = 282693×9423=28269个值。在训练的过程中,当网络遇到来自检测数据集的图片时,用完整的 YOLO v2 loss进行反向传播计算,当网络遇到来自分类数据集的图片时,只用分类部分的loss进行反向传播。

3. YOLO 9000是怎么预测的?


WordTree中每个节点的子节点都属于同一个子类,分层次的对每个子类中的节点进行一次softmax处理,以得到同义词集合中的每个词的下义词的概率。当需要预测属于某个类别的概率时,需要预测该类别节点的条件概率。即在WordTree上找到该类别名词到根节点的路径,计算路径上每个节点的概率之积。预测时, YOLO v2得到置信度,同时会给出边界框位置以及一个树状概率图,沿着根节点向下,沿着置信度最高的分支向下,直到达到某个阈值,最后到达的节点类别即为预测物体的类别。

YOLO9000使用WordTree混合目标检测数据集和分类数据集,并在其上进行联合训练,使之能实时检测出超过9000 90009000个类别的物体,其强大令人赞叹不已。YOLO9000尤其对动物的识别效果很好,但是对衣服或者设备等类别的识别效果不是很好,这里笔者猜测可能的原因是与目标检测数据集中的数据偏向有关。


相关文章
|
2月前
|
机器学习/深度学习 数据可视化 网络架构
请你继续卷:YOLOV9
请你继续卷:YOLOV9
96 0
|
2月前
|
计算机视觉
YOLOv8改进 | 2023Neck篇 | 利用Gold-YOLO改进YOLOv8对小目标检测
YOLOv8改进 | 2023Neck篇 | 利用Gold-YOLO改进YOLOv8对小目标检测
93 1
|
2月前
|
机器学习/深度学习 计算机视觉
YOLOv5改进 | 2023Neck篇 | 利用Gold-YOLO改进YOLOv5对小目标检测
YOLOv5改进 | 2023Neck篇 | 利用Gold-YOLO改进YOLOv5对小目标检测
72 0
|
8月前
|
机器学习/深度学习 并行计算 算法
基于 PyTorch 的目标检测(YOLO实现)
基于 PyTorch 的目标检测(YOLO实现)
|
8月前
|
算法 Go 计算机视觉
【YOLO系列】YOLOv5超详细解读(网络详解)
【YOLO系列】YOLOv5超详细解读(网络详解)
3889 1
【YOLO系列】YOLOv5超详细解读(网络详解)
|
8月前
|
数据挖掘
YoloV2的改进
YoloV2的改进
|
计算机视觉
|
机器学习/深度学习 数据挖掘
|
Serverless 计算机视觉
yolo3-yolo5
yolo3-yolo5
159 0