首页 科技周边 人工智能 Yolov10:详解、部署、应用一站式齐全!

Yolov10:详解、部署、应用一站式齐全!

Jun 07, 2024 pm 12:05 PM
模型 部署

一、前言  

在过去的几年里,YOLOs由于其在计算成本和检测性能之间的有效平衡,已成为实时目标检测领域的主导范式。研究人员探索了YOLO的架构设计、优化目标、数据扩充策略等,取得了显着进展。同时,依赖非极大值抑制(NMS)进行后处理阻碍了YOLO的端到端部署,并对推理延迟产生不利影响。

在YOLOs中,各种组件的设计缺乏全面彻底的检查,导致显着的计算冗余,限制了模型的能力。它提供了次优的效率,以及相对大的性能改进潜力。在这项工作中,目标是从后处理和模型架构两个方面进一步提高YOLO的性能效率边界。为此,首先提出了YOLOs无NMS训练的一致双重分配,它同时带来了有竞争力的性能和低推理延迟。此外,还介绍了YOLO的整体效率精度驱动模型设计策略。

Yolov10:详解、部署、应用一站式齐全!

通过提高效率和精度两个角度对YOLO的各个组件进行了全面优化,大大减少了计算开销,增强了能力。工作成果是新一代用于实时端到端目标检测的YOLO系列,称为YOLOv10。大量实验表明,YOLOv10在各种模型尺度上都达到了最先进的性能和效率。例如,在COCO上的类似AP下,YOLOv10-Sis1.8比RT-DETR-R18快1.8倍,同时分享的参数和FLOP数量都是2.8倍。与YOLOv9-C相比,在相同的性能下,YOLOv10-B的延迟减少了46%,参数减少了25%。

二、背景  

实时物体检测一直是计算机视觉领域的研究热点,其目的是在低延迟下准确预测图像中物体的类别和位置。它被广泛应用于各种实际应用,包括自动驾驶、机器人导航和物体跟踪等。近年来,研究人员专注于设计基于CNN的物体检测器,以实现实时检测。 实时物体检测器可以分为两类:单阶段检测器和两阶段检测器。单阶段检测器直接在输入图像上进行密集的预测,而两阶段检测器首先生成候选框,然后对这些候选框进行分类和位置回归。

其中,YOLOs由于其在性能和效率之间的巧妙平衡而越来越受欢迎。 YOLO的检测流水线由两部分组成:模型前向处理,NMS后处理。然而,这两种方法仍然存在不足,导致准确性和延迟边界不理想。具体而言,YOLO通常在训练期间采用一对多标签分配策略,其中一个基本实现对象对应于多个样本本。尽管产生了优越性能,但这种方法需要NMS在推理过程中选择最佳的正预测。这降低了推理速度,并使性能对NMS的超参数敏感,从而阻止YOLO实现最佳的端到端部署。解决这个问题的一条途径是采用最近引入的端到端DETR架构。例如,RT-DETR提供了一种高效的混合编码器和不确定性最小的查询选择,将DETR推向了实时应用领域。然而,部署DETR的固有复杂性阻碍了其实现精度和速度之间最佳平衡的能力。另一条线是探索基于CNN的检测器的端到端检测,它通常利用一对一的分配策略来抑制冗余预测。

然而,它们通常会引入额外的推理开销或实现次优性能。此外,模型架构设计仍然是YOLO面临的一个基本挑战,它对准确性和速度有着重要影响。为了实现更高效、更有效的模型架构,研究人员探索了不同的设计策略。为增强特征提取能力,为主干提供了各种主要计算单元,包括DarkNet、CSPNet、EfficientRep和ELAN等。对于颈部,探索了PAN、BiC、GD和RepGFPN等,以增强多尺度特征融合。此外,还研究了模型缩放策略和重新参数化技术。尽管这些努力取得了显着进展,但仍然存在从效率和准确性角度对YOLO中的各种组件进行全面检查的空间。因此,由此产生的约束模型能力也导致了差异的性能,为精度改进留下了充足的空间。

三、新技术  

Consistent Dual Assignments for NMS-free Training

在训练期间,YOLOs通常利用TAL作为每个实例分配多个阳性样本。一对多分配的采用产生了丰富的监控信号,有助于优化并实现卓越的性能。然而,YOLO必须依赖NMS后处理,这导致部署的推理效率不尽人意。虽然以前的工作探索一对一匹配来抑制冗余预测,但它们通常会引入额外的推理开销或产生次优性能。在这项工作中,YOLO提供了一种无NMS的训练策略,该策略具有双标签分配和一致的匹配度量,实现了高效率和有竞争力的性能。

  • Dual label assignments

