【YOLO系列】YOLOv10模型结构详解与推理部署实现

💡 原文中文,约2400字,阅读约需6分钟。
📝

内容提要

YOLOv10模型发布,相比YOLOv8有两个改变:添加了PSA层和CIB层,去掉了NMS。支持默认最大的boxes数目是300。模型转换代码和推理代码实现如下。个人认为YOLOv10是YOLOv8的魔改版本,但还不错。

🔎

延伸解读

YOLOv10 与 YOLOv8 的核心差异

文章指出 YOLOv10 相比 YOLOv8 有两个最大改变:添加了 PSA 层和 CIB 层,并去掉了 NMS。这意味着模型结构有所调整,且推理时不再需要非极大值抑制后处理,直接输出最终预测结果。作者认为 YOLOv10 是基于 YOLOv8 的修改版本,源码中仍保留许多 YOLOv8 的包和注释。

输出格式与预测框数量限制

YOLOv10 导出 ONNX 后输出为动态格式,输入支持 1x3x640x640,输出为 1x300x6。其中 300 是默认最大预测框数目,6 分别代表 x1、y1、x2、y2、score 和 classid。由于去掉了 NMS,模型直接输出最终预测结果。作者提到 300 个框可能偏少,相比 YOLOv8 预测框少了很多,但该数目应该可以修改。

推理部署的简化与实现

文章认为 YOLOv10 的推理比 YOLOv8 简单很多,有点 SSD 模型的既视感。提供的推理代码使用 OpenVINO 加载 ONNX 模型,对输入图像进行预处理后直接推理,然后遍历输出行,根据 score 阈值筛选并绘制检测框。代码中展示了从读取模型到显示结果的完整流程,便于读者参考部署。

❓

Q&A

YOLOv10相比YOLOv8有哪些主要改变?

YOLOv10相比YOLOv8添加了PSA层和CIB层,并去掉了NMS。

YOLOv10的最大预测框数是多少?

YOLOv10支持默认最大预测框数为300。

如何导出YOLOv10模型为ONNX格式?

可以使用代码 'f = YOLO10(

YOLOv10的推理过程与YOLOv8相比有什么不同?

YOLOv10的推理过程比YOLOv8简单,具有SSD模型的特征。

YOLOv10的输出格式是什么?

YOLOv10的输出格式为1x300x6,其中300是预测框数,6分别表示x1, y1, x2, y2, score和classid。

YOLOv10是否保留了YOLOv8的代码?

是的,YOLOv10的源码中仍保留了许多YOLOv8的包和代码注释,说明YOLOv10是基于YOLOv8的修改。

🏷️

标签

➡️

继续阅读