Yolov10:詳解、部署、應用一站式齊全!
一、前言
在过去的几年里,YOLOs由于其在计算成本和检测性能之间的有效平衡,已成为实时目标检测领域的主导范式。研究人员探索了YOLO的架构设计、优化目标、数据扩充策略等,取得了显著进展。同时,依赖非极大值抑制(NMS)进行后处理阻碍了YOLO的端到端部署,并对推理延迟产生不利影响。
在YOLOs中,各种组件的设计缺乏全面彻底的检查,导致显著的计算冗余,限制了模型的能力。它提供了次优的效率,以及相对大的性能改进潜力。在这项工作中,目标是从后处理和模型架构两个方面进一步提高YOLO的性能效率边界。为此,首先提出了YOLOs无NMS训练的一致双重分配,它同时带来了有竞争力的性能和低推理延迟。此外,还介绍了YOLO的整体效率精度驱动模型设计策略。
通过提高效率和精度两个角度对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)所示。
為YOLO引入了另一個一對一的頭。它保留了與原始一對多分支相同的結構並採用了相同的最佳化目標,但利用一對一匹配來獲得標籤分配。在訓練過程中,兩個頭部與模型共同優化,讓骨幹和頸部享受一對多任務提供的豐富監督。在推理過程中,丟棄一對多的頭,並利用一對一的頭進行預測。這使得YOLO能夠進行端對端部署,而不會產生任何額外的推理成本。此外,在一對一的匹配中,採用了前一名的選擇,在較少的額外訓練時間下實現了與Hungarian matching相同的性能。
- Consistent matching metric
在指派過程中,一對一和一對多方法都利用一個指標來定量評估預測和實例之間的一致性水準。為了實現兩個分支的預測感知匹配,使用統一的匹配度量:
#在雙標籤分配中,一對多分支比一對一分支提供更豐富的監控訊號。直觀地說,如果能夠將一對一頭部的監管與一對多頭部的監管相協調,就可以朝著一對多的頭部優化的方向對一對一的頭部進行優化。因此,一對一頭部可以在推理過程中提供改進的樣本質量,從而獲得更好的性能。為此,首先分析了兩個之間的監管差距。由於訓練過程中的隨機性,一開始就用兩個用相同值初始化的頭開始檢查,並產生相同的預測,即一對一的頭和一對多的頭為每個預測實例對生成相同的p和IoU。注意到兩個分支的迴歸目標。
當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的结果,其本身对许多训练NMS来说都是如此。以下是所有结果,无需添加先进的训练技术,如知识提取或PGI或公平比较:
五、部署测试
首先,按照官方主页将环境配置好,注意这里 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
让我们尝试部署一下,譬如先导出个 onnx 模型出来看看:
yolo export model=yolov10s.pt format=onnx opset=13 simplify
好了,接下来通过执行 pip install netron 安装个可视化工具来看看导出的节点信息:
# run python fisrtimport netronnetron.start('/path/to/yolov10s.onnx')
先直接通过 Ultralytics 框架预测一个测试下能否正常推理:
yolo predict model=yolov10s.onnx source=ultralytics/assets/bus.jpg
大家可以对比下上面的运行结果,可以看出 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:詳解、部署、應用一站式齊全!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

想像一下,一個人工智慧模型,不僅擁有超越傳統運算的能力,還能以更低的成本實現更有效率的效能。這不是科幻,DeepSeek-V2[1],全球最強開源MoE模型來了。 DeepSeek-V2是一個強大的專家混合(MoE)語言模型,具有訓練經濟、推理高效的特點。它由236B個參數組成,其中21B個參數用於啟動每個標記。與DeepSeek67B相比,DeepSeek-V2效能更強,同時節省了42.5%的訓練成本,減少了93.3%的KV緩存,最大生成吞吐量提高到5.76倍。 DeepSeek是一家探索通用人工智

AI,的確正在改變數學。最近,一直十分關注這個議題的陶哲軒,轉發了最近一期的《美國數學學會通報》(BulletinoftheAmericanMathematicalSociety)。圍繞著「機器會改變數學嗎?」這個話題,許多數學家發表了自己的觀點,全程火花四射,內容硬核,精彩紛呈。作者陣容強大,包括菲爾茲獎得主AkshayVenkatesh、華裔數學家鄭樂雋、紐大電腦科學家ErnestDavis等多位業界知名學者。 AI的世界已經發生了天翻地覆的變化,要知道,其中許多文章是在一年前提交的,而在這一

谷歌力推的JAX在最近的基準測試中表現已經超過Pytorch和TensorFlow,7項指標排名第一。而且測試並不是JAX性能表現最好的TPU上完成的。雖然現在在開發者中,Pytorch依然比Tensorflow更受歡迎。但未來,也許有更多的大型模型會基於JAX平台進行訓練和運行。模型最近,Keras團隊為三個後端(TensorFlow、JAX、PyTorch)與原生PyTorch實作以及搭配TensorFlow的Keras2進行了基準測試。首先,他們為生成式和非生成式人工智慧任務選擇了一組主流

波士頓動力Atlas,正式進入電動機器人時代!昨天,液壓Atlas剛「含淚」退出歷史舞台,今天波士頓動力就宣布:電動Atlas上崗。看來,在商用人形機器人領域,波士頓動力是下定決心要跟特斯拉硬剛一把了。新影片放出後,短短十幾小時內,就已經有一百多萬觀看。舊人離去,新角色登場,這是歷史的必然。毫無疑問,今年是人形機器人的爆發年。網友銳評:機器人的進步,讓今年看起來像人類的開幕式動作、自由度遠超人類,但這真不是恐怖片?影片一開始,Atlas平靜地躺在地上,看起來應該是仰面朝天。接下來,讓人驚掉下巴

本月初,來自MIT等機構的研究者提出了一種非常有潛力的MLP替代方法—KAN。 KAN在準確性和可解釋性方面表現優於MLP。而且它能以非常少的參數量勝過以更大參數量運行的MLP。例如,作者表示,他們用KAN以更小的網路和更高的自動化程度重現了DeepMind的結果。具體來說,DeepMind的MLP有大約300,000個參數,而KAN只有約200個參數。 KAN與MLP一樣具有強大的數學基礎,MLP基於通用逼近定理,而KAN基於Kolmogorov-Arnold表示定理。如下圖所示,KAN在邊上具

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

目標偵測在自動駕駛系統當中是一個比較成熟的問題,其中行人偵測是最早得以部署演算法之一。在多數論文當中已經進行了非常全面的研究。然而,利用魚眼相機進行環視的距離感知相對來說研究較少。由於徑向畸變大,標準的邊界框表示在魚眼相機當中很難實施。為了緩解上述描述,我們探索了擴展邊界框、橢圓、通用多邊形設計為極座標/角度表示,並定義一個實例分割mIOU度量來分析這些表示。所提出的具有多邊形形狀的模型fisheyeDetNet優於其他模型,並同時在用於自動駕駛的Valeo魚眼相機資料集上實現了49.5%的mAP

寫在前面項目連結:https://nianticlabs.github.io/mickey/給定兩張圖片,可以透過建立圖片之間的對應關係來估計它們之間的相機姿態。通常,這些對應關係是二維到二維的,而我們估計的姿態在尺度上是不確定的。一些應用,例如隨時隨地實現即時增強現實,需要尺度度量的姿態估計,因此它們依賴外部的深度估計器來恢復尺度。本文提出了MicKey,這是一個關鍵點匹配流程,能夠夠預測三維相機空間中的度量對應關係。透過學習跨影像的三維座標匹配,我們能夠在沒有深度測試的情況下推斷度量相對
