目标检测系列(二)yolov1的全面讲解

news2024/11/19 2:41:04

目录

1、网络结构

2、检测原理

3、制作训练正样本方法

4、损失函数

5、前向推理

6、模型缺限


YOLO的全称是you only look once,指只需要浏览一次就可以识别出图中的物体的类别和位置。YOLO被称为Region-free方法,相比于Region-based方法,YOLO不需要提前找到可能存在目标的Region。

一个典型的Region-base方法的流程是这样的:先通过计算机图形学(或者深度学习)的方法,对图片进行分析,找出若干个可能存在物体的区域,将这些区域裁剪下来, 放入一个图片分类器中,由分类器分类。

因为YOLO这样的Region-free方法只需要一次扫描,也被称为单阶段(1-stage)模型。Region-based方法方法也被称为两阶段(2-stage)方法。

YOLO v1在Pascal VOC 2007测试数据集上达到的mAP是63.4%,在输入图像大小为448×448像素的图像上处理速度能够达到每秒45帧,该网络的一个小版本FastYOLO 每秒处理速度也达到了惊人的155帧。虽然YOLO v1的精度不及RCNN系列,但奈何其速度非常快,所以在工业界应用还是很普遍。分几个点来详细介绍:

1、网络结构

论文下载地址:https://arxiv.org/pdf/1506.02640

GitHub源码地址:https://github.com/AlexeyAB/darknet

项目地址:https://pjreddie.com/darknet/yolo/

作者用一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率。整个检测网络有24个卷积层,后面跟了2个全连接层。交替的1×1个卷积层目的是减少前一层的特征。

可以看到,输出的形状为SxSx(B*5+C),具体解释如下:

  1. S 表示将输入图像划分为SxS个网格单元格。每个网格单元格都负责预测一定数量的边界框。
  2. C 表示类别数,即目标检测任务中需要预测的不同类别数量。
  3. B 表示每个网格单元格预测的边界框数量。每个边界框通常包括边界框的坐标信息(X,Y,H,W)(4个值)和边界框的置信度(C)(1个值),所以每个边界框需要5个预测值。
  4. 5*B 表示每个网格单元格预测的边界框相关的5个预测值(边界框的中心坐标、宽度、高度和置信度),乘以 B 的数量得到总的预测值数量。
  5. x,y就是bounding box的中心坐标,与grid cell对齐(即相对于当前grid cell的偏移值),使得范围变成0到1;
  6. w,h进行归一化(分别除以图像的w和h,这样最后的w和h就在0到1范围)。
  7. confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息。如果ground truth落在这个grid cell里,那么Pr(Object)就取1,否则就是0;IOU就是bounding box与实际的groud truth之间的交并比。confidence就是这两者的乘积。

confidence有两种情况,分别是 “0”和“1”,当我们的网格中确实存在目标时,那我们图5中的Pr(Object)就是等于 “1” 的,所以我们预测的confidence就直接等于IOU,如果网格中没有目标落在里面,那么Pr(Object)就是等于“0”的,所以confidence就是等于零的。

①网络输入:

图片大小:448 * 448 * 3 = (64 * 7) * (64 * 7)* 3 = 7 * 7 * (64 * 64 * 3)

也就是说,输入图像大小为448*448的图像,被划分为7*7的网格(grid cell),一个网格负责检测输入图片的64 * 64 * 3个非连续的像素,来判断物体的位置、形状以及分类(即如果某个object的中心落在这个网格中,则这个网格就负责预测这个object)。

②Bounding boxes 预测:

先看 bounding boxes+confidence。显示每个grid cell生成2个bounding box(预测框:每个网格使用​两​个先验框去寻找是否有目标方框的中心点落在该网格内。分别用B1(Box1)和B2(Box2)表示这个2个框,称为“先验框”。有点类似,每个网格使用两个不同尺寸的渔网去捞鱼(目标),看看能不能​捞到​目标。)。一共98个bounding box,框的粗细代表置信度大小,框越粗代表框住的是一个完整物体的概率越大。在这一步中,YOLO为每一个网格给出了两个预测框,这里有点像faster rcnn的anchor,但不完全相同。YOLO给出的预测框,是基于网格中心点的,大小自定义。每一个网格预测B个bounding boxes,每个bounding boxes有四个坐标和一个置信度(confidence),所以最终的预测结果是S×S×(B∗5+C)个向量。