与一对多分配不同,一对一匹配只为每个地面实况分配一个预测,避免了NMS的后处理。然而,它导致监督不力,从而导致精度和收敛速度不理想。幸运的是,这种不足可以通过一对多分配来弥补。为了实现这一点,YOLO引入了双重标签分配,以结合两种策略中的最佳策略。具体而言,如下图(a)所示。

Yolov10:详解、部署、应用一站式齐全!

为YOLO引入了另一个一对一的头。它保留了与原始一对多分支相同的结构并采用了相同的优化目标,但利用一对一匹配来获得标签分配。在训练过程中,两个头部与模型共同优化,让骨干和颈部享受到一对多任务提供的丰富监督。在推理过程中,丢弃一对多的头,并利用一对一的头进行预测。这使得YOLO能够进行端到端部署,而不会产生任何额外的推理成本。此外,在一对一的匹配中,采用了前一名的选择,在较少的额外训练时间下实现了与Hungarian matching相同的性能。

  • Consistent matching metric

在分配过程中,一对一和一对多方法都利用一个指标来定量评估预测和实例之间的一致性水平。为了实现两个分支的预测感知匹配,使用统一的匹配度量:

Yolov10:详解、部署、应用一站式齐全!

在双标签分配中,一对多分支比一对一分支提供更丰富的监控信号。直观地说,如果能够将一对一头部的监管与一对多头部的监管相协调,就可以朝着一对多的头部优化的方向对一对一的头部进行优化。因此,一对一头部可以在推理过程中提供改进的样本质量,从而获得更好的性能。为此,首先分析了两个之间的监管差距。由于训练过程中的随机性,一开始就用两个用相同值初始化的头开始检查,并产生相同的预测,即一对一的头和一对多的头为每个预测实例对生成相同的p和IoU。注意到两个分支的回归目标。

Yolov10:详解、部署、应用一站式齐全!

当to2m,i=u*时,它达到最小值,即,i是中的最佳正样本Ω, 如上图(a)所示。为了实现这一点,提出了一致的匹配度量,即αo2o=r·αo2m和βo2o=r·βo2m,这意味着mo2o=mro2m。因此,一对多头部的最佳阳性样本也是一对一头部的最佳样本。因此,两个头部可以一致且和谐地进行优化。为了简单起见,默认取r=1,即αo2o=αo2m和βo2o=βo2m。为了验证改进的监督对齐,在训练后计算一对多结果的前1/5/10内的一对一匹配对的数量。如上图(b),在一致匹配方法下,对准得到改善。

由于篇幅有限,YOLOv10 的一大创新点便是引入了一种双重标签分配策略,其核心思想便是在训练阶段使用一对多的检测头提供更多的正样本来丰富模型的训练;而在推理阶段则通过梯度截断的方式,切换为一对一的检测头,如此一来便不在需要 NMS 后处理,在保持性能的同时减少了推理开销。原理其实不难,可以看下代码理解下:

#https://github.com/THU-MIG/yolov10/blob/main/ultralytics/nn/modules/head.pyclass v10Detect(Detect):max_det = -1def __init__(self, nc=80, ch=()):super().__init__(nc, ch)c3 = max(ch[0], min(self.nc, 100))# channelsself.cv3 = nn.ModuleList(nn.Sequential(nn.Sequential(Conv(x, x, 3, g=x), Conv(x, c3, 1)), \ nn.Sequential(Conv(c3, c3, 3, g=c3), Conv(c3, c3, 1)), \nn.Conv2d(c3, self.nc, 1)) for i, x in enumerate(ch))self.one2one_cv2 = copy.deepcopy(self.cv2)self.one2one_cv3 = copy.deepcopy(self.cv3)def forward(self, x):one2one = self.forward_feat([xi.detach() for xi in x], self.one2one_cv2, self.one2one_cv3)if not self.export:one2many = super().forward(x)if not self.training:one2one = self.inference(one2one)if not self.export:return {'one2many': one2many, 'one2one': one2one}else:assert(self.max_det != -1)boxes, scores, labels = ops.v10postprocess(one2one.permute(0, 2, 1), self.max_det, self.nc)return torch.cat([boxes, scores.unsqueeze(-1), labels.unsqueeze(-1)], dim=-1)else:return {'one2many': one2many, 'one2one': one2one}def bias_init(self):super().bias_init()'''Initialize Detect() biases, WARNING: requires stride availability.'''m = self# self.model[-1]# Detect() module# cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1# ncf = math.log(0.6 / (m.nc - 0.999999)) if cf is None else torch.log(cf / cf.sum())# nominal class frequencyfor a, b, s in zip(m.one2one_cv2, m.one2one_cv3, m.stride):# froma[-1].bias.data[:] = 1.0# boxb[-1].bias.data[: m.nc] = math.log(5 / m.nc / (640 / s) ** 2)# cls (.01 objects, 80 classes, 640 img)

