You Only Look Once:Unified, Real-Time Object Detection 论文阅读

news2024/12/27 12:46:05
论文名:You Only Look Once:Unified, Real-Time Object Detection
论文作者:Joseph Redmon et.al.
期刊/会议名:CVPR 2016
发表时间:2016-5
​论文地址:https://arxiv.org/pdf/1506.02640

1.摘要

我们提出了一种新的目标检测方法YOLO。先前的目标检测工作重新使用分类器来执行检测。相反,我们将目标检测框架为空间分离的边界框和相关类概率的回归问题。单个神经网络在一次评估中直接从完整图像中预测边界框和类别概率。由于整个检测管道是一个单一的网络,因此可以直接对检测性能进行端到端的优化。

我们的统一架构非常快。我们的基本YOLO模型以每秒45帧的速度实时处理图像。一个更小版本的网络,快速YOLO,每秒处理惊人的155帧,同时仍然达到其他实时探测器的两倍mAP。与最先进的检测系统相比,YOLO会产生更多的定位错误,但不太可能预测背景误报。最后,YOLO学习对象的非常一般的表示。当从自然图像推广到其他领域(如艺术品)时,它优于其他检测方法,包括DPM和R-CNN。

之前的方法(RCNN系列)


1.通过region proposal产生大量的可能包含待检测物体的potential bounding box。

2.再用分类器去判断每个bounding box里是否包含有物体,以及物体所属类别的probability或者 confidence。

3.最后回归预测。

YOLO


本文将检测变为一个regression problem(回归问题),YOLO 从输入的图像,仅仅经过一个神经网络,直接得到一些bounding box以及每个bounding box所属类别的概率。因为整个的检测过程仅仅有一个网络,所以它可以直接进行end-to-end的优化。

end-to-end: 端到端指的是输入原始数据,输出的是最后结果,原来输入端不是直接的原始数据,而是在原始数据中提取的特征。通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。在CV中具体表现是,神经网络的输入为原始图片,神经网络的输出为(可以直接控制机器的)控制指令。

2.前言 

传统两阶段目标检测模型 VS YOLO单阶段目标检测模型

之前的研究:

DPM: 系统为检测对象使用分类器,并在测试图像的不同位置和尺度对其进行评估

R-CNN:SS方法提取候选框+CNN+分类+回归。

YOLO处理步骤:

(1)将输入图像的大小调整为448×448,分割得到7*7网格;

(2)通过CNN提取特征和预测;

(3)利用非极大值抑制(NMS)进行筛选

YOLO的定义:

YOLO将目标检测重新定义为单个回归问题,从图像像素直接到边界框坐标和类概率。YOLO可以在一个图像来预测:哪些对象是存在的?它们在哪里?

如 Figure 1:将图像输入单独的一个 CNN 网络,就会预测出 bounding box,以及这些 bounding box 所属类别的概率。YOLO 用一整幅图像来训练,同时可以直接优化性能检测。

性能检测对比:

YOLO的优点:


(1)YOLO的速度非常快。能够达到实时的要求。在 Titan X 的 GPU 上 能够达到 45 帧每秒。

(2)YOLO在做预测时使用的是全局图像。与FastR-CNN相比,YOLO产生的背景错误数量不到一半。

(3)YOLO 学到物体更泛化的特征表示。因此当应用于新域或意外输入时,不太可能崩溃。

 3.统一检测

网格单元思想:

YOLO将目标检测问题作为回归问题。我们的系统将输入图像分成S×S网格。如果一个物体的中心落在一个网格单元中,这个网格单元负责检测这个物体。一个格子只能预测一个物体,会生成两个预测框。

对于每个grid cell:

(1)预测B个边界框,每个框都有一个置信度分数(confidence score)这些框大小尺寸等等都随便,只有一个要求,就是生成框的中心点必须在grid cell里

(2)每个边界框包含5个元素:(x,y,w,h,c)。

● x,y: 是指bounding box的预测框的中心坐标相较于该bounding box归属的grid cell左上角的偏移量,在0-1之间。

