前言
以下内容仅为个人在学习人工智能中所记录的笔记,先将目标识别算法yolo系列的整理出来分享给大家,供大家学习参考。
本文未对论文逐句逐段翻译,而是阅读全文后,总结出的YOLO V2论文的思路与实现路径。
若文中内容有误,希望大家批评指正。
YOLO V2论文下载地址:YOLO9000: Better, Faster, Stronger
项目地址:YOLO V2
YOLO V1回顾:【YOLO系列】YOLO V1论文思想详解
一、YOLO V2 思想
YOLO V2论文名叫"YOLO9000: Better, Faster, Stronger":“9000”表示该算法可以检测9000多种物种类别,因此我们通常说的YOLO V2又叫YOLO9000;“Better, Faster, Stronger”表示了该算法在精度上更好,速度上更快,性能上更强。
在YOLO V1算法中讲到,YOLO由于采用了FC层,因此限制了输入图片的尺寸大小,而 YOLO V2算法使用了一种新颖的多尺度训练方法,使得YOLO V2可以在不同大小的图片输入下运行,但其需要在速度和精度之间权衡,也就是鱼与熊掌不可兼得。
YOLO V2以67FPS的速度在VOC2007数据集上可达到76.8mAP;以40FPS的速度可达到78.6mAP。
二、YOLO V2 改进
YOLO V2为改进YOLO V1中低召回率、定位误差问题,同时保持分类能力的准确性,提出了10个trick来提高YOLO的性能。
1、Better
(1)Batch Normalization(BN,批量归一化)
使用BN可以显著的提高收敛性,在YOLOV2中所有的卷积层后使用BN,可以使mAP提高2%。使用BN可以去除算法中dropout的使用同时也可以起到防止过拟合的作用。
(2)High Resolution Classifier(高分辨率预训练分类器)
从AlexNet网络开始,大多数分类器的输入图像都是256×256,低分辨率的输入会在很大程度上影响算法的精度。而在YOLO V1中最初也是以224×224的输入在ImageNet中作预训练,并以448×448作为输入进行检测的。这就要求网络必须同时切换到学习目标检测并调整以适应新的输入分辨率。
YOLO V2中是直接将以448×448作为输入尺寸在ImageNet上对分类网络进行了10个轮次的预训练,这使得网络有时间去适应更高分辨的输入。使用了高分辨率预训练分类器使YOLO V2的mAP提升了4%。
(3)Convolutional with Anchor Boxes(带Anchor的卷积层)
在Faster RCNN中使用了全卷积层的RPN去预测anchor boxes的偏移量和置信度,而anchor boxes框都是人工选择的先验值,RPN仅需要在特征图上去预测每个位置的偏移量,这使得网络更容易去学习。
在YOLOV1中未使用anchor boxes去辅助定位,并且还是使用了全连接层直接对bbox框进行预测,导致丢失了较多的空间信息,从而使得定位不准。
YOLO V2中去除了全连接层,使用anchor boxes来辅助预测bbox,同时为了得到高分辨率的特征图,YOLO V2还是去掉了一个pooling层。
在图片中,预测目标往往占据在图像的中心,所以为了使得到的特征图拥有中心位置,即希望特征图尺寸为奇数。因此,YOLO V2将输入图像尺寸设置为416×416,这样通过32倍(5次pooling)的下采样后,得到的特征图为13×13。
受Faster RCNN的启发,YOLO V2每个cell使用了5个anchor boxes来进行预测,这样一共就有13×13×5=845个预测框,因此YOLO V2的召回率从没有使用anchor的模型81%提升到88%,但是mAP从69.5%降到69.2%。尽管mAP下降了,但是召回率提升意味着模型还有更多的空提升空间。
(4)Dimension Clusters(Anchor Boxes的大小聚类)
在Faster RCNN中anchor boxes大小都是手动设定的,这就带有一定的主观性,会使得网络在使用中不能更好的做出预测。这是在使用anchor boxes出现的第一个问题。为了解决这个问题,作者提出了使用k-Means聚类方法在训练集中自动的获取每个anchor boxes的大小,以替代人工设置。
k-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。然后使每个簇内的点离中心点尽量近,让簇间的距离尽量远。用公式来表示,则为最小化平方误差L:
μi为第C个簇的中心。
但是如果在YOLO V2中直接使用k-Mean的欧氏距离来度量进行聚类的话,结果会导致大的box比小的box产生更大的误差。而在YOLO V2中使用聚类的目的是为了使得anchor boxes和Ground Truth有更大的IOU,因此这就和anchor boxes的尺寸大小没有直接的关系。所以将使用以下的公式来进行度量:
d(box, centroid) = 1-IOU(box, centroid)
到聚类中心的距离越小越好,即IOU值越大越好。
为了权衡模型的复杂度和召回率,YOLO V2选用k=5,即5个anchor boxes。并且通过实验发现,使用聚类自动生成的anchor boxes的Avg IOU比人工设置的Avg IOU高。
但是在最后,YOLO V2还是没有使用这种方法,Anchor Box还是采用了预设的方式。
(5)Direct Location Prediction(绝对位置的预测)
作者在引入anchor boxes时遇到了第二个问题:模型不稳定,特别是在训练刚开始的时候。作者认为这种不稳定主要来自预测box的中心坐标(x,y)。
在基于RPN算法中,是通过预测tx,ty来得到(x,y),也就是预测偏移量。
这个公式是不受约束的,预测的bbox很容易向任何方向偏移。因此,每个位置预测的边界框可以落在图片的任何位置,这导致模型在随机初始化的情况下开始训练会出现模型不稳定,因而需要很长的时间来预测出正确的offsets。
在YOLO V2中没有采用这种预测方式,法而是沿用了YOLO V1的方,就是预测bbox中心点相对于对应的cell左上角的相对偏移值。将bbox的中心点约束在当前的cell中,并且使用sigmod函数将预测的值控制在0~1之间,这使得模型训练更稳定。
特征图上每个cell预测有5个bbox,每个bbox有tx,ty,tw,th和to5个值。如果cell与图像左上角的偏移量为(cx,cy),每个anchor的宽度和高度为pw,ph,则预测值为:
(6)Fine-Grained Features(细粒度的特征图)
由于YOLO V1中多次采用下采样而导致获得的特征图为粗粒度的,这样导致一些小物体的预测就不准,因此YOLO V2中受Faster RCNN和SSD中提特征图的启发,提出了一个passthrough层,用最后一个MP前的特征图分别去做一系列的MP和Conv,然后将其拼接起来,从而同时获得细粒度和粗粒度的特征图。
Passthrough layer(穿透层)
Passthrough层通过将相邻的特征叠加到不同通道而不是空间位置,将高分辨率特征和低分辨率特征连接起来,类似于ResNet网络。
(7)Multi-Scale Training(多尺度训练)
由于YOLO V2使用的DarkNet19网络中只有卷积层和池化层,所以可以动态调整输入图片的大小。
在训练过程中,作者采用每10批次随机选择一个新的图像尺寸,由于DarkNet19中一共有5次下采样,因此输入图片的大小以32的倍数变化,输入图片最小为320×320,最大为608×608,这使得网络学会在各种输入维度上进行良好预测,意味着同一个网络可以预测不同分辨率下的检测结果。同时网络在较小的尺寸下运行速度更快,因此,YOLO V2在速度和准确率之间提供了一个简单的平衡。
2、Faster
由于大多数检测框架都依赖于VGG-16作为基本特征提取器,但是VGG-16运算速度较慢,一张分辨率为244×244的图像需要306.9亿次浮点运算才能输出结果。
YOLO V1是基于Googlenet架构,使用ImageNet作为基本特征提取器,速度比VGG-16更快,仅需要85.2亿次浮点运算,但它的精度比VGG-16略差。
YOLO V2提出一个新的分类模型作为其基础,与VGG模型类似,主要使用了3×3的filter进行卷积,并在每个池化后将通道数增加一倍。最后使用1×1的filter来压缩3×3个卷积之间的特征表示。
(1)New Network(DarkNet-19)
DarkNet-19中主要使用3×3的filters和每个池化后将通道数增加一倍,在网络后使用全局平均池化和1×1的卷积层降维。同时,使用了BN在稳定训练,加速收敛。
DarkNet-19,有19个卷积层和5个MP层,它仅需要55.8亿次浮点运算来处理图像,在ImageNet上达到了72.9% top-1和91.2% top-5的精度。
(2)Training for classification
作者在ImageNet-1000上使用DarkNet框架训练了网络,在过程中使用了随机裁剪、旋转、色调、饱和度和曝光位移等数据增强技巧。
在对224×224的图像进行初始训练后,将网络调整为448尺寸,在这个更高的分辨率下,网络达到了76.5%的top-1和93.3% top-5精度。
(3)Training for detection
为了检测,作者修改了DarkNet网络,删除了最后一个卷积层,增加了一个3×3个卷积层,共1024个filter,最后通过1×1的卷积层输出检测数量。
3、Stronger
作者提出了一种分类和检测数据联合训练的机制:使用标记为检测的图像来学习特定于检测的信息;使用仅带有类标签的图像来扩展它可以检测的类别的数量。
网络看到标记为检测的图像时,可以基于完整的YOLO V2损失函数进行反向传播。当它看到分类图像时,只从体系结构的特定分类部分反向传播损失。
(1)Hierarchical classification
由于ImageNet标签是从WordNet中提取的,而WordNet是一个语言数据库,其中存在各类同义词,例如:“dog”既是“canine”又是“domestic animal”,因此WordNet的结构是一个有向图,而不是树。作者没有使用完整的图结构,而是通过从ImageNet中的概念构建层次树来简化问题。
为了构建这棵树,作者用过查看WordNet图到根节点的路径来选择,选择尽可能短的路径,例如有一个概念有两条到根节点的路径,其中一条会给树增加三条边,而另一条只会增加一条边,则选择更短的路径,最终得到WordTree。
为了使用WordTree进行分类,作者在每个节点上预测了给定的该同义词集的每个下义词的概率的条件概率,例如,在预测的“terrier”节点上:
如果想要计算特定节点的绝对概率,只需沿着树的路径到达根节点,并乘以条件概率。因此,如果我们想知道一张图片是否是“Norfolk terrier”,计算为:
为了验证这方法,作者使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,添加了所有中间节点,将标签空间从1000扩展到1369。在训练过程中,我们在树中传播Ground Truth标签,这样如果一个图像被标记为“Norfolk terrier”,它也会被标记为“狗”和“哺乳动物”,等等。
Darknet-19达到71.9%的top-1精度和90.4%的top-5精度。由于增加了369个额外的概念,但准确性只有略微下降。以这种方式执行分类也有一些好处。对于新的或未知的对象类别,性能会下降。例如,如果网络看到一张狗的照片,但不确定它是什么类型的狗,它仍然会预测为“狗”,但在下位词中的置信度可能会较低。
(2)Dataset combination with wordTree
作者使用WordTree将多个数据集组合在一起,并将数据集中的类别映射到树中的同义词集。
(3)Joint classification and detection
使用COCO检测数据集和完整ImageNet发布的前9000个类创建了的组合数据集,这个数据集对应的WordTree有9418个类。使用这个数据集基于基本的YOLO V2架构训练就得到了YOLO9000。
通过这种联合训练,YOLO9000学习使用COCO中的检测数据在图像中查找对象,并使用来自ImageNet的数据学习对各种各样的这些对象进行分类。
分析YOLO9000在ImageNet上的表现时,它能很好地学习新的动物物种,但在学习服装和设备等类别时表现欠佳。这是由于COCO没有任何类型的服装的边界框标签,只有人的边界框标签,所以YOLO9000很难模拟“太阳镜”或“泳裤”等类别。
三、YOLO V2 优缺点
1、优点
(1)速度更快:相比其他目标检测算法,YOLO V2采用了卷积神经网络进行目标检测,从而具有更快的检测速度。
(2)高精度的检测结果:YOLO V2采用CNN架构,并使用anchor boxes技术对不同大小和比例的目标进行检测,从而提高了检测精度。
(3)检测目标类别更多:相对于其他检测算法,YOLO V2能够检测更多的目标类别。
2、缺点
(1)对小目标的检测效果不够好:由于YOLO V2对目标进行分割时采用的固定网格大小,因此对于小目标的检测效果不够好。
(2)对重叠目标的检测效果不够理想:当存在重叠目标时,YOLO V2可能会出现漏检或误检情况。
(3)需要较大的训练集和计算资源:YOLO V2的训练时间比较长,需要较大的训练集和计算资源。
四、总结
YOLO V2针对V1的缺点做出了相应的改进:
(1)借鉴了Faster RCNN中的anchor boxes,增多的预测框的数量,同时可做多种类的预测;
(2)使用了Passthrough层来获取细粒度的特征,提高预测精度;
(3)移除了FC层,网络仅采用卷积层和池化层,可以用于多尺度的训练与预测。
五、YOLO系列对比
Type | YOLO V1 | YOLO V2 |
网络结构 | 借鉴了GoogleNet的思想,24个卷积层+2层全连接层 | Darknet-19 |
损失函数 | 均方差损失(sum-squared error loss) | Softmax loss |
Anchor Box | 无Anchor Box | 提出聚类的方法生成Anchor Box,但未使用,还是采用了预设的方式确定先验框的尺寸 |
特征提取 | -- | Passthrough layer |
FPS | 45 FPS | -- |
mAP | 63.4 | 在VOC2007数据集上,以67FPS的速度可达到76.8mAP; 以40FPS的速度可达到78.6mAP。 |
YOLO V3 再见!!!