YOLO算法

news2024/9/28 21:26:21

YOLO介绍 

YOLO,全称为You Only Look Once: Unified, Real-Time Object Detection,是一种实时目标检测算法。目标检测是计算机视觉领域的一个重要任务,它不仅需要识别图像中的物体类别,还需要确定它们的位置。与分类任务只关注对象是什么不同,目标检测需要同时处理离散的类别数据和连续的位置数据。YOLO算法基于深度学习的回归方法,它将目标检测问题转化为一个回归问题,使用单个卷积神经网络(CNN)直接从输入图像预测边界框(bounding box)和类别概率。这种方法避免了传统目标检测算法中复杂的多阶段处理流程,如区域提议、特征提取等。

  • YOLO的网络结构受到了GoogLeNet的启发,包含24个卷积层和2个全连接层。在YOLO v1中,作者使用了1×1的降维层紧跟着3×3的卷积层来代替GoogLeNet的inception模块。
  • YOLO将输入图像分割成S×S的网格,每个网格单元负责检测中心点落在该单元内的目标。这种策略简化了目标的定位过程,并允许模型快速地对多个目标进行定位和分类。
  • YOLO的设计强调实时性能,通过一次前向传播就可以完成检测任务,这使得它非常适合用于视频流分析或其他需要快速响应的应用场合。

Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,核心思想就是利用整张图作为网络的输入,直接在输出层回归 bounding box(边界框) 的位置及其所属的类别:

首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN算法,其是一个统一的框架,其速度更快。

Yolo算法思想 :

Yolo模型采用预定义预测区域的方法来完成目标检测,具体而言是将原始图像划分为 7x7=49 个网格(grid),每个网格允许预测出2个边框(bounding box,包含某个对象的矩形框),总共 49x2=98 个bounding box。我们将其理解为98个预测区,很粗略的覆盖了图片的整个区域,就在这98个预测区中进行目标检测。

 Yolo的网络结构 

YOLO的结构非常简单,就是单纯的卷积、池化最后加了两层全连接,从网络结构上看,与前面介绍的CNN分类网络没有本质的区别,最大的差异是输出层用线性函数做激活函数,因为需要预测bounding box的位置(数值型),而不仅仅是对象的概率。YOLO的整个结构就是输入图片经过神经网络的变换得到一个输出的张量 

  • 网络的输入是原始图像,唯一的要求是缩放到448x448的大小。主要是因为Yolo的网络中,卷积层最后接了两个全连接层,全连接层是要求固定大小的向量作为输入,所以Yolo的输入图像的大小固定为448x448。
  • 网络的输出就是一个7x7x30 的张量。

根据YOLO的设计,输入图像被划分为 7x7 的网格(grid),输出张量中的 7x7 就对应着输入图像的 7x7 网格。

Yolo模型的训练 

 在进行模型训练时,需要构造训练样本和设计损失函数,才能利用梯度下降对网络进行训练。

将一幅图片输入到yolo模型中,对应的输出是一个7x7x30张量,构建标签label时对于原图像中的每一个网格grid都需要构建一个30维的向量。

  • 20个对象分类的概率

对于输入图像中的每个对象,先找到其中心点。上图中自行车,其中心点在黄色圆点位置,中心点落在黄色网格内,所以这个黄色网格对应的30维向量中,自行车的概率是1,其它对象的概率是0。所有其它48个网格的30维向量中,该自行车的概率都是0。这就是"中心点所在的网格对预测该对象负责"。

  • 2个bounding box的位置

训练样本的bbox位置应该填写对象真实的位置bbox,填哪一个需要根据网络输出的bbox与对象实际bbox的IOU来选择。

Yolo先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练。

Yolo的最后一层采用线性激活函数,其它层都是Leaky ReLU。训练中采用了drop out和数据增强来防止过拟合。

 yoloV4算法

YOLOv4是YOLO系列算法的第四代版本,它在YOLOv3的基础上进行了一系列改进和优化,以实现更高的检测精度和更快的处理速度,为了提高模型的泛化能力和防止过拟合,YOLOv4还引入了Dropblock正则化方法。这种方法在训练过程中逐渐增加遮挡的比例,迫使网络学习更加鲁棒的特征表示。

YOLOv4的网络结构由四个关键部分组成:Input、Backbone、Neck和Head

  1. Input部分:这是网络的输入端,负责接收待处理的图像数据。
  2. Backbone部分 (CSPDarknet53):这部分是整个网络结构的主干,主要负责对输入图像进行特征提取。CSPDarknet53是一种残差网络,它通过CSP(Cross Stage Partial)模块优化了梯度流和计算量,相较于DarkNet53,CSPDarknet53在保持准确率的同时减少了计算量。每个CSP模块都会使输出的特征图大小减半而通道数增倍,有利于提取更深层的特征。
  3. Neck部分 (SPP和PANet):Neck部分紧随Backbone,用于进一步加强特征提取。SPP(空间金字塔池化)可以融合不同尺寸的特征,增大模型的感受野,而PANet(路径聚合网络)则是FPN(特征金字塔网络)的加强版,它融合了自底向上和自顶向下的特征信息,反复提取特征,以增强模型的表征能力。
  4. Head部分 (YOLOv3):最后是Head部分,也就是预测头部,负责进行最终的边界框预测和类别概率输出。YOLOv4采用了YOLOv3作为其Head,利用前面提取的特征来执行实际的目标检测任务。