再看第二个class probablity map。用不同颜色表示每个grid cell所预测的物体最可能属于分类(这块就是普通的图像分类,用于确定网格中检测到的目标的分类。这个长度决定了YOLO V1最多只能识别20种分类目标。),如蓝色的grid cell生成的最可能bounding box最可能框住的是狗、黄色的grid cell最可能预测自行车……。这一路的工作其实是和上一步是同时进行的,负责的是网格(gird cell)类别的分数,预测的结果一样是放在最后的7×7×30的张量中。

每个网格能预测几个目标?虽然使用了两个先验框去找目标,但是每个网格只选用一个框中的预测结果来定位物体:位置+尺寸,依据就是每个框的置信度的大小,选择一个置信度大的框的预测结果。因此,在YOLO V1中,20分类是针对每个网格的,而不是每个先验框的,即每个先验框只需要检测是否有对象或物体。网格进一步的负责对检测到的目标的各种分类的可能性就行预测,最后选择最大可能性的分类输出。因此, YOLO V1中,对一张图而言,最多能够检测 7 * 7 = 49个目标,目标的分类数最大为20种。

③网络输出:

YOLOv1把30个输出值,结构化成5+5+20。每个预测框有5个参数:x,y,w,h,confidence; Pascal VOC里面还有20个类别;这样的话30=(2×5)+20,也就是说这一个30维的向量就是一个gird cell的信息,那总共是7 × 7个gird cell,一共就是7×7×(2×5+20)=7×7×30的张量(tensor)=1470个outputs。

2、检测原理

从整体上来看,YOLOv1网络接收一张输入图像大小为的RGB图像,经由backbone网络处理后输出一个空间大小被降采样了64倍(即网络最终的stride为64)的特征图,这一特征图在经过全连接层处理和一些维度转换的操作后,得到一个维度为7×7×30的张量。

首先,一张大小为的RGB图像输入进网络,经过一系列的卷积和池化操作后,得到一个经过64倍降采样的的特征图,注意,这当中的卷积操作恰好就体现了one-stage框架的核心检测思想:逐网格找东西。

最后将输出的一维向量经由resize操作转换成7×7×30的三维张量,以便于后面的操作。整个YOLOv1的流程如下图所示。

因此,YOLOv1就相当于是将输入图像划分成的网格,然后在这个网格上去做预测。理想情况下,包含了物体中心点的网格会有很高的置信度输出,而不包含中心点的网格的置信度输出应该十分接近0。

训练过程:

首先将图像分成 S × S 网格(gird cell)、然后将图像送入网络,生成S×S× (B∗5+C)个结果,根据结果求Loss并反向传播梯度下降。

预测过程:

首先将图像分成 S × S网格(gird cell)、然后将图像送入训练好的网络,生成S×S× (B∗5+C)个结果,用NMS选出合适的预选框。

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

每个边界框由5个预测组成:x、y、w、h和confidence。(x、y)坐标表示相对于网格单元格边界的方框的中心。并将其宽度和高度相对于整个图像进行了预测。

在测试时,也就是我们最终预测时,我们对于每个目标的最终概率是将conditional class probabilities 乘上confidence的预测值,对于每个grid cell而言,它有C个类别,那我们就会预测C个类别分数,那么这里的类别分数就是对应的conditional class probabilities,也就Pr(Classi|Object) ,即类别i在它为目标的前提下的概率。

3、制作训练正样本方法

数据集标注:

假设一个20类的数据集,1张图片上有1个物体,也就是1个标注框,其标注文件(.txt)格式应该为:

然后根据标注文件生成编码向量(假设S=7,B=2,C=20):

  1. 首先是置信度和位置坐标;其中,置信度在数据集当中,每个标注框都置为1,也就是100%可能性的标注框置信度。
  2. 最后生成一个[5,1]向量:[1,x,y,w,h];
  3. 然后再对类别需要进行one-hot编码,得到[20,1]向量;
  4. 整合后生成[25,1],也就是如下图:

其中绿色是置信度1,黄色是xywh坐标,蓝色是类别one-hot编码信息

正样本定义:

由于YOLOv1是预测图像中的物体的中心点,因此,包含物体中心点的网格,我们认为这里是有物体的。YOLOv1定义了一个objectness概念,即表示此处是否有物体,有物体则有,反之无。有物体的网格便是一个正样本(posotive sample),否则的话,是负样本(negative sample)。我们可以用下面的一张图来表示这一正样本定义(黄颜色代表这个网格有物体)。