Holistic Efficiency-Accuracy Driven Model Design

架构改进:

  • Backbone & Neck:使用了先进的结构如 CSPNet 作为骨干网络,和 PAN 作为颈部网络,优化了特征提取和多尺度特征融合。
  • 大卷积核与分区自注意力:这些技术用于增强模型从大范围上下文中学习的能力,提高检测准确性而不显著增加计算成本。
  • 整体效率:引入空间-通道解耦下采样和基于秩引导的模块设计,减少计算冗余,提高整体模型效率。

Yolov10:详解、部署、应用一站式齐全!

四、实验  

与最先进的比较。潜伏性是通过官方预训练的模型来测量的。潜在的基因测试在具有前处理的模型的前处理中保持了潜在性。†是指YOLOv10的结果,其本身对许多训练NMS来说都是如此。以下是所有结果,无需添加先进的训练技术,如知识提取或PGI或公平比较:

Yolov10:详解、部署、应用一站式齐全!

Yolov10:详解、部署、应用一站式齐全!

五、部署测试  

首先,按照官方主页将环境配置好,注意这里 python 版本至少需要 3.9 及以上,torch 版本可以根据自己本地机器安装合适的版本,默认下载的是 2.0.1:

conda create -n yolov10 pythnotallow=3.9conda activate yolov10pip install -r requirements.txtpip install -e .

安装完成之后,我们简单执行下推理命令测试下效果:

yolo predict model=yolov10s.pt source=ultralytics/assets/bus.jpg

Yolov10:详解、部署、应用一站式齐全!

 让我们尝试部署一下,譬如先导出个 onnx 模型出来看看:

yolo export model=yolov10s.pt format=onnx opset=13 simplify

好了,接下来通过执行 pip install netron 安装个可视化工具来看看导出的节点信息:

# run python fisrtimport netronnetron.start('/path/to/yolov10s.onnx')

Yolov10:详解、部署、应用一站式齐全!

先直接通过 Ultralytics 框架预测一个测试下能否正常推理:

yolo predict model=yolov10s.onnx source=ultralytics/assets/bus.jpg

Yolov10:详解、部署、应用一站式齐全!

大家可以对比下上面的运行结果,可以看出 performance 是有些许的下降。问题不大,让我们基于 onnxruntime 写一个简单的推理脚本,代码地址如下,有兴趣的可以自行查看:

# 推理脚本https://github.com/CVHub520/X-AnyLabeling/blob/main/tools/export_yolov10_onnx.py# onnx 模型权重https://github.com/CVHub520/X-AnyLabeling/releases/tag/v2.3.6

Yolov10:详解、部署、应用一站式齐全!

以上是Yolov10:详解、部署、应用一站式齐全!的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1604
29
PHP教程
1510
276
AI颠覆数学研究!菲尔兹奖得主、华裔数学家领衔11篇顶刊论文|陶哲轩转赞 AI颠覆数学研究!菲尔兹奖得主、华裔数学家领衔11篇顶刊论文|陶哲轩转赞 Apr 09, 2024 am 11:52 AM

AI,的确正在改变数学。最近,一直十分关注这个议题的陶哲轩,转发了最近一期的《美国数学学会通报》(BulletinoftheAmericanMathematicalSociety)。围绕「机器会改变数学吗?」这个话题,众多数学家发表了自己的观点,全程火花四射,内容硬核,精彩纷呈。作者阵容强大,包括菲尔兹奖得主AkshayVenkatesh、华裔数学家郑乐隽、纽大计算机科学家ErnestDavis等多位业界知名学者。AI的世界已经发生了天翻地覆的变化,要知道,其中很多文章是在一年前提交的,而在这一

你好,电动Atlas!波士顿动力机器人复活,180度诡异动作吓坏马斯克 你好,电动Atlas!波士顿动力机器人复活,180度诡异动作吓坏马斯克 Apr 18, 2024 pm 07:58 PM

波士顿动力Atlas,正式进入电动机器人时代!昨天,液压Atlas刚刚「含泪」退出历史舞台,今天波士顿动力就宣布:电动Atlas上岗。看来,在商用人形机器人领域,波士顿动力是下定决心要和特斯拉硬刚一把了。新视频放出后,短短十几小时内,就已经有一百多万观看。旧人离去,新角色登场,这是历史的必然。毫无疑问,今年是人形机器人的爆发年。网友锐评:机器人的进步,让今年看起来像人类的开幕式动作、自由度远超人类,但这真不是恐怖片?视频一开始,Atlas平静地躺在地上,看起来应该是仰面朝天。接下来,让人惊掉下巴

