论文原文:https://arxiv.org/pdf/1506.02640.pdf

Tensorflow版本yolo v1:GitHub - gliese581gg/YOLO_tensorflow: tensorflow implementation of 'YOLO : Real-Time Object Detection'

2015年06月

Abstract 摘要

本文提出了一种新的物体检测方法YOLO。YOLO之前的物体检测方法主要是通过region proposal产生大量的可能包含待检测物体的 potential bounding box,再用分类器去判断每个 bounding box里是否包含有物体,以及物体所属类别的 probability或者 confidence,如R-CNN、Fast-RCNN、Faster-RCNN等。

YOLO不同于这些物体检测方法,它将物体检测任务当做一个regression问题来处理,使用一个神经网络,直接从一整张图像来预测出bounding box 的坐标、box中包含物体的置信度和物体的probabilities。因为YOLO的物体检测流程是在一个神经网络里完成的,所以可以end to end来优化物体检测性能。YOLO检测物体的速度很快,标准版本的YOLO在Titan X的GPU上能达到45FPS。网络较小的版本Fast YOLO在保持mAP是之前的其他实时物体检测器的两倍的同时,检测速度可以达到155FPS。相较于其他的state-of-the-art 物体检测系统,YOLO在物体定位时更容易出错,但是在背景上预测出不存在的物体(false positives)的情况会少一些。而且,YOLO比DPM、R-CNN等物体检测系统能够学到更加抽象的物体的特征,这使得YOLO可以从真实图像领域迁移到其他领域,如艺术。

1、Introduction(介绍)

人们瞥视图像,立即知道图像中的物体,它们在哪里以及它们如何相互作用。 人类的视觉系统是快速和准确的,使我们能够执行复杂的任务,例如驾驶时几乎没有意识的想法。 快速,准确的目标检测算法可以让计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时的场景信息,并释放通用目标响应式机器人系统的潜力。

当前的物体检测系统使用分类器来完成物体检测任务。为了检测一个物体,这些物体检测系统要在一张测试图的不同位置和不同尺寸的bounding box上使用该物体的分类器去评估是否有该物体。如DPM系统,要使用一个滑窗(sliding window)在整张图像上均匀滑动,用分类器评估是否有物体。

Faster RCNN检测流程:

在DPM之后提出的其他方法,如R-CNN方法使用region proposal来生成整张图像中可能包含待检测物体的potential bounding boxes,然后用分类器来评估这些boxes,接着通过post-processing来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。

本文提出的YOLO(you only look once),将物体检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要输入到神经网络就能得出图像中都有哪些物体和这些物体的位置。

YOLO非常简单:参见图1,单个卷积网络可同时预测多个边界框和这些盒的类概率,YOLO训练全图像并直接优化检测性能。 这种统一的模型与传统的物体检测方法相比有许多优点。

图1:YOLO检测系统。 用YOLO处理图像简单而直接。 我们的系统1)将输入图像的大小调整为448×448,2)在图像上运行单个卷积网络,以及3)通过模型的置信度对结果检测进行阈值。

YOLO模型相对于之前的物体检测方法有多个优点:

1)YOLO检测物体非常快。

因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X的GPU上能达到45FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

2)YOLO可以很好的避免背景错误,产生false positives。

不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。

3)YOLO可以学到物体的泛化特征。

当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

尽管YOLO有这些优点,它也有一些缺点:

1)YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。

2)YOLO容易产生物体的定位错误。

3)YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

2、Unified Detection(统一检测)

我们将对象检测的分离组件统一为单个神经网络。我们的网络使用来自整个图像的特征来预测每个 bounding boxes(边界框)。它还预测所有边界的所有图像的包围盒。这意味着我们在整体范围内对整个图像和图像中的所有对象进行网络推理。YOLO设计使端到端的训练和实时速度成为可能,同时保持高的平均精度。

YOLO 检测系统,先将输入图像分成 S*S个grid(栅格),如果一个物体的中心掉落在一个grid cell(网格单元)内,那么这个grid cell(网格单元)就负责检测这个物体。

