深入探究 YOLOv5:从优势到模型导出全方位解析

一、引言

在计算机视觉领域,目标检测是一项至关重要的任务,它在自动驾驶、安防监控、工业检测等众多领域都有着广泛的应用。而 YOLO(You Only Look Once)系列作为目标检测算法中的佼佼者,一直备受关注。其中,YOLOv5 更是凭借其出色的性能和易用性,成为了许多开发者和研究者的首选。本文将深入探讨 YOLOv5,包括其优势、PyTorch 版本特点、模型导出格式支持以及模型类别与导出等方面,带领读者全面了解这一强大的目标检测模型。

二、Why  Choose  YOLOv5

YOLOv5 在目标检测领域具有显著的优势,以下通过与其他模型的对比来详细阐述。

(一)性能对比

在目标检测任务中,模型的性能通常通过平均精度(Average Precision,AP)和速度来衡量。如图所示,展示了 YOLOv5 不同版本(YOLOv5n6、YOLOv5s6、YOLOv5m6、YOLOv5l6、YOLOv5x6)与 EfficientDet 在 COCO 数据集上的 AP 值和 GPU 速度的对比。

从图中可以看出,在 GPU 速度方面,YOLOv5 系列模型表现出色,尤其是在速度较快的情况下,依然能够保持较高的 AP 值。例如,YOLOv5n6 在速度上具有明显优势,而 YOLOv5x6 则在 AP 值上达到了较高水平,超过了 EfficientDet。这意味着 YOLOv5 能够在保证检测精度的同时,实现快速的目标检测,满足实时性要求较高的应用场景。

二、模型结构与训练优势

YOLOv5 的模型结构设计精巧,采用了一系列先进的技术和策略,使其在训练过程中具有以下优势:

  1. 数据增强:YOLOv5 内置了丰富的数据增强方法,如随机缩放、裁剪、翻转、颜色变换等。这些数据增强操作可以有效地增加训练数据的多样性,提高模型的泛化能力,使其能够更好地应对各种复杂场景下的目标检测任务。
  2. 多尺度训练:支持多尺度训练,模型可以在不同分辨率的图像上进行训练,从而使模型能够适应不同大小的目标检测。这种训练方式有助于提高模型对不同尺度目标的检测精度,避免因目标大小变化而导致的漏检或误检问题。
  3. 高效的网络架构:YOLOv5 的网络架构经过精心设计,采用了深度可分离卷积等高效的卷积操作,减少了模型的参数量和计算量,同时保持了较高的检测性能。这使得模型可以在资源受限的设备上(如移动设备、嵌入式设备)高效运行,拓展了其应用范围。

YOLOv5-PyTorch 版本具有重要的地位和特点,以下是详细介绍。

(一)历史上第一个 PyTorch 版本

YOLOv5 是第一个基于 PyTorch 实现的版本,这具有重要意义。PyTorch 作为一款流行的深度学习框架,以其简洁易用、动态计算图、良好的调试体验等优点受到广大开发者的喜爱。YOLOv5-PyTorch 版本的出现,使得开发者能够利用 PyTorch 的强大功能和丰富生态,更加方便地进行模型的训练、调试和部署。

(二)不同规模模型介绍

YOLOv5 提供了多种规模的模型,包括 Small(YOLOv5s)、Medium(YOLOv5m)、Large(YOLOv5l)和 XLarge(YOLOv5x)。这些模型在模型大小、推理速度和检测精度上各有特点,以满足不同应用场景的需求。

  1. YOLOv5s

    • 模型大小:FP16 精度下仅为 14 MB,非常适合在资源有限的设备上部署,如移动设备或边缘设备。
    • 推理速度:在 V100 GPU 上,推理速度可达 2.2 ms,能够实现快速的目标检测,满足实时性要求较高的应用。
    • 检测精度:在 COCO 数据集上的 mAP(mean Average Precision)为 36.8,虽然相对其他大型模型精度较低,但在一些对精度要求不是特别苛刻的场景下,其快速的检测速度和较小的模型大小使其具有很大的优势。
  2. YOLOv5m

    • 模型大小:FP16 精度下为 41 MB,比 YOLOv5s 稍大,但仍然可以在一些中低端设备上运行。
    • 推理速度:在 V100 GPU 上,推理速度为 2.9 ms,速度依然较快。
    • 检测精度:mAP 达到 44.5,相比 YOLOv5s 有了显著提高,能够在保证一定速度的前提下,提供更高的检测精度,适用于对精度和速度都有一定要求的场景。
  3. YOLOv5l

    • 模型大小:FP16 精度下为 90 MB,模型规模进一步增大。
    • 推理速度:在 V100 GPU 上,推理速度为 3.8 ms,虽然速度有所下降,但仍然在可接受范围内。
    • 检测精度:mAP 达到 48.1,检测精度进一步提升,适用于对精度要求较高的场景,如工业检测等。
  4. YOLOv5x

    • 模型大小:FP16 精度下为 168 MB,是 YOLOv5 系列中最大的模型。
    • 推理速度:在 V100 GPU 上,推理速度为 6.0 ms,相对较慢,但在强大的计算设备上仍然可以实现实时检测。
    • 检测精度:mAP 达到 50.1,是 YOLOv5 系列中精度最高的模型,适用于对检测精度要求极高的场景,如医学图像分析等。

