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

打印 上一主题 下一主题

主题 970|帖子 970|积分 2910

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、引言

在计算机视觉领域,目的检测是一项至关重要的任务,它在自动驾驶、安防监控、工业检测等浩繁领域都有着广泛的应用。而 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 的模型结构设计精巧,接纳了一系列先辈的技术和战略,使其在训练过程中具有以下优势:

  • 数据加强:YOLOv5 内置了丰富的数据加强方法,如随机缩放、裁剪、翻转、颜色变换等。这些数据加强操作可以有效地增加训练数据的多样性,进步模型的泛化能力,使其能够更好地应对各种复杂场景下的目的检测任务。
  • 多尺度训练:支持多尺度训练,模型可以在不同分辨率的图像上进行训练,从而使模型能够适应不同巨细的目的检测。这种训练方式有助于进步模型对不同尺度目的的检测精度,避免因目的巨细变化而导致的漏检或误检问题。
  • 高效的网络架构:YOLOv5 的网络架构颠末经心设计,接纳了深度可分离卷积等高效的卷积操作,减少了模型的参数量和计算量,同时保持了较高的检测性能。这使得模型可以在资源受限的装备上(如移动装备、嵌入式装备)高效运行,拓展了其应用范围。
YOLOv5-PyTorch 版本具有重要的地位和特点,以下是具体介绍。
(一)历史上第一个 PyTorch 版本

YOLOv5 是第一个基于 PyTorch 实现的版本,这具有重要意义。PyTorch 作为一款盛行的深度学习框架,以其简便易用、动态计算图、精良的调试体验等长处受到广大开发者的喜爱。YOLOv5-PyTorch 版本的出现,使得开发者能够利用 PyTorch 的强大功能和丰富生态,更加方便地进行模型的训练、调试和摆设。
(二)不同规模模型介绍

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

  • YOLOv5s

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

  • YOLOv5m

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

  • YOLOv5l

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

  • YOLOv5x

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

一般来说YOLOv5l模型的性价比更高,YOLOv5x比YOLOv5l模型大的很多,但是mAP来看,性能却没有多少提升。
以下是使用 PyTorch 加载 YOLOv5s 模型进行目的检测的示例代码:
  1. import torch
  2. # 加载预训练的YOLOv5s模型
  3. model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
  4. # 对图像进行目标检测
  5. image_path = 'your_image_path.jpg'
  6. results = model(image_path)
  7. # 显示检测结果
  8. results.show()