在上图中,绿色虚线框代表grid cell,绿点表示该grid cell的左上角坐标,为(0,0);红色和蓝色框代表该grid cell包含的两个bounding box,红点和蓝点表示这两个bounding box的中心坐标。有一点很重要,bounding box的中心坐标一定在该grid cell内部,因此,红点和蓝点的坐标可以归一化在0-1之间。在上图中,红点的坐标为(0.5,0.5),即x=y=0.5,蓝点的坐标为(0.9,0.9),即x=y=0.9。

● w,h: 是指该bounding box的宽和高,但也归一化到了0-1之间,表示相较于原始图像的宽和高(即448个像素)。比如该bounding box预测的框宽是44.8个像素,高也是44.8个像素,则w=0.1,h=0.1。

红框的x=0.8,y=0.5,w=0.1,h=0.2。

(3)不管框 B 的数量是多少,只负责预测一个目标

(4)预测 C 个条件概率类别(物体属于每一种类别的可能性)。

综上,S×S 个网格,每个网格要预测 B个bounding box (中间上图),还要预测 C 个类(中间下图)。将两图合并,网络输出就是一个 S × S × (5×B+C)。(S x S个网格,每个网格都有B个预测框,每个框又有5个参数,再加上每个网格都有C个预测类)。

预测特征组成

最终的预测特征由边框的位置、边框的置信度得分以及类别概率组成,这三者的含义如下:

  • 边框位置: 对每一个边框需要预测其中心坐标及宽、高这4个量, 两个边框共计8个预测值边界框宽度w和高度h用图像宽度和高度归一化。因此 x,y,w,h 都在0和1之间。
  • 置信度得分(box confidence score) c : 框包含一个目标的可能性以及边界框的准确程度。类似于Faster RCNN 中是前景还是背景。由于有两个边框,因此会存在两个置信度预测值。
  • 类别概率: 由于PASCAL VOC数据集一共有20个物体类别,因此这里预测的是边框属于哪一个类别。

注意

  • 一个cell预测的两个边界框共用一个类别预测, 在训练时会选取与标签IoU更大的一个边框负责回归该真实物体框,在测试时会选取置信度更高的一个边框,另一个会被舍弃,因此7×7=49个gird cell最多只能预测49个物体。
  • 因为每一个 grid cell只能有一个分类,也就是它只能预测一个物体,这也是导致YOLO对小目标物体性能比较差的原因。如果所给图片极其密集,导致 grid cell里可能有多个物体,但是YOLO模型只能预测出来一个,那这样就会忽略在本grid cell内的其它物体。

3.1. 网络设计

网络结构

YOLO网络结构借鉴了 GoogLeNet (经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现))。输入图像的尺寸为448×448,经过24个卷积层,2个全连接的层(FC),最后在reshape操作,输出的特征图大小为7×7×30。

Q:7×7×30怎么来的?

张量剖面图

 (图片来源:YOLO v1详细解读_yolov1详解_迪菲赫尔曼的博客-CSDN博客)

 7×7: 一共划分成7×7的网格。
 30: 30包含了两个预测框的参数和Pascal VOC的类别参数:每个预测框有5个参数:x,y,w,h,confidence。另外,Pascal VOC里面还有20个类别;所以最后的30实际上是由5x2+20组成的,也就是说这一个30维的向量就是一个gird cell的信息。
 7×7×30: 总共是7 × 7个gird cell一共就是7 × 7 ×(2 × 5+ 20)= 7 × 7 × 30 tensor = 1470 outputs,正好对应论文。

网络详解 

(1)YOLO主要是建立一个CNN网络生成预测7×7×1024 的张量 。

(2)然后使用两个全连接层执行线性回归,以进行7×7×2 边界框预测。将具有高置信度得分(大于0.25)的结果作为最终预测。

(3)在3×3的卷积后通常会接一个通道数更低1×1的卷积,这种方式既降低了计算量,同时也提升了模型的非线性能力。

(4)除了最后一层使用了线性激活函数外,其余层的激活函数为 Leaky ReLU 。