一般来说YOLOv5l模型的性价比更高,YOLOv5x比YOLOv5l模型大的很多,但是mAP来看,性能却没有多少提升。

以下是使用 PyTorch 加载 YOLOv5s 模型进行目标检测的示例代码:

import torch# 加载预训练的YOLOv5s模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)# 对图像进行目标检测
image_path = 'your_image_path.jpg'
results = model(image_path)# 显示检测结果
results.show()

在上述代码中,首先使用torch.hub.load函数加载预训练的 YOLOv5s 模型,然后将待检测的图像路径传入模型进行目标检测,最后使用results.show()函数显示检测结果。

三、模型导出格式支持

YOLOv5 最新版支持多种模型导出格式,这为其在不同平台和环境中的部署提供了极大的便利。

(一)支持的格式

  1. PyTorch:这是 YOLOv5 的原生格式,以.pt.pth文件形式存在。在 PyTorch 环境中,可以直接使用这些模型文件进行训练、测试和推理。例如,yolov5s.pt就是 YOLOv5s 模型的 PyTorch 格式文件。
  2. TorchScript:通过torchscript选项可以将模型导出为 TorchScript 格式,文件扩展名为.torchscript。TorchScript 是一种可以在 Python 环境之外运行的模型表示形式,它可以将 PyTorch 模型转换为一种中间表示,以便在 C++ 等其他语言中使用,提高了模型的可移植性和部署灵活性。
  3. ONNX:ONNX(Open Neural Network Exchange)是一种开放的神经网络模型交换格式,支持多种深度学习框架之间的模型互操作。通过onnx选项可以将 YOLOv5 模型导出为.onnx文件。例如,yolov5s.onnx就是导出的 ONNX 格式模型。导出 ONNX 格式的模型后,可以使用 ONNX Runtime 等推理引擎在不同的硬件和软件平台上进行高效的推理。以下是将 YOLOv5s 模型导出为 ONNX 格式的代码示例:
import torch# 加载预训练的YOLOv5s模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)# 导出为ONNX格式
torch.onnx.export(model, torch.randn(1, 3, 640, 640), 'yolov5s.onnx', verbose=True)

