【论文精读】【Yolov1】You Only Look Once Unified, Real-Time Object Detection

在这里插入图片描述

0.论文摘要

我们提出了YOLO,一种新的目标检测方法。先前关于目标检测的工作重新利用分类器来执行检测。相反,我们将目标检测框架确定为空间分离的边界框和相关类别概率的回归问题。单个神经网络在一次评估中直接从完整图像预测边界框和类别概率。由于整个检测流水线是一个单一的网络,可以直接在检测性能上进行端到端的优化。我们的统一架构速度极快。我们的基本YOLO模型以每秒45帧的速度实时处理图像。该网络的一个较小版本,Fast YOLO,每秒处理惊人的155帧,同时仍然实现了其他实时探测器的两倍。与最先进的检测系统相比,YOLO会产生更多的定位误差,但不太可能对背景产生预测误报。最后,YOLO学习对象的非常一般的表示。当从自然图像推广到艺术品等其他领域时,它优于其他检测方法,包括DPM和R-CNN。

1.引言

人类看一眼图像,就能立即知道图像中有什么物体,它们在哪里,以及它们是如何相互作用的。人类的视觉系统快速而准确,允许我们在几乎没有意识思考的情况下执行复杂的任务,如驾驶。快速、准确的物体检测算法将允许计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传递实时场景信息,并释放通用、响应迅速的机器人系统的潜力。当前的检测系统重新利用分类器来执行检测。为了检测对象,这些系统采用该对象的分类器,并在测试图像中的不同位置和比例对其进行评估。像可变形零件模型(DPM)这样的系统使用滑动窗口方法,其中分类器在整个图像上均匀间隔的位置运行[10]。

分类后,后处理用于细化边界框,消除重复检测,并基于场景中的其他对象对框重新评分[13]。这些复杂的管道速度慢且难以优化,因为每个单独的组件都必须单独训练。

我们将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类别概率。使用我们的系统,你只需看一次(YOLO)图像就能预测出有什么物体存在以及它们在哪里。YOLO非常简单:见图1。单个卷积网络同时预测多个边界框和这些边界框的类别概率。YOLO训练完整的图像,并直接优化检测性能。与传统的目标检测方法相比,这种统一的模型有几个优点。

在这里插入图片描述

首先,YOLO速度极快。因为我们将检测框定为回归问题,所以我们不需要复杂的流水线。我们只是在测试时间对新图像运行我们的神经网络来预测检测。我们的基本网络以每秒45帧的速度运行,在Titan X GPU上没有批处理,快速版本的运行速度超过150 fps。这意味着我们可以实时处理流式视频,延迟不到25毫秒。此外,YOLO的平均精度是其他实时系统的两倍以上。有关我们的系统在网络摄像头上实时运行的演示,请参见我们的项目网页:

http://pjreddie.com/yolo/

第二,当做出预测时,YOLO对图像进行了全局推理。与基于滑动窗口和区域建议的技术不同,YOLO在训练和测试期间看到整个图像,因此它隐式地编码了关于类及其外观的上下文信息。Fast R-CNN是一种顶级检测方法[14],它会将图像中的背景区块误认为对象,因为它看不到更大的上下文。与Fast R-CNN相比,YOLO造成的背景错误不到一半。第三,YOLO学习对象的抽象表示。当在自然图像上训练并在手工数据集上测试时,YOLO远远优于DPM和R-CNN等顶级检测方法。由于YOLO是高度概括的,当应用于新的领域或意外的输入时,它不太可能崩溃。YOLO在准确性上仍然落后于最先进的探测系统。虽然它可以快速识别图像中的物体,但它很难精确定位一些物体,尤其是小物体。我们在实验中进一步研究了这些权衡。我们所有的培训和测试代码都是开源的。各种预训练模型也可供下载。

2.统一的检测

我们将目标检测的独立组件统一到一个单一的神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还可以同时预测图像所有类中的所有边界框。这意味着我们的网络对整个图像和图像中的所有对象进行全局推理。YOLO设计支持端到端训练和实时速度,同时保持高平均精度。我们的系统将输入图像分成S × S网格。如果一个对象的中心落入一个网格单元,该网格单元负责检测该对象。

每个网格单元预测B个边界框和这些框的置信度得分。这些置信度分数反映了模型对框包含对象的置信度,以及它认为框预测的准确性。形式上,我们将置信度定义为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object) ∗ IOU^{truth}_{pred} Pr(Object)IOUpredtruth。如果该单元格中不存在对象,则置信度得分应为零。否则,我们希望置信度得分等于预测框和ground truth之间的并交集(IOU)。

