YOLO V5 ONNX模型在C# 中部署

这篇具有很好参考价值的文章主要介绍了YOLO V5 ONNX模型在C# 中部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于Yolo5训练自定义数据集,请参考此教程:YOLO5训练自定义数据集

完整项目(VS2022)
链接:https://pan.baidu.com/s/17jQUx-Dp0YYC4YWzYLs0AA?pwd=yzj9
提取码:yzj9

一 YOLO 导出ONNX模型

在export.py 中修改参数(如下图),运行导出ONNX
image.pngimage.png

二 Yolov5Net.Scorer.dll文件设置及编译

C# ONNX模型推理dll库:
https://github.com/mentalstack/yolov5-net
根据模型修改model文件后,再编译dll,在项目中引用此dll
image.png

public class YoloCocoP5Model : YoloModel
{
//输入图像大小
public override int Width { get; set; } = 640;
public override int Height { get; set; } = 640;
public override int Depth { get; set; } = 3;

/// <summary>
/// 对象种类数 注意:此值=对象实际种类数+5
/// </summary>
public override int Dimensions { get; set; } = 6;

public override int[] Strides { get; set; } = new int[] { 8, 16, 32 };

public override int[][][] Anchors { get; set; } = new int[][][]
{
new int[][] { new int[] { 010, 13 }, new int[] { 016, 030 }, new int[] { 033, 023 } },
new int[][] { new int[] { 030, 61 }, new int[] { 062, 045 }, new int[] { 059, 119 } },
new int[][] { new int[] { 116, 90 }, new int[] { 156, 198 }, new int[] { 373, 326 } }
};

public override int[] Shapes { get; set; } = new int[] { 80, 40, 20 };

//阈值设定,大于此阈值才识别
public override float Confidence { get; set; } = 0.40f;
public override float MulConfidence { get; set; } = 0.25f;
public override float Overlap { get; set; } = 0.45f;


//ONNX模型的输出变量名称,可在https://netron.app/中查看
public override string[] Outputs { get; set; } = new[] { "output0" };

public override List<YoloLabel> Labels { get; set; } = new List<YoloLabel>()
{

//模型中的对象的种类信息
new YoloLabel { Id = 0, Name = "Stop-Sign" },



};

public override bool UseDetect { get; set; } = true;

public YoloCocoP5Model()
{

}
}
三 C# 中模型进行推理

C# 项目编译环境为>=.NET5,本案例使用.NET6
需要安装以下库:
Microsoft.ML.OnnxRuntime (ONNX运行时)
OpenCvSharp4.Extensions (输出图像框定对象使用)
OpenCvSharp4.Windows (输出图像框定对象使用)
同时需要引用上一步编译的:Yolov5Net.Scorer.dll
image.png

测试代码:

using Yolov5Net.Scorer.Models;
using Yolov5Net.Scorer;
using OpenCvSharp;
using System.Windows.Forms;
using Point = OpenCvSharp.Point;

namespace YOLO_WinformDemo
{
    /// <summary>
    /// 此项目使用.NET6编译
    /// </summary>


    public partial class Form1 : Form
{
YoloScorer<YoloCocoP5Model> scorer;

string filePath = "";
public Form1()
{
InitializeComponent();

//加载模型地址
scorer = new YoloScorer<YoloCocoP5Model>(Application.StartupPath+ "\\onnx\\best.onnx");

}

private void btn_selectFile_Click(object sender, EventArgs e)
{
OpenFileDialog openFile=new OpenFileDialog();
if(openFile.ShowDialog() == DialogResult.OK)
{
filePath = openFile.FileName;
using var image = Image.FromFile(openFile.FileName);

picbox_Display.BackgroundImage = AddInfoToImage(image);


}


}



/// <summary>
/// 使用Opensharp4给识别对象加框和标注
/// </summary>
/// <param name="inputImage"></param>
/// <returns></returns>
public Image AddInfoToImage(Image inputImage)
{


List<YoloPrediction> predictions = scorer.Predict(inputImage);

if (predictions.Count == 0) {

return inputImage;

}
else
{

Mat inputMat = Cv2.ImRead(filePath, ImreadModes.Color);

foreach (YoloPrediction prediction in predictions)
{


Point p1 = new Point(prediction.Rectangle.X, prediction.Rectangle.Y);//矩形左上顶点

Point p2 = new Point(prediction.Rectangle.X+ prediction.Rectangle.Width, prediction.Rectangle.Y + prediction.Rectangle.Height);//矩形右下顶点

Point p3 = new Point(prediction.Rectangle.X, prediction.Rectangle.Y - 60);
Scalar scalar = new Scalar(0, 0, 255);
Cv2.Rectangle(inputMat, p1, p2, scalar, 7);

Cv2.PutText(inputMat, prediction.Label.Name+" "+ Math.Round(prediction.Score,2), p3, HersheyFonts.HersheyDuplex, 2, scalar, 4);

}


return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(inputMat);


}


}


}
}

