YOLOv10 简介

news2024/9/21 23:05:10

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.coloradmin.cn/o/2153545.html

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

相关文章

C# 技巧在 foreach 循环中巧妙获取索引

目录 前言 使用 LINQ 和扩展方法 直接在 LINQ 查询中使用 使用 LINQ 的 Select() 与 Enumerable.Range() 总结 最后 前言 在C#中foreach 循环是处理集合的常见方式,因其简洁性和易读性而广受青睐。 但是在某些情况下,我们需要同时获取集合中元素的…

mysql中的json查询

首先来构造数据 查询department里面name等于研发部的数据 查询语句跟普通的sql语句差不多,也就是字段名要用到path表达式 select * from user u where u.department->$.name 研发部 模糊查询 select * from user u where u.department->$.name like %研发%…

论文阅读笔记:Sapiens: Foundation for Human Vision Models

Sapiens: Foundation for Human Vision Models 1 背景1.1 问题1.2 目标 2 方法3 创新点4 模块4.1 Humans-300M数据集4.2 预训练4.3 2D位姿估计4.4 身体部位分割4.5 深度估计4.6 表面法线估计 5 实验5.1 实现细节5.2 2D位姿估计5.3 身体部位分割5.4 深度估计5.5 表面法线估计5.6…

如何在 Ubuntu 上安装 OpenSSH Server ?

OpenSSH 是一组工具集合,它允许您使用 SSH 在网络上进行安全、加密的通信。它包括安全远程登录、文件传输和应用程序隧道的特性。OpenSSH 通常用于 Linux 系统上的安全远程访问和文件传输。由于其强大的安全措施,受到世界各地许多用户的信任。 本教程将…

【Rust练习】16.模式

文章题目来自:https://practice-zh.course.rs/pattern-match/patterns.html 1 🌟🌟 使用 | 可以匹配多个值, 而使用 … 可以匹配一个闭区间的数值序列 fn main() {} fn match_number(n: i32) {match n {// 匹配一个单独的值1 > println!(…

2024 研究生数学建模竞赛(E题)建模秘籍|高速公路应急车道紧急启用模型|文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用聚类分析,逻辑回归模型,决策树/规则,ARIMA等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始…

Python基于TensorFlow实现Transformer分类模型(Transformer分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着深度学习技术的发展,自然语言处理(NLP)领域取得了显著的进步。…

人工智能开发实战推荐算法应用解析

内容导读 个性化推荐思路推荐算法分类推荐效果评估 一、个性化推荐思路 推荐系统能为你提供个性化的智能服务,是基于以下事实认知:人们倾向于喜欢那些与自己喜欢的东西相似的其它物品,或倾向于与自己趣味相投的人有相似的爱好,…

9.安卓逆向-安卓开发基础-安卓四大组件2

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

mysql为什么建议创建字段的时候not null

相信大家在建表或者给表新加字段的时候,一些老司机们都会建议我们,字段要定义为not null,原因呢是一是占用存储空间,另一个是避免出现一些意料之外的错误。当然针对这个问题,大家可能也会在网上去搜下,不过…

C语言中的一些小知识(三)

一、你了解printf()吗? 你知道下面代码的输出结果吗? int a123; printf("%2d \n",a); printf() 函数是 C 语言中用于格式化输出的标准函数,它允许你将数据以特定的格式输出到标准输出设备(通常是屏幕)。p…

20240921全国计算机二级Python考试(大头博士计算二级)

一、背景需求: 20240921我在上海应用技术大学44号楼考场参加2024年9月的全国计算机二级(Python语言程序设计)考试。 时隔多年,再次来到大学校园,恍若隔世 扫码找考场在哪里 考场须知 1、进考场,先刷身份证…

有关elementui form验证问题,有值却仍然显示不通过

参考链接 有关elementui form验证问题,有值却仍然显示不通过 - 一棵写代码的柳树 - 博客园 需要保证表单上的 :model" "和prop" "对应的属性相同 el-form 绑定数据:model 和 规则:rules input 绑定 数据表单里的数据 其父组件提供校验所绑定的…

Mybatis的XML实现方法

Mybatis的开发有两种方式: 1、注解 2、XML 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。 Mybatis的XML的实现需要以下…

leetcode练习 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3提示: 树中节点的数量在 [0, 104] 区间内。-100 …

java使用ByteBuffer进行多文件合并和拆分

1.背景 因为验证证书的需要,需要把证书文件和公钥给到客户,考虑到多个文件交互的不便性,所以决定将2个文件合并成一个文件交互给客户。刚开始采用字符串拼接2个文件内容,但是由于是加密文件,采用字符串形式合并后&…

fastadmin 部署后前台会员中心出现404错误

访问前台会员中心出现404错误。 解决:nginx访问站点增加伪静态 location / {if (!-e $request_filename){rewrite ^(.*)$ /index.php?s$1 last; break;} }在phpstydy中增加伪静态,如图:

保姆级教程教你如何安装Hadoop,实现Hadoop单机(非分布式)配置

下载Ubutu镜像 前往阿里镜像站https://mirrors.aliyun.com/oldubuntu-releases/releases/16.04.0/?spma2c6h.25603864.0.0.6be57ff3u2zMGR 选择下载ubuntu-16.04-desktop-amd64.iso 下载时间较久,请耐心等待 创建实验用虚拟机 选择创建新的虚拟机 选择典型并下一…

伊犁-linux 硬盘添加,分区,格式化

主要是linux 下操作硬盘分区,格式化 这样1个sata 盘就添加成功了 !  继续添加三块 sata1 hda sata hdb sata hdc sata hdd scsi sda 作为启动盘 进行操作系统的引导 如果scsi 往下调整 先敲enter 在用- 号往下 如果是往上调整敲…

win7自带壁纸丢失主题丢失

有时候盗版破解或者其他美化工具会导致win7自带的壁纸丢失,从个性化管理里面无法恢复原始的壁纸(如下图),但是由于工作原因公司的电脑又不方便设置第三方的壁纸,所以找了一下解决方案。 经典问题,百度找到的…