8.3.4 YOLOv2
YOLOv2有哪些创新点
YOLOv1虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了提升定位准确度。改善召回率,YOLOv2在YOLOv1的基础上提出了几种改进策略,如下图所示。可以看到,一些改进方法能有效提高模型的mAP。
- 大尺度预训练分类。
- New Network:Darknet-19。
- 加入anchor。
YOLOv2介绍
(1)Batch Normalization
YOLOv2中在每个卷积层后加Batch Normalization(BN)层,去掉Dropout,BN层可以起到一定的正则化效果,能提升模型的收敛速度,防止模型过拟合。YOLOv2通过使用BN层使得mAP提高了2%。
(2)High Resolution Classifier
目前的大部分检测模型都会使用主流分类网络(如vgg、resnet)在ImageNet上的预训练模型作为特征提取器,而这些分类网络大部分都是以小于 256x256 的图片作为输入进行训练的,低分辨率会影响模型检测能力。YOLOv2将输入图片的分辨率提升至 448x448,为了使网络适应新的分辨率,YOLOv2先在ImageNet上以 448x448 的分辨率对网络进行10个epoch的微调,让网络适应高分辨率的输入。通过使用高分辨率的输入,YOLOv2的mAP提升了约 4%。
(3)Convolutional With Anchor Boxes
YOLOv1利用全连接层直接对边界框进行预测,导致丢失较多空间信息,定位不准。YOLOv2去掉了YOLOv1中的全连接层,使用Anchor Boxes预测边界框,同时为了得到更高分辨率的特征图,YOLOv2还去掉了一个池化层。由于图片中的物体都倾向于出现在图片的中心位置,若特征图恰好有一个中心位置,利用这个中心位置预测中心点落入该位置的物体,对这些物体的检测会更容易。所以总希望得到的特征图的宽高都为奇数。
YOLOv2通过缩减网络,使用 416x416 的输入,模型下采样的总步长为32,最后得到 13x13的特征图,然后对 13x13的特征图的每个 cell 预测 5 个anchor boxes,对每个anchor box预测边界框的位置信息、置信度和一套分类概率值。使用anchor boxes之后,YOLOv2可以预测 13x13x5=845个边界框,模型的召回率由原来的81%提升到88%,mAP由原来的69.5%降低到69.2%,召回率提升了 7%,准确率下降了 0.3%。
(4)Dimension Clusters
在Faster R-CNN和SSD中,先验框都是手动设定的,带有一定的主观性。YOLOv2采用K-means聚类算法对训练集中的边界框做了聚类分析,选用 boxes 之间的IOU值作为聚类指标。综合考虑模型复杂度和召回率,最终选择5个聚类中心,得到5个先验框,发现其中中扁长的框较少,而瘦高的框很多,更符合行人特征。通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均IOU值,这使得模型更容易训练学习。
(5)New Network:Darknet-19
YOLOv2采用Darknet-19,其网络结构如下图所示,包括19个卷积层和5个max pooling层,主要采用 3x3 的卷积和 1x1 的卷积,这里 1x1 的卷积可以压缩特征图通道数以降低模型计算量和参数,每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用 global avg pool做预测。采用YOLOv2,模型的mAP值没有显著提升,但计算量减少了。
(6)Direct location prediction
Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,会导致模型不稳定,加长训练时间。YOLOv2沿用YOLOv1的方法,根据所在网格单元的位置来预测坐标,则Ground Truth的值介于0到1之间。网络中将得到的网络预测结果再输入sigmoid函数中,让输出结果介于0到1之间。设一个网格相对于图片左上角的偏移量是 cx,cy。先验框的宽度和高度分别是 pw和ph,则预测的边界框相对于特征图的中心坐标(bx,by)和宽高 bw,bh的计算公式如下图所示。
YOLOv2结合Dimention Clusters,通过对边界框的位置预测进行约束,使模型更容易稳定训练,这种方式使得模型的mAP值提升了约 5%。
(7)Fine-Grained Features
YOLOv2借鉴SSD使用多尺度的特征图做检测,提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。YOLOv2提取 Darkent-19 最后一个max pool层的输入,得到 26x26x512的特征图。经过 1x1x64 的卷积以降低特征图的维度,得到 26x26x64的特征图,然后经过pass through层的处理变成 13x13x256 的特征图(抽取原特征图每个 2x2 的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与 13x13x1024 大小的特征图连接,变成 13x13x1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features,YOLOv2的性能提升了1%。
(8)Multi-Scale Training
YOLOv2中使用的Darknet-19网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。YOLOv2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸,由于Darkent-19下采样总步长为32,输入图片的尺寸一般选择32的倍数 {320,352,....,680}。采用Multi-Scale Training,可以适应不同大小的图片输入,当采用低分辨率的图片输入时,mAP值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。
YOLOv2借鉴了很多其他目标检测方法的一些技巧,如Faster R-CNN的anchor boxes,SSD中的多尺度检测。除此之外,YOLOv2在网络设计上做了很多的tricks,使它能在保证速度的同时提高检测准确率,Multi-Scale Training更使得同一个模型适应不同大小的输入,从而可以在速度和精度上进行自由权衡。YOLOv2的训练
YOLOv2的训练主要包括三个阶段。
第一阶段:先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为 ,共训练160个epochs。
第二阶段:将网络的输入调整为 ,继续在ImageNet数据集上finetune分类模型,训练10个epochs,此时分类模型的top-1准确度为76.5%,而top-5的准确度为93.3%。
第三个阶段:修改Darnet-19分类模型为检测模型,并在检测数据集上继续finetune网络。
网络修改包括(网络结构可视化):移除最后一个卷积层、global avg pooling层以及softmax层,并且新增了三个 卷积层,同时增加了一个passthrough层,最后使用 卷积层预测结果。
8.3.5 YOLO9000
github:YOLO: Real-Time Object Detection
YOLO9000是在YOLOv2的基础上提出的一种联合训练方法,可以检测超过9000个类别的模型。YOLOv2混合目标检测数据集和分类数据集,用目标检测数据集及其类别标记信息和位置标注信息训练模型学习预测目标定位和分类,用分类数据集及其类别标记信息进一步扩充模型所能识别的物体类别,同时能增强模型鲁棒性。
1. YOLO9000是怎么组织数据的
YOLO9000根据各个类别之间的从属关系建立一种树结WordTree,将COCO数据集和ImageNet数据集组织起来。
WordTree的生成方式如下:
① 首先遍历ImageNet中的类别名词。
② 对每个名词,在WordNet(一种结构化概念极概念之间关系的语言数据库)上找到从它所在位置到根节点(设根节点为实体对象physical object)的最短路径,由于在WordNet中大多数同义词只有一个路径,所以先把该路径上的词全都加到树中。
③ 迭代地检查剩下的名词,取它到根节点的最短路径,将该最短路径上的还没出现在层次树中的词加入到树中。混合后的数据集形成一个有9418类的WordTree。生成的WordTree模型如下图所示。另外考虑到COCO数据集相对于ImageNet数据集数据量太少了,为了平衡两个数据集,作者进一步对COCO数据集过采样,使COCO数据集与ImageNet数据集的数据量比例接近1:4。
对于物体的标签,采样one-hot编码的形式,数据集中的每个物体的类别标签被组织成1个长度为9418的向量,向量中除在WordTree中从该物体对应的名词到根节点的路径上出现的词对应的类别标号处为1,其余位置为0。
2. YOLO9000是怎么进行联合训练的
YOLO9000采用YOLOv2结构,anchor box由原来的5调整带3,对每个anchor box预测其对应的边界框的位置信息 x,y,w,h 和置信度以及所包含的物体分别属于9418类的概率,所以每个anchor box需要预测 4+1+9418=9423个值。每个网格需要预测 3x9423=28269个值。在训练过程中,当网络遇到来自检测数据集的图片时,用完整的YOLOv2 loss进行反向传播计算,当网络遇到来自分类数据集的图片时,只用分类部分的loss进行反向传播。
3. YOLO9000是怎么预测的
WordTree中每个节点的子节点都属于同一个子类,分层次的对每个子类中的节点进行一次softmax处理,以得到同义词集合中的每个词的下义词的概率。当需要预测属于某个类别的概率时,需要预测该类别节点的条件概率。即在WordTree上找到该类别名词到根节点的路径,计算路径上每个节点的概率之积。预测时,YOLOv2得到置信度,同时会给出边界框位置以及一个树状概率图,沿着根节点向下,沿着置信度最高的分支向下,直到达到某个阈值,最后到达的节点类别即为预测物体的类别。
YOLO9000使用WordTree混合目标检测数据集和分类数据集,并在其上进行联合训练,使之能实时检测出超过9000个类别的物体,其强大令人赞叹不已。YOLO9000尤其对动物的识别效果很好,但是对衣服或者设备等类别的识别效果不是很好,可能的原因是与目标检测数据集中的数据偏向有关。
8.3.6 YOLOv3
YOLOv3总结了自己在YOLOv2的基础上做的一些尝试性改进,有的尝试取得了成功,而有的尝试并没有提升模型性能。其中有两个值得一提的亮点,一个是使用残差模型,进一步加深了网络结构;另一个是使用FPN架构实现多尺度检测。
YOLOv3有哪些创新点
- 新网络结构:DarkNet-53
- 融合FPN
- 用逻辑回归替代softmax作为分类器
1. YOLOv3对网络结构做了哪些改进
YOLOv3在之前Darknet-19的基础上引入了残差块,并进一步加深了网络,改进后的网络有53个卷积层,取名为Darknet-53,网络结构如下图所示(以256*256的输入为例)。
为了比较Darknet-53与其它网络结构的性能,作者在TitanX上,采用相同的实验设置,将256x256的图片分别输入以Darknet-19,ResNet-101,ResNet-152和Darknet-53为基础网络的分类模型中,实验得到的结果如下图所示。可以看到Darknet-53比ResNet-101的性能更好,而且速度是其1.5倍,Darknet-53与ResNet-152性能相似但速度几乎是其2倍。注意到,Darknet-53相比于其它网络结构实现了每秒最高的浮点计算量,说明其网络结构能更好的利用GPU。
2.YOLOv3中怎样实现多尺度检测
YOLOv3借鉴了FPN的思想,从不同尺度提取特征。相比YOLOv2,YOLOv3提取最后3层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出9种尺度的anchor box,将9种尺度的anchor box均匀的分配给3种尺度的特征图.如下图是在网络结构图的基础上加上多尺度特征提取部分的示意图(以在COCO数据集(80类)上256x256的输入为例):
从YOLOv1到YOLOv2再到YOLO9000、YOLOv3, YOLO经历三代变革,在保持速度优势的同时,不断改进网络结构,同时汲取其它优秀的目标检测算法的各种trick,先后引入anchor box机制、引入FPN实现多尺度检测等。