每个边界框由5个预测组成:x、y、w、h和置信度。 ( x , y ) (x,y) xy坐标表示框相对于网格单元边界的中心。相对于整个图像预测宽度和高度。最后,置信度预测表示预测框和任何ground truth之间的IOU。

每个网格单元还预测C条件类概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject)。这些概率取决于包含对象的网格单元。我们只预测每个网格单元的一组类概率,而不考虑边界框B的数量。在测试时,我们将条件类概率和单个边界框置信度预测相乘,

在这里插入图片描述

这给了我们每个框特定于类的置信度分数。这些分数编码了该类出现在框中的概率以及预测的框与对象的匹配程度。

为了评估PASCAL VOC上的YOLO,我们使用S=7,B=2。PASCAL VOC有20个带标签的类,所以C=20。我们最终的预测是一个7 × 7 × 30的张量。

2.1 网络设计

我们将该模型实现为卷积神经网络,并在PASCAL VOC检测数据集上对其进行评估[9]。网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。我们的网络架构受到GoogLeNet图像分类模型的启发[34]。我们的网络有24个卷积层,后面是2个全连接层。我们没有使用GoogLeNet使用的初始模块,而是简单地使用1 × 1还原层,然后是3 × 3卷积层,类似于Lin等[22]。完整的网络如图3所示。

在这里插入图片描述

图3:架构。我们的检测网络有24个卷积层,后面是2个全连接层。交替的1 × 1卷积层减少了前面层的特征空间。我们在ImageNet分类任务中以一半的分辨率(224 × 224输入图像)预训练卷积层,然后将分辨率加倍用于检测。
我们还训练了一个快速版本的YOLO,旨在推动快速目标检测的边界。快速YOLO使用具有更少卷积层(9层而不是24层)和这些层中更少滤波器的神经网络。除了网络的大小,YOLO和Fast YOLO之间的所有训练和测试参数都是相同的。
我们网络的最终输出是预测的7 × 7 × 30张量。

2.2 训练

我们在ImageNet 1000类图像竞赛数据集上预训练卷积层[30]。对于预训练,我们使用图3中的前20个卷积层,然后是平均池化层和全连接层。我们对该网络进行了大约一周的训练,并在ImageNet 2012验证集上实现了88%的单个crop前5名准确率,与Caffe模型动物园中的GoogLeNet模型相当[24]。我们使用Darknet框架进行所有的训练和推理[26]。

然后,我们转换模型来执行检测。任等[29]表明向预训练网络添加卷积层和连接层可以提高性能。按照他们的例子,我们添加了四个卷积层和两个具有随机初始化权重的全连接层。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224 × 224提高到448 × 448。我们的最后一层预测类别概率和边界框坐标。我们通过图像的宽度和高度来归一化边界框的宽度和高度,使它们介于0和1之间。我们将边界框x和y坐标参数化为特定网格单元位置的偏移量,因此它们也被限制在0和1之间。我们对最后一层使用线性激活函数,所有其他层使用以下校正整流线性激活:

在这里插入图片描述

我们对模型输出中的平方和误差进行了优化。我们使用平方和误差是因为它很容易优化,但是它并不完全符合我们最大化平均精度的目标。它将定位误差与分类误差同等加权,分类误差可能并不理想。此外,在每个图像中,许多网格单元不包含任何对象。这将这些单元格的“置信度”分数推向零,通常会压倒包含对象的单元格的梯度。这可能导致模型不稳定,导致训练在早期出现分歧。

为了弥补这一点,我们增加了边界框坐标预测的损失,并减少了不包含对象的边界框的置信度预测的损失。我们使用两个参数 λ c o o r d λ_{coord} λcoord λ n o o b j λ_{noobj} λnoobj来实现这一点。我们设置 λ c o o r d = 5 λ_{coord} = 5 λcoord=5 λ n o o b j = . 5 λ_{noobj} = .5 λnoobj=.5。平方和误差在大边界框和小边界框中的权重也相等。我们的误差度量应该反映出大边界框中的小偏差不如小边界框中的小偏差重要。为了部分解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。

