文章目录
- 前言
- 一、介绍
- 二、YOLOv8 and YOLOv10 Comparison
- 1.模型结构
- YOLOv8:
- YOLOv10:
- 2. 推理和时延
- 3. 检测表现
- 4. 参数利用
- 5. 关键比较
- 总结
前言
YOLOv10已经开源一段时间了,经过我实际使用测试,也确实性能更好一些,YOLOv10基于v8代码框架改进,so 之前v8可用的大部分trick在v10上可直接代码移植过去(我自己尝试了下,大部分code不需要改动,直接实现装备继承)。本文主要比较一下v10 和 v8之间的区别和改进。
一、介绍
yolov10最重要的point就是它的 NMS-free 检测功能,我们知道NMS是检测发展中重要的一环,yolov10通过one-to-onehead实现了不需要NFS的检测模型,这可以有效提升模型的执行速度。此外提升性能的trick还有——
Key features as follow:
1) 轻量分类head
2)空间-通道解藕下采样
3)rank-guided block design
二、YOLOv8 and YOLOv10 Comparison
1.模型结构
YOLOv8:
使用C2f模块完成多尺度特征交互,需要依赖NMS完成post process
YOLOv10:
neck部分采用简单的PAN模块,head部分使用两个一致的head,分别为One-to-many, 和 One-to-One。
One-to-many:在训练期间,多个预测框被分配给一个真实物体标签。这种策略提供了丰富的监督信号,优化效果更好。(此部分仍需使用NMS,比如取top100置信度的box)
One-to-One:仅一个预测框被分配给一个真实物体标签,避免了NMS,但由于监督信号较弱,容易导致收敛速度慢和性能欠佳。(该部分code实现中只需要取top1置信度的box即可(TAA分配算法中取top1),则不需要过NMS)
双头架构:模型在训练期间使用两个预测头,一个使用一对多分配,另一个使用一对一分配。这样,模型可以在训练期间利用一对多分配的丰富监督信号,而在推理期间则使用一对一分配的预测结果,从而实现无NMS的高效推理。
一致性度量: 为了在训练期间保持两个预测头的一致性,提出了一致匹配度量。通过调整匹配度量参数,使得一对一和一对多分配的监督信号一致,减少了训练期间的监督差距,提升了模型的预测质量。
整体优化:轻量级分类头和其他架构优化减少了计算冗余(such 使用depthwise & pointwise & 结构重参数化(类似repvgg)),另外一些很多结构化策略的设计还是很值得学习的,可以看看原文。
2. 推理和时延
在相同的COCO AP下,YOLOv10-S is 1.8× faster than RT-DETR-R18.
3. 检测表现
通过国外大佬的实际评测发现,V10在小目标检测上相比V8有着更好的效果。在V8中,针对小目标检测,通常需要调整box置信度阈值。V10由于one-to-one特性,只需要使用较低的阈值即可。
4. 参数利用
YOLOv10-B 相比YOLOv9-C 降低了46%的latency, 和25%的参数量,且有着相同的性能。
5. 关键比较
Speed and Efficiency: YOLOv10 由于NMS-free方法在后处理速度上优于yolov8,更适合real-time检测。
Detection Accuracy: v8和v10检测精度都很不错,但v10在小目标上有着更直观的优势。
Parameter Optimization: YOLOv10 由于更多结构优化,其参数量相比v8更少,模型更紧凑。
总结
v10有效解决了YOLO系列一直以来的限制,比如NMS,小目标检测问题,确实是很大的启发。v10是基于v8框架进行修改的,v8的框架确实很强大,同样很值得学习!