[C#]使用onnxruntime部署yolov8-onnx实例分割模型

news/2024/7/11 0:41:09 标签: c#, YOLO, 开发语言

【官方框架地址】

https://github.com/ultralytics/ultralytics.git
【算法介绍】

YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。

不过 ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原因是 ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于 YOLO 系列模型,而是能够支持非 YOLO 模型以及分类分割姿态估计等各类任务。
总而言之,ultralytics 开源库的两个主要优点是:

融合众多当前 SOTA 技术于一体
未来将支持其他 YOLO 系列以及 YOLO 之外的更多算法


下表为官方在 COCO Val 2017 数据集上测试的 mAP、参数量和 FLOPs 结果。可以看出 YOLOv8 相比 YOLOv5 精度提升非常多,但是 N/S/M 模型相应的参数量和 FLOPs 都增加了不少,从上图也可以看出相比 YOLOV5 大部分模型推理速度变慢了。

额外提一句,现在各个 YOLO 系列改进算法都在 COCO 上面有明显性能提升,但是在自定义数据集上面的泛化性还没有得到广泛验证,至今依然听到不少关于 YOLOv5 泛化性能较优异的说法。对各系列 YOLO 泛化性验证也是 MMYOLO 中一个特别关心和重点发力的方向。

【效果展示】


【实现部分代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;

namespace FIRC
{
    public partial class Form1 : Form
    {
        Mat src = new Mat();
        Yolov8SegManager ym = new Yolov8SegManager();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.Multiselect = false;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
              
                src = Cv2.ImRead(openFileDialog.FileName);
                pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);


            }


        }

        private void button2_Click(object sender, EventArgs e)
        {
            if(pictureBox1.Image==null)
            {
                return;
            }
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var result = ym.Inference(src);
            sw.Stop();
            this.Text = "耗时" + sw.Elapsed.TotalSeconds + "秒";
            var resultMat = ym.DrawImage(src,result);
            pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ym.LoadWeights(Application.StartupPath+ "\\weights\\yolov8s-seg.onnx", Application.StartupPath + "\\weights\\labels.txt");

        }

        private void btn_video_Click(object sender, EventArgs e)
        {
  
        }
    }
}


【视频演示】

bilibili.com/video/BV17c411b7HL/
【源码下载】

https://download.csdn.net/download/FL1623863129/88694721
【测试环境】

vs2019

net framework4.7.2

opencvsharp4.8.0

onnxruntime1.16.3 
【参考文献】

[1] https://zhuanlan.zhihu.com/p/598566644
 


http://www.niftyadmin.cn/n/5309351.html

相关文章

DrGraph原理示教 - OpenCV 4 功能 - 颜色变幻

二值化是逐像素处理,而逐像素处理会有很多效果,这主要是给人眼看的,因为像素值的变化,直观的就是图像变化,比如颜色。 颜色变幻处理 OpenCV提供了一些图片,如下: 粗看是一些风格,…

CNN——ResNet

深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,并且让深度学习真正可以继续做下去,斩获2016 CVPR Best Paper。此外ResNet的作者都是中国人,一作何恺明。ResNet被提出以后很多的网…

手敲MyBatis(十四章)-解析含标签的动态SQL语句

1.前言 这一章主要的就是要解析动态标签里的Sql语句,然后进行条件语句的拼接,动态标签实现了trim和if标签,所以Sql节点就要加上TrimSqlNode和ifSqlNode,我们最终要获取Sql源,动态Sql语句需要一些处理,所以…

如何选择最适合的采购付款 (P2P) 解决方案?

无论企业的业务流程执行得如何,流程中始终存在改进空间。更好的管理系统是获得更好结果的关键,尤其是当企业处于增长阶段时。强大的采购到付款(P2P)系统是加快采购流程,同时保持采购支出可见性的最有效方法之一。 什么…

Redisson 源码解析 - 分布式锁实现过程

一、Redisson 分布式锁源码解析 Redisson是架设在Redis基础上的一个Java驻内存数据网格。在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常…

破壳而出:运维工程师在新科技热潮下的崛起与转型

运维工程师的出路到底在哪里? 在这个飞速发展的数字世界里,运维工程师无疑是IT界冲在最前线的勇士。他们曾是服务器的守护者,他们曾是故障的消灭者,他们曾是性能的推手。然而,随着科技的发展和市场需求的变化&#xf…

Docker 容器管理和镜像管理基础知识(二)

Docker 容器管理和镜像管理 容器管理 docker create 命令用于在 Docker 中创建一个新的容器,但不会自动启动它。这个命令会返回容器的 ID,可以使用它来 进一步操作容器,这也是与 docker run 命令的一个区别 以下是 docker create 的基本用…

Debian 12

debian | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror apt update & apt upgrade apt dist-upgrade apt-get install fcitx fcitx-*pinyin* dpkg-configure tzdata sudo sh -c dpkg-configure tzdata date -R