YOLO预测每个网格单元有多个边界框。在训练时,我们只希望一个边界框预测器负责每个对象。我们分配一个预测器来“负责”预测一个对象,基于该对象,该预测具有最高的当前IOU和真实目标。这导致边界框预测器之间的专门化。每个预测器在预测物体的特定大小、长宽比或类别方面变得更好,从而提高整体召回率。

在训练过程中,我们优化了以下多部分损失函数 :

在这里插入图片描述

其中 1 i o b j \mathbb{1}^{obj}_i 1iobj表示对象是否出现在单元格i中, 1 i j o b j \mathbb{1}^{obj}_{ij} 1ijobj表示单元格i中的第j个边界框预测器“负责”该预测。

注意,损失函数仅在对象存在于网格单元中时惩罚分类错误(因此是前面讨论的条件类概率)。如果该预测器对真实目标“负责”(即,在该网格单元中具有任何预测器中最高的IOU),它也仅惩罚边界框坐标误差。我们在来自PASCAL VOC 2007和2012的训练和验证数据集上训练网络大约135个epoch。在2012年测试时,我们还包括VOC 2007测试数据用于培训。在整个训练过程中,我们使用64的批量、0.9的动量和0.0005的衰减。我们的学习速率表如下:对于第一个epoch,我们慢慢地将学习速率从 1 0 − 3 10^{−3} 103提高到 1 0 − 2 10^{−2} 102。如果我们以高学习率开始,我们的模型经常会由于不稳定的梯度而发散。我们继续用 1 0 − 2 10^{−2} 102训练75个epoch,然后用 1 0 − 3 10^{−3} 103训练30个epoch,最后用 1 0 − 4 10^{−4} 104训练30个epoch。

为了避免过度拟合,我们使用dropout和广泛的数据扩充。在第一个连接层之后比率=0.5的dropout层阻止了层之间的共同适应[18]。对于数据增强,我们引入了高达原始图像大小20%的随机缩放和平移。我们还在HSV色彩空间中随机调整图像的曝光和饱和度,最多调整1.5倍。

2.3 推理

就像在训练中一样,预测测试图像的检测只需要一次网络评估。在PASCAL VOC上,网络预测每个图像98个边界框和每个框的类别概率。与基于分类器的方法不同,YOLO在测试时速度极快,因为它只需要一次网络评估。网格设计在边界框预测中实施空间多样性。通常很清楚一个对象属于哪个网格单元,网络只为每个对象预测一个方框。然而,一些大型物体或靠近多个单元边界的物体可以被多个单元很好地定位。非极大抑制可用于修复这些多重检测。虽然不像R-CNN或DPM那样对性能至关重要,但非极大抑制使mAP增加了23%。

YOLO对边界框预测施加了很强的空间约束,因为每个网格单元只能预测两个框,并且只能有一个类。这种空间约束限制了我们的模型可以预测的附近物体的数量。我们的模型与成群出现的小物体斗争,例如成群的鸟。由于我们的模型学习从数据中预测边界框,它很难推广到新的或不寻常的纵横比或配置的对象。我们的模型还使用相对粗糙的特征来预测边界框,因为我们的架构具有来自输入图像的多个下采样层。最后,当我们在近似检测性能的损失函数上训练时,我们的损失函数在小边界框和大边界框中处理错误是相同的。大边界框里的小错误通常是良性的,但小边界框里的小错误对IOU的影响要大得多。我们错误的主要来源是不正确的定位。

3.与其他目标检测算法相比较

目标检测是计算机视觉中的核心问题。检测管道通常从从输入图像中提取一组鲁棒特征开始(Haar[25],SIFT[23],HOG[4],卷积特征[6])。然后,使用分类器[36,21,13,10]或定位器[1,32]来识别特征空间中的对象。这些分类器或定位器以滑动窗口方式在整个图像上运行,或者在图像中的一些区域子集上运行[35,15,39]。我们将YOLO检测系统与几个顶级检测框架进行了比较,突出了关键的相似之处和不同之处。

3.1 DPM

可变形零件模型(DPM)使用滑动窗口方法进行目标检测[10]。DPM使用不相交的管道来提取静态特征、对区域进行分类、预测高分区域的边界框等。我们的系统用一个卷积神经网络代替了所有这些不同的部分。该网络同时执行特征提取、边界框预测、非最大抑制和上下文推理。该网络不是静态特征,而是在线训练特征,并针对检测任务优化它们。我们的统一架构带来了比DPM更快、更准确的模型。

3.2 R-CNN

