[C#]winform使用纯opencvsharp部署yolox-onnx模型

【官方框架地址】

https://github.com/Megvii-BaseDetection/YOLOX
【算法介绍】

YOLOX是一个高性能的目标检测算法,它是基于YOLO(You Only Look Once)系列算法的Anchor  Free版本。YOLOX由Megvii Technology的研究团队开发,并在2021年推出。该算法在保持YOLO系列原有速度与精度优势的同时,引入了新的改进和创新点,使得在各种规模的数据集上都能取得卓越的性能。

### YOLOX的主要特点

#### 锚框(Anchor boxes)的去除
YOLOX摒弃了传统的锚框机制。锚框是一种预设的框,用于在训练初期引导模型识别物体的大致位置和尺寸。但锚框也存在局限性,比如需要手动设计、可能引入先验偏差等。YOLOX通过引入anchor-free的机制,直接预测目标的中心点和宽高,从而减少了对先验知识的依赖,简化了算法结构。

#### 解耦头(Decoupled head)
YOLOX采用解耦头设计,将分类和回归两个任务分开处理。这种设计有助于专门化网络的每个部分以处理不同的任务,从而提高整体性能。

#### 强化数据增强(Strong data augmentation)
为了提高模型的泛化能力,YOLOX采用了包括Mosaic和MixUp在内的多种强化数据增强策略。这些策略可以有效扩充数据集,增加模型训练时的样本多样性,进而提高模型对各种变化的适应能力。

#### 支持多尺度训练
YOLOX支持在不同尺寸的图片上进行训练,这意味着模型可以适应各种分辨率的输入,增强了模型的鲁棒性和适应性。

#### SimOTA标签分配策略
YOLOX引入了一种新的标签分配策略SimOTA,用于在训练过程中更高效地分配正负样本。这种策略可以自动调整与不同检测框关联的目标数量,从而优化训练过程。

#### 模型剪枝和量化
YOLOX还考虑了模型部署的需求,提供了模型剪枝和量化的方案,用以减少模型的大小和提高推理速度,使其更适合在移动或边缘计算设备上运行。

### YOLOX与其他YOLO版本的比较

YOLOX不仅继承了YOLOv4的优点,并且结合了YOLOv3和YOLOv5的一些特性。YOLOX相对于YOLOv4,在速度和精度上都有显著提升,同时也具有更好的扩展性。与YOLOv5相比,YOLOX在开放测试集上通常能够实现更高的精确度和更快的速度。

### 应用场景

YOLOX的高速度和高精度特性使其非常适合用于实时视频分析、自动驾驶、无人机监视、工业自动化检测等多个领域。它可以快速地在视频流中检测出多个目标和分类,满足对实时性要求较高的应用场景。

### 开源与社区

YOLOX是一个开源项目,代码和预训练模型可以在GitHub上找到。它的开源特性吸引了全球的开发者和研究者参与贡献,使得YOLOX能够持续进化和改进。

综合来看,YOLOX是一个强大的目标检测算法,它在YOLO家族中脱颖而出,不断突破目标检测的边界。其创新的设计和优异的性能使得YOLOX在计算机视觉领域有着广泛的应用前景。

【效果展示】


【实现部分代码】

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();YoloxManager detector = new YoloxManager();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;}var result = detector.Inference(src);var resultMat = detector.DrawImage(result,src);pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap}private void Form1_Load(object sender, EventArgs e){detector.LoadWeights(Application.StartupPath+"\\weights\\yolox_s.onnx", Application.StartupPath + "\\weights\\coco.names");}private void button3_Click(object sender, EventArgs e){}}
}


【视频演示】

https://www.bilibili.com/video/BV1V5411i7Zz/
【源码下载】

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

vs2019

netframework4.7.2

opencvsharp4.8.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux—多服务免密登录

文档结构 概念简介配置操作 概念简介 配置操作 场景:在部署gp集群时,希望 master 节点可以使用gpadmin用户可以实现免密登录 slave1和 slave2 节点; step_1: IP映射 xx.xx.xx.101 server-slave1 xx.xx.xx.102 server-slave2说明&#x…

使用Spring Boot集成中间件:基础篇

使用Spring Boot集成中间件:Redis基础讲解 在现代应用开发中,中间件在构建高效、可扩展的系统方面起着至关重要的作用。而Spring Boot作为一种快速开发框架,提供了丰富的集成中间件的能力,使得我们能够轻松地将各种中间件引入到我…

在 Windows IIS 生成证书签名请求(CSR)

本操作方法将逐步指导您生成证书签名请求(CSR)。 这些过程已在Windows 10的IIS 10上进行了测试,但也将在IIS 7.x和8.x中运行。 启动IIS管理器。 Start 开始 IIS管理器。 另外一种快速的方法是打开 运行 命令,然后键入 inetmgr 并…

深度学习算法应用实战 | 利用 CLIP 模型进行“零样本图像分类”

