当前位置:   article > 正文

YOLOv1-v3系列进化史回顾[AI算法库]

ai object detect yolov数据库

关注:决策智能与机器学习,深耕AI脱水干货

作者 / McGL

来源 | 知乎

授权转载

You only look once (YOLO)是一个针对实时处理的目标检测系统。在本文中,我们将介绍 YOLO、 YOLOv2、 YOLO9000和YOLOv3。对于那些只对 YOLOv3感兴趣的人,请直接转到文章的底部。下面是 YOLO 网站提供的准确率和速度比较。

 YOLO

让我们从下面的测试图片开始说起。

YOLO 检测到的物体:

Grid cell

为了便于讨论,我们裁剪了原始照片。YOLO 将输入图像划分为S x S grid。每个grid cell只预测一个物体。例如下面的黄色grid cell尝试预测其中心(蓝点)位于grid cell内的物体“人”。

每个grid cell预测一个固定数量的boundary boxes。在此示例中,黄色grid cell产生了两个boundary box预测(蓝色框)来定位人所在的位置。

但是,单物体规则限制了检测到的物体之间的距离。因为这一点,YOLO 确实对物体之间最多可以靠多近有一些限制。比如下面的图片,有9个圣诞老人在左下角,但 YOLO 只能检测到5个。

对于每个grid cell,

  • 它预测B个boundary box,每个box有一个box confidence score,

  • 无论boxes B是多少个,它都只检测一个物体,

  • 它预测C类条件概率(每个类别一个此物品类别的可能性)

为了评估 PASCAL VOC,YOLO 使用了7x7 grids(SxS)、2个boundary boxes(B)和20个类(C)。

YOLO 用 B 个boundary boxes在 SxS上预测

让我们了解更多的细节。每个boundary box包含5个元素: (x,y,w,h)和一个box confidence score。confidence score反映了框中包含物体的可能性(objectness)以及boundary box的精确度。我们用图像的宽度和高度将bounding box的宽度 w 和高度 h normalize。x和y 是相应cell的offset。因此,x,y,w 和 h 都在0和1之间。每个cell有20个类条件概率。 类条件概率是被检测物体属于特定类别的概率(每个cell中,每个类别有一个概率)。因此,YOLO 预测结果的shape是(S,S,Bx5 + c) = (7,7,2x5 + 20)=(7,7,30)。

YOLO的主要概念是创建一个CNN网络来预测一个(7,7,30)张量。它使用 CNN 网络将空间维度降低到7x7,每个位置有1024个输出channel。YOLO用两个全连接层线性回归产生7x7x2个boundary box的预测(下面中图)。为了做出最后的预测,我们保留那些具有高box confidence scores(大于0.25)的boxes作为最后的预测(右图)。

每个预测box的class confidence score计算公式如下:

它同时度量分类和定位(物体所在的位置)的confidence。

我们很容易地把那些得分项和概率项混淆。这里有一些数学定义,供你将来参考。

网络设计

YOLO有24个卷积层,之后接着2个全连接层。一些卷积层使用1x1来减少feature maps的深度。最后一个卷积层输出一个形状为(7,7,1024)的张量。然后把张量被flattened。2个全连接层作为一种线性回归输出7x7x30个参数,然后reshape成(7,7,30) ,即每个位置2个boundary box预测。

还有一个更快但不太精确的 YOLO 版本叫做 Fast YOLO,只使用9个卷积层和较浅的feature maps。

损失函数

YOLO 每个grid cell预测多个bounding boxes。为了计算true postitive的损失,我们只希望它们中的一个对该物体负责。为此,我们选择和ground truth 的IoU (interp over union)最高的那个。这种策略导致了bounding box预测的专门化。每个预测都能更好地预测特定的尺寸和长宽比。

YOLO 使用预测与ground truth之间的平方差的和来计算损失。损失函数包括:

  • 分类损失

  • 定位损失(预测的boundary box与ground true之间的误差)

  • confidence损失(box的objectness)

分类损失

如果一个物体被检测到,每个cell的分类损失是所有类条件概率的平方差的和:

定位损失

定位损失度量了预测的boundary box位置和尺寸的误差。我们只计算负责检测物体的box。