(5)在训练中使用了 Dropout 与数据增强的方法来防止过拟合。

(6)对于最后一个卷积层,它输出一个形状为 (7, 7, 1024) 的张量。 然后张量展开。使用2个全连接层作为一种线性回归的形式,它输出1470个参数,然后reshape为 (7, 7, 30) 。

3.2.训练

预训练分类网络

在 ImageNet 1000数据集上预训练一个分类网络,这个网络使用Figure3中的前20个卷积层,然后是一个平均池化层和一个全连接层。(此时网络输入是224×224)。

Q:主干结构的输入要求必须是448x448的固定尺寸,为什么在预训练阶段可以输入224x224的图像呢?

主要原因是加入了平均池化层,这样不论输入尺寸是多少,在和最后的全连接层连接时都可以保证相同的神经元数目。

 

 训练检测网络

经过上一步的预训练,就已经把主干网络的前20个卷积层给训练好了,前20层的参数已经学到了图片的特征。接下来的步骤本质就是迁移学习,在训练好的前20层卷积层后加上4层卷积层和2层全连接层,然后在目标检测的任务上进行迁移学习。

在整个网络(24+2)的训练过程中,除最后一层采用ReLU函数外,其他层均采用leaky ReLU激活函数。leaky ReLU相对于ReLU函数可以解决在输入为负值时的零梯度问题。YOLOv1中采用的leaky ReLU函数的表达式为:

NMS非极大值抑制

概念:NMS算法主要解决的是一个目标被多次检测的问题,意义主要在于在一个区域里交叠的很多框选一个最优的。

YOLO中具体操作

(1)对于上述的98列数据,先看某一个类别,也就是只看98列的这一行所有数据,先拿出最大值概率的那个框,剩下的每一个都与它做比较,如果两者的IoU大于某个阈值,则认为这俩框重复识别了同一个物体,就将其中低概率的重置成0。

(2)最大的那个框和其他的框比完之后,再从剩下的框找最大的,继续和其他的比,依次类推对所有类别进行操作。 注意,这里不能直接选择最大的,因为有可能图中有多个该类别的物体,所以IoU如果小于某个阈值,则会被保留。

(3)最后得到一个稀疏矩阵,因为里面有很多地方都被重置成0,拿出来不是0的地方拿出来概率和类别,就得到最后的目标检测结果了。

注意: NMS只发生在预测阶段,训练阶段是不能用NMS的,因为在训练阶段不管这个框是否用于预测物体的,他都和损失函数相关,不能随便重置成0。

损失函数

损失函数包括:

localization loss -> 坐标损失

confidence loss -> 置信度损失

classification loss -> 分类损失

损失函数详解: 

(1)坐标损失

  • 第一行: 负责检测物体的框中心点(x, y)定位误差。
  • 第二行: 负责检测物体的框的高宽(w,h)定位误差,这个根号的作用就是为了修正对大小框一视同仁的缺点,削弱大框的误差。

Q:为啥加根号?

在上图中,大框和小框的bounding box和ground truth都是差了一点,但对于实际预测来讲,大框(大目标)差的这一点也许没啥事儿,而小框(小目标)差的这一点可能就会导致bounding box的方框和目标差了很远。而如果还是使用第一项那样直接算平方和误差,就相当于把大框和小框一视同仁了,这样显然不合理。而如果使用开根号处理,就会一定程度上改善这一问题 。

这样一来,同样是差一点,小框产生的误差会更大,即对小框惩罚的更严重。

(2)置信度损失

 

  • 第一行: 负责检测物体的那个框的置信度误差。
  • 第二行: 不负责检测物体的那个框的置信度误差。

(3)分类损失

负责检测物体的grid cell分类的误差。

特殊符号的含义: 

 

3.3.推论 

(1)预测测试图像的检测只需要一个网络评估。

(2)测试时间快。

(3)当图像中的物体较大,或者处于 grid cells 边界的物体,可能在多个 cells 中被定位出来。

(4)利用NMS去除重复检测的物体,使mAP提高,但和RCNN等相比不算大。

3.4.YOLO的局限性 