文章目录 1. 零样本图像分类简介1.1 什么是零样本图像分类?1.2 通俗一点的解释 2. 模型原理图3. 环境配置4. 代码实战5. Gradio前端页面5.1 什么是 Gradio ? 6 进阶操作7. 总结 1. 零样本图像分类简介 1.1 什么是零样本图像分类? “零样本图像分类”(Zero-shot …

解决org.apache.jasper.JasperException异常!

解决org.apache.jasper.JasperException异常! 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将一同面对在Java Web开发中常见的问题…

C++获取内存使用情况

在程序编程过程中,为了防止出现内存泄漏情况出现,需要持续关注内存程序内存占用情况。如下方式实现获取当前进程内存使用情况: linux: void my_top(string path, bool flag) {if(flag){FILE* read_top fopen("/proc/self/…

debian 12 zabbix 6.0LTS部署

数据库要求 数据库版本不对,zabbix-server启动不起来 MySQL/Percona8.0.XRequired if MySQL (or Percona) is used as Zabbix backend database. InnoDB engine is required. We recommend using the MariaDB Connector/C library for building server/proxy.Maria…

使用GPT大模型调用工具链

本文特指openai使用sdk的方式调用工具链。 安装openai pip install openai export OPENAI_API_KEY"YOUR OPENAI KEY" 定义工具函数 from openai import OpenAI import jsonclient OpenAI() #工具函数 def get_current_weather(location, unit"fahrenheit&q…

使用懒加载 + 零拷贝后,程序的秒开率提升至99.99%

目录 一、5秒钟加载一个页面的真相二、优化四步走1、“懒加载”2、线上显示 就读取一个文件,为什么会慢呢? 三、先从上帝视角,了解一下啥子是IO流四、写个栗子,测试一下1、通过字符输入流FileReader读取2、通过缓冲流BufferedRea…

Spark---RDD序列化

文章目录 1 什么是序列化2.RDD中的闭包检查3.Kryo 序列化框架 1 什么是序列化 序列化是指 将对象的状态信息转换为可以存储或传输的形式的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的…

⭐Unity LeapMotion与手的相关开发

LeapMotion 官方文档中文翻译帮助手册教程 Hand 一个Hand手对象表示了一个跟踪的手,一个手总是包含5个手指以及相关属性如:Direction,PalmPosition,和Basis(orientation). lamPosition :手掌中心到Leap设备原点以毫米测量的距离 PalmVelocity :手掌移…

YOLOv8改进 | 检测头篇 | 利用DynamicHead增加辅助检测头针对性检测(四头版本)

一、本文介绍 本文给大家带来的改进机制是针对性的改进,针对于小目标检测增加P2层,针对于大目标检测增加P6层利用DynamicHead(原版本一比一复现,全网独一份,不同于网上魔改版本)进行检测,其中我们增加P2层其拥有更高的分辨率,这使得模型能够更好地捕捉到小尺寸目标的细节…

docker启动mongo

用户名:root 密码:123456 version: 3.1 services:mongo:image: mongo:7container_name: mongorestart: alwaysports:- 27017:27017volumes:- /opt/data/mongo:/data/dbenvironment:TZ: Asia/ShanghaiMONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROO…

若依前后端分离版使用mybatis-plus实践教程

1、根目录得pom加入依赖 <properties><mybatis-plus.version>3.5.1</mybatis-plus.version> </properties> <dependencies><!-- mp配置--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus…

微服务治理:什么是微服务生命周期管理 (MLM)?

微服务生命周期管理 (MLM) 指的是管理微服务整个生命周期的各种流程和工具&#xff0c;从其最初的设计和开发到最终的停用。它类似于软件开发生命周期 (SDLC)&#xff0c;但专门针对微服务架构的独特需求进行定制。 以下分解了 MLM 中的关键阶段及其含义&#xff1a; 1. 设计…

第10.2节-简历匹配性和表现力自查

(点击即可收听) 多次投递简历却没有得到回复时&#xff0c;我们应该对自己的简历进行检查和评估&#xff0c;对比那些优秀的简历 找到自己的不足之处并进行修改。 优秀的简历是反复修改出来的&#xff0c;对于每一个需要靠简历找工作的求职者而言&#xff0c;没有完美的简历&am…

【GoLang入门教程】Go语言几种标准库介绍(六)

文章目录 前言几种库Net库 (网络库&#xff0c;支持 Socket、HTTP、邮件、RPC、SMTP 等)重要的子包和功能&#xff1a;示例 OS库&#xff08;操作系统平台不依赖平台操作封装&#xff09;主要功能&#xff1a;示例 path库(兼容各操作系统的路径操作实用函数)常用函数&#xff1…

wagtail的数据模型和渲染

文章目录 前言页面数据模型数据库字段部分搜索部分编辑面板基础面板结构化面板父页面/子页面类型规则页面URLs自定义页面模型的URL模式获取页面实例的URL 模板渲染为页面模型添加模板模板上下文自定义模板上下文更改模板动态选择模板Ajax 模板 内联模型在多个页面类型之间重用内…

Hadoop之mapreduce参数大全-6

126.指定 Map 任务运行的节点标签表达式 mapreduce.map.node-label-expression 是 Hadoop MapReduce 框架中的一个配置属性&#xff0c;用于指定 Map 任务运行的节点标签表达式。节点标签是在 Hadoop 集群中为节点分配的用户定义的标签&#xff0c;可用于将 Map 任务限制在特定…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机图像转换由Mono10转换为Mono8(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机图像转换由Mono10转换为Mono8&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的Mono10转换为Mono8图的技术背景在NEOAPI SDK里实现相机图像由Mono10转换为Mono8格式 工业相机通过NEOAPI SDK实现相机图像转换的优…