R-CNN及其变体使用候选框而不是滑动窗口来查找图像中的对象。选择性搜索[35]生成潜在的边界框,卷积网络提取特征,SVM对框进行评分,线性模型调整边界框,非最大抑制消除重复检测。这个复杂管道的每个阶段都必须独立精确调整,最终的系统非常慢,在测试时间每张图像需要40多秒[14]。

YOLO与R-CNN有一些相似之处。每个网格单元提出潜在的边界框,并使用卷积特征对这些框进行评分。然而,我们的系统对网格单元建议施加了空间限制,这有助于减少对同一对象的多次检测。我们的系统还提出了更少的边界框,每张图像只有98个,相比之下,选择性搜索有大约2000个。最后,我们的系统将这些单独的组件组合成一个单一的、联合优化的模型。

3.3 其他

Fast R-CNN和 Faster R-CNN专注于通过共享计算和使用神经网络来提出区域而不是选择性搜索来加速R-CNN框架[14][28]。虽然它们比R-CNN提供了速度和准确性的改进,但两者仍然达不到实时性能。许多研究工作集中在加速DPM管道[31][38][5]。它们加速HOG计算,使用级联,并将计算推送到GPU。然而,实际上只有30Hz DPM[31]实时运行。YOLO没有试图优化大型检测管道的单个组件,而是完全抛弃了管道,并通过设计实现了快速。像人脸或人这样的单一类别的检测器可以高度优化,因为它们必须处理更少的变化[37]。YOLO是一个通用探测器,学习同时探测各种物体。

3.4 Deep MultiBox

与R-CNN不同,塞格迪等训练卷积神经网络来预测感兴趣的区域[8],而不是使用选择性搜索。MultiBox还可以通过用单个类预测替换置信度预测来执行单个目标检测。然而,MultiBox不能执行一般的目标检测,仍然只是更大的检测管道中的一部分,需要进一步的图像区块分类。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。

3.5 OverFeat

Sermanet等训练卷积神经网络来执行定位,并调整该定位器来执行检测[32]。OverFeat有效地执行滑动窗口检测,但它仍然是一个不相交的系统。OverFeat针对定位而非检测性能进行优化。与DPM一样,定位程序在进行预测时只能看到定位信息。OverFeat不能对全局上下文进行推理,因此需要大量的后处理来产生相干检测。

3.6 MultiGrasp