(1)对于图片中一些群体性小目标检测效果比较差。因为yolov1网络到后面感受野较大,小目标的特征无法再后面7×7的grid中体现,针对这一点,yolov2已作了一定的修改,加入前层(感受野较小)的特征进行融合。

(2)原始图片只划分为7x7的网格,当两个物体靠的很近时(挨在一起且中点都落在同一个格子上的情况),效果比较差。因为yolov1的模型决定了一个grid只能预测出一个物体,所以就会丢失目标,针对这一点,yolov2引入了anchor的概念,一个grid有多少个anchor理论上就可以预测多少个目标。

(3)每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差。

(4)最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。

4.与其它目标检测算法的比较

DPM
用传统的HOG特征方法,也用的是传统的支持向量机SVM分类器,然后人工造一个模板,再用滑动窗口方法不断的暴力搜索整个待识别图,去套那个模板。这个方法比较大的问题就是在于设计模板,计算量巨大,而且是个静态的,没办法匹配很多变化的东西,鲁棒性差。

R-CNN
第一阶段:每个图片使用选择性搜索SS方法提取2000个候选框。
第二阶段:将每个候选框送入CNN网络进行分类(使用的SVM)。
YOLO对比他们俩都很强,YOLO和R-CNN也有相似的地方,比如也是提取候选框,YOLO的候选框就是上面说过的那98个 bounding boxes,也是用到了NMS非极大值抑制,也用到了CNN提取特征。

Other Fast Detectors
Fast和Faster R-CNN :这俩模型都是基于R-CNN的改版,速度和精度都提升了很多,但是也没办法做到实时监测,也就是说FPS到不了30,作者在这里并没有谈准确度的问题,实际上YOLO的准确度在这里是不占优势的,甚至于比他们低。

Deep MultiBox
训练卷积神经网络来预测感兴趣区域,而不是使用选择性搜索。多盒也可以用单个类预测替换置信预测来执行单个目标检测。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。

OverFeat
OverFeat有效地执行滑动窗口检测,优化了定位,而不是检测性能。与DPM一样,定位器在进行预测时只看到本地信息。OverFeat不能推理全局环境。

MultiGrasp
YOLO在设计上与Redmon等人的抓取检测工作相似。边界盒预测的网格方法是基于多重抓取系统的回归到抓取。

5.实验 

5.1.与其它实时系统的比较

Table 1 在Pascal VOC 2007 上与其它检测方法的对比 

结论:实时目标检测(FPS>30),YOLO最准,Fast YOLO最快。 

5.2.VOC 2007误差分析 

本文使用HoeMm等人的方法和工具。对于测试时间的每个类别,查看该类别的N个预测。每个预测要么是正确的,要么是基于错误类型进行分类的:

参数含义:

Correct:正确分类,且预测框与ground truth的IOU大于0.5,既预测对了类别,预测框的位置和大小也很合适。 
Localization:正确分类,但预测框与ground truth的IOU大于0.1小于0.5,即虽然预测对了类别,但预测框的位置不是那么的严丝合缝,不过也可以接受。
Similar: 预测了相近的类别,且预测框与ground truth的IOU大于0.1。即预测的类别虽不正确但相近,预测框的位置还可以接受。
Other:预测类别错误,预测框与ground truth的IOU大于0.1。即预测的类别不正确,但预测框还勉强把目标给框住了。
Background:预测框与ground truth的IOU小于0.1,即该预测框的位置为背景,没有目标。

 

Figure 4 显示了所有20个类中每种错误类型的平均细分情况 

结论:YOLO定位错误率高于Fast R-CNN;Fast R-CNN背景预测错误率高于YOLO 。 

5.3.Fast R-CNN与YOLO的结合 

Table2模型组合在VOC2007上的实验结果对比 

结论:因为YOLO在测试时犯了各种错误,所以它在提高快速R-CNN的性能方面非常有效。但是这种组合并不受益于YOLO的速度,由于YOLO很快,和Fast R-CNN相比,它不增加任何有意义的计算时间。 