每一个grid cell预测B 个bounding boxes,以及这些 bounding boxes 的得分:score。这个 score 反应了模型对于这个 grid cell 中预测是否含有物体,以及是这个物体的可能性是多少。我们把confidence(可信度)正式定义为:

如果这个 cell 中不存在一个 object,则 score 应该为0;否则的话,score 则为 predicted box 与 ground truth 之间的 IoU(intersection over union:一种测量在特定数据集中检测相应物体准确度的一个标准)。

换句话说:若bounding box包含物体,则P(object) = 1;否则P(object) = 0。IOU(intersection over union)为预测boundingbox与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间)。

每个边框由五个预测值组成:x,y,w,h,confidence。坐标(x,y) 代表了 bounding box 的中心与 grid cell 边界的相对值。w、h 则是相对于整幅图像的预测值(边框的宽和高)。confidence 就是 IoU 值。

  注意:实际训练过程中,w和h的值是对象大小比 grid 的相对值,若对象大小大于grid的尺寸,w,h大于1;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。

每一个栅格还要预测C个 conditional class probability(条件类别概率): Pr(Classi|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。我们只为每个栅格预测一组(C个)类概率,而不考虑框B的数量。

注意,yolov1这里:

conditional class probability信息是针对每个网格的。

confidence信息是针对每个bounding box的。

在测试阶段,将每个栅格的conditional class probabilities与每个 bounding box的 confidence相乘:

这样既可得到每个bounding box的具体类别的confidence score。这乘积既包含了bounding box中预测的class的 probability信息,也反映了bounding box是否含有Object和bounding box坐标的准确度。

整个yolo算法的流程如图2:

图2:我们的YOLO系统将检测模型化为回归问题

它将图像划分为S×S网格,并且每个网格单元预测B个边界框,对这些框的置信度以及C类概率。 这些预测值被编码为S×S×(B * 5 + C)张量。为了评估PASCAL VOC上的YOLO,我们使用S=7,B=2。PASCAL VOC有20个标记类,因此C=20。我们的最终预测是7×7×30张量。

即,真值标签y向量长度为:(B * 5 + C),yolov1中B=2,VOC中C为20类,5表示cx, cy, bw, bh, confidence(以网格量化后的中心点x,y和目标宽高及置信度),C为长度为20的 one hot类别编码。

注意:

1、由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。

2、虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。

2.1、Network Design(网络结构设计)

我们将此模型作为卷积神经网络实施并在PASCAL VOC检测数据集上进行评估。 网络的初始卷积层从图像中提取特征,而全连接的层预测输出概率和坐标。

YOLO网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。YOLO检测网络包括24个卷积层和2个全连接层,完整的网络结构如图3所示。

最终的输出结果是一个7*7*30的张量。

2.2、Training(训练)

预训练分类网络: 在 ImageNet 1000-class competition dataset上预训练一个分类网络,这个网络是Figure3中的前20个卷机网络+average-pooling layer(平均池化层)+ fully connected layer(全连接层)(此时网络输入是224*224)。

训练检测网络:转换模型去执行检测任务,《Object detection networks on convolutional feature maps》提到说在预训练网络中增加卷积和全链接层可以改善性能。在作者的例子基础上添加4个卷积层和2个全链接层,随机初始化权重。检测要求细粒度的视觉信息,所以把网络输入把224*224变成448*448。

我们的最后一层预测类概率和包围盒坐标。我们通过图像宽度和高度对包围盒宽度和高度进行归一化,使它们下降到0和1之间。我们将边界框x和y坐标参数化为特定网格单元位置的偏移,因此它们也在0和1之间。将所有的预测结果都归一化到 0~1, 使用 Leaky RELU 作为激活函数。 Leaky RELU的公式如下:

Leaky RELU可以解决RELU的梯度消失问题。

损失函数:

损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification 这个三个方面达到很好的平衡。

简单的全部采用了sum-squared error loss来做这件事会有以下不足:

a) 8维的localization error和20维的classification error同等重要显然是不合理的。

b) 如果一些栅格中没有object(一幅图中这种栅格很多),那么就会将这些栅格中的bounding box的confidence 置为0,相比于较少的有object的栅格,这些不包含物体的栅格对梯度更新的贡献会远大于包含物体的栅格对梯度更新的贡献,这会导致网络不稳定甚至发散。

