YOLOv10 简介

YOLOv10,由清华大学的研究人员基于 Ultralytics Python 包构建,引入了一种全新的实时目标检测方法,该方法解决了以往 YOLO 版本中后处理和模型架构方面的不足。通过消除非极大值抑制(NMS)并优化各种模型组件,YOLOv10 在显著降低计算开销的同时,达到了最先进的性能水平。广泛的实验证明了其在多个模型规模下,在准确性与延迟之间的卓越权衡能力。

 一、概述

实时目标检测旨在以低延迟准确预测图像中的物体类别和位置。YOLO 系列因其性能与效率的平衡而一直处于该研究领域的前沿。然而,对 NMS(非极大值抑制)的依赖以及架构上的低效性阻碍了其达到最佳性能。YOLOv10 通过引入针对无 NMS 训练的一致双重分配策略以及全面的效率-精度驱动模型设计策略,解决了这些问题。

二、架构

YOLOv10 的架构在继承以往 YOLO 模型优势的基础上,引入了多项关键创新。模型架构由以下组件构成:

  • 主干网络(Backbone):负责特征提取,YOLOv10 采用增强的 CSPNet(跨阶段部分网络)版本,以改善梯度流动并减少计算冗余。
  • 颈部(Neck):设计用于聚合不同尺度的特征并将其传递给头部。它包括 PAN(路径聚合网络)层,以实现有效的多尺度特征融合。
  • 一对多头部(One-to-Many Head):在训练过程中为每个物体生成多个预测,以提供丰富的监督信号并提高学习准确性。
  • 一对一头部(One-to-One Head):在推理过程中为每个物体生成单个最佳预测,从而消除对NMS的需求,减少延迟并提高效率。

三、关键特性

  • 无 NMS 训练:利用一致双重分配策略消除对 NMS 的需求,降低推理延迟。
  • 整体模型设计:从效率和精度两个角度对各个组件进行全面优化,包括轻量级分类头部、空间-通道解耦下采样以及基于排名的块设计。
  • 增强的模型能力:融入大核卷积和部分自注意力模块,以不显著增加计算成本的方式提升性能。

四、模型变体

YOLOv10提供多种模型规模,以满足不同的应用需求:

  • YOLOv10-N:纳米版,专为资源极度受限的环境设计。
  • YOLOv10-S:小型版,在速度和准确性之间取得平衡。
  • YOLOv10-M:中型版,适用于通用用途。
  • YOLOv10-B:平衡版,通过增加宽度来提高准确性。
  • YOLOv10-L:大型版,以增加计算资源为代价,换取更高的准确性。
  • YOLOv10-X:超大型版,追求最高准确度和性能。

五、性能

YOLOv10 在准确性和效率方面均超越了以往的 YOLO 版本以及其他最先进的模型。例如,在COCO 数据集上,YOLOv10-S 在达到与 RT-DETR-R18 相似平均精度(AP)的同时,速度是其 1.8 倍;而 YOLOv10-B 在保持与 YOLOv9-C 相同性能的情况下,延迟降低了 46%,参数减少了 25%。

ModelInput SizeAPvalFLOPs (G)Latency (ms)
YOLOv10-N64038.56.71.84
YOLOv10-S64046.321.62.49
YOLOv10-M64051.159.14.74
YOLOv10-B64052.592.05.74
YOLOv10-L64053.2120.37.28
YOLOv10-X64054.4160.410.70

延迟是在 T4 GPU 上使用 TensorRT FP16 测量的。

1. 实验与结果

YOLOv10 已在 COCO 等标准基准测试集上进行了广泛测试,展示了卓越的性能和效率。该模型在不同变体上均取得了最先进的成果,与以往版本和其他当代检测器相比,在延迟和准确性方面均实现了显著提升。

2.对比

3.与其他最先进的检测器相比
  • YOLOv10-S / X 在相似精度下,分别比 RT-DETR-R18 / R101 快 1.8 倍 / 1.3 倍。
  • YOLOv10-B 在相同精度下,比 YOLOv9-C 的参数少 25%,延迟低 46%。
  • YOLOv10-L / X 在参数比 YOLOv8-L / X 少 1.8 倍 / 2.3 倍的情况下,平均精度(AP)高出0.3 / 0.5。