我们不希望大boxes和小boxes一样的绝对误差权重相同。比如说,两个像素的误差对于大box和小box都是一样的。为了部分解决这个问题,YOLO 预测bounding box宽度和高度的平方根,而不是宽度和高度。此外,为了更加强调boundary box的准确性,我们将损失乘以 y coord (默认值: 5)。

Confidence 损失

如果在box中检测到一个物体,confidence损失(度量box的objectness)为:

如果在box中未检测到物体,则confidence损失为:

大多数boxes不包含任何物体。这导致了一个类不平衡的问题,也就是说,我们训练模型来检测背景比检测物体更频繁。为了弥补这一点,我们用一个系数  (默认值: 0.5) 降低这一损失的权重。

损失

最终的损失加上了定位、conficence和分类损失。

推理: Non-maximal suppression

YOLO 可以对同一个物体进行重复检测。为了解决这个问题,YOLO 应用non-maximal suppression来移除较低confidence的重复。Non-maximal suppression提高了2-3% 的 mAP。

下面是一种可能的non-maximal suppression实现:

  1. 根据confidence scores对预测进行排序。

  2. 从最高分开始,如果我们发现任何以前的预测与当前预测具有相同的类别且IoU > 0.5,则忽略任何当前的预测。

  3. 重复步骤2,直到检查完所有预测。

YOLO 的好处

  • 速度快,便于实时处理。

  • 预测(物体位置和类)是由一个单一的网络进行的。可以进行端到端的训练以提高准确率。

  • YOLO 泛化能力更强。从自然图像切换到其它领域,如艺术品时,它优于其它方法。

  • Region proposal方法将分类器限制在特定区域内。YOLO通过对整幅图像进行boundaries预测。有了额外的context,YOLO 在背景区域的false positives更少。

  • YOLO在每个grid cell中检测一个物体。它在进行预测时加强了空间多样性。

YOLOv2

SSD是YOLO的强劲对手,表现出更高的实时处理精度。与基于区域的检测器相比,YOLO具有较高的定位误差和较低的召回率。YOLOv2是 YOLO 的第二个版本,其目标是在提高精度的同时使其更快。

准确率提升

Batch normalization

在卷积层中增加batch normalization。这样就无需dropout了,并使 mAP 增加了2% 。

高分辨率分类器

YOLO训练分为两个阶段。首先,我们训练一个类似 VGG16的分类器网络。然后我们用卷积层替换全连接层,并对它进行端到端的目标检测重新训练。YOLO用224x224的图片训练分类器,然后用448x448的图片来训练目标检测。YOLOv2从224x224的图片开始训练分类器,然后用448x448的图片retune分类器,用时/epochs少得多。这使得检测器的训练更容易,mAP上升了4% 。

用Anchor Boxes卷积

正如 YOLO 论文所指出的,早期训练容易受到不稳定梯度的影响。最初,YOLO 对boundary boxes进行任意猜测。这些猜测可能对某些物体有效,但对其它物体则不然,从而导致剧烈的梯度变化。在早期的训练中,多个预测在专攻什么形状的问题上相互较劲。

在现实生活中,boundary boxes不是任意的。汽车有着非常相似的外形,而行人的纵横比约为0.41。

因为我们只需要一个猜测是正确的,所以如果我们从现实生活中常见的各种猜测开始,最初的训练将会更加稳定。

例如,我们可以使用以下形状创建5个anchor boxes。

与预测5个任意boundary boxes不同,我们预测上面每个anchor boxes的偏移量。如果我们限制偏移值,我们可以保持预测的多样性,并且让每个预测集中在一个特定的形状上。所以初始的训练会更加稳定。

在论文中,anchors也被称为priors。

以下是我们对网络所做的改进:

  • 移除负责预测boundary box的全连接层。

  • 我们将类预测从cell level移到boundary box level。现在每个预测包括boundary box的4个参数,1个box confidence score(objectness)和20个类的概率。例如,5个boundary boxes,每个有25个参数:每个grid cell共125个参数。和YOLO 一样,objectness仍然预测ground truth和proposed box的IOU。

  • 为了生成7x7x125形状的预测,我们用三个3x3卷积层替换最后一个卷积层,每个卷积层输出1024个输出channels。然后最后我们应用一个1x1卷积层将7x7x1024输出转换为7x7x125。(详情请参阅 DarkNet 一节。)

  • 将输入图像的大小从448x448改为416x416。这将创建一个奇数空间维度(7x7 v.s. 8x8grid cell)。图片的中心往往被一个大物体占据。有了奇数grid cell,它更加确定物体的归属。

  • 删除一个pooling层,使网络的空间输出达到13x13(而不是7x7)