在上述代码中,首先加载预训练的 YOLOv5s 模型,然后使用torch.onnx.export函数将模型导出为 ONNX 格式,其中torch.randn(1, 3, 640, 640)是一个随机生成的输入张量,用于指定模型的输入形状,yolov5s.onnx是导出的 ONNX 模型文件名,verbose=True表示在导出过程中输出详细信息。

  1. OpenVINO:OpenVINO 是英特尔推出的用于优化和部署深度学习模型的工具套件。通过openvino选项可以将 YOLOv5 模型导出为 OpenVINO 支持的格式,导出后的模型可以在英特尔的硬件平台上实现高效的推理加速,充分利用英特尔硬件的性能优势,适用于对性能和功耗有较高要求的边缘计算场景。
  2. TensorRT:TensorRT 是 NVIDIA 推出的用于高性能深度学习推理的 SDK。通过engine选项可以将 YOLOv5 模型导出为 TensorRT 引擎文件(.engine)。TensorRT 可以对模型进行优化和加速,利用 NVIDIA GPU 的并行计算能力,实现实时的目标检测,特别适用于需要高性能计算的场景,如自动驾驶、视频监控等。
  3. CoreML:CoreML 是苹果公司推出的用于在 iOS 设备上部署机器学习模型的框架。通过coreml选项可以将 YOLOv5 模型导出为 CoreML 格式(.mlmodel),方便在 iOS 应用中集成目标检测功能,为移动应用开发者提供了便捷的模型部署方式。
  4. TensorFlow SavedModel:TensorFlow SavedModel 是 TensorFlow 的一种模型保存格式。通过saved_model选项可以将 YOLOv5 模型导出为 TensorFlow SavedModel 格式,文件保存在指定的目录中(如yolov5s_saved_model/)。这种格式可以方便地在 TensorFlow 生态中使用和部署模型,与其他 TensorFlow 工具和库进行集成。
  5. TensorFlow GraphDef:GraphDef 是 TensorFlow 模型的一种底层表示形式,通过pb选项可以将 YOLOv5 模型导出为.pb文件。这种格式可以用于在 TensorFlow 中进行更底层的操作和优化,例如在一些需要对模型图进行精细调整的场景中使用。
  6. TensorFlow Lite:TensorFlow Lite 是 TensorFlow 针对移动和嵌入式设备推出的轻量级深度学习框架。通过tflite选项可以将 YOLOv5 模型导出为 TensorFlow Lite 格式(.tflite),适用于在资源受限的移动设备和嵌入式设备上运行目标检测模型,提供高效的推理性能和低功耗。
  7. TensorFlow Edge TPU:TensorFlow Edge TPU 是谷歌推出的用于在边缘设备上加速 TensorFlow 模型推理的硬件和软件解决方案。通过edgetpu选项可以将 YOLOv5 模型导出为 TensorFlow Edge TPU 支持的格式(.tflite),利用 Edge TPU 的硬件加速能力,实现快速的目标检测,适用于物联网等边缘计算场景。
  8. TensorFlow.js:TensorFlow.js 是 TensorFlow 的 JavaScript 版本,通过tfjs选项可以将 YOLOv5 模型导出为 TensorFlow.js 格式(yolov5s_web_model/),方便在 Web 浏览器中直接运行目标检测模型,为 Web 开发者提供了在网页上实现目标检测功能的可能性,无需安装额外的软件或插件。

四、模型可视化

对于导出的 ONNX 格式模型,可以使用https://netron.app进行可视化。Netron 是一款强大的神经网络模型可视化工具,它可以直观地展示模型的结构、层信息、输入输出形状等,帮助开发者更好地理解模型的内部工作原理,便于进行模型的分析和调试。

五、YOLOv5 模型类别与导出

(一)YOLOv5 模型导出与支持

YOLOv5 模型的导出过程相对简单,但需要注意一些细节。除了上述提到的通过export.py脚本结合不同的选项进行导出外,还需要确保模型在导出前已经完成了训练并且处于正确的状态。例如,在导出前需要将模型设置为评估模式(model.eval()),以确保模型的行为与训练时一致,并且不会受到训练过程中一些操作(如 Dropout)的影响。

此外,在导出不同格式的模型时,可能需要根据目标平台和推理引擎的要求进行一些额外的配置和优化。例如,在导出 TensorRT 模型时,需要根据硬件平台的特性和模型的性能要求,选择合适的优化参数和精度设置,以达到最佳的推理性能。

(二)不同精度的模型支持

YOLOv5 不仅支持不同规模的模型,还支持不同精度的模型导出。除了常见的 FP32(单精度浮点数)和 FP16(半精度浮点数)精度外,一些推理引擎还支持 INT8(8 位整数)等低精度量化模型。

低精度量化可以进一步减小模型的大小,降低内存占用和计算量,提高模型在一些硬件平台上的推理速度。例如,在一些边缘计算设备上,INT8 量化后的模型可以实现更快的推理,同时功耗也更低。然而,量化过程可能会导致一定的精度损失,因此需要在模型大小、速度和精度之间进行权衡。

以下是一个简单的示例,展示如何在 PyTorch 中对 YOLOv5 模型进行量化:

import torch
import torch.nn as nn
from torch.quantization import quantize_dynamic# 加载预训练的YOLOv5s模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)# 对模型进行动态量化
quantized_model = quantize_dynamic(model, {nn.Conv2d, nn.Linear})# 保存量化后的模型
torch.save(quantized_model.state_dict(), 'quantized_yolov5s.pth')

在上述代码中,首先加载预训练的 YOLOv5s 模型,然后使用quantize_dynamic函数对模型进行动态量化,量化的模块包括卷积层(nn.Conv2d)和全连接层(nn.Linear)。最后,将量化后的模型参数保存为.pth文件。

