当前位置:   article > 正文

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

c# yolo opencv

【官方框架地址】

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在计算机视觉领域有着广泛的应用前景。

【效果展示】


【实现部分代码】

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using OpenCvSharp;
  12. namespace FIRC
  13. {
  14. public partial class Form1 : Form
  15. {
  16. Mat src = new Mat();
  17. YoloxManager detector = new YoloxManager();
  18. public Form1()
  19. {
  20. InitializeComponent();
  21. }
  22. private void button1_Click(object sender, EventArgs e)
  23. {
  24. OpenFileDialog openFileDialog = new OpenFileDialog();
  25. openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
  26. openFileDialog.RestoreDirectory = true;
  27. openFileDialog.Multiselect = false;
  28. if (openFileDialog.ShowDialog() == DialogResult.OK)
  29. {
  30. src = Cv2.ImRead(openFileDialog.FileName);
  31. pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
  32. }
  33. }
  34. private void button2_Click(object sender, EventArgs e)
  35. {
  36. if(pictureBox1.Image==null)
  37. {
  38. return;
  39. }
  40. var result = detector.Inference(src);
  41. var resultMat = detector.DrawImage(result,src);
  42. pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap
  43. }
  44. private void Form1_Load(object sender, EventArgs e)
  45. {
  46. detector.LoadWeights(Application.StartupPath+"\\weights\\yolox_s.onnx", Application.StartupPath + "\\weights\\coco.names");
  47. }
  48. private void button3_Click(object sender, EventArgs e)
  49. {
  50. }
  51. }
  52. }


【视频演示】

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

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

vs2019

netframework4.7.2

opencvsharp4.8.0

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

闽ICP备14008679号