YOLOv1

继RCNN、fast-RCNN和FAST-RCNN之后,Ross Girshick提出了另一种DL目标检测速度框架。Yov1的增强版可以在GPU上运行45fps,简化版可以运行155fps。

下载论文:

http://arxiv.org/abs/1506.02640

代码下载:

https://github.com/pjreddie/darknet

1.1的核心思想。YOLO

YOLO的核心思想是将整个图作为网络的输入,在输出层直接返回包围盒及其类别的位置。

Faster-RCNN也是直接使用整张图片作为输入,但是faster-RCNN整体上还是采用RCNN的建议分类器的思想,只是建议抽取的步骤在CNN中实现,而YOLO采用的是直接回归的思想。

2.2的实现方法。YOLO

一幅图像被分成SxS个网格单元。如果一个物体的中心落在这个网格里,这个网格负责预测这个物体。

每个网格需要预测B个包围盒,每个包围盒除了回到自己的位置还需要预测一个置信度值。

这个置信度代表两条信息:预测的盒子包含一个对象的置信度和这个盒子被预测的准确程度。其值计算如下:

如果网格单元格中有对象,则第一项取1,否则取0。第二项是预测边界框和实际背景之间的IoU值。

每个包围盒要预测(x,y,w,h)和置信度的五个值,每个网格要预测一个类别信息,标记为c类. SxS网格,每个网格要预测b包围盒和c类别。是输出S x S x (5*B C)的张量。

注意:类别信息是针对每个网格的,置信度信息是针对每个边界框的。

例:在PASCAL VOC中,图像输入是448x448,取S=7,B=2,有20类(C=20),那么输出是一个7x7x30的张量。

整个网络结构如下图所示:

在测试时,将每个网格预测的类别信息乘以由包围盒预测的置信度信息,以获得每个包围盒的特定类别置信度得分:

等式左边第一项是每个网格预测的类别信息,第三项二、是每个包围盒预测的置信度。这个乘积,也就是encode,表示预测的盒子属于某一类的概率,同时也有盒子精度的信息。

得到每个盒子的类别特定置信度得分后,设置阈值,过滤掉得分低的盒子,对保留的盒子进行NMS处理,得到最终的检测结果。

注意:

*由于输出图层是完全连接的图层,因此YOLO训练模型在检测过程中仅支持与训练图像相同的输入分辨率。

*虽然每个网格可以预测B个包围盒,但最终只选择IOU最高的包围盒作为物体检测输出,即每个网格最多只能预测一个物体。当图片中的对象比例较小时,例如图像中的兽群或鸟类,每个网格包含多个对象,但只能检测到其中的一个。这是YOLO方法的一个缺陷。

3.3的实现细节。YOLO

每个网格有30个维度,其中8个维度是回归盒子的坐标,2个维度是盒子的置信度,20个维度是类别。

坐标的x和y通过相应网格的偏移量归一化为0-1,w和h通过图像的宽度和高度归一化为0-1。

在实现中,最重要的是如何设计损失函数,使这三个方面得到很好的平衡。作者简单粗暴地采用误差平方和损失来做这件事。

这种方法存在以下问题:

第一,8维的定位误差和20维的分类误差一样重要,这显然是不合理的;

其次,如果一个网格中没有物体(一张图中有很多这样的网格),那么这些网格中的盒子的置信度就会被推到0。与带有对象的网格较少相比,这种做法是压倒性的,会导致网络不稳定甚至发散。

解决方案:

多关注8维坐标预测,在前面给这些损失更大的损失权重,如下

pascal VOC培训拿5。

对于没有物体的盒子的置信度损失,给它一个小的损失权重,标记为

pascal VOC培训0.5。

带有对象的盒子的损失权重和类的损失通常取1。

在不同尺寸箱子的预测中,与大箱子的预测相比,小箱子的预测更不能容忍。并且相同的失调损耗在平方和误差损耗中是相同的。

为了缓解这个问题,作者用了一个比较棘手的方法,就是取盒子的宽度和高度的平方根来代替原来的高度和宽度。参考下图就很好理解了。小方框的横轴值较小,发生偏移时反映在比大方框大的Y轴上。(这也是一种近似的方法)