Anchor boxes略微减少 mAP 从69.5到69.2,但是召回率从81% 提高到88% 。也就是说,即使准确性略有降低,它增加了检测到所有ground truth物体的概率。

Dimension Clusters

在许多问题域中boundary box具有很强的模式。例如,在自动驾驶中,两种最常见的boundary boxes是不同距离的汽车和行人。为了确定对训练数据有最好覆盖率的top-K boundary boxes,我们对训练数据运行 K-means 聚类算法定位top-K clusters的重心。

因为我们处理的是boundary boxes而不是点,所以我们不能使用规则的空间距离来度量数据点的距离。毫无疑问,我们使用IoU。

在左边,我们绘制了使用不同数量的clusters(anchors)下anchors和ground truth boxes之间的平均IoU。随着anchors数量的增加,精度提高趋于稳定。为了得到最好的回报,YOLO 选择了5个anchors。在右边,它显示了5个anchors的形状。紫蓝色矩形选自 COCO 数据集,黑色边框选自 VOC2007。在这两种情况下,我们有更多细长的anchors,这表明现实生活中的boundary boxes并不是任意的。

这里为了描述方便,除非我们将 YOLO 和 YOLOv2进行比较,否则 YOLOv2称为 YOLO。

直接位置预测

我们对anchors的偏移量(offsets)进行预测。然而,如果它是不受约束的,我们的猜测将再次随机化。Yolo 预测5个参数(tx、 ty、 tw、 th 和 to) ,并应用 sigma 函数约束其可能的偏移范围。

下面是可视化。蓝框是预测的boundary box,虚线矩形是anchor。

通过使用 k-means clustering(dimension clusters)和本节提到的改进,mAP 增加了5% 。

细粒度features

卷积层逐渐降低空间维数。随着分辨率的降低,小物体的检测变得更加困难。其他目标检测器(如 SSD)从不同的feature maps层定位对象。所以每一层专注于不同的scale。YOLO 采用了一种称为 passthrough 的不同方法。它reshape26x26x512层到13x13x2048。然后它连接原始的13x13x1024输出层。现在我们在新的13x13x3072层上应用卷积filters来做出预测。

Multi-Scale(多尺度)训练

移除全连接层后,YOLO 可以输入不同大小的图像。如果宽度和高度加倍,我们只需要制作4倍的输出grid cell,也就是4倍的预测。由于 YOLO 网络对输入的downsample系数为32,我们只需要确保宽度和高度是32的倍数。在训练期间,YOLO 输入图片大小为320x320,352x352,... 和608608(步长为32)。对于每10个batch,YOLOv2随机选择另一个图像大小来训练模型。这作为数据增强和强制网络预测不同的输入图像尺寸和尺度。此外,我们可以使用低分辨率的图像,代价是目标检测的准确性。这对于低 功率GPU 设备的速度是一个很好的折衷。在288 × 288下YOLO速度超过90fps,mAP几乎与 Fast R-CNN 一样高。高分辨率下 YOLO 在VOC 2007上达到了78.6mAP。

准确率

下面是应用到目前为止讨论过的技术后准确率的提升:

不同检测器的精度比较:

速度提升

GoogLeNet

VGG16需要306.9亿次浮点运算才能跑完一张224x224分辨率的图片,而定制的 GoogLeNet 需要85.2亿次运算。我们可以用定制的 GoogLeNet 替换 VGG16。然而,YOLO 的 ImageNet 的top-5准确率从90.0% 下降到88.0% 。

DarkNet

我们可以进一步简化使用的backbone CNN。DarkNet只需要55.8亿次运算。使用 DarkNet,在 ImageNet 上 YOLO 可以达到72.9% 的 top-1准确率和91.2% 的 top-5准确率。DarkNet主要使用3x3 filters来提取特征,并用1x1 filters来减少输出channels。它还使用global average pooling进行预测。以下是详细的网络描述:

