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.mzph.cn/news/711993.shtml

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

相关文章

【矩阵】【方向】【素数】3044 出现频率最高的素数

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 素数 矩阵 方向 LeetCode 3044 出现频率最高的素数 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字: 最多有 8 条路径可以选择:东&am…

安装 Ubuntu 22.04.3 和 docker

文章目录 一、安装 Ubuntu 22.04.31. 简介2. 下载地址3. 系统安装4. 系统配置 二、安装 Docker1. 安装 docker2. 安装 docker compose3. 配置 docker 一、安装 Ubuntu 22.04.3 1. 简介 Ubuntu 22.04.3 是Linux操作系统的一个版本。LTS 版本支持周期到2032年。 系统要求双核 C…

C++的模板template

一、什么是模板 C中的模板分为类模板和函数模板,并不是一个实际的类或函数,这指的是编译器不会自动为其生成具体的可执行代码。只有在具体执行时,编译器才帮助其实例化。 二、为什么引入模板 拿我们最常见的交换函数来举例子,如果…

代码随想录 二叉树第二周

目录 101.对称二叉树 100.相同的树 572.另一棵树的子树 104.二叉树的最大深度 559.N叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数 110.平衡二叉树 257.二叉树的所有路径 101.对称二叉树 101. 对称二叉树 已解答 简单 相关标签 相关企业 给你一…

《求生之路2》服务器如何选择合适的内存和CPU核心数,以避免丢包和延迟高?

根据求生之路2服务器的实际案例分析选择合适的内存和CPU核心数以避免丢包和延迟高的问题,首先需要考虑游戏的类型和对服务器配置的具体要求。《求生之路2》作为一款多人在线射击游戏,其服务器和网络优化对于玩家体验至关重要。 首先,考虑到游…

Java应用程序注册成Linux系统服务后,关闭Java应用程序打印系统日志

Java应用程序有自己的日志框架,有指定位置的日志文件,不需要在系统日志里记录,占用磁盘空间。 1.Linux系统文件目录 /etc/systemd/system/ 找到要修改的Java应用程序服务配置 比如bis-wz-80.service 2.设置不打印日志 StandardOutputnull S…

centos7 搭建 harbor 私有仓库

一、下载安装 1.1、harbor 可以直接从 github 上下载:Releases goharbor/harbor GitHub 这里选择 v2.10.0 的版本 wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz 1.2、解压 tar zxvf harbor-offlin…

L2 网络 Mint Blockchain 正式对外发布测试网

Mint Blockchain 是由 NFTScan Labs 发起的聚焦在 NFT 生态的 L2 网络,致力于促进 NFT 资产协议标准的创新和 NFT 在现实商业应用场景中的大规模采用。 Mint Blockchain 于 2024 年 2 月 28 号正式对外发布测试网,开始全面进入生态开发者测试开发阶段。 …

2403C++,C++11玩转无栈协程

原文 C11里也能玩无栈协程了? 答案是:可以! 事实上异网在很早时,C11里就可用无栈协程写异步代码了,只不过用起来不太方便,来看看C11里怎么用异网无栈协程写一个回音服务器的吧. #包含 <异网.h> #包含 <内存> #包含 <向量> #包含 <异网/产生.h> 用 …

c++异常机制(5)-- 继承与异常

我们在c异常机制(3)中自定义类型&#xff0c;我们将相应的异常封装成了类&#xff0c;在类中实现一些方法&#xff0c;对异常进行处理。其中每一个类都实现了print()方法。 我们使用throw抛出相应异常的虚拟对象&#xff0c;在catch参数中进行匹配&#xff0c;但是如果有很多异…

Springboot项目集成短信验证码(超简单)

操作流程 注册验证码平台创建验证码模版开始集成&#xff08;无需引入第三方库&#xff09; 注册并登陆中昱维信验证码平台 获取AppID和AppKey。 创建验证码模版 创建验证码模版&#xff0c;获取验证码模版id 开始集成 创建controller import org.springframework.web.bi…

MATLAB环境下基于随机游走拉普拉斯算子的快速谱聚类方法

古人有云&#xff0c;物以类聚&#xff0c;在面临信息爆炸问题的今天&#xff0c;对信息类别划分的价值日益显现&#xff0c;并逐步成为学者们的研究热点。分类和聚类是数据挖掘的重要工具&#xff0c;是实现事物类别划分的左右手&#xff0c;聚类又是分类一种特殊的方式。所谓…

CodeWhisperer安装教导--一步到位!以及本人使用Whisperer的初体验。

CodeWhisperer是亚马逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。类似 Cursor 和Github AWS CodeWhisperer 亚马逊科技的CodeWhisperer是Amazon于2021年12月推出的一款代码补全工具&#xff0c;与GitHub Copilot类似。主要的功能有:代码补全注释…

猫毛过敏养猫人士的必备养猫好物-宠物空气净化器品牌分享

许多猫奴在与猫相处一段时间后突然对猫毛过敏&#xff0c;这真是令人难受。一些人认为对猫咪过敏是因为它们在空气中飘浮的毛发引起的&#xff0c;但实际上大部分人之所以过敏是因为对猫身上一种微小的蛋白质过敏。这种导致过敏的蛋白质附着在猫咪的一些皮屑上。我们都知道猫咪…

前端架构: 脚手架通用框架封装之入口文件开发(教程一)

脚手架入口文件开发 创建脚手架项目: abc-cli $ mkdir abc-cli && cd abc-cli 全局安装 lerna, $ npm i -g lerna 基于 lerna 完成项目初始化 $ lerna init 基于 lerna 创建脚手架 cli $ lerna create cli一路回车 好现在生成了一个 cli 的模板&#xff0c;目前需要…

Qt 中Json的构造和解析简单例子

概述: Qt中使用Json比较方便&#xff0c;不像纯C需要导入CJson RapidJson JsonCpp等第三方的库&#xff0c;主要使用到QJsonDocument、QJsonObject对象即可 1、如何构造一个json字符串 假如我们需要构造 {"cmd":"1001","data":{"content&q…

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动&#xff1a; python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…

高性能的key-value数据库Redis 介绍

Redis 是一个高性能的key-value数据库。 Redis是一个开源的键值存储系统&#xff0c;通常用于缓存和消息传递。它支持多种类型的数据结构&#xff0c;如字符串、列表、集合、散列表和有序集合等。Redis的特点是提供了高性能、灵活性和可伸缩性。 Redis的主要特点包括&#xff…

Pytorch学习 day02(加载数据)

加载数据 * Dataset提供一种方式&#xff1a;来获取数据及其label&#xff0c;给数据进行编号 * Dataloader为神经网络提供不同的数据形式 Dataset的组织形式有很多种&#xff0c;例如&#xff1a; 将label放在文件夹名上&#xff0c;如下&#xff1a; #Dateset # --train #…

Python算法题集_组合总和

Python算法题集_组合总和 题39&#xff1a;组合总和1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【值传递回溯】2) 改进版一【引用传递堆栈回溯】3) 改进版二【过程值列表缓存遍历后检索】 4. 最优算法5. 相关资源 本文为Python算法题集之一的…