【Yolo精读+实践+魔改系列】Yolov1论文超详细精讲(翻译+笔记)
前言
前面我们已经把图像分类的论文和代码扒得一干二净啦——这个深度学习的基础啊,大家别偷懒,跑代码是必须的!不然你就像是背了几页书的“学霸”,但实际动手一看啥也不会。真心告诉你,跑一跑、看一看,才算真心懂了!学完这些小菜一碟的内容后,我们马上就进入下一阶段,目标检测的超级大作——计算机视觉界的“巨星”,YOLO!从今天起,我们就要开始疯狂学习YOLO系列,把论文分析得明明白白,再一行一行代码撸出来,最后你就能轻松地把模块拼起来,甚至改个小bug啥的!嘿嘿,到时候写论文的感觉就像是吃饭一样简单,离你人生的第一篇“传世之作”就差一步啦!而且,我会在B站同步更新这篇文章的视频讲解(全网同号,求关注啊)。好啦,不说废话了,今天的分享正式开始!
YOLOv1简介(你只看一次,我就把目标给找出来)
YOLOv1,全称 You Only Look Once(你只看一眼),是Joseph Redmon大神在2016年提出的目标检测方法,开创了“一眼看全图”的新时代。
传统目标检测:像在黑夜里找袜子,一会用滑窗,一会搞区域(R-CNN、Fast R-CNN、Faster R-CNN,一家比一家精致,但也一家比一家慢) YOLOv1:哥一眼扫过去,就全都认出来了!
核心思想:
YOLOv1 把目标检测当成了回归问题来处理。它直接从图像输入,一步到位输出目标的位置和类别,整个过程是端到端的,像极了那种做事果断的理工直男。
具体来说:
-
把整张图片分成 S×S 的网格(比如 7×7)
-
每个网格预测 B 个 bounding boxes(边框)+ 每个 box 的置信度 + C 个类别概率
-
最后通过置信度乘类别概率,找出最终结果
特点总结一下(顺便吐个槽):
-
快! 速度堪比忍者龟打鸡血,实时检测不是梦。
-
一体化! 没有分阶段,全程一个神经网络搞定。
-
定位不太准! 尤其是面对小目标,就像戴着老花镜找硬币。
YOLOv1的贡献:
它大胆地挑战了“先提区域,再分类”的传统思路,直接端到端完成检测,大大加快了检测速度,让“实时目标检测”真正成为可能。
一句话总结: YOLOv1 就像那种“眼观六路、耳听八方”的高手,一眼扫过去就把图里所有的目标给你圈出来了,虽然第一版手法还有点粗糙,但它让整个目标检测界开始狂飙进步了。
资源
视频讲解:B站 智算学术 (会有一两天的延迟)
哦对了,大家在看yolo系列文章的时候可以先看视频快速过一遍,然后再来看论文中的细节效果会更好哦!
论文链接:[1506.02640] You Only Look Once: Unified, Real-Time Object Detection
代码:https://github.com/abeardear/pytorch-YOLO-v1
YOLOv1作者Joseph Redmon的网站:Joseph Redmon - Survival Strategies for the Robot Rebellion
500篇经典深度学习论文+视频+论文写作工具+模块缝合 请关注公众号:智算学术 领取
目录
前言
YOLOv1简介(你只看一次,我就把目标给找出来)
核心思想:
特点总结一下(顺便吐个槽):
YOLOv1的贡献:
资源
Abstract—摘要
一、Introduction—前言
二、Unified Detection—统一检测
2.1 Network Design—网络设计
2.2 Training—训练
2.3 Inference—推论
2.4 Limitations of YOLO—YOLO的局限性
三、Comparison to Other Detection Systems—与其他目标检测算法的比较
四、Experiments—实验
4.1 Comparison to Other RealTime Systems—与其他实时系统的比较
4.2 VOC 2007 Error Analysis—VOC 2007误差分析
4.3 Combining Fast R-CNN and YOLO—Fast R-CNN与YOLO的结合
4.4 VOC 2012 Results—VOC 2012结果
4.5 Generalizability: Person Detection in Artwork—泛化性:图像中的人物检测
五、Real-Time Detection In The Wild—自然环境下的实时检测
六、Conclusion—结论
YOLO的工作流程:
训练阶段:
预测与验证阶段:
Abstract—摘要
翻译
我们提出了YOLO,一种全新的目标检测方法。以往的目标检测方法通常是将分类器改造用于检测任务。而YOLO则将目标检测重新定义为一个回归问题,直接预测图像中各个空间位置的边界框及其对应的类别概率。YOLO通过一个单一的神经网络,在一次前向传播中,从整张图像中直接预测边界框和类别概率。
由于整个检测流程由一个统一的网络完成,我们可以直接以检测性能为目标进行端到端优化。YOLO的这一统一架构非常快速。基础版本的YOLO模型可以实现每秒处理45帧图像的实时检测速度。而更小版本的Fast YOLO甚至能以每秒155帧的速度运行,同时其mAP(平均精度均值)仍是其他实时检测器的两倍。
与当前最先进的检测系统相比,YOLO更容易出现定位误差,但在背景区域产生错误检测(即误报)的概率更低。最后,YOLO学到的是非常通用的物体表示能力。在从自然图像泛化到其他领域(如艺术作品)时,YOLO的表现优于其他检测方法,包括DPM和R-CNN。
精读
创新的工作:
-
yolo把目标检测定义为一个回归问题,通过单一网络一次前向传播就可以从整张图像中直接预测边界框和类别概率(位置在哪+所在的位置是什么类型)
-
可以实现每秒45帧图像实时检测速度,mini版本可以达到155帧的速度运行,mAP仍然是实时检测器的两倍
-
泛化能力强:用毕加索的抽象画(往往人的眼睛都不能判断出眼睛和鼻子)来训练时,yolo的检测结果比较好
yolo的不足:
容易出现定位误差(比如让它在图中找个猫,它有可能会框错地方)但是在背景区域产生错误检测的概率比当前先进的目标检测系统的低
分析不足的原因:
-
网格限制太死板了:YOLOv1 把整张图像分成了固定的 7×7大小,每个网格最多只能预测两个目标框,而且只能预测中心点落在该网格的目标
-
小目标看不清: 因为网格太大,每个网格的“视野”太广,小目标就像“沙子掉进泳池”一样,很容易被忽略或者定位偏移。
一、Introduction—前言
翻译
人类在浏览图像时,能够迅速识别图像中有哪些物体、它们的位置以及它们之间的关系。人类视觉系统具备高效且准确的特性,使我们能够轻松完成诸如驾驶等复杂任务,而几乎无需过多的意识参与。
如果能够开发出快速且准确的目标检测算法,那么计算机将可以在无需专用传感器的情况下自动驾驶,辅助设备也能实时向用户传达场景信息,同时还可以释放出通用型、响应快速的机器人系统的潜力。
现有的目标检测系统通常是将分类器“改装”来完成检测任务。为了检测某一目标,这些系统会使用针对该目标的分类器,在测试图像的不同位置和尺度上进行评估。例如,基于可变形部件模型(Deformable Parts Models,DPM)的方法使用滑动窗口策略,在整张图像上均匀地运行分类器。相比之下,像 R-CNN 这样的更新方法则使用区域提议机制,先生成图像中的候选边界框,再在这些候选框上运行分类器。分类完成后,系统还会进行后处理,以进一步优化边界框、去除重复的检测结果,并基于图像中其他目标重新对这些框进行评分。这些复杂的处理流程运行速度较慢,并且难以整体优化,因为其中每一个组件都需要分别训练。
我们提出了一种全新的目标检测方法,将其重新定义为一个从图像像素直接回归到边界框坐标和类别概率的回归问题。在我们的方法中,只需对图像“看一眼”(You Only Look Once, YOLO),即可预测图像中有哪些物体以及它们的位置。YOLO 结构非常简洁:如图 1 所示,一个单一的卷积神经网络能够同时预测多个边界框及其对应的类别概率。YOLO 在整张图像上进行训练,并直接以检测性能为目标进行优化。
与传统目标检测方法相比,这种统一的模型具有多方面的优势。首先,YOLO 极其快速。由于我们将检测任务定义为回归问题,省去了复杂的处理流程。在测试时,只需将新的图像输入神经网络即可完成检测。在 Titan X GPU 上,我们的基础模型以 45 帧/秒的速度实时处理图像,而快速版本的处理速度更是超过 150 帧/秒。这意味着 YOLO 可以在不到 25 毫秒的延迟内处理视频流,实现真正的实时检测。同时,YOLO 的平均精度(mAP)比其他实时检测系统高出一倍以上。
其次,YOLO 在做出预测时会从全局角度理解图像。与滑动窗口和区域提议等局部分析方法不同,YOLO 在训练和测试过程中都能看到整个图像,因此可以隐式地学习类间关系和上下文信息。Fast R-CNN 是当时领先的检测方法之一,但它容易将背景区域误判为目标,因为其无法获取全局上下文信息。相比之下,YOLO 在背景误检方面的错误数量不到 Fast R-CNN 的一半。
第三,YOLO 学得的目标表示更具泛化能力。当模型在自然图像上训练后,在艺术作品等其他域上测试时,YOLO 在性能上大幅优于 DPM 和 R-CNN 等主流检测方法。由于 YOLO 的泛化能力较强,因此在面对新领域或意料之外的输入时,系统不易崩溃。
需要指出的是,YOLO 在检测精度上仍落后于当时最先进的检测方法。尽管它可以快速识别图像中的物体,但在精确定位目标,特别是小目标方面存在一定困难。我们将在实验部分进一步探讨这些权衡。
我们的训练与测试代码均为开源,并提供了多种预训练模型供下载使用。
精读
前人工作:
DPM:采用滑动窗口策略,在整张图像上均匀地运行分类器
R-CNN: 先生成图像中的候选边界框,再在这些候选框上运行分类器
yolo的创新性工作:
-
把目标检测问题直接定义为边界框坐标和类别概率的回归问题,在一张图像上定位和分类是同时做的,如上图左边,人,狗,马的一张图片放到yolo经过裁剪图片后输入到单一的卷积网络经过NMS最大值抑制之后输出了右边这张图,能够同时预测多个边界框及其对应的类别概率。
-
YOLO 极其快速: YOLO 可以在不到 25 毫秒的延迟内处理视频流,实现真正的实时检测并且YOLO 的平均精度(mAP)比其他实时检测系统高出一倍以上。
-
具有很强的泛化能力:在拿毕加索的抽象艺术画进行预测的效果比前人的系统的性能强
-
YOLO 在检测精度上仍落后于当时最先进的检测方法,特别是小目标
二、Unified Detection—统一检测
翻译
我们将目标检测中原本分离的各个组件整合成一个单一的神经网络。该网络利用整张图像的特征来预测每个边界框,同时能够在一张图中同时预测所有类别的所有边界框。这意味着,网络在进行预测时是从整体上考虑整张图像以及图中的所有物体。
YOLO的设计实现了端到端的训练和实时的处理速度,同时还能保持较高的平均精度。我们的方法将输入图像划分为一个 S × S 的网格。如果某个物体的中心落在某个网格单元中,那么这个网格单元就负责检测该物体。
每个网格单元预测 B 个边界框以及这些框的置信度分数。置信度表示模型认为该边界框中存在一个物体的可信程度,以及预测框与实际框重合的准确程度。形式上我们将置信度定义为: Pr(Object) × IOUtruth, pred 如果该网格中没有物体,那么置信度应为零;反之,则置信度应等于预测框与真实框之间的交并比(IOU)。
每个边界框包含5个预测值:x、y、w、h 和置信度。其中,x 和 y 表示边界框中心相对于网格单元的位置;w 和 h 是相对于整张图像的宽度和高度;置信度表示预测框与任一真实框之间的 IOU 值。
此外,每个网格单元还会预测 C 个条件类别概率,即 Pr(Classi | Object),这些概率是在该单元包含物体的前提下预测的。无论每个单元预测了多少个边界框(B个),我们只预测一组类别概率。
在测试时,我们将条件类别概率与每个框的置信度相乘,得到最终的类别置信度分数。
这样我们就得到了每个边界框对应的类别特定的置信度分数。这些分数同时编码了两个信息:一是该类别出现在该边界框中的概率, 二是预测的边界框与实际物体的匹配程度。
在 PASCAL VOC 数据集上评估 YOLO 时,我们设置 S = 7,B = 2。由于 PASCAL VOC 有 20 个标注类别,因此 C = 20。 所以最终的预测结果是一个形状为 7 × 7 × 30 的张量。
精读
grid cell
一张图片分为了SxS的网格,每个网格就叫做grid cell,论文中S=7,如图所示,一张图片分为了7X7大小,一共是49个格子,每个格子有B个预测框bounding box(本文B=2),每个预测框有5个值(x,y,w,h,c)
计算(x,y,w,h)
假设红框是我们的标注数据,B点是红框的中心点,红框我们叫做ground truth,那么问题就简单了,我们只需要训练出红框的长和宽以及对应的中心点就可以做目标检测了,B(x,y) , 长为h,宽为w,(x,y,w,h)是相对值,红框的中心点 B点如图所示(0.2,0.75)它是想对于A点来说的,那么长和宽同样的,h = 22/448 = 0.05 (像素是448),w= 44/448 = 0.1 那么综上我们就求出了(x,y,w,h)= (0.2,0.75,0.1,0.05) 这就是我们标注的数据的值
红框中数据的标注如右边所示
预测框
那么我们标注好了数据就可以开始进行训练了,我们进入训练阶段:当标注的红框的中心点B落在哪个格子,哪个格子就要负责框住检测这个物体,如图上方的狗,标注的红框的B点落在的那个格子,就要负责训练框住狗这个类别
预测框bounding box在yolov1中不是人工设置的,是机器自己学习到的,在yolov2及以上的版本才是人工设置的固定的大小
训练阶段的数据形式如下图
每个grid cell 对应两个预测框bounding box,如黄色部分所示,共有10个位置,后面20个位置是对类别进行预测的概率 Pr(Classi | Object), 是一个条件概率,在有要预测的object的情况下,是狗这个类别的概率。本文是用PASCAL VOC数据集一共有20个物体类别。
confidence =
有预测的object的概率和IOU的乘积,其中IOU的计算公式如下
注意事项
每个格子都对应了两个预测框,但是每个格子只能预测一个object,并且相对应的两个预测框只能保留一个预测框来进行训练和预测,与标签IoU更大的一个边框负责回归该真实物体框,在测试时会选取置信度更高的一个边框,另一个会被舍弃,因此7×7=49个gird cell最多只能预测49个物体。
2.1 Network Design—网络设计
翻译
我们将该模型实现为一个卷积神经网络,并在 PASCAL VOC 检测数据集 [9] 上进行了评估。网络的初始卷积层用于从图像中提取特征,而全连接层则用于预测输出的概率和坐标。我们的网络架构受到了 GoogLeNet 图像分类模型 [34] 的启发。该网络包含 24 个卷积层,后接 2 个全连接层。
与 GoogLeNet 中使用的 Inception 模块不同,我们采用的是 1×1 的降维层,后接 3×3 的卷积层,这种设计类似于 Lin 等人 [22] 的方法。完整的网络结构展示在图3中。
此外,我们还训练了一个快速版本的 YOLO,旨在推动快速目标检测的极限。Fast YOLO 使用的神经网络包含更少的卷积层(9 层而非 24 层),且这些层中的卷积核数量也更少。除了网络规模的不同外,YOLO 和 Fast YOLO 在所有训练和测试参数上保持一致。最终,网络的输出是一个 7 × 7 × 30 的预测张量。
精读
网络结构
受GoogLeNet 图像分类模型 的启发。该网络包含 24 个卷积层,后接 2 个全连接层。大家一看网络结构是不是平平无奇,普普通通呢,就是一眼看上去和我们之前分享的图像分类的网络结构大差不差对吧!但是在这普通之中又有它的不普通,大家看网络结构的最后生成的是一个7x7x30的预测张量,这个矩阵里面藏着定位和分类的信息,也就是我们所说的通过一个网络,一步就可以把定位和分类一起做出来!
生成的7x7x30的预测张量,7x7刚好对应的是原图片的7x7的大小,那么每一个原图片的每个格子就对应一个1x1x30的预测张量,每个1x1x30的预测张量里面有2个预测框+20个类别概率,每个预测框对应(x,y,w,h,c)
先在 ImageNet 分类任务上对卷积层进行预训练,使用的输入图像分辨率为一半(224 × 224),之后在目标检测任务中将输入分辨率加倍,用于更高精度的检测。
2.2 Training—训练
翻译
我们在 ImageNet 的 1000 类竞赛数据集 [30] 上对卷积层进行预训练。预训练时,我们使用图3中前 20 个卷积层,后接一个平均池化层和一个全连接层。这个网络训练了大约一周时间,在 ImageNet 2012 验证集上达到了 88% 的单次裁剪 top-5 准确率,与 Caffe 的 Model Zoo [24] 中的 GoogLeNet 模型相当。
我们在训练和推理中使用 Darknet 框架 [26]。之后,我们将该模型转换为用于目标检测。Ren 等人指出,在预训练网络上添加卷积层和全连接层可以提升性能 [29]。借鉴他们的做法,我们在预训练模型基础上额外添加了 4 个卷积层和 2 个全连接层,这些新加的层权重是随机初始化的。
目标检测通常需要更细粒度的视觉信息,因此我们将网络的输入分辨率从 224 × 224 提高到 448 × 448。最终输出层既预测类别概率,也预测边界框的坐标。
我们对边界框的宽度和高度进行归一化处理(除以图像的宽度和高度),使它们的取值范围在 0 到 1 之间。对于边界框的中心坐标 x 和 y,我们将其参数化为相对于所属网格单元位置的偏移量,因此它们也被限制在 0 到 1 的范围内。
最终输出层使用线性激活函数,其余所有层都使用带泄漏的 ReLU 激活函数(Leaky ReLU):
我们对模型输出使用平方和误差(sum-squared error)作为优化目标。我们选择平方和误差是因为它优化起来比较简单,但它与我们真正追求的目标——最大化平均精度(average precision)并不完全一致。该损失函数对定位误差和分类误差赋予了相同的权重,这可能并不是最理想的。
此外,在每张图像中,很多网格单元(grid cell)并不包含任何物体。这会导致这些网格中“置信度(confidence)”的得分被强行拉向 0,进而压制了那些真正包含物体的网格单元产生的梯度。这种情况可能会引起模型训练的不稳定,甚至在训练早期就发散。
为了解决这个问题,我们提高了边界框坐标预测的损失权重,同时降低了对不包含物体的框的置信度预测的损失权重。我们引入了两个超参数来实现这一点,分别是:
-
λcoord=5
-
λnoobj=0.5
此外,平方和误差在对大框和小框的误差处理上权重是一样的,但我们认为在大框中出现的小偏差比在小框中出现的小偏差影响要小。因此,为了部分缓解这个问题,我们不直接预测边界框的宽度和高度,而是预测它们的平方根。
YOLO 每个 grid cell 会预测多个 bounding box。在训练时,我们只希望其中一个预测框对每个物体负责。我们通过计算与真实框(ground truth)重叠度(IOU)最高的那个预测框,让其“负责”该物体的预测任务。这样做有利于让不同的预测器之间形成分工,各自更擅长预测某些尺寸、长宽比或类别的物体,从而提升整体的召回率(recall)。
在训练过程中,我们优化的是如下这个多部分损失函数(multi-part loss function):
其中,1iobj表示第 i 个网格中是否存在物体,1ijobj 表示该网格中第 j 个边界框预测器是否“负责”当前的预测。需要注意的是,只有在某个网格中确实存在物体时,损失函数才会对分类误差进行惩罚(这也就是前面提到的“条件类别概率”的由来)。同样地,只有当某个预测器被指定为负责当前 ground truth 的预测器(即在该网格内与真实框的 IOU 最大)时,才会对其边界框坐标误差进行惩罚。
我们在 PASCAL VOC 2007 和 2012 的训练集与验证集上训练网络大约 135 个 epoch。在测试 VOC 2012 数据时,我们还将 VOC 2007 的测试集加入训练数据中。
训练期间我们使用如下配置:
-
Batch size:64
-
动量(Momentum):0.9
-
权重衰减(Decay):0.0005
学习率调度策略如下:
训练前几个 epoch,逐渐将学习率从 10−3提升到 10−2,这是为了防止一开始就因为梯度不稳定而导致模型发散;然后使用 10−2 训练 75 个 epoch;接着用 10−3 训练 30 个 epoch;最后用 10−4 训练 30 个 epoch。
为了防止过拟合,我们使用了 dropout 和大量的数据增强(data augmentation)策略。在第一个全连接层后添加了一个 dropout 层,dropout 率为 0.5,用来防止层与层之间的 co-adaptation(共适应) [18];
数据增强方面,我们引入了 最大 ±20% 的随机缩放和平移;同时,在 HSV 色彩空间下,我们还会随机调整图像的曝光度和饱和度,最大调整系数为 1.5 倍。
精读
预训练分类网络
预训练:在 ImageNet 1000 类数据集上预训练了前 20 层卷积层,加上一个平均池化层和全连接层,取得了 88% 的 top-5 准确率。(输入图像分辨率为224×224)
训练过程采用迁移学习
结构扩展:为了适配检测任务,在预训练模型的基础上增加了 4 个卷积层和 2 个全连接层,这些新层的权重是随机初始化的。
输入分辨率提升:将输入图像的分辨率从 224×224 提升到 448×448,以获取更精细的视觉特征。
激活函数:最后一层采用ReLU函数外,其他层均采用leaky ReLU激活函数
输出内容:最终输出层同时预测类别概率和边界框坐标。
损失函数的设计
大家在看到一大坨的公式不要害怕,其实很简单的,我给大家拆开了看
损失函数本质是我们初中学的方差,我们分为了3部分,
第一部分红色部分,x,y,w,h这是预测框的位置,也就是框在哪里的问题,其中S是原图片的宽和高,B是预测框的个数,obj 是有物体,noobj是没有物体
第二部分 分数预测,C是置信度,有物体和没有物体的置信度的方差,这部分属于分类,就是在预测框已经定的情况下,要判断是否有object
第三部分 类别预测,也即P, 求有object的p的方差!
有了损失函数就可以做训练了
注意事项:
在训练阶段只需要我们前边标注的数据和损失函数就可以直接进行训练了,NMS(非极大值抑制)函数是不参与在训练阶段的,NMS是在预测阶段使用
原因:在训练阶段有标注的数据了,这就是正确答案了,但是在预测阶段,那就没有正确答案,一切都是预测出来的,但是还需要对多余没有的用的预测框去除,怎么办呢,就采用了NMS函数来操作
2.3 Inference—推论
翻译
与训练时类似,测试图像的目标检测预测只需要一次网络评估。在 PASCAL VOC 数据集上,网络为每张图像预测 98 个边界框,并为每个框预测类别概率。YOLO 在测试时非常快速,因为它只需要进行一次网络评估,而不像基于分类器的方法那样需要多次评估。网格设计强制在边界框预测中引入空间多样性。通常,物体所属的网格单元是明确的,网络只为每个物体预测一个边界框。然而,一些大型物体或靠近多个网格边界的物体,可能会被多个网格单元很好地定位。可以通过非极大值抑制来解决这些多重检测问题。虽然非极大值抑制对于 R-CNN 或 DPM 的性能至关重要,但它对 YOLO 的性能提升并非决定性,仍然能够为 mAP 增加 23%。
精读
什么是NMS非极大值抑制
NMS非极大值抑制是解决多重检验问题,删除冗余的候选框,每个物体只有一个边界框,但是有的物体很可能被多个预测框给框住,这时候要挑出预测框最好的那个!
下面用一个例子给大家讲明白什么是NMS
一张图胜过万言,如上图就是NMS的计算过程
推理过程
-
在 PASCAL VOC 数据集上,网络为每张图像预测 98 个边界框(7x7x2),并为每个框预测类别概率
-
预测只需要一次网络评估,网络只为每个物体预测一个边界框
-
通过非极大值抑制来解决这些多重检测问题
2.4 Limitations of YOLO—YOLO的局限性
翻译
YOLO 对边界框预测施加了很强的空间约束,因为每个网格单元格只能预测两个框,并且只能有一个类。此空间约束限制了模型可以预测的附近对象的数量。我们的模型难以处理成群出现的小物体,例如鸟群。由于我们的模型学习从数据中预测边界框,因此它很难推广到具有新的或不寻常的纵横比或配置的对象。我们的模型还使用相对粗略的特征来预测边界框,因为我们的架构从输入图像中有多个下采样层。最后,当我们训练近似检测性能的损失函数时,我们的损失函数在小边界框和大边界框中处理错误的方式相同。大盒子中的小错误通常是良性的,但小盒子中的小错误对 IOU 的影响要大得多。我们的主要错误来源是不正确的本地化。
精读
空间约束:YOLO 对边界框施加了强烈的空间约束,每个网格单元只能预测两个框,并且每个框只能对应一个类别。这种约束限制了模型能预测的物体数量,尤其是对于成群的小物体(如鸟群)。
难以处理特殊情况:由于模型是从数据中学习预测边界框的,它对具有新颖或不常见纵横比和配置的物体难以泛化。
粗略特征:由于网络架构中有多个下采样层,模型使用的是相对粗略的特征进行边界框预测。
损失函数问题:损失函数在处理大边界框和小边界框的错误时没有区别,大框中的小错误通常影响不大,但小框中的小错误对 IOU 影响很大。模型的主要问题是定位不准确。
三、Comparison to Other Detection Systems—与其他目标检测算法的比较
翻译
物体检测是计算机视觉中的核心问题。检测管道通常通过从输入图像中提取一组鲁棒的特征开始(如Haar [25]、SIFT [23]、HOG [4]、卷积特征 [6])。然后,分类器 [36, 21, 13, 10] 或定位器 [1, 32] 用来在特征空间中识别物体。这些分类器或定位器要么以滑动窗口的方式遍历整张图像,要么只在图像的某些区域上运行 [35, 15, 39]。我们将 YOLO 检测系统与几种顶级检测框架进行比较,突出它们的主要相似性和差异。
可变形部件模型:可变形部件模型(DPM)使用滑动窗口方法进行物体检测 [10]。DPM 使用一个分离的管道来提取静态特征、分类区域、预测高分区域的边界框等。我们的系统将这些不同的部分替换为一个单一的卷积神经网络。该网络同时执行特征提取、边界框预测、非极大抑制和上下文推理。与静态特征不同,网络在训练时内联训练这些特征,并为检测任务优化它们。我们的统一架构使得模型比DPM更快速、更准确。
R-CNN:R-CNN 及其变种使用区域提议来替代滑动窗口,寻找图像中的物体。选择性搜索 [35] 生成潜在的边界框,卷积网络提取特征,SVM 对这些框进行评分,线性模型调整边界框,非极大抑制消除重复的检测。这个复杂的管道的每个阶段都必须独立精细调优,导致系统非常慢,测试时每张图像需要超过 40 秒 [14]。YOLO 与 R-CNN 共享一些相似性。每个网格单元提出潜在的边界框,并使用卷积特征对这些框进行评分。然而,我们的系统对网格单元的提议施加空间约束,从而减少了同一物体的多个检测。我们的系统还提出了更少的边界框,每张图像只有 98 个,而选择性搜索大约提供 2000 个。最后,我们的系统将这些个体组件结合成一个单一、联合优化的模型。
其他快速检测器:Fast 和 Faster R-CNN 通过共享计算和使用神经网络来提出区域,从而加速 R-CNN 框架 [14] [28]。尽管它们比 R-CNN 提供了速度和精度的提升,但仍然未达到实时性能。许多研究工作致力于加速 DPM 管道 [31] [38] [5]。它们通过加速 HOG 计算、使用级联、将计算推向 GPU 等方式提升速度。然而,只有 30Hz 的 DPM [31] 实现了实时运行。与其优化大型检测管道的个体组件,YOLO 直接摒弃了管道,设计上就是为了快速。
单类检测器:像人脸或人物等单一类的检测器可以进行高度优化,因为它们需要处理的变异性较小 [37]。而 YOLO 是一个通用检测器,能够同时学习检测多种物体。
Deep MultiBox:与 R-CNN 不同,Szegedy 等人训练了一个卷积神经网络来预测兴趣区域 [8],而不是使用选择性搜索。MultiBox 也可以通过将置信度预测替换为单类预测来执行单物体检测。然而,MultiBox 无法进行通用物体检测,它仍然只是一个更大检测管道的一部分,需要进一步的图像补丁分类。YOLO 和 MultiBox 都使用卷积网络来预测图像中的边界框,但 YOLO 是一个完整的检测系统。
OverFeat:Sermanet 等人训练了一个卷积神经网络来执行定位,并将该定位器调整为执行检测 [32]。OverFeat 高效地执行滑动窗口检测,但它仍然是一个分离的系统。OverFeat 优化的是定位,而不是检测性能。与 DPM 一样,定位器在做出预测时仅看到局部信息。OverFeat 无法推理全局上下文,因此需要大量后处理才能生成一致的检测结果。
MultiGrasp:我们的工作在设计上类似于 Redmon 等人对抓取检测的研究 [27]。我们基于 MultiGrasp 系统的回归方法,采用网格方法来预测边界框。然而,抓取检测比物体检测要简单得多。MultiGrasp 只需要为包含一个物体的图像预测一个抓取区域。它不需要估计物体的大小、位置或边界,也不需要预测物体的类别,只需要找到适合抓取的区域。而 YOLO 需要预测多个物体类别的多个边界框和类别概率。
精读
可变形部件模型 (DPM):
-
使用滑动窗口方法进行物体检测。
-
DPM 是一个分离的管道,依次进行特征提取、区域分类、边界框预测等。
-
YOLO 通过一个卷积神经网络替换这些部分,网络同时执行特征提取、边界框预测、非极大抑制等任务,效率更高,准确度更高。
R-CNN:
-
R-CNN 使用选择性搜索生成区域提议,通过卷积网络提取特征、SVM 评分、线性模型调整边界框并进行非极大抑制。
-
YOLO 与 R-CNN 相似,但 YOLO 通过对网格单元施加空间约束,减少了重复检测,且仅提出 98 个边界框,而 R-CNN 提出约 2000 个,速度更快,合并为一个联合优化的模型。
其他快速检测器:
-
Fast R-CNN 和 Faster R-CNN:通过共享计算和使用神经网络加速 R-CNN,但仍无法达到实时性能。
-
DPM 加速:通过 GPU 加速、HOG 计算优化等提高速度,实际实现 30Hz 的实时性。
-
YOLO 放弃传统的检测管道,设计为快速实时系统,提供更高的效率。
单类检测器:
-
如人脸、人物检测器专门优化处理单一类别物体,变异性较小。
-
YOLO 是通用的检测器,能同时学习检测多种物体。
Deep MultiBox:
-
通过卷积神经网络预测兴趣区域,而非选择性搜索。
-
MultiBox 不能进行通用物体检测,仍依赖图像补丁分类。
-
YOLO 是一个完整的检测系统,具备端到端的检测能力。
OverFeat:
-
通过卷积神经网络执行定位任务,但它是一个分离的系统,仅关注局部信息。
-
OverFeat 需要大量后处理才能生成一致的检测,无法推理全局上下文。
-
YOLO 通过联合优化处理整个检测任务,具有更高效的性能。
MultiGrasp:
-
MultiGrasp 是一种回归方法,专注于检测适合抓取的区域,任务较简单。
-
YOLO 与 MultiGrasp 相似,但 YOLO 需要预测多个物体的边界框和类别,处理更复杂的检测任务。
四、Experiments—实验
首先,我们将 YOLO 与其他实时检测系统在 PASCAL VOC 2007 上进行比较。为了理解 YOLO 和 R-CNN 变种之间的区别,我们探索了 YOLO 和 Fast R-CNN(R-CNN 的最高性能版本之一)在 VOC 2007 上的错误。基于不同的错误特征,我们展示了 YOLO 可以用来重新评分 Fast R-CNN 的检测结果,减少背景假阳性错误,从而显著提升性能。我们还展示了 VOC 2012 的结果,并将 mAP 与当前的最先进方法进行比较。最后,我们展示了 YOLO 在两个艺术作品数据集上的泛化能力,证明其在新领域上的表现优于其他检测器。
4.1 Comparison to Other RealTime Systems—与其他实时系统的比较
翻译
许多在目标检测领域的研究都集中在提高标准检测流程的速度上 [5] [38] [31] [14] [17] [28]。然而,只有 Sadeghi 等人实际上开发出了一个能够实时运行(每秒 30 帧或更高)的检测系统 [31]。我们将 YOLO 与他们的 DPM GPU 实现进行比较,后者在 30Hz 或 100Hz 下运行。虽然其他研究未能达到实时运行的标准,我们也比较了它们的相对 mAP 和速度,以考察目标检测系统中的准确性和性能之间的权衡。Fast YOLO 是 PASCAL 上最快的目标检测方法;据我们所知,它是现有的最快目标检测器。其 mAP 为 52.7%,比之前的实时检测工作准确率高出两倍以上。YOLO 在保持实时性能的同时,将 mAP 提高到 63.4%。我们还使用 VGG-16 训练了 YOLO。这个模型更准确,但也显著慢于 YOLO。它对于比较依赖于 VGG-16 的其他检测系统非常有用,但由于它比实时系统慢,因此本文其余部分主要关注我们更快的模型。最快的 DPM 有效加速了 DPM,且没有牺牲太多的 mAP,但仍然比实时性能慢了两倍 [38]。它仍然受到 DPM 相对于神经网络方法较低检测精度的限制。R-CNN 减去 R 则用静态边界框提议替代了选择性搜索 [20],虽然比R-CNN 仍然无法达到实时性能,并且由于没有好的提议,它的准确性受到显著影响。Fast R-CNN 加速了 R-CNN 的分类阶段,但仍然依赖于选择性搜索,而选择性搜索每张图像生成边界框提议大约需要 2 秒。因此,尽管它的 mAP 较高,但以 0.5 帧每秒的速度仍然远未达到实时性能。最近的 Faster R-CNN 用神经网络替代了选择性搜索来提议边界框,类似于 Szegedy 等人 [8] 的方法。在我们的测试中,他们最准确的模型达到了 7 帧每秒,而一个较小且精度较低的模型以 18 帧每秒运行。VGG-16 版本的 Faster R-CNN 精度比 YOLO 高出 10 mAP,但速度是 YOLO 的 6 倍慢。ZeilerFergus 版本的 Faster R-CNN 比 YOLO 慢 2.5 倍,但精度较低。
精读
结论:实时检测里面yolo最快,fast-yolo的fps最大,非实时里面yolo-vgg-16 的map排在中等水平
4.2 VOC 2007 Error Analysis—VOC 2007误差分析
翻译
为了进一步分析 YOLO 与最先进检测器之间的差异,我们详细分析了 VOC 2007 上的结果。我们将 YOLO 与 Fast R-CNN 进行比较,因为 Fast R-CNN 是 PASCAL 上表现最好的检测器之一,并且它的检测结果是公开可用的。我们使用 Hoiem 等人 [19] 的方法和工具。在测试时,对于每个类别,我们查看该类别的前 N 个预测。每个预测要么是正确的,要么根据错误类型进行分类:
-
正确:正确的类别且 IOU > 0.5
-
定位错误:正确的类别且 0.1 < IOU < 0.5
-
类似:类别相似且 IOU > 0.1
-
其他:类别错误且 IOU > 0.1
-
背景:对于任何物体,IOU < 0.1
图 4 显示了每种错误类型在所有 20 个类别上的平均分布。YOLO 在正确定位物体方面表现较差。定位错误占 YOLO 错误的比例超过了所有其他错误来源的总和。Fast R-CNN 的定位错误要少得多,但背景错误更多。Fast R-CNN 的 13.6% 的前几个检测结果是背景假阳性,即没有包含任何物体。Fast R-CNN 预测背景的概率几乎是 YOLO 的 3 倍。
精读
-
正确:正确的类别且 IOU > 0.5,既预测对了类别,预测框的位置和大小也很合适。
-
定位错误:正确的类别且 0.1 < IOU < 0.5,即虽然预测对了类别,但预测框的位置不是那么的严丝合缝,不过也可以接受。
-
类似:类别相似且 IOU > 0.1,即预测的类别虽不正确但相近,预测框的位置还可以接受。
-
其他:类别错误且 IOU > 0.1,即预测的类别不正确,但预测框还勉强把目标给框住了。
-
Background:预测框与ground truth的IOU小于0.1,即该预测框的位置为背景,没有目标。
在PASCAL 上目前最好的检测器是Fast R-CNN,所以从5个方向上一较高下!
总的来说,yolo的定位错误率高于Fast R-CNN,Fast R-CNN背景预测错误率高于YOLO
4.3 Combining Fast R-CNN and YOLO—Fast R-CNN与YOLO的结合
翻译
R-CNN。通过使用 YOLO 来消除 Fast R-CNN 的背景检测,我们显著提升了性能。对于 R-CNN 预测的每个边界框,我们检查 YOLO 是否预测了一个相似的框。如果是,我们根据 YOLO 预测的概率和两个框的重叠程度,给该预测加上一个提升。最好的 Fast R-CNN 模型在 VOC 2007 测试集上取得了 71.8% 的 mAP。当与 YOLO 结合时,mAP 增加了 3.2%,达到 75.0%。我们还尝试将 Fast R-CNN 的顶级模型与多个其他版本的 Fast R-CNN 结合。这些模型集成产生了 mAP 增加在 0.3% 到 0.6% 之间的小幅提升,具体细节见表 2。YOLO 的提升并不是模型集成的副产品,因为不同版本的 Fast R-CNN 组合并没有带来显著的好处。相反,正是因为 YOLO 在测试时犯了不同类型的错误,它在提升 Fast R-CNN 性能方面才如此有效。不幸的是,这种组合并没有从 YOLO 的速度中受益,因为我们分别运行每个模型,然后将结果合并。然而,由于 YOLO 非常快速,因此与 Fast R-CNN 相比,它并不会增加任何显著的计算时间。
精读
因为 YOLO 与 Fast R-CNN 错误类型的差异,使得它能有效增强后者的性能。尽管这种组合未能提升 YOLO 的速度优势,但由于 YOLO 本身速度非常快,合并模型时不会显著增加计算时间。
4.4 VOC 2012 Results—VOC 2012结果
翻译
在 VOC 2012 测试集上,YOLO 的 mAP 得分为 57.9%,低于当前的最先进技术,接近原始 R-CNN 使用 VGG-16 的表现(见表 3)。与其最接近的竞争者相比,YOLO 在小物体检测上表现较差。对于瓶子、羊和电视/显示器等类别,YOLO 的得分比 R-CNN 或 Feature Edit 低 8-10%。然而,在猫和火车等类别上,YOLO 的表现优于其他方法。我们的 Fast R-CNN + YOLO 组合模型是最高效的检测方法之一,Fast R-CNN 通过与 YOLO 的结合提升了 2.3%,在公共排行榜上升了 5 位。
精读
Fast R-CNN + YOLO 是得分第四的检测方法,比 Fast R-CNN 提升了 2.3%。
4.5 Generalizability: Person Detection in Artwork—泛化性:图像中的人物检测
翻译
学术数据集中的物体检测通常将训练数据和测试数据从相同的分布中抽取。然而,在实际应用中,很难预测所有可能的使用场景,测试数据可能与系统之前见过的数据有所不同[3]。我们将 YOLO 与其他检测系统在 Picasso 数据集[12] 和 People-Art 数据集[3] 上进行比较,这两个数据集用于测试艺术作品中的人物检测。图 5 展示了 YOLO 与其他检测方法的比较性能。作为参考,我们给出了 VOC 2007 数据集上的人物检测平均精度(AP),其中所有模型仅在 VOC 2007 数据上训练。在 Picasso 数据集上,模型在 VOC 2012 数据上训练,而在 People-Art 数据集上,它们在 VOC 2010 数据上训练。R-CNN 在 VOC 2007 上具有较高的 AP。然而,当应用于艺术作品时,R-CNN 的表现显著下降。R-CNN 使用选择性搜索(Selective Search)进行边界框提议,该方法是为自然图像优化的。R-CNN 的分类步骤仅查看小区域,需要良好的提议。DPM 在应用于艺术作品时,能够保持较好的 AP。先前的研究推测,DPM 表现良好是因为它有强大的空间模型,能够描述物体的形状和布局。尽管 DPM 没有像 R-CNN 那样出现大幅下降,但它的起始 AP 较低。YOLO 在 VOC 2007 上表现良好,并且在应用于艺术作品时,其 AP 比其他方法下降得更少。与 DPM 类似,YOLO 模型能够描述物体的大小和形状,以及物体之间的关系和物体常出现的位置。艺术作品和自然图像在像素级别上差异较大,但在物体的大小和形状方面有相似之处,因此 YOLO 仍然能够预测出良好的边界框和检测结果。
精读
-
数据集差异:学术数据集通常训练和测试数据来自同一分布,但实际应用中,数据可能有所不同,特别是在艺术作品中。
-
YOLO与其他方法比较:R-CNN 在艺术作品中的性能大幅下降,而 DPM 保持较好表现。YOLO 在艺术作品中性能降幅最小,因为它能够适应物体的大小、形状和物体间关系的相似性。
-
YOLO的优势:YOLO 在艺术作品中的稳定性强,优于其他方法。
五、Real-Time Detection In The Wild—自然环境下的实时检测
翻译
YOLO 是一个快速且精确的物体检测器,非常适合计算机视觉应用。我们将 YOLO 连接到一个摄像头,并验证其保持实时性能,包括从摄像头获取图像和显示检测结果的时间。最终的系统是互动且富有吸引力的。尽管 YOLO 是逐个处理图像的,但当连接到摄像头时,它就像一个跟踪系统,能够检测物体在移动和外观变化时的情况。该系统的演示和源代码可以在我们的项目网站找到:Joseph Redmon - Survival Strategies for the Robot Rebellion。
精读
YOLO 是一个快速且精确的物体检测器,非常适合计算机视觉应用。通过连接摄像头,YOLO 能够实时处理图像并显示检测结果,功能类似于一个跟踪系统,能够检测物体在移动和外观变化时的情况。项目网站提供了该系统的演示和源代码。
六、Conclusion—结论
翻译
我们介绍了 YOLO,一种统一的物体检测模型。我们的模型构建简单,可以直接在完整的图像上进行训练。与基于分类器的方法不同,YOLO 是通过一个直接与检测性能相关的损失函数进行训练的,整个模型是联合训练的。Fast YOLO 是文献中最快的通用物体检测器,YOLO 推动了实时物体检测领域的最新进展。YOLO 还能够很好地泛化到新领域,使其成为依赖快速、稳健物体检测的应用的理想选择。
精读
YOLO(You Only Look Once)是一种将目标检测视为回归问题的模型。与传统的目标检测方法不同,YOLO通过一次性地输入图像,直接输出目标的类别和位置(即边界框的坐标)。简而言之,YOLO的特点是“只看一次就知道图中物体的类别和位置”。
YOLO的工作流程:
训练阶段:
-
划分网格: 首先,将输入的图像分成S × S个网格单元(grid cell)。
-
输入CNN: 然后,将整张图像同时送入卷积神经网络(CNN),生成一个S × S × (B × 5 + C)的输出结果。这里,B是每个网格预测的边界框数量,5包括了每个框的坐标(x, y, w, h)和置信度,C是类别数。
-
损失计算: 最后,模型根据预测结果与真实标签之间的差异计算损失,并通过反向传播进行梯度下降优化。
预测与验证阶段:
-
图像处理: 输入图像同样会被分成S × S个网格。
-
CNN预测: 将图像传入CNN,生成S × S × (B × 5 + C)的预测结果。
-
NMS筛选: 使用非极大值抑制(NMS)算法,筛选出最终的预选框,去除重叠度高的框,只保留最合适的检测结果。
YOLO的这种方法大大提高了目标检测的速度,使得实时检测成为可能,同时也能保持较高的准确性。