我们将最后一个卷积层替换为三个3x3卷积层,每层输出1024个输出channels。然后我们应用最后的1x1卷积层将7x7x1024输出转换为7x7x125。(5个boundary boxes,每个有4个box参数,1个objectness score和20个类条件概率)

训练

YOLO在 ImageNet 1000类分类数据集上训练了160 epochs: 使用随机梯度下降,初始学习率为0.1,多项式衰减系数为4,weight decay为0.0005,momentum为0.9。在初始训练中,YOLO 使用了224x224分辨率的图像,然后以10-3的学习率用448x448的图像retune了10个epochs。训练后,分类器达到了top-1 76.5% ,top-5 93.3% 的准确率。

然后训练检测器时去掉全连接层和最后的卷积层。YOLO 增加了三个3x3卷积层,每层有1024个filters,最后是一个1x1卷积层,有125个输出channels。YOLO 还增加了一个passthrough层。YOLO 以10-3的初始学习率训练网络160个epochs,在60和90 epochs处分别除以10。YOLO 使用了0.0005的weight decay和0.9的momentum。

分类

目标检测数据集的类别类别比分类数据集少得多。为了扩展 YOLO 可以检测的类,YOLO 提出了一种在训练期间混合检测和分类数据集图像的方法。它利用目标检测样本训练端到端网络,同时从分类样本反向传播分类损失来训练分类器路径。这种方法遇到了一些挑战:

  • 如何合并不同数据集中的类标签?特别是,目标检测数据集和不同的分类数据集使用不同的标签。

  • 合并的标签可能不是互相排斥的,如 ImageNet中的诺福克梗 和 COCO中的. 由于它不是互斥的,所以不能用softmax来计算概率。

层次(Hierarchical)分类

YOLO 将不同数据集中的标签组合在一起,形成树形结构的 WordTree。孩子们形成了一种与父母的关系,就像双翼飞机是一种飞机。但是合并后的标签现在并不是互斥的。

将 COCO 和 ImageNet 标签组合到层次化 WordTree

让我们使用1000类 ImageNet 简化讨论。我们没有在一个平面结构中预测1000个标签,而是创建了相应的 WordTree,其中原始标签有1000个叶节点,其父类有369个节点。原始YOLO 预测了双翼机的类score。但是有了 WordTree,现在可以预测已知它是飞机的情况下双翼机的score。

因为

我们可以从它自己和兄弟姐妹的scores中用softmax函数来计算概率。

不同之处在于,YOLO 不是执行一个 softmax 操作,而是为每个父母的子女执行多个 softmax 操作。

然后通过爬 WordTree 从 YOLO 预测中计算类的概率。

对于分类,我们假设已经检测到一个物体,因此 Pr (物理物体)=1。

层次分类的一个好处是,当 YOLO 不能区分飞机的类型时,它会给飞机一个高分,而不是强迫它选择一个子类别。

当 YOLO 算法看到一个分类图像时,它只是反向传播分类损失来训练分类器。YOLO 找到了预测这个类的最高概率的bounding box,它计算了分类损失以及来自父母的损失。(如果一个物体被标记为双翼飞机,它也被认为是标记为飞机,空气,交通工具...)这鼓励模型提取他们共同的特征。因此,即使我们从来没有训练过一个特定类别的目标检测,我们仍然可以通过从相关物体中归纳预测来做出这样的预测。

在目标检测中,我们设置 Pr (物理物体)等于box的confidence score(度量box是否有物体)。YOLO向下遍历树,在每次分叉时取最高confidence路径,直到达到某个阈值,YOLO 预测该物体类。

YOLO9000

Yolo9000扩展了 YOLO,使用含9418个节点的 WordTree的层次分类来检测超过9000个类的物体。它结合了来自 COCO和来自 ImageNet 的前9000个类的样本。YOLO 采样中每一个 COCO 数据配四个 ImageNet 数据。它学习使用 COCO 中的检测数据寻找物体,并使用 ImageNet 样本对这些物体进行分类。