图中的大的中心点(图中的红点)落在了这个网格内。因此,预测的边界框中的置信度的含义就是该网格是否包含了物体的中心点。置信度越接近于1,表明有物体的概率越大,反之越小。

制作正样本过程:

对于一个给定的真实框,其左上角点坐标为(x,y),右下角点坐标为(x+w,y+h),我们按照以下几个步骤来为制作正样本。

1,计算出真实框的中心点坐标,然后计算得到网格坐标,从而确定正样本的位置;

2,计算出边界框的学习标签;

3,使用one-hot格式制作类别的学习标签。而置信度的学习标签需要在训练过程中确定,方法如下;

3.1,计算正样本处的每一个预测框与真实框的loU;

3.2,保留loU最大的预测框,计算边界框的位置参数损失和类别损失,并反向传播,其余边界框忽略;

3.3,同时,将这个最大的IoU值作为置信度的标签;

3.4,对于不包含物体中心点的负样本处的边界框,置信度学习标签统统设为0,且只计算置信度损失,不参与边界框的位置参数损失计算和类别损失计算。

4、损失函数

在损失函数这里作者每一项都用的平方和误差,将目标检测问题当作回归问题。

坐标损失:(负责检测物体的bbox中心点定位误差)

其中

表示第i个网格中的第j个bbox是否负责预测目标图像,若负责为1,否则为0。

宽高坐标损失:(负责检测物体的bbox宽高定位误差)

损失计算中加上平方根的目的是拉大不同预测位置的得到的损失预测值差距,使小框对误差更敏感一点。这样做是为了更加重视较大的边界框的位置误差,可以使算法更加关注边界框的位置准确性,从而更好地优化它们的预测结果。

置信度损失:(负责检测物体的bbox的confidence误差)

其中

表示第i个网格中的第j个bbox是否不负责预测目标图像,若不负责为1,否则为0。

通过对置信度进行损失计算,可以鼓励模型在包含目标的网格中预测高置信度。

Ci的计算是由IoU构成,IoU计算方式:

网格预测类别损失:(负责检测物体的grid cell分类误差)

其中

表示第i个网格是否包含目标图像,若包含为1,否则为0。

5、前向推理

计算所有检测框的得分:

训练好以后,模型会生成大量的标定框,每一个“网格”都一定会有1个[30,1]向量,故都会有2个标定框(一共就有7x7x2个,S=7,B=2),只不过经过损失函数迭代,网格覆盖到物体的标定框的置信度高,反之小,但是无论概率多小,都不会接近0。假如全部可视化,会产生如下面的第2张图的结果。

得分阈值筛选:

获得所有边界框的得分后,我们设定一个阈值去滤除那些得分低的边界框。很显然,这些得分低的都是背景框,不包含物体的中心点。这个筛选的阈值该设置多少是有些讲究的,跑demo时,常用的是0.1,而计算mAP时,常用的反而是0.01、0.001。当然,到底该设置多么大的阈值往往依赖于具体的任务需求和研究者的经验,需要我们在实际任务中去不断调试的。

计算边界框的中心点坐标和宽高:

筛选完后,利用公式计算出余下的边界框的中心点和宽高。

使用NMS进行第二次筛选:

由于可能会出现同一个物体被多个得分较高的边界框所框选,因此,有必要对这种冗余检测进行抑制,剔除掉不必要的重复检测,常用的手段之一便是非极大值抑制(Non-maximal suppression,NMS)。其思想很简单:对于某一类目标的所有边界框,首先挑选出得分最高的边界框,依次计算其他的边界框与这个得分最高的边界框的IoU,超过设定的IoU阈值的边界框则被认为是重复检测,将其剔除掉。对所有类别的预测框都进行这两步操作,直到无框可剔除为上。非极大值抑制(NMS)包含3个流程:

1.对输入的前向推理结果进行预处理,也就是转换前向推理得到的bbox值,将归一化的bbox恢复到原来的坐标值。

2.根据得到的前向推理结果的置信度,根据设定好的置信度阈值(比如0.25)进行筛选,低于该阈值的过滤。

