YOLO9000:Better, Faster, Stronger
1、与分类等任务相比,目标检测任务的数据集太小。而且检测任务数据集标记成本太高,因此短期内不太可能出现足够大的数据集。 2、YOLOv2提出了WordTree,组合了分类任务和检测任务的数据集,用于联合训练,弥补了检测任务数据集不足的问题,在数据集上意义非凡。启发人们打破各个任务之间的堡垒,将技术、数据集等各种资源共享,将分类任务的技术方法应用与目标检测任务,YOLOv2又前进了一大步。除此之外,YOLOv2提出了许多改进的小trick。 3、YOLOv2主要关注YOLOv1定位错误和召回率低的缺点,在保证精度的情况下,予以优化。 4、计算机视觉的发展方向是更大更深,但YOLO为了速度,YOLOv2没有扩大网络,而是简化了网络,使其更易学习。 5、在每一层卷积后加BN,提高了收敛性,在一定程度上相当于进行了正则化,使模型得到了一定提升。并且解决了过拟合问题,使得模型可以删除dropout层。BN是15年个Inception2提出的。我觉得是YOLO作者先用GoogLeNet(Inception1)做出了YOLOv1,然后发现效果不错,后面接着借鉴Inception2的网络做出了YOLOv2,其中使用了BN。 6、YOLOv1训练用224 * 224的图片,测试用448 * 448的图片(应该是为了节省训练时间),这就导致训练和测试出现差异。YOLOv2使用更高分辨率的图像进行训练。YOLOv2在YOLOv1用224 * 224 训练的基础上,又在后面加了10个epochs用448 * 448的训练,让模型提前适应一下测试过程中448 * 448的输入。这一操作让模mPA型提升了4个点。 7、YOLOv1直接使用全连接层在卷积提取的特征上预测边界框坐标,而不是像Faster R-CNN一样用RPN手动预测边界框。在Faster R-CNN的RPN模块,改用卷积层预测偏移量和置信度。由于预测层是卷积,所以RPN可以在特征图上预测每个位置的偏移量;用偏移量代替坐标,简化了问题,使得网络更加容易学习。使用锚框,YOLO的精度有一点下降,但召回率有很大提升,因此,YOLO系列任有很大的改进空间。YOLOv2将YOLOv1中的全连接层全部去掉,改用改进的锚框来预测边界框。YOLOv1只有98个边界框,而改用锚框之后,YOLOv2有了上千个边界框。 8、改用锚框之后,YOLO网络架构改进:首先,去掉一个下采样层,使得最后特征图的尺寸翻倍。然后用416 * 416的输入代替之前的448 * 448。这样就可以得到一个奇数13 * 13的特征图。大物体一般出现在图像中央,因此中央一个框比四个框预测更准确。416 * 416下采样32倍,生成13 * 13的特征图。 9、YOLOv2使用的锚框,面临的第一个问题是盒子的尺寸是手动设置的。虽然网络可以学会调整盒子,但是如果我们我们给予网络更好的先验知识,对网络来说,学习预测就会更加简单,就无法解决复杂的预测任务,如长宽比例与训练任务中碰到的相差悬殊。所以YOLOv2不是手动加入先验知识,而是在训练集的边界框上使用k-means聚类去自动发现好的先验,其中k-means距离使用IOU距离。YOLOv1有S * S(S=7)个网格,每个网格预测B(B=2)个边界框,共有S * S* B(98)个候选框。R-CNN系列基本都是9类(相当于B=9)锚框,总共上千候选框。YOLOv2使用k-means聚类法,在训练集上划分成k类锚框,学习k个长宽比,后面就可将B=k。经过测试,k=5时IOU取得较好的效果,最后YOLOv2将416 * 416的图片划分成13 * 13个网格,每个网格预测k(5)个边界框(长宽比通过学习获得,而不是像R-CNN系列,手动设置);共13 * 13 * 5 = 845个边界框。通过测试,使用k-means cluster学习的长宽比,用5个就可以达到之前手动设置9个的效果,所以k-means cluster学习长宽比好。 10、YOLO使用锚框后,第二个问题的模型不稳定。YOLOv1和RPN预测的都是偏移量,在网络的早期迭代训练过程中,预测的偏移量十分不准确,所以可能将原始的候选框偏移到很远的地方,甚至偏移出该候选框负责的网格,这将够后续训练造成困难,使得该模型需要很长时间来稳定。YOLOv2不预测偏移量,而是在网格内预测一个相对位置,将预测值限定在0-1之间(网格的大小为一个单位),使得候选框在网格内移动,候选框始终可以对该网格负责。约束位置预测,使得参数更易学习,网络更加稳定。 11、1313的特征图,感受野太大了,检测大物体足够了,但是检测小物体可能还不太行,所以YOLOv2增加了一个passthrough层,增加了一个2626的特征图。将两个特征图残差连接。连接方式为将2626512的特征图拉伸为13132048的特征图,与原特征图尺寸相同,然后通道相加然后相加方式不明?,得到13133072的输出。 12、YOLOv2只有卷积和池化层,所以输入图片的尺寸可以随意调整。YOLOv2不固定输入图像尺寸,5次下采样,缩小32倍,所以输入图片的尺寸从32的倍数中挑选,从320到608。YOLOv2可以适应各种尺寸的输入。这意味着同一个网络架构,尺寸变大,识别精度上升,识别速度下降;尺寸变小则反之。需要根据实际任务做出权衡。低分辨率时,YOLOv2速度很快,适合放在小GPU上检测实时视频或多个视频流。 13、Vgg网络强大、准确,但有点复杂,计算量太大,基于Vgg的速度应该不太行。YOLO基于GoogleNet设计,比V刚刚快,但精度有所损失。YOLOv2根据Vgg提出了一个新的网络模型作为基础。借鉴了Vgg的33卷积核、池化过程(通道数加倍,尺寸减半)、GAP(最后的预测)、11卷积核(节省计算)、BN(稳定模型、加速收敛、规范模型)。YOLOv2最后提出的基础模型:Darknet-19,19个卷积层、5个池化层。 14、YOLOv2最后提出的基础模型:Darknet-19,19个卷积层、5个池化层。 15、YOLOv2的训练方式:先单独训练一个Darknet19分类网络,再将上面训练的分类网络进行修改,改成检测网络模型进行下一步训练。 16、YOLOv2先用标记的检测数据集,让网络学会如何定位(画框),并识别框内对象类别(能识别的对象类别比较少,例如用VOC训练出的是20类)。然后再让模型到分类数据集上训练,增加网络模型的分类能力,如用ImageNet-1K训练,可以让网络分类能力增强到1K类。混合训练,当输入数据标记有检测对象时,调整定位和分类参数;当输入数据只有分类信息时,只调整分类参数。 17、上文提到的混合训练,有一定挑战性,如检测数据集只有狗、船之类的大类信息;而分类数据集有哈士奇、吉娃娃等具体小类信息。合并数据集有一定困难。多数分类网络最后用softmax层来决定最后的类别,因此最后的类别是互斥的。但分类数据集和检测数据集的类信息不是互斥的。例如狗和吉娃娃这两个类信息不是互斥的。数据集的分级结构。例如ImageNet中吉娃娃、哈士奇、东北话都是评级的。但ImageNet的数据源头,WordNet数据集中,分类信息是分级的,如分类狗类、虎类,下一级狗类又分为吉娃娃、哈士奇。WordNet中的分类信息不是树,而是图。如狗即属于犬类,也属于家畜类。YOLOv2根据WordNet的分类图,提取出一个分类树。多级预测,每次缩小类别时选择最大的置信度,最后在到达一个阙值时,确定最后的分类对象。使用WordTree技术合并COCO和ImageNet数据集。用于YOLOv2训练,所以可以训练出能检测9000多类对象的网络模型。本文训练的YOLO9000,使用3个先验框而不是5个。对于检测图像,进行完整的反向传播损失;对于分类图像,只计算其对于及其向上类别的分类损失进行反向传播。 18、多级预测之后,精度有所下降,这很正常。这也有好处,在遇到新对象时,预测的大类准确性会更高。例如出现一只新品种的狗,会先预测他是一只狗,后面的品种预测应该不准确,但狗准确度很高。 19、YOLOv2是实时监测系统中最先进的算法,其他改进了YOLO v1固定输入尺寸的缺点,YOLOv2可以在各种图像尺寸下运行。YOLO9000是一个实时检测框架,可以检测9000多个类别;使用WordTree去组合数据集,用于联合训练。
|