赞
踩
在目标检测一文中,我们学习了如何处理Onnx模型,并的到目标检测结果,在此基础上,本文实现基于.Net平台的实例分割任务。
执行YoloV8的分割任务后可以得到分割.pt模型。由于Python基本不用于工业软件的部署,最终还是希望能在.Net平台使用训练好的模型进行预测。我们可以将.pt文件转换成.onnx格式的网络模型,然后使用Microsoft.ML.OnnxRuntime读取、运行模型进行预测。
测试使用coco128数据集训练生成的模型:
yolov8n-seg.onnx
模型下载地址:yolov8n-seg.onnx
/// <summary> /// segment result /// </summary> public class SegPrediction { /// <summary> /// label /// </summary> public SegClass? Label { get; init; } /// <summary> /// Box /// </summary> public Rect Rectangle { get; init; } /// <summary> /// score /// </summary> public float Score { get; set; } /// <summary> /// orginal mask 32 /// </summary> public Mat Mask { get; set; } /// <summary> /// rgb mask /// </summary> public Mat RgbMask { get; set; } }
与Detect任务不同的是,Segment任务的模型会输出两个张量,一个是detect的检测结果,另一个是分割Mask的概率。如下图所示:
ParseOutput方法主要是解析这两个输出结果。
其中:
张量大小:[1,116,8400],1表示batch,116 = 4 + 80 + 32;4表示预测Box的[x,y,cx,cy],80是80类的预测置信度,32是mask的大小。
张量大小:[1,32,160,160],输出的是32张160*160的Mat。
将两个输出结果糅合在一起,即得到了预测结果。
第一次使用需加载模型至Device,所以推理时间较长,之后运行效率大大提高,建议部署在自己项目中时,可在项目初始化时先推理一张demo图片。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。