全球最强开源 MoE 模型来了,中文能力比肩 GPT-4,价格仅为 GPT-4-Turbo 的近百分之一 全球最强开源 MoE 模型来了,中文能力比肩 GPT-4,价格仅为 GPT-4-Turbo 的近百分之一 May 07, 2024 pm 04:13 PM

想象一下,一个人工智能模型,不仅拥有超越传统计算的能力,还能以更低的成本实现更高效的性能。这不是科幻,DeepSeek-V2[1],全球最强开源MoE模型来了。DeepSeek-V2是一个强大的专家混合(MoE)语言模型,具有训练经济、推理高效的特点。它由236B个参数组成,其中21B个参数用于激活每个标记。与DeepSeek67B相比,DeepSeek-V2性能更强,同时节省了42.5%的训练成本,减少了93.3%的KV缓存,最大生成吞吐量提高到5.76倍。DeepSeek是一家探索通用人工智

谷歌狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理训练最快选择 谷歌狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理训练最快选择 Apr 01, 2024 pm 07:46 PM

谷歌力推的JAX在最近的基准测试中性能已经超过Pytorch和TensorFlow,7项指标排名第一。而且测试并不是在JAX性能表现最好的TPU上完成的。虽然现在在开发者中,Pytorch依然比Tensorflow更受欢迎。但未来,也许有更多的大模型会基于JAX平台进行训练和运行。模型最近,Keras团队为三个后端(TensorFlow、JAX、PyTorch)与原生PyTorch实现以及搭配TensorFlow的Keras2进行了基准测试。首先,他们为生成式和非生成式人工智能任务选择了一组主流

特斯拉机器人进厂打工,马斯克:手的自由度今年将达到22个! 特斯拉机器人进厂打工,马斯克:手的自由度今年将达到22个! May 06, 2024 pm 04:13 PM

特斯拉机器人Optimus最新视频出炉,已经可以在厂子里打工了。正常速度下,它分拣电池(特斯拉的4680电池)是这样的:官方还放出了20倍速下的样子——在小小的“工位”上,拣啊拣啊拣:这次放出的视频亮点之一在于Optimus在厂子里完成这项工作,是完全自主的,全程没有人为的干预。并且在Optimus的视角之下,它还可以把放歪了的电池重新捡起来放置,主打一个自动纠错:对于Optimus的手,英伟达科学家JimFan给出了高度的评价:Optimus的手是全球五指机器人里最灵巧的之一。它的手不仅有触觉

替代MLP的KAN,被开源项目扩展到卷积了 替代MLP的KAN,被开源项目扩展到卷积了 Jun 01, 2024 pm 10:03 PM

本月初,来自MIT等机构的研究者提出了一种非常有潜力的MLP替代方法——KAN。KAN在准确性和可解释性方面表现优于MLP。而且它能以非常少的参数量胜过以更大参数量运行的MLP。比如,作者表示,他们用KAN以更小的网络和更高的自动化程度重现了DeepMind的结果。具体来说,DeepMind的MLP有大约300,000个参数,而KAN只有约200个参数。KAN与MLP一样具有强大的数学基础,MLP基于通用逼近定理,而KAN基于Kolmogorov-Arnold表示定理。如下图所示,KAN在边上具

本地运行性能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服务,太方便了! 本地运行性能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服务,太方便了! Apr 15, 2024 am 09:01 AM

Ollama是一款超级实用的工具,让你能够在本地轻松运行Llama2、Mistral、Gemma等开源模型。本文我将介绍如何使用Ollama实现对文本的向量化处理。如果你本地还没有安装Ollama,可以阅读这篇文章。本文我们将使用nomic-embed-text[2]模型。它是一种文本编码器,在短的上下文和长的上下文任务上,性能超越了OpenAItext-embedding-ada-002和text-embedding-3-small。启动nomic-embed-text服务当你已经成功安装好o

FisheyeDetNet:首个基于鱼眼相机的目标检测算法 FisheyeDetNet:首个基于鱼眼相机的目标检测算法 Apr 26, 2024 am 11:37 AM

目标检测在自动驾驶系统当中是一个比较成熟的问题,其中行人检测是最早得以部署算法之一。在多数论文当中已经进行了非常全面的研究。然而,利用鱼眼相机进行环视的距离感知相对来说研究较少。由于径向畸变大,标准的边界框表示在鱼眼相机当中很难实施。为了缓解上述描述,我们探索了扩展边界框、椭圆、通用多边形设计为极坐标/角度表示,并定义一个实例分割mIOU度量来分析这些表示。所提出的具有多边形形状的模型fisheyeDetNet优于其他模型,并同时在用于自动驾驶的Valeo鱼眼相机数据集上实现了49.5%的mAP

See all articles