5.4.VOC 2012结果 

Table 3 在VOC2012上mAP排序

 结论:Fast R-CNN从与YOLO的组合中得到2.3%的改进,在公共排行榜上提升了5个百分点。 

5.5.泛化性:图像中的人物检测 

Figure 5 通用性(Picasso 数据集和 People-Art数据集)

结论:YOLO都具有很好的检测结果。

6.自然环境下的实时检测 

结论:将YOLO连接到一个网络摄像头上,并验证它是否保持了实时性能,包括从摄像头中获取图像和显示检测结果的时间。结果证明效果很好,如上图所示,除了第二行第二个将人误判为飞机以外,别的没问题。

7.结论 

到底什么是YOLO?
YOLO眼里目标检测是一个回归问题
一次性喂入图片,然后给出bbox和分类概率
简单来说,只看一次就知道图中物体的类别和位置

YOLO过程总结:
训练阶段:

首先将一张图像分成 S × S个 gird cell,然后将它一股脑送入CNN,生成S × S × (B × 5 + C)个结果,最后根据结果求Loss并反向传播梯度下降。

预测、验证阶段:

首先将一张图像分成 S × S网格(gird cell),然后将它一股脑送入CNN,生成S × S × (B × 5 + C)个结果,最后用NMS选出合适的预选框。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文辅导 | 结合变种残差模型和 Transformer 的城市公路短时交通流预测

辅导文章 模型描述 城市公路交通流的预测受到历史交通流量和相邻车道交通流量的影响,蕴含了复杂的时空特征。针对传统交通流预测模型卷积长短时记忆网络(ConvLSTM)进行交通流预测时,未将时空特征分开提取而造成的提取不充分、特征信息混淆和特征信息缺失…

视频融合技术

三维视频融合技术遵循数字孪生多源数据融合的原则,比视频窗口、矩阵更加直观高效,省去了人脑理解空间的时间,可有效提升数字孪生城市在物联感知操作、虚实融合交互等方面的能力,动静一体、虚实结合,让三维场景“动起来…

常见的SQL注入

联合查询 如下,要求我们传入一个id值过去。传参?id1,当我们输入id1和id2时,页面中name值和password的值会发生变化,说明此时我们输入的数据和数据库有交互并且将数据显示在屏幕上了 输入?id1,页面发生报错&#xf…

手机联网如何设置动态ip

在现代社会,手机已成为我们日常生活中不可或缺的一部分,无论是工作、学习还是娱乐,都离不开网络的支持。而在手机联网的过程中,IP地址的分配方式显得尤为重要。动态IP地址因其灵活性和安全性,成为了许多用户的首选。那…

电子合同怎么制作?9款常用电子合同软件

文章将介绍了以下9个工具:e签宝、文书宝、签通云、快签宝、法天使、Zycus iContract、airSlate WorkFlow、Lightico、KeepSolid Sign。 在数字化快速发展的今天,电子合同成为了业务操作中不可或缺的一部分,但许多人仍然面临如何有效创建和管理…

Redis vs Memcached:Redis的三大优势