3.然后进行iou,计算剩下的标注框之间的iou,按照置信度排序,选择置信度最高的边界框作为基准框,并将其加入最终的检测结果中。然后,从剩余的边界框中,移除与基准框的重叠度高于设定阈值(比如0.5)的边界框。最后返回最终结果,也就是第3张图。

步骤1,2为预处理,步骤3是NMS核心,原因是在物体检测任务中,由于使用滑动窗口或锚框等方式生成候选框,可能会导致多个候选框重叠并框住同一个物体。为了避免在最终的检测结果中重复统计同一个物体,需要进行非极大值抑制。

6、模型缺限

  1. 每个gird cell只能预测 一个物体,那么7×7=49个gird cell最多只能预测49个物体,这也是YOLO v1对小密集物体识别差的原因。YOLO v1对一些群体性的小目标检测效果很差,比如天空中成群结队的鸟儿,如果这 群鸟每个目标都很小,那么YOLO就很难对他们进行预测,因为在我们YOLO v1的思想中,每个cell只预测两个bounding box,而且两个bounding box预测的还是属于同一个类别的。因为我们对每个grid cell都只预测一组classes参数,所以针对每个grid cell预测的是同一个类别的目标,所以说当一些小目标聚集在一起时YOLO v1的检测效果就非常的差。

  1. 当我们的目标出现新的尺寸或者配置的时候,YOLO v1的预测效果也是非常的差。

  1. 主要的误差都是由于定位不准。这个问题主要是由于作者选择直接预测目标的坐标信息,而不是像Faster RCNN或SSD那样预测Anchor的回归参数,所以后续YOLO v2开始,作者就采用了Faster RCNN或SSD那样基于Anchor的回归      预测。

参考文章:

yolov1原文地址以及论文翻译_yolo论文原文-CSDN博客

Yolov1-pytorch版 论文、原理及代码实现_yolov1 pytorch-CSDN博客

1.6 YOLO入门教程(新):YOLOv1(6)-制作正样本和损失函数 - 知乎

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

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

相关文章

GNU、Unix、Linux、Makefile、GCC、GDB、GPL、CentOS 7、Ubuntu之间的关系

全文总结 早期,Unix系统作为一类强大的操作系统,在计算领域奠定了基础。然而,出于对软件自由的追求,Richard Stallman在1983年发起了GNU项目,旨在创建一个完全自由的、与Unix兼容的操作系统。GNU项目不仅倡议软件自由…

Web自动化元素定位之xpath定位【超详细】

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Web自动化常见的定位方式 为什么要学习定位 1.让程序操作指定元素,就必须先找到此元…

金升阳电源被制裁,广州顶源电源模块可以完美替换

广州顶源电子科技股份有限公司,座落于国家高新技术开发区---广州科学城,是一家集研发、生产、销售及服务于一体的DC-DC,AC-DC电源的生产厂家。 公司通过了IATF16949汽车认证及ISO9001:2015质量管理体系认证。拥有专家级研发团队,产品研发经过…

农村经济与科技杂志社农村经济与科技编辑部2024年第8期目录

视点 数字经济驱动农业产业链升级路径研究——以河南省为例 王媛媛; 1-4 城乡融合视角下农村集体产权制度改革研究 齐建丽; 4-7 农业生态系统结构美建设内涵及实现路径 张鹏程; 8-13《农村经济与科技》投稿:cnqikantg126.com 农户宅基地退出政策加权…

2024 最新推广服务 API 推荐,助力业务腾飞

在数字化营销的浪潮中,API 服务正以其强大的功能和高效的特性,成为企业和开发者们实现精准推广、优化营销效果的得力助手。2024 年的今天,各种创新的 API 服务层出不穷,为广告投放、数据洞察等领域带来了前所未有的机遇。在接下来…

华为开发者调试工具使用介绍(MDC)

MDC的开发过程的三大工具:MMC、MDS、Mind Studio,这三个工具完成了开发过程中的配置文件编写、代码编写以及AI模型的开发三个任务。除了开发,MDC还准备了两个调试工具,用于使用过程中数据的查看等。这一些调试工具分别对映射MDC中…

简化部署流程——无线UWB如何实现自标定?

一.什么是UWB信标自标定? UWB(超宽带)自标定是指在UWB系统中,基站或节点能够自动识别和确定自己的位置,无需外部干预或手动输入其地理位置信息。这种技术主要利用系统内部的信号测量和算法来自动计算节点之间的距离以…