测试效果:
image.png文章来源地址https://www.toymoban.com/news/detail-463067.html

到了这里,关于YOLO V5 ONNX模型在C# 中部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 复现YOLO5所遇到的问题

    一、  解决方案: 由于没有影响模型继续运行,理解为简单的warning。根据查询问题,推断是由于 pytorch和torchvision的版本原因导致的。 二、  解决方案: 由于没有影响模型继续运行,理解为简单的warning。 但是根据提示,找到functional.py的445行, 加上,indexing = \\\'ij\\\',   这个错

    2024年02月08日
    浏览(19)
  • 人脸与关键点检测:YOLO5Face实战

    Github:https://github.com/deepcam-cn/yolov5-face 导读:居然花了一天时间把该项目复现,主要是折腾在数据集格式上,作者居然在train2yolo中居然把Widerface训练集(12000+张图)重新一张一张保存,不这么还出bug,原因是无法读到数据缓存;在评估阶段,val2yolo也没用上。搬运工,一个字,

    2024年02月06日
    浏览(28)
  • ubuntu18.04从0到1在ros上跑yolo5

    ubuntu篇---ubuntu20.04安装cuda和cudnn_ubuntu安装cudann_心惠天意的博客-CSDN博客 操作系统环境:Ubuntu 20.041. 安装N卡驱动首先我们需要添加源,sudo add-apt-repository ppa:graphics-drivers/ppasudo apt update然后检查可以安装的驱动版本,ubuntu-drivers devices选择最合适的版本安装即可,sudo apt install n

    2024年02月12日
    浏览(17)
  • AI项目八:yolo5+Deepsort实现目标检测与跟踪(CPU版)

    若该文为原创文章,转载请注明原文出处。    DeepSORT 是一种计算机视觉跟踪算法,用于在为每个对象分配 ID 的同时跟踪对象。DeepSORT 是 SORT(简单在线实时跟踪)算法的扩展。DeepSORT 将深度学习引入到 SORT 算法中,通过添加外观描述符来减少身份切换,从而提高跟踪效率。

    2024年02月07日
    浏览(25)
  • 【论文阅读】YOLO系列论文:YOLO v5

    代码: https://github.com/ultralytics/yolov5github.com 优点 拥有四种模型,可以灵活部署 缺点 在性能上稍弱于YOLO V4 模型的改进 增加了Focus切片、自适应锚框、自适应图片缩放结构,保留信息,加快推理速度 有4个版本,分别是Yolov5s,Yolov5m,Yolov5l,yolov5x四个模型,其中Yolov5s网络是该

    2024年02月16日
    浏览(25)
  • YOLO v5 代码精读(3)YOLO网络结构

    YOLO模型共有五种模型规格,规格越大的模型准确率越高,相应的预测时间也就越长。一般默认选择YOLOv5s,也可根据需求选择更大或更小的模型。 这里以YOLO v5s为例,分析YOLO的网络结构。 配置变量 nc:表示检测的类别数量,这里默认取自coco数据集的80个类别 depth_multiple:控制

    2023年04月15日
    浏览(19)
  • YOLO v5 实现目标检测

    本文用于学习记录 YOLO v5 实现目标检测 安装完成以后,按下开始键( win 键)出现 anaconda3 这个文件夹,说明 anaconda 已经安装好了 点击左下图中标红的图标,就可打开 anaconda 的终端如右下图: 输入 conda create -n pytorch1 python=3.9,在 base 环境中这条命令,就会创建一个新的虚拟

    2024年01月16日
    浏览(21)
  • YOLO v5 引入解耦头部

    在 YOLO x中,使用了解耦头部的方法,从而加快网络收敛速度和提高精度,因此解耦头被广泛应用于目标检测算法任务中。因此也想在YOLO v5的检测头部引入了解耦头部的方法,从而来提高检测精度和加快网络收敛,但这里与 YOLO x 解耦头部使用的检测方法稍微不同,在YOLO v5中引

    2024年02月05日
    浏览(21)
  • 100种目标检测数据集【voc格式yolo格式json格式coco格式】+YOLO系列算法源码及训练好的模型

    提示:本文介绍并分享了应用于 各行业 、 各领域 非常有用的 目标检测数据集 (感谢您的关注+三连, 数据集持续更新中… ),其中绝大部分数据集作者 已应用于各种实际落地项目 ,数据集 整体质量好 , 标注精确 ,数据的 多样性充分 , 训练 模型拟合较好 ,具有较高

    2023年04月09日
    浏览(23)
  • 【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测

    源码链接:https://github.com/ultralytics/ultralytics yolov8和yolov5是同一作者,相比yolov5,yolov8的集成性更好了,更加面向用户了 YOLO命令行界面(command line interface, CLI) 方便在各种任务和版本上训练、验证或推断模型。CLI不需要定制或代码,可以使用yolo命令从终端运行所有任务。 如果

    2023年04月24日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包