Redis vs Memcached:Redis的三大优势 1. 数据类型2. 数据持久化能力3. 高性能与灵活性 💖The Begin💖点点关注,收藏不迷路💖 1. 数据类型 Redis:支持多样化的数据类型,包括字符串(S…

前端性能优化-回流与重绘

前言 本文总结回流与重绘相关的知识点 回流与重绘的基本概念 重绘(Repaint): 当元素样式发生改变,但不影响其几何属性的时候,浏览器只需要重新绘制这个元素,这个过程被称为重绘。 回流(Refl…

Linux_监测CPU和内存

通过TOP持续获取进程的CPU和内存消耗,并写入到表格 # 配置进程名 processvm-agent # 配置次数 number100 # 配置间隔时间 time5 # csv结果文件 filecm_$(date %s).csv echo "%CPU,%MEM">${file} pid$(ps -aux | grep ${process} | awk -F {OFS"…

debug\moc\mocinclude.tmp dose not exist

先把jom禁用,然后清理工程,重新编译,编译通过后再重新打开jom

MybatisPlus的主键策略

ASSIGN_ID(默认策略) 生成唯一的值,包含数字,表对应字段类型bigint或者varchar类型 ASSIGN_UUID() 生成唯一的值,包含数字和字母,表对应字段类型varchar类型 AUTO 主键自动增长效果,和表字段auto_increment INPUT …

养猫劝退?猫咪浮毛太多难清理?宠物空气净化器一招搞定

受不了了,真的很想把家里的猫孩子丢出去!平日实在是太能掉毛了,赶上换毛季更夸张,家里都要被猫毛淹没了。这些还能靠多加打扫卫生清理掉,可空气中的浮毛真是束手无策。对于我这种过敏性鼻炎患者,一旦空气中…

FSRCNN论文读后感

本文的主要目的是在尽可能保持恢复质量不变的情况下,提高模型的处理速度,以将其投入实际应用。(注意:本文只要是针对大尺寸图像,但实验结果证明,FRSNN模型对于小尺寸图像的处理速度也比SRCNN快,…

鸿蒙应用开发之GridRow和GridCol容器

在不同屏幕上布局是一个比较困难的问题,因为屏幕大小不一样,导致内容布局会比较混乱。所以提出一种网络的方式来布局,即使屏幕大小改变了,但是布局行列数不变,那么内容就不会混乱。使用组件GridRow来管理行,使用组件GridCol管理列。 先来看一下组件GridRow的定义: Grid…

VSCode在windows系统下使用conda虚拟环境配置

如何解决CondaError: Run ‘conda init‘ before ‘conda activate‘_condaerror: run conda init before conda activat-CSDN博客 首先检查自己的anaconda是否是添加到整个的环境变量里了 打开cmd如果conda和python都能够识别那么就是配置成功了 然后看插件是否安装&#xf…

在 cPanel 和 WHM 中配置域名重定向

在处理HTTP请求时,服务器会返回页面内容,这一过程依赖于域名和IP地址的正确配置。手动配置IP和域名非常复杂,但cPanel & WHM的网页界面让日常的网络服务器管理变得轻而易举。例如,Hostease提供的服务器解决方案,支…

3DCoat v2023 激活版下载与安装教程 (数字雕刻程序)

前言 3DCoat 是一款数字雕塑软件,由乌克兰开发。该软件专注于游戏模型的细节设计,集三维模型实时纹理绘制和细节雕刻功能为一身,可以加速细节设计流程,在更短的时间内创造出更多的内容。 一、下载地址 下载链接:分享…

想实现ubuntu搭建sqli-labs靶场

目录 首先前期的nginx和php部署完成​编辑​编辑 Xftp导入sqli-labs 遇到了的问题 它提示我们请检查db-creds.inc 去尝试解决这个问题 尝试修改MySQL root密码 修改db-creds.inc配置 再次尝试依旧失败 思考:会不会是MySQL版本过高的原因 重新下载MySQL5.7.…

优思学院|精益管理的指导思想给企业带来了什么启示?

很多企业和管理者以为,多即是好,尽量加快生产,提升库存,库存越多,安全性越高,尽量迫使员工多做工作,他们的工作越多,效率就越高,凡此种种都是在精益思想诞生前的人们对营…

B站宋红康JAVA基础视频教程个人笔记chapter04

文章目录 1.IDEA安装好后的一些设置和学习1.1关于IDEA内部jdk版本的设置1.2 一些样式以及快捷键的常用设置(强烈推荐) 2.工程与模块管理3.如何彻底的卸载IDEA 1.IDEA安装好后的一些设置和学习 1.1关于IDEA内部jdk版本的设置 1.File—>Project Struc…

Lumos学习王佩丰Excel第十讲:Sumif函数

一、Sumif函数语法 Sumif函数:用于对区域中符合指定的单个条件的值求和。 sumif(range,criteria,[sum_range]) sumif(条件区域,求和条件,求和区域) 二、Sumif函数计算数值区间 【注意】 1、当函数中两个区域相同时,可省略写后一个区域; …