数据交换的桥梁:深入探索JSON序列化和反序列化

目录 JSON序列化 一、查看JSON文件,设置数据模板类 ​编辑 二、Newtonsoft.Json下载 三、代码理解 1.创建BatteryList的实例 2.初始化Batterys属性 3.添加Battery对象到Batterys列表中 4.完整的代码如下 四、运行结果展示 JSON反序列化 序列化是将对象或…

如何通过待办工具提升个人效率 减轻压力提升效率的待办app

在快节奏的现代社会中,工作任务繁重,人们的压力日益增大。为了减轻压力并提升工作效率,我们急需找到一种有效的方法来管理日常任务。幸运的是,随着科技的进步,各种新兴工具应运而生,为我们提供了便捷的解决…

企业内部运营常用的API服务有哪些?

企业内部运营常用的API服务是现代企业管理和协作的关键工具之一。这些API服务提供了丰富的功能和工具,帮助企业提高内部运营效率、优化业务流程和加强团队协作。首先,企业内部通信和协作API服务是不可或缺的。通过这些API服务,企业可以建立内…

LSH算法:高效相似性搜索的原理与Python实现II

局部敏感哈希(LSH)是一种高效的近似相似性搜索技术,广泛应用于需要处理大规模数据集的场景。在当今数据驱动的世界中,高效的相似性搜索算法对于维持业务运营至关重要,它们是许多顶尖公司技术堆栈的核心。 相似性搜索面…

基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 控制系统概述 4.2 ADRC基本框架 4.3 控制律设计 5.完整工程文件 1.课题概述 基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真,分别对YAW,PITCH,ROL…

WEB与低代码:B/S架构在开发中的应用与优势

在互联网迅猛发展的今天,WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化,开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构(Browser/Server Architecture)作为一种常见的WEB应用架构…

入门JavaWeb之 Response 下载文件

web 服务器接收到客户端的 http 请求 针对这个请求,分别创建一个代表请求的 HttpServletRequest 对象,代表响应的 HttpServletResponse 对象 获取客户端请求过来的参数:HttpServletRequest 给客户端响应一些信息:HttpServletRe…

vue2的待办事项案例

头部组件 <template><div class"todo-header"><input type"text" placeholder"请输入你的任务名称&#xff0c;按回车键确认" keyup.enter"add"/></div> </template><script>import {nanoid} fro…

【Java Web】过滤器

目录 一、过滤器概述 二、过滤器使用 2.1 注解方式配置过滤器 三、过滤器生命周期 四、过滤器链及其执行顺序 一、过滤器概述 过滤器应用在服务器上类似于防火墙&#xff0c;用户的请求和响应报文在转化为HttpServletRequest和HttpServletResponse对象后&#xff0c;都会先经过…

LongRAG:利用长上下文大语言模型提升检索生成效果

一、前言 前面我们已经介绍了多种检索增强生成 (RAG) 技术&#xff0c;基本上在保证数据质量的前提下&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术能够有效提高检索效率和质量&#xff0c;相对于大模型微调技术&#xff0c;其最大的短板还是在于有限的上下文窗口…

【科学计算与可视化】3. Matplotlib 绘图基础

安装 pip install matplotlib 官方文档 https://matplotlib.org/stable/api/pyplot_summary.html 主要介绍一些图片绘制的简要使用&#xff0c;更加详细和进阶需要可参考 以上官方文档。 1 绘制基础 方法名说明title()设置图表的名称xlabel()设置 x 轴名称ylabel()设置 y 轴…

基于DeepNLP AI Store真人点评和ShowCase分享社区-AI for Image Generator

来源 quora 社区: https://deepnlpaistore.quora.com/ github: https://rockingdingo.github.io/deepnlp/store/image_generator 内容 DeepNLP AI Store 网址&#xff1a;http://www.deepnlp.org/store/image-generator 网站针对图像生成类别 Image Generator下多个AI工具如 …

汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速

故障现象 一辆2016款吉利帝豪EV车&#xff0c;累计行驶里程约为28.4万km&#xff0c;车主反映车辆无法加速。 故障诊断 接车后路试&#xff0c;行驶约1 km&#xff0c;踩下加速踏板&#xff0c;无法加速&#xff0c;车速为20 km/h左右&#xff0c;同时组合仪表上的电机及控制…