yoloV4网络的输入依然要求是32的倍数,但大小不是固定的,在yoloV4中默认是608×608,在实际项目中也可以根据需要修改,比如320×320,一般是32的倍数。 输入图像的大小和最后的三个特征图的大小也是对应的,比如416×416的输入,最后的三个特征图大小是13×13,26×26,52×52, 如果是608×608,最后的三个特征图大小则是19×19,38×38,76×76。

yoloV4在输入端除了采用常规的反转、裁切、旋转等方法外,主要采用了CutMix和马赛克数据增强,马赛克增强方式将4张训练图像按一定比例组合成1张。Mosaic增强方式使得模型能够学习如何识别尺寸小的物体,还能够帮助模型在图像的不同部分定位不同类型的目标。

模型训练 

yoloV4中的模型训练与预测和YoloV3几乎是一样的,包括正负样本的设置方式,损失函数的构成及训练过程。唯一不同是在计算回归值得损失时,V4中采用了IOU的损失。IOU损失非常简单,直接使用检测框与真实框的交并比并取对数作为回归的损失函数 

GIOU损失是为了缓解IOU损失的问题提出来的,这种方式存在的问题是当检测框在真实框内部或正式框在检测框内部时,无法衡量差集,损失函数退化为1-IOU。

  1. 系统环境配置:确保您的计算机系统满足训练YOLOv4的要求。常见的配置包括Windows或Linux操作系统,以及安装有CUDA和cuDNN的NVIDIA显卡。
  2. 获取YOLOv4代码:从GitHub上克隆YOLOv4的官方代码仓库,该仓库提供了训练YOLOv4所需的所有脚本和配置文件。
  3. 数据集准备:准备用于训练的目标检测数据集。如果是视频数据,需要先将视频帧提取为图片格式。此外,还需要对数据集进行标注,生成包含物体类别和位置信息的注释文件。
  4. 修改配置文件:根据您的数据集和训练需求,修改YOLOv4的配置文件。这些配置文件中定义了模型参数、训练参数以及数据加载方式等重要信息。
  5. 模型训练:使用准备好的数据集和配置文件开始训练YOLOv4模型。训练过程中,模型会学习识别和定位图像中的物体。
  6. 模型评估:在训练完成后,使用验证集对模型的性能进行评估,检查模型的准确率和召回率等指标。
  7. 模型部署:将训练好的模型部署到实际应用中,如监控系统、自动驾驶车辆或其他需要实时目标检测的场合。
  8. 优化调整:根据模型在实际应用场景中的表现,进一步调整模型参数或数据集,以提高模型的准确性和鲁棒性。

 我们还需要参考YOLOv4的官方文档、相关教程以及社区提供的经验分享。

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

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

相关文章

【Python】进阶学习:pandas--query()用法详解

📚【Python】进阶学习:pandas–query()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希…

Docker知识点总结

二、Docker基本命令: Docker支持CentOs 6 及以后的版本; CentOs7系统可以直接通过yum进行安装,安装前可以 1、查看一下系统是否已经安装了Docker: yum list installed | grep docker 2、安装docker: yum install docker -y -y 表示自动确认…

RH850P1X芯片学习笔记-Generic Timer Module -ATOM

文章目录 ARU-connected Timer Output Module (ATOM)OverviewGLOBAL CHANNEL CONTROL BLOCK ATOM Channel architectureATOM Channel modesSOMP-Signal Output Mode PWMSOMP - ARUSOMC-Signal Output Mode CompareSOMC - ARUSOMC – COMPARE COMMANDSOMC – OUTPUT ACTIONATOM …

【如何像网吧一样弄个游戏菜单在家里】

GGmenu 个人家庭版游戏、应用管理 桌面图标管理器

【笔试强训错题选择题】Day5.习题(错题)解析

文章目录 前言 错题题目 错题解析 总结 前言 错题题目 1. ​ ​ 2. 3. ​ 4. ​ 5. ​ 错题解析 1. 移位运算符的使用 2. 3. 4. 5. 总结

应用机器学习回归离群值处理

异常值可能会破坏机器学习模型的运转,导致结果出现偏差并影响准确性。在这篇博文中,我们将深入研究应用机器学习领域,并探索使用 Python 识别和处理异常值的有效技 了解异常值 离群值是与数据集其余部分显着偏差的数据点。它们可能是错误、异…