一个网格预测多个盒子,希望每个盒子预测器负责预测一个对象。具体做法是看当前预测箱和地面真相箱哪个IoU更大,负责哪个。这种做法被称为盒预测器的专门化。

最终损失函数如下:

在这个损失函数中:

只有当网格中有对象时,分类错误才会受到惩罚。

只有当某个盒子预测器负责某个地面真值盒子时,该盒子的坐标误差才会受到惩罚,而哪个地面真值盒子负责,取决于它的预测值和该地面真值盒子的IoU是否是该单元所有盒子中最大的。

其他细节,如使用激活函数使用泄漏RELU,用ImageNet预训练模型等。此处不再赘述。

注意:

*YOLO方法模型训练依赖于物体识别和标记数据,因此YOLO的检测效果对于非常规的物体形状或比例并不理想。

*YOLO使用多个下采样层,网络学习到的物体特征不精细,也会影响检测效果。

*在YOLO损失函数中,大物体的IOU误差和小物体的IOU误差对网络训练中损失的贡献值相近(虽然采用了平方根法,但并没有从根本上解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程产生很大影响,从而降低物体检测的定位精度。

4.4的缺点。YOLO

YOLO在检测彼此靠近的物体和小群体时是无效的。这是因为在一个网格中只有两个框被预测,并且只属于一个类别。

当同一物体出现新的异常长宽比等条件时,泛化能力较弱。

由于损失函数的存在,定位误差是影响检测效果的主要原因。特别是大小物体的搬运,需要加强。

YOLOv2

YOLOv2:代表了目前业界最先进的物体检测水平。其速度比其他检测系统(FasterR-CNN、ResNet、SSD)都要快。用户可以权衡它的速度和准确性。

YOLO9000:这种网络结构可以实时检测9000多种物体分类,这得益于它使用了WordTree,将检测数据集和识别数据集的数据混合在一起。

工程代码地址:

http://pjreddie.com/darknet/yolo/

简介

目前,检测数据集有很多局限性,如分类标签信息太少,图片数量少于分类数据集,检测数据集的高成本使其无法作为分类数据集使用。而目前的分类数据集,图片数量多,分类信息丰富。

本文提出了一种新的训练方法——联合训练算法。该算法可以将两个数据集混合在一起。用分层的观点对对象进行分类,并且用大量的分类数据集扩展检测数据集,使得两个不同的数据集混合。

联合训练算法的基本思想是:同时在检测数据集和分类数据集上训练目标检测器,利用监控数据集的数据学习目标的准确位置,利用分类数据集的数据增加分类量,提高鲁棒性。

YOLO9000采用联合训练算法进行训练。它有9000类分类信息,从ImageNet分类数据集学习,而物体位置检测从COCO检测数据集学习。

代码预训练模型的地址:

http://pjreddie.com/yolo9000/

更准确

YOLO一代有许多缺点。作者希望提高召回率,提高定位的准确性,保持分类的准确性。

目前,计算机视觉的趋势是更大更深的网络,更好的性能通常取决于训练更大的网络或集成各种模型。然而,YOLO v2侧重于简化网络。有关具体的改进,请参见下表:

批量标准化

采用批量正则化来优化网络,提高了网络的收敛性,消除了对其他正则化形式的依赖。通过对YOLO的每个卷积层添加批量归一化,地图提高了2%,模型被正则化。使用批量标准化从模型中移除漏失,而不会过度拟合。

高分辨率分类器

目前,行业标准检测方法都需要在ImageNet上预先训练分类器。自Alexnet以来,大多数分类器运行在小于256*256的图像上。现在YOLO从224*224增加到448*448,这意味着网络需要适应新的输入分辨率。

为了适应新的分辨率,YOLO v2的分类网络首先在分辨率为448*448的ImageNet上进行微调,10个历元进行微调,这样网络就有时间调整过滤器,以便在新的分辨率下运行得更好。还需要优化用于检测的最终网络。最后,通过使用高分辨率,地图提高了4%。

与锚盒卷积

YOLO生成包含全连接层,可以直接预测包围盒的坐标值。更快的R-CNN的方法只使用卷积层和区域建议网络来预测锚盒的偏移值和置信度,而不是直接预测坐标值。作者发现,预测偏移量而不是坐标值可以简化问题,使神经网络更容易学习。

因此,最后YOLO删除了整个连接层,并使用锚盒来预测包围盒。作者在网络中去掉了一个池层,使得卷积层的输出具有更高的分辨率。缩小网络使其运行在416*416而不是448*448。因为图片中的所有物体都倾向于出现在图片的中心,尤其是较大的物体,所以在物体的中心有一个单一的位置来预测这些物体。YOLO的卷积层使用值32对图片进行下采样,因此通过选择416*416作为输入大小,最终可以输出13*13的特征图。使用锚盒会略微降低准确率,但使用它将使YOLO能够预测超过一千个盒子,而召回率将达到88%,mAP将达到69.2%。

维度群

之前锚箱大小是手动选择的,所以还有优化的空间。要进行优化,请对训练集中的边界框运行k-means聚类以找到更好的值。

如果我们使用欧几里德距离的标准k-means,较大的盒子将比较小的盒子引起更多的误差。因为我们的目的是提高IOU分数,这取决于盒子的大小,使用距离测量:

通过分析实验结果(图2),左图:权衡模型复杂度和高召回率后,选择聚类分类数K=5。右图:是集群的中心,大部分都是又高又瘦的盒子。

表1表明,当使用K-means选择锚盒时,当集群IOU选择值为5时,avgiu的值为61,高于没有集群的方法的60.9。当该值为9时,AVG IOU显著提高。总之说明聚类是有效的。

直接位置预测

使用锚盒的方法会使模型不稳定,尤其是在最初几次迭代中。大部分不稳定因素来自于预测盒子的(x,y)位置。按照以前的YOLO方法,网络不预测偏移量,而是根据YOLO网格单元的位置预测坐标,使得地面真值在0和1之间。为了使网络结果落在这个范围内,网络使用逻辑激活来限制网络预测结果,使得结果在0和1之间。在网络的每个网格单元中预测五个边界框,并且每个边界框具有五个坐标值tx、ty、tw、th、t0。请参见下图(图3)了解它们之间的关系。假设一个网格单元到图片左上角的偏移量为cx,cy,先前包围盒的宽度和高度为pw,ph,那么预测结果如下图右边的公式所示:

因为限制用于使值参数化,所以它也使网络更容易学习和更稳定。维度聚类和直接位置预测使YOLO比使用锚盒的其他版本高出近5%。

精细特征

YOLO修改后的特征图尺寸为13*13,足以检测图片中的大物体。同时,使用这种细粒度的特性也可能有利于定位小对象。fast-RCNN和SSD都使用不同大小的特征图来获得不同的分辨率,而YOLO采用不同的方法。YOLO添加了一个穿透层,以获得先前26*26分辨率层的功能。该穿透层可以将高分辨率特征与低分辨率特征链接起来,链接的方法是将相邻的特征堆叠在不同的通道中。这种方法类似于用Resnet进行身份映射,从而将26*26*512变为13*13*2048。YOLO的检测器位于扩展特征图的上方,因此可以获得细粒度的特征信息,使YOLO的性能提高了1%。

多尺度训练

作者希望YOLOv2能够在不同大小的图片上鲁棒运行,所以在训练模型中使用了这种思路。

与之前完成图像大小的方法不同,YOLOv2每隔几次迭代就会改变网络参数。每10批,网络将随机选择一个新的图片尺寸。由于下采样参数是32,不同的大小也被选择为32的倍数{320,352.608},最小320*320,最大608*608。网络将自动改变大小并继续训练过程。

该策略允许网络在不同的输入大小下达到良好的预测效果,并且同一网络可以在不同的分辨率下进行检测。输入图像尺寸小时运行速度更快,输入图像尺寸大时精度更高,可以权衡YOLOv2的速度和精度。

下图显示了voc2007的速度和精度。

更快

YOLO使用谷歌网络架构,比VGG-16更快。YOLO只需要85.2亿次运算就可以完成一个正向过程,而VGG-16需要306.9亿次运算,但精度略低于VGG-16。

Draknet19

Yov2基于一个新的分类模型,有点类似于VGG。Yov2使用3*3过滤器,在每个池后将通道数量增加一倍。Yov2采用全局平均池化和批量规格化,使训练更加稳定,加速收敛,模型标准化。

最终的模型——darknet 19,拥有19个卷积层和5个maxpooling层,处理一张图片只需要55.8亿次运算,在ImageNet上实现了72.9%的top-1准确率和91.2%的top-5准确率。

分类培训

在训练过程中,整个网络以448*448的较大分辨率用10个epoches完成,初始学习率设置为0.001。该网络实现了76.5%的前1名准确率和93.3%的前5名准确率。

斯特朗

在训练过程中,当网络遇到来自检测数据集的图片和标签信息时,它将使用完整的YOLO v2损失函数将图片传播回来。当网络从分类数据集中遇到一张图片和分类标志信息时,只利用整个结构中分类部分的损失函数将图片传播回去。

而检测数据集只有粗粒度的标签信息,如“猫”“狗”,而分类数据集的标签信息更精细、更丰富。比如狗,有哈士奇、斗牛梗、金毛等等。因此,如果你想同时在监测数据集和分类数据集上进行训练,你应该使用一致的方法来融合这些标签信息。

此外,用于分类的方法大多使用softmax层方法,这意味着分类的类别应该相互独立。但是如果盲目的混合数据集进行训练,那么检测数据集的分类信息中就会出现例如“狗”的分类。在分类数据集中,会出现不同种类的狗:“哈士奇”、“牛头梗”、“金毛”。这两个数据集之间的分类信息不是相互独立的。因此,使用多标签模型来混合数据集。假设一张图片可以有多个分类信息,分类信息必须相互独立的规则可以忽略。

层次分类

WordNet的结构是有向图,不是树形结构。因为语言复杂,dog这个词同时属于犬科和家畜,而犬科和家畜在WordNet中是同义词,所以不能使用树形结构。

作者希望根据ImageNet中包含的概念建立一个层次树。为了建立这个层次树,首先检查ImageNet中出现的名词,然后在WordNet中找到这些名词,再找到这些名词到其根节点的路径(这里所有的根节点都设置为物理对象)。在WordNet中,大部分同义词只有一条路径,所以先将这条路径中的所有单词添加到层次树中。然后迭代检查剩下的名词,尽可能少的添加到层次树中。加法的原理是取最短路径,把它们加到树上。

为了计算一个节点的绝对概率,只需要将从这个节点到根节点的整个路径的所有概率相乘。所以,比如你想知道一张图片是不是诺福克梗的概率,计算如下:

为了验证该方法,在WordTree上训练Darknet19的模型,并使用1000个类的ImageNet进行训练。为了构建WordtTree 1K,将所有中间词加入到WordTree中,标签空间从1000扩展到1369。在训练过程中,如果一张图片被标注为“诺福克梗”,那么这张图片也会被标注为“狗”和“哺乳动物”。总之,现在一张图片是多标记的,标记不需要相互独立。

如图5所示,之前的ImageNet分类使用了一个大的softmax进行分类。现在,WordTree只需要softmax对同一概念下的同义词进行分类即可。

在相同的训练参数下,这种分层结构的Darknet19达到了71.9%的top-1准确率和90.4%的top-5准确率,准确率仅略有下降。

这种方法的优点是,当对未知或新的对象进行分类时,性能会适度下降。比如看到一张狗的图片,但不知道是什么品种的狗,可以高置信度预测为“狗”,而“哈士奇”、“牛头梗”、“金毛”等其他犬种的同义词置信度较低。

数据集与单词树的组合

使用WordTree将数据集中的类别映射到分层树中的同义词。例如,上面的图6显示了WordTree混合了ImageNet和COCO。

联合分类和检测

作者的目的是训练一个超大规模的探测器。所以在训练的时候,用WordTree来混合COCO检测数据集和ImageNet中的Top9000类,混合数据集对应的WordTree中有9418个类。另一方面,由于ImageNet数据集过大,为了平衡两个数据集之间的数据量,作者对Coco数据集中的数据进行了过采样,使得COCO数据集和ImageNet数据集之间的数据比例达到了1: 4。

YOLO9000的训练基于YOLO v2的架构,但是使用3个先验而不是5个先验来限制输出大小。当网络遇到检测数据集中的图片时,正常情况下反向传播,遇到分类数据集中的图片时,只使用分类损失函数反向传播。同时,作者假设IOU至少为0.3。最后,根据这些假设进行反向传播。

使用联合训练的方法,YOLO9000使用COCO检测数据集学习检测图片中物体的位置,使用ImageNet分类数据集学习如何对大量类别进行分类。

为了评估该方法,使用ImageNet检测任务来评估训练结果。

评估结果:

YOLO9000获得19.7地图。在对156个未知分类数据进行测试后,该映射达到了16.0。

YOLO9000的地图比DPM高,YOLO有更高级的功能。YOLO9000以部分监督的方式在不同的训练集上进行训练,同时可以检测9000个对象类别,保证实时运行。

虽然YOLO9000对动物有很好的识别性能,但对“太阳镜”或“泳裤”等衣服或装备的类别,其识别性能并不是很好,如表7所示。这和数据集的数据构成有很大关系。

摘要

Yov2代表了目前最先进的物体检测水平,在多种监控数据集中比其他检测系统更快,可以权衡速度和精度。

YO9000的网络结构允许实时检测9,000多种物体分类,这要归功于其优化检测和分类功能的能力。使用WordTree混合不同资源的训练数据,同时使用联合优化技术在ImageNet和COCO数据集上进行训练,YOLO9000进一步缩小了监控数据集和识别数据集之间的代沟。

YOLOv3

YOLOv3在Pascal Titan X上可以处理20FPS的608x608图像,在COCO test-dev上mAP@0.5达到57.9%,和RetinaNet(焦损提出的单级网络)差不多,快4倍。

YOLO v3的模型比以前的模型复杂得多,可以通过改变模型结构的大小来权衡速度和精度。

速度比较如下:

'

YOLOv3明显快于其他具有相同准确度的检测方法。时间是用同样的GPU比如M40或者Titan X测出来的。

简而言之,YOLOv3的现有检测系统重复使用分类器或定位器来执行检测任务。他们将模型应用于图像的多个位置和尺度。而那些分数高的区域,可以视为测试结果。此外,与其他目标检测方法相比,我们使用完全不同的方法。我们将单个神经网络应用于整个图像。网络将图像分成不同的区域,从而预测每个区域的包围盒和概率。这些边界框将由预测的概率加权。我们的模型比基于分类器的系统有一些优势。它将在测试期间查看整个图像,因此它的预测利用了图像中的全局信息。与R-CNN不同,R-CNN需要单个目标的数千幅图像,它通过单个网络评估进行预测。这让YOLOv3速度非常快。一般比R-CNN快1000倍,比Fast R-CNN快100倍。

改进:

1.多尺度预测(类似FPN)

2.比较好的基本分类网络(像ResNet)和分类器darknet-53,如下图所示。

3.分类器类别预测:

YOLOv3不使用Softmax对每个盒子进行分类。有两个主要考虑因素:

A.Softmax会为每个盒子指定一个类别(得分最高的那个)。对于像开放图像这样的数据集,目标可能有重叠的类别标签,因此Softmax不适合多标签分类。

B.Softmax可以用独立的多个logistic分类器代替,准确率不会下降。

C.分类损失采用二值交叉熵损失。

多尺度预测

每个尺度预测3个盒子,设计方法盒子,anchor还是用聚类得到9个聚类中心,按照大小平均分成3个尺度。

比例1:在基本网络后增加一些卷积层,然后输出盒信息。

尺度2:从尺度1中倒数第二层的卷积层采样(x2),加到最后一张大小为16x16的特征图上,经过多次卷积后输出盒子信息,是尺度1的两倍。

比例3:与比例2类似,使用32x32大小的特征地图。

基本网络Darknet-53

darknet-53的精度与ResNet-101或ResNet-152接近,但速度更快。比较如下:

检测结构如下:

YOLOv3在mAP@0.5和小目标APs上有不错的成绩,但是随着IOU的增加,性能下降,说明YOLOv3不能很好的匹配ground truth。