我们的工作在设计上类似于Redmon等[27]在抓取检测方面的工作。我们的边界框预测网格方法是基于回归到grasps的MultiGrasp系统。然而,抓取检测是比目标检测简单得多的任务。对于包含一个对象的图像,MultiGrasp只需要预测单个可抓取区域。它不必估计对象的大小、位置或边界,也不必预测它的类别,只需找到一个适合抓取的区域。YOLO预测图像中多个类别的多个对象的边界框和类别概率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mybatis单表curd笔记(尚硅谷

Mybatis 11111ibatis和mybatis不同 查询文档mybatis的日志输出id赋值输入(向sql语句传入数据单个简单类型单个实体对象多个简单类型map类型 输出数据的指定单个简单类型单个实体类型输出map类型输出list输出类型主键回显(自增长类型主键回显(…

R语言中定义函数、调用函数及常用编程技巧

R语言中定义函数、调用函数及常用编程技巧 介绍定义函数调用函数常用编程循环结构apply 函数族apply()案例: lapply()案例: sapply()案例: vapply()案例: mapply()案例: 介绍 R语言是一种功能强大的统计分析编程语言&a…

构建阶段的软件供应链威胁

随着软件供应链生命周期从源代码发展到可执行组件,构建阶段是一个关键时刻。然而,这一变革阶段也容易受到一系列威胁的影响,这些威胁可能会危及软件的完整性和构建安全性。 这些威胁可以通过各种方法渗透构建过程,包括规避已建立…

LVS----DR模式

一、LVS-DR工作原理 1、LVS-DR数据包流向分析 客户端发送请求到Director Server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。Director Server 和Real Server 在同一个网络中,数据通过二层数据…

比较 2 名无人机驾驶员:借助分析飞得更高

近年来,越来越多的政府和执法机构使用无人机从空中鸟瞰。为了高效执行任务,无人机必须能够快速机动到预定目标。快速机动使它们能够在复杂的环境中航行,并高效地完成任务。成为认证的无人机驾驶员的要求因国家/地区而异,但都要求您…

node_vue个人博客系统开发

Day01 一、导入express 1、创建node_serve服务文件夹 2、初始化项目 npm init -y3、导入express框架 npm i express4、创建一个app.js文件,为服务端的入口文件 // 导入express模块 const express = require(express); // 创建express服务 const app = express(); // 调用…

UVa11595 Crossing Streets EXTREME

题目链接 UVa11595 - Crossing Streets EXTREME 题意 平面上有 n(n≤35)条直线,各代表一条街道。街道相互交叉,形成一些路段(对应于几何上的线段)。你的任务是设计一条从A到B的路线,使得穿过路…

土地利用数据分类过程教学/土地利用分类/遥感解译/土地利用获取来源介绍/地理数据获取

本篇主要介绍如何对影像数据进行分类解译,及过程教学,示例数据下载链接:数据下载链接 一、背景介绍 土地是人类赖以生存与发展的重要资源和物质保障,在“人口-资源-环境-发展&#x…

excel中去除公式,仅保留值

1.单个单元格去除公式 双击单元格,按F9. 2.批量去除公式 选中列然后复制,选择性粘贴,选值粘贴

C++之类型转换

C语言中的类型转换 在C语言中, 如果赋值运算符左右两侧类型不同, 或者形参与实参类型不匹配, 或者返回值类型与 接收返回值类型不一致时, 就需要发生类型转化, C语言中总共有两种形式的类型转换: 隐式类型转换和显式类型转换 1. 隐式类型转化是关联度很强, 意义相近的类型之间…

事务 失效的八种情况

在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到 spring 事务。 确实,sprin…

css使用伪元素绘制带三角箭头的提示框

效果图 代码实现 使用伪元素进行绘制&#xff1a; <div class"my-tip"></div> .my-tip{width: 128px;height: 100px;background: #FFFFFF;box-shadow: 0px 1px 10px 0px rgba(0,0,0,0.05), 0px 4px 5px 0px rgba(0,0,0,0.08), 0px 2px 4px -1px rgba(0…

【开源】SpringBoot框架开发网上药店系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药品档案模块2.4 药品订单模块2.5 药品收藏模块2.6 药品资讯模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 药品表3.2.3 药品订单表3.2.4 药品收藏表3.2.5 药品留言表…

Python 快速获取PDF文件的页数

有时在处理或打印一个PDF文档之前&#xff0c;你可能需要先知道该文档包含多少页。虽然我们可以使用Adobe Acrobat这样的工具来查看页数&#xff0c;但对于程序员来说&#xff0c;编写脚本来完成这项工作会更加高效。本文就介绍一个使用Python快速获取PDF文件页数的办法。 安装…

使用css结合js实现html文件中的双行混排

此前写过一个使用flex布局实现html文件中的双行混排&#xff0c;但是感觉效果不佳。经过几天思考&#xff0c;我认为双行混排的要点其实是两个&#xff1a; 1、正文和批注的文字大小不同&#xff1b; 2、正文和批注的行距相互配合进行设定。 正文和批注的文字大小及行距都可…

vue在线查看pdf文件

1.引入组件 npm install --save vue-pdf2、pdf组件页面模板 <template><div class"scrollBox" ><el-dialog :visible.sync"open" :top"1" width"50%" append-to-body><div slot"title"><el…

JUC总结

文章目录 java中线程的6种状态 静态变量、实例变量、局部变量的线程安全问题&#xff1a; 为什么会出现线程安全问题&#xff1a;在多个线程对共享资源读写操作&#xff0c;就会出现问题 synchronized 锁升级&#xff1a; sleep 和 wait 的区别 park和unpark 是unsafe中…

【视频转码】基于ZLMediakit的视频转码技术概述

一、概述 zlmediakit pro版本支持基于ffmpeg的转码能力&#xff0c;在开源版本强大功能的基础上&#xff0c;新增支持如下能力&#xff1a; 1、音视频间任意转码(包括h265/h264/opus/g711/aac等)。2、基于配置文件的转码&#xff0c;支持设置比特率&#xff0c;codec类型等参…

基于Spring Boot + Vue的信息化在线教学平台

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

个人商城系统开源(登录)

原文地址&#xff1a;个人商城系统开源&#xff08;登录&#xff09; - Pleasure的博客 下面是正文内容&#xff1a; 前言 由于近期实在没有什么话题可写和一些有趣的项目教程可以分享。所以我只能决定将我自己亲手编写的一个迷你迷你商城系统进行开源。 也就是放在我博客右边…