(三)模型量化的目的

  1. 减小模型大小
    • 原始的深度学习模型,尤其是像 YOLOv5 这样具有一定复杂度的模型,其参数通常以较高精度(如 FP32)存储,这会导致模型文件较大。例如,一个未量化的 YOLOv5 模型可能占用几十兆甚至上百兆的存储空间。通过量化,将模型参数的数据类型转换为低精度(如 INT8),可以显著减小模型的大小。这对于在资源受限的设备上部署模型非常重要,如移动设备、嵌入式设备等,这些设备的存储容量有限,较小的模型大小可以更容易地安装和运行。
    • 以 INT8 量化为例,相比于 FP32,数据存储所需的字节数大大减少(FP32 通常占用 4 个字节,而 INT8 仅占用 1 个字节),从而可以将模型文件压缩到原来的几分之一甚至更小。
  2. 降低内存占用
    • 在模型推理过程中,模型参数需要加载到内存中。未量化的模型由于参数精度高,占用的内存空间较大。当同时运行多个模型实例或者在内存资源紧张的环境中,高内存占用可能会导致内存不足的问题,影响系统的稳定性和其他程序的运行。
    • 量化后的模型由于参数占用内存减少,在相同的硬件环境下,可以同时处理更多的输入数据或者运行更多的模型副本,提高系统的并发处理能力和资源利用率。
  3. 提高推理速度
    • 许多硬件平台,特别是一些专门针对低精度计算进行优化的处理器(如一些移动处理器、GPU 等),在处理低精度数据时具有更高的计算效率。量化后的模型在这些硬件上运行时,可以利用硬件的特性,实现更快的推理速度。

六、小结

YOLOv5 作为一款强大的目标检测模型,具有出色的性能、丰富的模型规模选择、广泛的模型导出格式支持以及对不同精度模型的支持等优点。无论是在学术研究还是工业应用中,YOLOv5 都展现出了巨大的潜力和价值。YOLOv5 具有其优势、PyTorch 版本特点、模型导出格式以及模型类别与导出等方面具有不同选择。在实际应用中,开发者可以根据具体的需求和场景,选择合适的 YOLOv5 模型和导出格式,充分发挥其强大的目标检测能力,为各种计算机视觉任务提供高效、准确的解决方案。

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

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

相关文章

Qt —— 控件属性

一、概述 控件有很多属性,我们学习和整理常见和常用的几个属性,由于所有的控件基本都是继承Widget类的,所以前面会先拿Widget类和常见的控件进行示范。 Qt Designer左侧一长条就是Qt给我们内置好的控件: 二、enabled 状态属性 …

会议签到系统的架构和实现

会议签到系统的架构和实现 摘要:通过定制安卓会议机开机APP呈现签到界面,并且通过W/B结构采集管理签到信息,实现会议签到的功能。为达到此目标本文将探讨使用Redis提供后台数据支持;使用SocketIo处理适时消息;使用Flask进行原型开…

WPF实战案例 | C# WPF实现大学选课系统

WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#) 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…

JAVA:Spring Boot 实现责任链模式处理订单流程的技术指南

1、简述 在复杂的业务系统中,订单流程往往需要一系列的操作,比如验证订单、检查库存、处理支付、更新订单状态等。责任链模式(Chain of Responsibility)可以帮助我们将这些处理步骤分开,并且以链式方式处理每一个操作…

stm32单片机个人学习笔记14(USART串口数据包)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

postgresql15的启动

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统,且因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。现在国产数据库大力发展阶段,学习和熟悉postgresql的功能是非常有必要的&#x…

行人识别检测数据集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的标注都支持,准确识别率可达99.5%

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C,go等语言开发经验,mysql,mongo,redis等数据库,设计模…

【前端】CSS实战之音乐播放器

目录 播放器背景旋转音乐封面按钮进度条音量调节音乐信息按钮的效果JavaScript部分播放和暂停音乐切换音乐信息进度条 音量调节避免拖拽时的杂音音量调节条静音和解除静音 自动下一首实现一个小效果最终效果 播放器背景 <div class"play_box"></div>设置…

SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别

目录 JAVA 框架 javaEE spring springmvc springboot SSM SSH maven JAVA 一种面向对象、高级编程语言&#xff0c;Python也是高级编程语言&#xff1b;不是框架(框架&#xff1a;一般用于大型复杂需求项目&#xff0c;用于快速开发)具有三大特性&#xff0c;所谓Jav…