解决方案:增加边界框坐标预测的损失,并且减少了不包含对象的框的置信度预测的损失。我们使用两个参数来实现这一点,即

这两个参数,赋值为λcoord= 5,后者赋值为λnoobj= 0.5。

有object的bbox的confidence loss (上图红色框) 和类别的loss (上图紫色框)的loss weight正常取1。

  不同大小物体损失均衡化。对不同大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏一点更不能忍受。而sum-square error loss中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。 如下图:small bbox的横轴值较小,发生偏移时,反应到y轴上的loss(下图绿色)比big box(下图红色)要大。

在 YOLO中,每个栅格预测多个bounding box,但在网络模型的训练中,希望每一个物体最后由一个bounding box predictor来负责预测。因此,当前哪一个predictor预测的bounding box与ground truth box的IOU最大,这个 predictor就负责 predict object。这会使得每个predictor可以专门的负责特定的物体检测。随着训练的进行,每一个 predictor对特定的物体尺寸、长宽比的物体的类别的预测会越来越好。

在训练期间,我们优化以下多部分损失函数:

我们用Pascal VOC 2007和2012的训练集和验证数据集进行了大约135个迭代的网络训练。因为我们仅在Pascal VOC 2012上进行测试,所以我们的训练集里包含了Pascal VOC 2007的测试数据。在整个训练过程中,我们使用的批量大小是64,动量为0.9,衰减率是0.0005。

我们的学习率计划如下:在第一个迭代周期,我们将学习率从10-3慢慢地提高到10-2。如果从大的学习率开始训练,我们的模型通常会由于不稳定的梯度而发散。我们继续以10-2进行75个周期的训练,然后以10-3进行30个周期的训练,最后以10-4进行30个周期的训练。

为避免过拟合,我们使用了Dropout和大量的数据增强。 在第一个连接层之后的dropout层的丢弃率设置为0.5,以防止层之间的相互适应[18]。 对于数据增强,我们引入高达20%的原始图像大小的随机缩放和平移。我们还在HSV色彩空间中以高达1.5的因子随机调整图像的曝光度和饱和度。

2.3、Inference(推理)

就像在训练中一样,图像的检测只需要一个网络评估。 在PASCAL VOC上,网络预测每个图像的98个边界框和每个框的类概率。 YOLO在测试时间速度非常快,因为它只需要一个网络预测,而不像基于分类器的方法。

当图像中的物体较大,或者处于 grid cells 边界的物体,可能在多个 cells 中被定位出来。可以用Non-Maximal Suppression(NMS,非极大值抑制) 进行去除重复检测的物体,可以使最终的 mAP 提高,但相比较于 NMS 对于 DPM、R-CNN 的提高并不算大,但也能增加2−3%的mAP。

2.4、Limitations of YOLO(yolo的局限性)

1)每个 grid cell 只预测一个 类别的 Bounding Boxes,而且最后只取置信度最大的那个 Box。这就导致如果多个不同物体(或者同类物体的不同实体)的中心落在同一个网格中,会造成漏检;

2)预测的 Box 对于尺度的变化比较敏感,在尺度上的泛化能力比较差;

3)识别物体位置精准性差;

4)召回率低。

3、和其他的目标检测算法的对比

下表给出了YOLO与其他物体检测方法,在检测速度和准确性方面的比较结果(使用VOC 2007数据集)。

论文中,作者还给出了YOLO与Fast RCNN在各方面的识别误差比例,如下图。YOLO对背景内容的误判率(4.75%)比fast rcnn的误判率(13.6%)低很多。但是YOLO的定位准确率较差,占总误差比例的19.0%,而fast rcnn仅为8.6%。

• Correct:类别正确,IOU>0.5

• Localization:类别正确,0.1IOU

• Similar:类别相似,IOU >0.1

• Other:类别错误,IOU >0.1

• Background:任何IOU

YOLO算法的优点如下:

1、速度快,YOLO将物体检测作为回归问题进行求解,整个检测网络pipeline简单。在titan x GPU上,在保证检测准确率的前提下(63.4% mAP,VOC 2007 test set),可以达到45fps的检测速度。

2、背景误检率低。YOLO在训练和推理过程中能‘看到’整张图像的整体信息,而基于region proposal的物体检测方法(如rcnn/fast rcnn),在检测过程中,只‘看到’候选框内的局部图像信息。因此,若当图像背景(非物体)中的部分数据被包含在候选框中送入检测网络进行检测时,容易被误检测成物体。测试证明,YOLO对于背景图像的误检率低于fast rcnn误检率的一半。

3、通用性强。YOLO对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法。

4、测试

Test的时候,每个网格预测的class信息,(Pr(Classi|Object))和bounding box预测的confidence信,(Pr(Object)∗IOUtruthpred) 相乘,就得到每个bounding box的class-specific confidence score。

4.1、VOC 2012的结果

在VOC 2012测试集中,YOLO的得分是57.9%mAp。这比现有最先进的技术水平低,更接近使用VGG-16的原始的R-CNN,见表3.与其最接近的竞争对手相比,我们的系统在小物体上表现不理想。 在瓶子,羊,电视/监视器等类别上,YOLO得分比R-CNN和Feature Edit低8-10%。 然而,在其他类别,如猫和火车YOLO实现更高的性能。

我们的Fast R-CNN + YOLO模型组合是性能最高的检测方法之一。 Fast R-CNN与YOLO的组合提高了2.3%,在公共排行榜上提升了5个位置。

4.2、泛化性:艺术图像的人物检测

用于目标检测的学术数据集的训练和测试数据是服从同一分布的。但在现实世界的应用中,很难预测所有可能的用例,他的测试数据可能与系统已经看到的不同[3]。我们将YOLO与其他检测系统在毕加索数据集[12]和人物艺术数据集[3]上进行了比较,这两个数据集用于检测艺术图像检测人形。

图5显示了YOLO和其他检测方法之间的性能比较。作为参考,我们在上提供VOC 2007的人形检测的AP,其中所有模型仅在VOC 2007数据上训练。在Picasso数据集上测试的模型在是在VOC 2012上训练,而People-Art数据集上的模型则在VOC 2010上训练。

R-CNN在VOC 2007上有很高的AP值。然而,当应用于艺术图像时,R-CNN显着下降。 R-CNN使用选择性搜索来调整自然图像的候选边界框。 R-CNN在分类器阶段只能看到小区域,而且需要有很好的候选框。

DPM在应用于艺术图像时可以很好地保持其AP。之前的研究认为DPM表现良好,因为它具有强大的物体形状和布局空间模型。虽然DPM不会像R-CNN那样退化,但它的AP本来就很低。

YOLO在VOC 2007上表现出色,其应用于艺术图像时其AP降低程度低于其他方法。与DPM一样,YOLO模拟目标的大小和形状,以及目标之间的关系和目标通常出现的位置之间的关系。艺术图像和自然图像在像素级别上有很大不同,但它们在物体的大小和形状方面相似,因此YOLO仍然可以预测好的边界框和检测结果。

4.3、现实实时检测

YOLO是一款快速,精确的物体检测器,非常适合计算机视觉应用。 我们将YOLO连接到网络摄像头,并验证它是否保持实时性能,包括从摄像头获取图像并显示检测结果的时间。

由此产生的系统是互动的和参与的。 虽然YOLO单独处理图像,但当连接到网络摄像头时,它的功能类似于跟踪系统,可在目标移动并在外观上发生变化时检测目标。 系统演示和源代码可在我们的项目网站上找到:http://pjreddie.com/yolo/。

5、思考

1、YOLOv1最大的开创性贡献在于将物体检测作为一个回归问题进行求解,输入图像经过一次inference,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。而rcnn/fast rcnn/faster rcnn将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题),所以YOLO的目标检测速度很快。

2、YOLO仍然是一个速度换精度的算法,目标检测的精度不如RCNN。

