用C#实现神奇宝贝检测!掌握Onnx yolov8技术,轻松捕捉精灵世界!

💡 原文中文,约12700字,阅读约需31分钟。
📝

内容提要

这篇文章是关于使用Onnx模型进行图像检测的C#代码的介绍。代码使用了Microsoft.ML.OnnxRuntime和OpenCvSharp库,实现了图片的缩放、推理和结果绘制等功能。文章还提供了代码中使用的模型信息和输入输出的详细说明。

🔎

延伸解读

模型输出解析与转置操作

YOLOv8模型的输出张量形状为[1, 11, 8400],其中11表示4个边界框坐标加上7个类别分数,8400是预测框数量。代码中的Transpose方法将输出从[11, 8400]转置为[8400, 11],以便按每个预测框读取数据。这种转置是后处理的关键步骤,确保后续能正确提取每个框的坐标和类别置信度。

图像预处理与坐标还原

推理前,图像会等比例缩放并填充至640x640,同时记录宽高缩放比例。推理后,检测框的坐标需要乘以这些比例还原到原图尺寸。代码中通过ratio_width和ratio_height实现这一点,确保绘制框的位置准确。这种处理方式在保持图像比例的同时,避免了失真,是目标检测中的常见做法。

后处理中的NMS与阈值设置

代码使用非极大值抑制(NMS)过滤重叠的检测框,其中置信度阈值conf_threshold设为0.25,NMS阈值nms_threshold设为0.5。这些阈值在窗体加载时初始化,用户可根据需要调整。NMS能有效减少重复检测,但阈值设置需平衡漏检和误检,实际应用中可能需要根据场景微调。

推理性能与保存功能

推理耗时通过DateTime计算并显示在文本框中,帮助用户了解模型在CPU上的运行效率。结果图像可保存为多种格式,如JPG、PNG等,方便后续分析或分享。需要注意的是,代码中模型在CPU上运行,若需更快速度,可考虑使用GPU执行提供程序,但需额外配置。

❓

Q&A

如何在C#中使用Onnx模型进行图像检测?

可以使用Microsoft.ML.OnnxRuntime和OpenCvSharp库来实现图像检测,代码中包括图片缩放、推理和结果绘制等功能。

Onnx模型的输入和输出张量的形状是什么?

输入张量的形状为Float[1, 3, 640, 640],输出张量的形状为Float[1, 11, 8400]。

推理过程中如何处理输入图像?

输入图像会被缩放并转换为输入张量,使用NMS(非极大值抑制)来过滤检测结果。

如何保存推理后的结果图像?

用户可以通过点击保存按钮,选择文件格式并保存推理后的结果图像。

使用Onnx模型进行图像检测的主要步骤是什么?

主要步骤包括选择图片、进行推理、应用NMS过滤结果以及绘制检测框和标签。

Onnx模型的版本和许可证信息是什么?

模型版本为8.0.172,许可证为AGPL-3.0。

🏷️

标签

➡️

继续阅读