土壤类型数据

国家地球系统科学数据中心

3、Linux-命令提示符与常用命令(一)

目录 一、命令提示符 二、命令格式 三、常用命令(一) 0、clear:清空终端窗口的内容。 1、ls:列出当前目录或指定目录下的文件和子目录 2、pwd:显示当前所在工作目录的完整路径。 3、cd:切换目录。 …

【MySQL】深入解析 Buffer Pool 缓冲池

文章目录 1、前置知识1.1、Buffer Pool介绍1.2、后台线程1.2.1、Master Thread1.2.2、IO Thread1.2.3、Purge Thread1.2.4、Page Cleaner Thread 1.3、重做日志缓冲池 2、Buffer Pool 组成2.1、数据页2.2、索引页2.3、undo页2.4、插入缓冲2.5、锁空间2.6、数据字典2.6、自适应哈…

金三银四求职攻略:如何在面试中脱颖而出

随着春天的脚步渐近,对于众多程序员来说,一年中最繁忙、最重要的时期也随之而来。金三银四,即三月和四月,被广大程序员视为求职的黄金时段。在这段时间里,各大公司纷纷开放招聘,求职者们则通过一场又一场的…

搜索算法(算法竞赛、蓝桥杯)--双向DFS+二分查找

1、B站视频链接&#xff1a;B26 双向DFS 送礼物_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; int n,m; int g[46];//存储所有物品的质量 int w[1<<23];//存储所有能凑出来的重量 int ans,cnt;//w的个数是cnt//搜索第u个数&#xff0c;和为s; …

Java数据类型(八种基本数据类型 + 四种引用类型)、数据类型转换

1.总览 Java的数据类型只有两大类&#xff1a;8大基本数据类型与引用数据类型。其中基本数据类型又被称为值类型 基本数据类型&#xff1a;6种数字类型&#xff08;byte/short/int/long/float/double&#xff09;、1种字符型&#xff08;char&#xff09;、1种布尔型&#xff…

Java中常见延时队列的实现方案总结

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

爬虫的一些小技巧总结

一、在爬虫中&#xff0c;爬取的数据类型如下 1.document:返回的是一个HTML文档 2.png:无损的图片&#xff0c;jpg:压缩后的图片,wbep:有损压缩&#xff0c;比png差&#xff0c;比jpg好 3.avgxml图像编码字符串 4.script:脚本文件&#xff0c;依据一定格式编写的可执行的文…

高性能MySQL 第4版

第一章MySQL架构 MySQL提供了多种锁的颗粒度&#xff0c;每种MySQL存储引擎都可以实现自己的锁策略和锁力度。 行级锁是在存储引擎而不是在服务器中实现的。 隔离界别 READ UNCOMMITTED - 脏读 在事务中可以可以查看到其他事务中还没有提交的修改。实际中很少用。 READ C…

(C语言)qsort函数模拟实现

前言 我们需先了解qsort函数 qsort函数详解&#xff1a;http://t.csdnimg.cn/rTNv9 qsort函数可以排序多种数据类型&#xff0c;很是神奇&#xff0c;这是为什么&#xff0c;我们在里模拟实现这样的功能 目录 1. qsort函数模拟实现 2. 我们使用bubble_sort函数排序整形数…

微星H510M PLUS V3主板安装纯Ubuntu系统安装或启动界面黑屏问题

Ubuntu系统安装或启动界面黑屏问题 1 前言2 原因分析3 解决方法3.1 安装界面黑屏3.2 启动界面黑屏3.3 安装显卡驱动 1 前言 我自己组装了一台台式机&#xff0c;配置如下&#xff1a; 主板&#xff1a;微星H510M PLUS V3显卡&#xff1a;英伟达RTX 2060内存&#xff1a;金百达…

文件的顺序读写函数举例介绍

目录 例1&#xff1a;&#xff08;使用字符输出函数fputc&#xff09;例2&#xff1a;&#xff08;使用字符输入函数fgetc&#xff09;例3&#xff1a;&#xff08;使用文本行输出函数fputs &#xff09;例4&#xff1a;&#xff08;使用文本行输入函数fgets &#xff09;例5&a…

微信小程序屏蔽控制台黄色提示信息

我们很多时候 一个小程序 啥都没有 终端就一直报一些黄色的警告 可以打开项目的 project.config.json 找一下setting 下面有没有 checkSiteMap 字段 如果没有加一个 如果有 直接将值改为 false 这样 再运行 就不会有这个黄色的提示信息了

牛客网C++专项题目整理(1)

1. 若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句错误的是 1.p s; 2.p k; 3.p s[0]; 4.k s; 答案&#xff1a;124 char s[3][10] s 是数组指针&#xff0c;类型为char (*)[3]&#xff0c;所指向的每个数组长度为10; char (*k)[3] k是一个数组指针&a…