0
点赞
收藏
分享

微信扫一扫

阿里云ACK worker节点硬盘扩盘

前言

在目标检测一文中,我们学习了如何处理Onnx模型,并的到目标检测结果,在此基础上,本文实现基于.Net平台的实例分割任务。
执行YoloV8的分割任务后可以得到分割.pt模型。由于Python基本不用于工业软件的部署,最终还是希望能在.Net平台使用训练好的模型进行预测。我们可以将.pt文件转换成.onnx格式的网络模型,然后使用Microsoft.ML.OnnxRuntime读取、运行模型进行预测。

预测结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用环境

NETFramework

  • .Net6.0

Nuget

  • Microsoft.ML.OnnxRuntime.Gpu (1.15.1)
  • OpenCvSharp4(4.7.0.20230115)
  • OpenCvSharp4.Extensions (4.7.0.20230115)
  • OpenCvSharpExtension (2.0.0.2)

model

测试使用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方法主要是解析这两个输出结果。
其中:

output0

张量大小:[1,116,8400],1表示batch,116 = 4 + 80 + 32;4表示预测Box的[x,y,cx,cy],80是80类的预测置信度,32是mask的大小。

output1

张量大小:[1,32,160,160],输出的是32张160*160的Mat。

将两个输出结果糅合在一起,即得到了预测结果。

举报

相关推荐

0 条评论