ModelParams
(M)
FLOPs
(G)
mAPval
50-95
Latency
(ms)
Latency-forward
(ms)
YOLOv6-3.0-N4.711.437.02.691.76
Gold-YOLO-N5.612.139.62.921.82
YOLOv8-N3.28.737.36.161.77
YOLOv9t2.07.738.3
YOLOv10-N2.36.739.51.841.79
YOLOv6-3.0-S18.545.344.33.422.35
Gold-YOLO-S21.546.045.43.822.73
YOLOv8-S11.228.644.97.072.33
YOLOv9s7.226.746.8
YOLOv10-S7.221.646.82.492.39
RT-DETR-R1820.060.046.54.584.49
YOLOv6-3.0-M34.985.849.15.634.56
Gold-YOLO-M41.387.549.86.385.45
YOLOv8-M25.978.950.69.505.09
YOLOv9m20.176.851.4
YOLOv10-M15.459.151.34.744.63
YOLOv6-3.0-L59.6150.751.89.027.90
Gold-YOLO-L75.1151.751.810.659.78
YOLOv8-L43.7165.252.912.398.06
RT-DETR-R5042.0136.053.19.209.07
YOLOv9c25.5102.853.0
YOLOv10-L24.4120.353.47.287.21
YOLOv8-X68.2257.853.916.8612.83
RT-DETR-R10176.0259.054.313.7113.58
YOLOv9e58.1192.555.6
YOLOv10-X29.5160.454.410.7010.60

六、使用示例

1.使用 YOLOv10 预测新图像:
  • 命令行:

# Load a COCO-pretrained YOLOv10n model and run inference on the 'bus.jpg' image
        yolo detect predict model=yolov10n.pt source=path/to/bus.jpg

  • Python 编程:
from ultralytics import YOLO# Load a pre-trained YOLOv10n model
model = YOLO("yolov10n.pt")# Perform object detection on an image
results = model("image.jpg")# Display the results
results[0].show()
2.在自定义数据集上训练 YOLOv10
  • 命令行:

        # Build a YOLOv10n model from scratch and train it on the COCO8 example dataset for 100 epochs
        yolo train model=yolov10n.yaml data=coco8.yaml epochs=100 imgsz=640

        # Build a YOLOv10n model from scratch and run inference on the 'bus.jpg' image
        yolo predict model=yolov10n.yaml source=path/to/bus.jpg

  • Python 编程:
from ultralytics import YOLO# Load YOLOv10n model from scratch
model = YOLO("yolov10n.yaml")# Train the model
model.train(data="coco8.yaml", epochs=100, imgsz=640)

七、结论

YOLOv10 通过解决之前 YOLO 版本的不足并融入创新的设计策略,在实时目标检测领域树立了新的标准。它以低计算成本实现高准确度的能力,使其成为众多实际应用场景中的理想选择。

                                                                                 老徐,2024/9/21

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

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

相关文章

Linux文件IO(五)-三种进程退出方法及空洞文件

1.三种进程退出方法 return 当程序在执行某个函数出错的时候,如果此函数执行失败会导致后面的步骤不能在进行下去时,应该在出错时终止程序运行,不应该让程序继续运行下去,那么如何退出程序、终止程序运行呢?有过编程…

数据结构:内部排序

文章目录 1. 前言1.1 什么是排序?1.2 排序的稳定性1.3 排序的分类和比较 2. 常见的排序算法3. 实现常见的排序算法3.1 直接插入排序3.2 希尔排序3.3 直接选择排序3.4 堆排序3.5 冒泡排序3.6 快速排序3.6.1 hoare思想3.6.2 挖坑法3.6.3 lomuto前后指针法3.6.4 非递归…

Mobile net V系列详解 理论+实战(3)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. 基础概念的讨论3.1 深度可分离卷积3.2 线性瓶颈3.3 个人理解 4. 模型架构细节5. 实验细节6. 实验讨论7. 总结 论文精讲部分 鉴于上一小节中采用的代码是V2的模型,因此本章节现对V2模型论文讲解,便于…

GPT-4o在matlab编程中性能较好,与智谱清言相比