复制代码
在上述代码中,首先使用torch.hub.load函数加载预训练的 YOLOv5s 模型,然后将待检测的图像路径传入模型进行目的检测,最后使用results.show()函数显示检测效果。
三、模型导出格式支持

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


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

  • OpenVINO:OpenVINO 是英特尔推出的用于优化和摆设深度学习模型的工具套件。通过openvino选项可以将 YOLOv5 模型导出为 OpenVINO 支持的格式,导出后的模型可以在英特尔的硬件平台上实现高效的推理加速,充分利用英特尔硬件的性能优势,适用于对性能和功耗有较高要求的边沿计算场景。
  • TensorRT:TensorRT 是 NVIDIA 推出的用于高性能深度学习推理的 SDK。通过engine选项可以将 YOLOv5 模型导出为 TensorRT 引擎文件(.engine)。TensorRT 可以对模型进行优化和加速,利用 NVIDIA GPU 的并行计算能力,实现实时的目的检测,特别适用于需要高性能计算的场景,如自动驾驶、视频监控等。
  • CoreML:CoreML 是苹果公司推出的用于在 iOS 装备上摆设机器学习模型的框架。通过coreml选项可以将 YOLOv5 模型导出为 CoreML 格式(.mlmodel),方便在 iOS 应用中集成目的检测功能,为移动应用开发者提供了便捷的模型摆设方式。
  • TensorFlow SavedModel:TensorFlow SavedModel 是 TensorFlow 的一种模型保存格式。通过saved_model选项可以将 YOLOv5 模型导出为 TensorFlow SavedModel 格式,文件保存在指定的目次中(如yolov5s_saved_model/)。这种格式可以方便地在 TensorFlow 生态中使用和摆设模型,与其他 TensorFlow 工具和库进行集成。
  • TensorFlow GraphDef:GraphDef 是 TensorFlow 模型的一种底层表现形式,通过pb选项可以将 YOLOv5 模型导出为.pb文件。这种格式可以用于在 TensorFlow 中进行更底层的操作和优化,例如在一些需要对模型图进行精细调整的场景中使用。
  • TensorFlow Lite:TensorFlow Lite 是 TensorFlow 针对移动和嵌入式装备推出的轻量级深度学习框架。通过tflite选项可以将 YOLOv5 模型导出为 TensorFlow Lite 格式(.tflite),适用于在资源受限的移动装备和嵌入式装备上运行目的检测模型,提供高效的推理性能和低功耗。
  • TensorFlow Edge TPU:TensorFlow Edge TPU 是谷歌推出的用于在边沿装备上加速 TensorFlow 模型推理的硬件和软件解决方案。通过edgetpu选项可以将 YOLOv5 模型导出为 TensorFlow Edge TPU 支持的格式(.tflite),利用 Edge TPU 的硬件加速能力,实现快速的目的检测,适用于物联网等边沿计算场景。
  • 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 模型进行量化:
  1. import torch
  2. import torch.nn as nn
  3. from torch.quantization import quantize_dynamic
  4. # 加载预训练的YOLOv5s模型
  5. model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
  6. # 对模型进行动态量化
  7. quantized_model = quantize_dynamic(model, {nn.Conv2d, nn.Linear})
  8. # 保存量化后的模型
  9. torch.save(quantized_model.state_dict(), 'quantized_yolov5s.pth')
复制代码
在上述代码中,首先加载预训练的 YOLOv5s 模型,然后使用quantize_dynamic函数对模型进行动态量化,量化的模块包括卷积层(nn.Conv2d)和全毗连层(nn.Linear)。最后,将量化后的模型参数保存为.pth文件。
(三)模型量化的目的


  • 减小模型巨细

    • 原始的深度学习模型,尤其是像 YOLOv5 这样具有肯定复杂度的模型,其参数通常以较高精度(如 FP32)存储,这会导致模型文件较大。例如,一个未量化的 YOLOv5 模型可能占用几十兆甚至上百兆的存储空间。通过量化,将模型参数的数据类型转换为低精度(如 INT8),可以显著减小模型的巨细。这对于在资源受限的装备上摆设模型非常重要,如移动装备、嵌入式装备等,这些装备的存储容量有限,较小的模型巨细可以更容易地安装和运行。
    • 以 INT8 量化为例,相比于 FP32,数据存储所需的字节数大大减少(FP32 通常占用 4 个字节,而 INT8 仅占用 1 个字节),从而可以将模型文件压缩到原来的几分之一甚至更小。

  • 降低内存占用

    • 在模型推理过程中,模型参数需要加载到内存中。未量化的模型由于参数精度高,占用的内存空间较大。当同时运行多个模型实例或者在内存资源紧张的环境中,高内存占用可能会导致内存不足的问题,影响系统的稳固性和其他步伐的运行。
    • 量化后的模型由于参数占用内存减少,在相同的硬件环境下,可以同时处理更多的输入数据或者运行更多的模型副本,进步系统的并发处理能力和资源利用率。

  • 进步推理速度

    • 很多硬件平台,特别是一些专门针对低精度计算进行优化的处理器(如一些移动处理器、GPU 等),在处理低精度数据时具有更高的计算服从。量化后的模型在这些硬件上运行时,可以利用硬件的特性,实现更快的推理速度。

六、小结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表