在评估过程中,YOLO 测试图像的类别,这些类别它知道如何分类,但没有直接训练定位,即类别不存在于 COCO中。YOLO9000评估了来自 ImageNet object detection数据集的结果,该数据集有200个类别。它与 COCO 共享了大约44个类别。因此,数据集包含156个类别,这些类别从未直接训练过定位。YOLO 为相关的对象类型提取类似的特性。因此,我们可以通过简单的特征值来检测这156个类别。

Yolo9000在这156个类别中mAP为19.7,而总的mAP为16.0。YOLO9000在 COCO 中没有的新动物物种中表现良好,因为它们的形状可以很容易地从它们的父类中概括出来。然而,COCO 没有任何类型的服装的bounding box标签,所以测试在“太阳眼镜”这样的类上很挣扎。

YOLOv3

引用 YOLOv3上 YOLO 网站的一段话:

在 Pascal Titan x 上,它以30 FPS 处理图像,COCO tests-dev上 mAP 为57.9% 。

类别预测

大多数分类器假定输出标签是互斥的。如果输出是相斥的物体类,当然是正确的。因此,YOLO 使用softmax函数来将scores转换成总和为1的概率。YOLOv3使用多标签分类。例如,输出标签可能是“ 行人”和“ 孩子” ,它们并不是互斥的。(现在输出的总和可以大于1。) YOLOv3用独立的logistic分类器替换了softmax函数分类器,以计算输入属于某个特定标签的可能性。在计算分类损失时,YOLOv3没有使用mean square error,而是对每个标签使用binary cross-entropy损失。这也减少了计算的复杂性,避免了使用softmax函数。

Bounding box预测与cost函数计算

YOLOv3使用logistic regression来预测每个bounding box的objectness score。YOLOv3改变了计算cost函数的方式。如果bounding box prior(anchor)与ground truth的物体重叠高于其它,则相应的objectness score应为1。对于其他重叠大于预定义阈值(默认值0.5)的priors,它们不会产生任何cost。每个ground truth物体只和一个boundary box prior配对。如果一个bounding box prior没有分配,它不会导致分类和定位损失,只有objectness的confidence loss。我们用 tx 和 ty (而不是 bx 和 by)来计算损失。

类似Feature Pyramid Networks (FPN) Feature Pyramid

YOLOv3对每个位置做3次预测。每个预测由一个boundary box、一个objectness和80个类score组成,即NxNx [3x(4 + 1 + 80)]个预测。

YOLOv3在3个不同scales上进行预测(类似于 FPN) :

  1. 在最后一个feature map层。

  2. 然后再回两层,upsample两倍。然后,YOLOv3将分辨率更高的feature map和upsample的feature map合并。YOLOv3在合并后的map上应用卷积filters进行第二组预测。

  3. 再次重复2,使得得到的feature map层具有良好的高层结构(语义)信息和物体位置的高分辨率空间信息。

为了确定priors,YOLOv3使用 k-means cluster。然后预先选择9个clusters。COCO的宽度和高度分别为(10x13)、(16x30)、(33x23)、(30x61)、(62x45)、(59x119)、(116x90)、(156x198)、(373x326)。这9个priors按照他们的scale分为3个不同的组。每一组都被分配到上面的一个特定的feature map中去检测物体。

特征提取器(Feature extractor)

使用新的53层 Darknet-53取代 Darknet-19作为特征提取器。Darknet-53主要由3x3和1x1 filters组成,具有像 ResNet 中的residual网络一样的skip connections。Darknet-53的 BFLOP (10亿浮点运算)少于 ResNet-152,但是分类准确率和ResNet-152一样的情况下快了2倍。

YOLOv3性能

YOLOv3的 COCO AP 指标与 SSD 相当,但速度快了3倍。但是 YOLOv3的 AP 仍然落后于 RetinaNet。特别是 AP@IoU=. 75与 RetinaNet 相比显著下降,说明 YOLOv3具有较高的定位误差。YOLOv3在检测小物体方面也显示了显著的提升。

当速度很重要时,YOLOv3在快速检测器类里表现非常好。

交流合作

请加微信号:yan_kylin_phenix注明姓名+单位+从业方向+地点,非诚勿扰。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/85237
推荐阅读
相关标签
  

闽ICP备14008679号