边标签由矩阵给出 s [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10]; t [7 6 1 5 6 8 2 4 4 3 7 1 6 8 2]; G graph(s,t); plot(G) ------------------- GPT-4o给出的代码可用, clc;clear; % 定义边的起点和终点 s [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10]; t [7 6 1 5 6 8 2 …

【数据结构-二维差分】力扣2536. 子矩阵元素加 1

给你一个正整数 n ,表示最初有一个 n x n 、下标从 0 开始的整数矩阵 mat ,矩阵中填满了 0 。 另给你一个二维整数数组 query 。针对每个查询 query[i] [row1i, col1i, row2i, col2i] ,请你执行下述操作: 找出 左上角 为 (row1…

计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

使用Diskgenius系统迁移

使用Diskgenius系统迁移 1、使用系统迁移2、注意点3、新备份的系统盘装在电脑上可能出现盘符错乱导致开机不进入桌面情况 1、使用系统迁移 参考视频: DiskGenius无损系统迁移,换硬盘无需重装系统和软件 2、注意点 1)新的硬盘里面的所有资料…

数据结构_1.1、数据结构的基本概念

1、基本概念 数据:是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理…

【IEEE 独立出版,快速EI检索】第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024)

第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024) 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 官方信息 会议官网:www.aivrv.org 2024 4th International Conference on…

NXP官方或正点原子mfgtool下载系统报错initialize the library falied error code:29

这是因为mfgtool版本或者源文件被破坏了,你可以重新下载一个被改过的mfgtool程序,我就是去原子官网重新在linux包里找了新的更迭过的mfgtool

【AI大语言模型】提示词工程基础及进阶

【AI大语言模型】提示词工程基础及进阶 什么是提示词(Prompt) 提示词(Prompt)是与人工智能对话时用来引导或触发生成某种输出的指令。 它相当于你在与 AI 进行互动时所提出的问题或任务说明。提示词可以是简短的指令、一个问题…

springboot注册和注入组件方式概览

IoC:Inversion of Control(控制反转) 控制:资源的控制权(资源的创建、获取、销毁等) 反转:和传统的方式不一样了 DI :Dependency Injection(依赖注入) 依赖&…

C++编程语言:基础设施:命名空间(Bjarne Stroustrup)

第 14 章 命名空间(Namespaces) 目录 14.1 组成问题(Composition Problems) 14.2 命名空间(Namespaces) 14.2.1 显式修饰(Explicit Qualification) 14.2.2 使用using 声明 14.2.3 using 指令 14.2.4 参数依赖查询 14.2.5 命名空间的开放性 14.3 模块化和接口 …

接口加解密及数据加解密

目录 一、 加解密方式介绍 1.1 Hash算法加密 1.2. 对称加密 1.3 非对称加密 二、 我们要讲什么? 三、 接口加解密 四、 数据加解密 一、 加解密方式介绍 所有的加密方式我们可以分为三类:对称加密、非对称加密、Hash算法加密。 算法内部的具体实现…

自定义dialog 背景属性差异

比如正常要实现的dialog效果: 代码如此: public class SimpleDialog extends Dialog {private Button permissionokTv;//确定按钮private Button permissionnoTv;//取消按钮private TextView permissiontitleTv;//消息标题文本private TextView permiss…

[OpenGL]使用OpenGL绘制带纹理三角形

一、简介 本文介绍了如何使用使用OpenGL绘制带纹理三角形。 在绘制带纹理的三角形时, 首先使用.h读取准备好的.png格式的图片作为纹理,然后在fragment shader中使用 ... in vec2 textureCoord; uniform sampler2D aTexture1; void main() {FragColor …

Elionix 电子束曝光系统

Elionix 电子束曝光系统 - 上海纳腾仪器有限公司 -

您可能一直在寻找的 10 个非常有用的前端库

文章目录 前言正文1.radash2.dayjs3.driver4.formkit/drag-and-drop5.logicflow6.ProgressBar7.tesseract8.zxcvbn9.sunshine-track10.lottie 前言 前端开发中,总有一些重复性的工作让我们疲于奔命。为了提高开发效率,我们精心挑选了10个功能强大、易于…

数据结构与算法——Java实现 7.习题——反转链表

当你穿过了暴风雨,你已不是原来那个人 —— 24.9.21 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输…

【Stm32】从零建立一个工程

这里我们创建“STM32F103”系列的文件,基于“固件库” 1.固件库获取 https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html 2.使用Keil创建.uvprojx文件 前提是已经下载好了“芯片对应的固件” 3.复制底层驱动代码 将固件库下的…