rocketmq基本架构

简介 Name server 负责broker注册、心跳&#xff0c;路由等功能&#xff0c;类似Kafka的ZKname server节点之间不互相通信&#xff0c;broker需要和所有name server进行通信。扩容name server需要重启broker&#xff0c;不然broker不会和name server建立连接producer和consum…

【Web】2025-SUCTF个人wp

目录 SU_blog SU_photogallery SU_POP SU_blog 先是注册功能覆盖admin账号 以admin身份登录&#xff0c;拿到读文件的权限 ./article?filearticles/..././..././..././..././..././..././etc/passwd ./article?filearticles/..././..././..././..././..././..././proc/1…

【优选算法】6----查找总价格为目标值的两个商品

这道题相对于前寄到算法题较为容易~ 同样也是使用了双指针的算法哦~ ----------------------------------------begin-------------------------------------- 题目解析&#xff1a; 题目也是很简单地一句话&#xff0c;但是意图还是很明确~ 讲解算法原理&#xff1a; 同样的&…

github登录用的TOTP和恢复码都丢失了怎么办

从22年左右开始github的登录就需要用TOTP的一个6位秘钥做二次认证登录&#xff0c;如果在用的TOTP软件失效了&#xff0c;可以用github开启二次认证时下载的恢复码重置认证&#xff0c;但是如果你和我一样这两个东西都没了就只能用邮箱重置了&#xff0c;过程给大家分享一下 一…

FFmpeg常用命令

文章目录 一、 FFmpeg 音视频的处理流程二、FFmpeg 常用命令2.1、查看本机支持的采集设备2.2、 录制视频2.2.1、原始视频2.2.2、编码的视频 2.3、录制音频&#xff1a;2.3.1、原始音频2.3.2、编码的音频 2.4、录制音视频&#xff1a;2.5、文件格式转换&#xff1a;2.6、提取音频…

30天开发操作系统 第 17 天 -- 命令行窗口

前言 今天一开始&#xff0c;请大家先回忆一下任务A的情形。在harib13e中&#xff0c;任务A下面的LEVEL中有任务因此FIFO为空时我们可以让任务A进入休眠状态。那么&#xff0c;如果我们并未启动任务B0~ B0~ B2, B2的话&#xff0c;任务A又将会如何呢&#xff1f; 首先&#xf…

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后&#xff0c;可以从系统基础设置、网络配置、性能优化等方面进行配置和优化&#xff0c;以下是具体内容&#xff1a; 系统基础设置 更新系统&#xff1a;以root用户登录系统后&#xff0c;在终端中执行sudo yum update命令&#xff0c;对系统进行更新&#x…

网络安全 | 入侵检测系统(IDS)与入侵防御系统(IPS):如何识别并阻止威胁

网络安全 | 入侵检测系统&#xff08;IDS&#xff09;与入侵防御系统&#xff08;IPS&#xff09;&#xff1a;如何识别并阻止威胁 一、前言二、入侵检测系统&#xff08;IDS&#xff09;2.1 IDS 的工作原理2.2 IDS 的技术类型2.3 IDS 的部署方式 三、入侵防御系统&#xff08;…

数学规划问题2 .有代码(非线性规划模型,最大最小化模型,多目标规划模型)

非线性规划模型 FIrst:转化为标准型 在matlab中求非线性规划的函数 练习题: 典型例题: 最大最小化模型 核心思想&#xff1a; matlab的模型求解 经典例题: 多目标规划模型 基本概念 求解思路: 模型构建步骤 经典例题: 非线性规划模型 非线性规划&#xff08;Nonl…

2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程

本文目录 一、查看驱动版本1.1 查看显卡驱动1.2 显卡驱动和CUDA对应版本1.3 Pytorch和Python对应的版本1.4 Pytorch和CUDA对应的版本 二、安装CUDA三、安装cuDANN四、安装pytorch五、验证是否安装成功 一、查看驱动版本 1.1 查看显卡驱动 输入命令nvidia-smi可以查看对应的驱…

Transformer详解:Attention机制原理

前言 Hello&#xff0c;大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者&#xff0c;本系列文章是作者参加DataWhale2025年1月份学习赛&#xff0c;旨在讲解Transformer模型的理论和实践。&#x1f632; 本文将详细探讨Attention机制的原理…