当前位置:   article > 正文

基于.Net6使用YoloV8的分割模型_net framework yolov8

net framework yolov8

前言

目标检测一文中,我们学习了如何处理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; }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

实例分割

在这里插入图片描述
与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。

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

注意

第一次使用需加载模型至Device,所以推理时间较长,之后运行效率大大提高,建议部署在自己项目中时,可在项目初始化时先推理一张demo图片。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/122532
推荐阅读
相关标签
  

闽ICP备14008679号