yolo v1论文翻译-整理相关推荐

  1. YOLO 9000论文翻译 | YOLO9000:Better, Faster, Stronger

    文章已迁至:http://www.machunjie.com/translate/27.html 如需交流,请移步新地址,谢谢! YOLO 9000论文翻译 | YOLO9000:Better, Fa ...

  2. 【YOLO系列】YOLO V1 论文精读与学习总结

    目录 0. 前言 1.YOLO V1 大体思路 2. YOLO V1的训练过程 2.1 YOLO V1网络结构 2.2 具体训练过程 2.2.1 把主干结构在ImageNet上进行预训练 2.2.2 ...

  3. YOLO v1论文详解

    YOLO v1:一体化的,实时物体检测 声明:笔者翻译论文仅为学习研究,如有侵权请联系作者删除博文,谢谢! 源论文地址:https://arxiv.org/pdf/1506.02640.pdf 注:文 ...

  4. Arcface v1 论文翻译与解读

    神罗Noctis 2019-10-13 16:14:39  543  收藏 4 展开 论文地址:http://arxiv.org/pdf/1801.07698v1.pdf 最新版本v3的论文翻译:Ar ...

  5. YOLO V1 论文精讲

    参考:https://www.bilibili.com/video/BV15w411Z7LG/?is_story_h5=false&p=4&share_from=ugc&sha ...

  6. YOLO V1~V7论文及Pytorch实现详解

    YOLO~V1论文及Pytorch实现详解 论文地址:https://paperswithcode.com/paper/you-only-look-once-unified-real-time-obj ...

  7. Arcface v3 论文翻译与解读

    论文地址:http://arxiv.org/pdf/1801.07698.pdf Arcface v3 与 Arcface v1的内容有较大不同.建议先阅读Arcface v1 的论文,再看v3.可以 ...

  8. YOLO v1学习笔记

    YOLO v1学习笔记 一. 概述 1.优点: 2. 缺点: 二.模型详细介绍 1.设计思路 2.网络结构 3.网络输出详细介绍 三.损失函数 1.位置误差 2.置信度误差 3.分类误差 四.模型预测 ...

  9. YOLO V1 实时的目标检测 论文翻译

    YOLO V1 实时的目标检测 论文翻译 注:学习记录用 摘要 我们提出了一种新的目标检测方法 YOLO.先前关于目标检测的工作重新使用分类器来执行检测. 相反,我们将目标检测框架作为一个回归问题,以 ...

最新文章

  1. 期刊投稿状态_干货| SCI论文投稿,你还是知道太少了
  2. windows phone 快捷键
  3. 音视频技术开发周刊 | 170
  4. java.lang.Object错误
  5. 我的2017年前端之路总结
  6. python lxml使用_使用lxml和Python进行Web抓取的简介
  7. 雅思作文模板.html,雅思小作文常用模板万能句大全
  8. 5.3.2 先行发生
  9. 如何拥有一个有意义的人生
  10. 剑指offer【书】之简历抒写
  11. 研发工程师为你详解山寨机、品牌机和水货机
  12. 自动驾驶仿真:角雷达坐标系转换详解
  13. xjoi 3561查找某数出现位置
  14. win10无法装载iso文件_win10系统打开iso格式文件的四种方法
  15. 摩托车高级驾驶员辅助系统(ADAS)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. Dragger2初体验 -- @Inject @Component 使用
  17. 大华摄像头实现web端实时播放以及录像回放
  18. 用户和计算机硬件系,什么是计算机硬件?什么是计算机软件,计算机硬件和软件的区别!...
  19. war包方式部署solo博客
  20. 第10.3节 Python导入模块能否取消导入?

热门文章

  1. Nexus学习日记:N7K VDC命令详解
  2. 证件照修改尺寸像素大小和存储大小
  3. Java实现各种节日维护 农历,阳历,二十四节气 自定义节日,根据当前日期获取节日
  4. Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解
  5. src refspec master does not match any问题
  6. python爬虫下载梨视频
  7. Python爬取梨视频并下载【ajax抓包】
  8. 微信页面触发返回按钮回到聊天界面
  9. 实验一 利用Excel表格进行掷硬币模拟实验
  10. ubuntu下 qt xxx.run 安装步骤