YOLO算法

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.rhkb.cn/news/267458.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年最新腾讯云学生专属的服务器优惠活动申请流程

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

HarmonyOS Full SDK的安装

OpenHarmony的应用开发工具HUAWEI DevEco Studio现在随着OpenHarmony版本发布而发布,只能在版本发布说明中下载,例如最新版本的OpenHarmony 4.0 Release。对应的需要下载DevEco Studio 4.0 Release,如下图。 图片 下载Full SDK主要有两种方式,一种是通过DevEco Studio下载…

babylonjs入门-自由相机 FreeCamera

基于babylonjs封装的一些功能和插件 ,希望有更多的小伙伴一起玩babylonjs; 欢迎加群(点击群号传送):464146715 官方文档 中文文档 案例传送门 懒得打字 粘贴复制 一气呵成 ​

【黑马程序员】4、TypeScript高级类型_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址:【黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 4、TypeScript高级类型 4.1 class类 4…

双周回顾#005 - 零

一件悲伤的事实,这两周,成长值为零~~ 从大数据部门临时抽调到互联网部门,支援重构的“配置下单”项目。 一个变种的低代码架构设计,唯一比较有意思的是它的业务组件的设计与校验设计,算是学习…

百度SEO快排原理是什么?如何快速排名方法?

前言:我之前说过我不打算写这个快速排序。 首先,我从来没有在自己的网站上操作过所谓的快速排序。 其次,我不能像网上很多人写的那样透露百度快速排序的秘密(说实话,你可以透露秘密)。 方法是有了&#xff…

React富文本编辑器开发(三)

现在我们的编辑器显示的内容很单一,这自然不是我们的目标,让呈现的内容多元化是我们的追求。这就需要让编辑器能够接收多元素的定义。从初始数据的定义我们可以推断数据的格式远不止一种,那么其它类型的数据如何定义及呈现的呢,我…

AutoEncoder和 Denoising AutoEncoder学习笔记

参考: 【1】 https://lilianweng.github.io/posts/2018-08-12-vae/ 写在前面: 只是直觉上的认识,并没有数学推导。后面会写一篇(抄)大一统文章(概率角度理解为什么AE要选择MSE Loss) TOC 1 Au…

一次奇怪的事故:机器网络连接打满,导致服务不可用

业务背景 发生事故的业务系统是一个toB业务,业务是服务很多中小企业进行某项公共信息指标查询。系统特点:业务处理相对简单,但是流量大,且对请求响应要求较高: 业务请求峰值qps达50w,平时流量达20w左右。 请求响应时…

前端学习第七天-css常用样式设置

达标要求 掌握元素的显示与隐藏 熟练应用溢出的文字隐藏 熟练掌握版心和布局流程 1. 元素的显示与隐藏 在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是 display visibility 和 overflow。 他们的主要目的是让一个元素在页面中消失…

Springboot接口参数校验

在设计接口时我们通常需要对接口中的非法参数做校验,以降低在程序运行时因为一些非法参数而导致程序发生异常的风险,例如登录的时候需要校验用户名密码是否为空,创建用户的时候需要校验邮件、手机号码格式是否准确。如果在代码中对接口参数一…

【Git教程】(三)提交详解 —— add、commit、status、stach命令的说明,提交散列值与历史,多次提交及忽略 ~

Git教程 提交详解 1️⃣ 访问权限与时间戳2️⃣ add命令与 commit 命令3️⃣ 提交散列值4️⃣ 提交历史5️⃣ 一种特别的提交查看方法6️⃣ 同一项目的多部不同历史6.1 部分输出:-n6.2 格式化输出:--format、--oneline6.3 统计修改信息:--st…

Linux内存地址空间

目录 一、虚拟地址空间 1.虚拟地址空间的定义 2.虚拟地址空间的布局 二、内存壁垒 1.内存壁垒的定义​编辑 2.段错误 三、内存映射的建立与解除 (1)mmap (2)munmap (3)堆内存的分配和释放 1.sbrk …

浅析能耗监测系统在大型数据中心的应用

彭姝麟 Acrelpsl 1总体设计 大型数据中心能耗监测系统包含硬件和软件两大部分,其硬件组成主要包括监控服务器、主机设备、网络设备、环境参数传感器、通风模块等,总体采集逻辑采用三级监控体系。一级为主机设备,作为系统的应用层&#xff0c…

【JSON2WEB】06 JSON2WEB前端框架搭建

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 前端技术路线太多了,知识点更多&…

【Maven】Maven 基础教程(一):基础介绍、开发环境配置

《Maven 基础教程》系列,包含以下 3 篇文章: Maven 基础教程(一):基础介绍、开发环境配置Maven 基础教程(二):Maven 的使用Maven 基础教程(三):b…

探索数据宇宙:深入解析大数据分析与管理技术

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

Linux技巧|centos7|重新认识和学习egrep和grep命令

前言: 相信提高文本检索工具,大家脑海里肯定有很多工具会自动跳出来,比如,grep,egrep,sed,cat,more,less,cut,awk,vim,vi…

排序算法--堆排序

堆排序的时间复杂度是O(N*logN),优于选择排序O(N^2) 一、堆 1.堆的概念:堆一般指的是二叉堆,顾名思义,二叉堆是完全二叉树或者近似完全二 2.堆的性质:①完全二叉树 ②每…

【QT+QGIS跨平台编译】之六十二:【QGIS_CORE跨平台编译】—【错误处理:未定义类型QgsPolymorphicRelation】

文章目录 一、未定义类型QgsPolymorphicRelation二、解决办法一、未定义类型QgsPolymorphicRelation 报错信息: 错误原因为,使用了未定义类型 QgsPolymorphicRelation 二、解决办法 QgsRelation.h文件中 ①注释第36行: //class QgsPolymorphicRelation;②注释第414行: …