当前位置: 首页 > news >正文

[C#]使用onnxruntime部署Detic检测2万1千种类别的物体

【源码地址】

github地址:https://github.com/facebookresearch/Detic/tree/main

【算法介绍】

Detic论文:https://arxiv.org/abs/2201.02605v3
项目源码:https://github.com/facebookresearch/Detic

在Detic论文中,Detic提到了一种新目标识别方法,将分类和定位任务解耦成两个独立的问题。Detic的数据集分为两类:一种是传统目标检测数据集,其中包含类别标签和bbox信息;另一种是label-image数据,类似于图像分类数据,不包含bbox信息。对于第一种数据,Detic可以按照传统目标检测的方式进行训练,从中学习到分类器的权重W和bbox预测分支B。对于第二种数据,仅进行分类任务,仍然可以使用相同的分类器权重W。这种方法的好处在于,使用第二种数据,你可以训练更多种类的分类器,从而降低了数据标注的成本。
在当前情况,与图像分类相比,目标检测的标注数据量明显有限。以LVIS(Large Vocabulary Instance Segmentation)数据集为例,它包含了120,000张图片,涵盖了1000多个类别,而OpenImages数据集拥有1.8百万张图片,包含了500多个类别。相比之下,早期的图像分类数据集ImageNet在10年前就包含了21,000多个类别和1400万张图片。
由于目标检测数据集中可用的类别和样本数量相对较少,因此在有限的类别上训练的目标检测器容易出现错误。然而,Detic采用了图像分类的数据集,这使得它能够检测出更多样的类别,并提供更精确的结果。
Detic方法的创新之处在于,它利用了图像分类数据的丰富性,以更大的词汇表进行推理,从而增加了目标检测器对不同类别的敏感性和准确性。这意味着Detic能够检测出更多样化和更准确的目标类别,而不仅仅局限于有限的类别集合。
总的来说,Detic的使用图像分类数据集的方法为目标检测带来了更多的多样性和精确性,克服了数据限制带来的问题,降低了数据获取的成本,使得可以更轻松地训练更多种类的分类器,从而提高了检测器的性能和鲁棒性。这种方法对于应对目标检测中的数据稀缺问题具有重要意义。

【效果】

【部分实现代码】

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();DeticManager dm = new DeticManager();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 = dm.Inference(src);sw.Stop();this.Text = "耗时" + sw.Elapsed.TotalSeconds + "秒";var resultMat = dm.DrawImage(src,result);pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap}private void Form1_Load(object sender, EventArgs e){dm.LoadWeights(Application.StartupPath+ "\\weights\\Detic_C2_R50_640_4x_in21k.onnx", Application.StartupPath + "\\weights\\imagenet_21k_class_names.txt");}private void btn_video_Click(object sender, EventArgs e){}}
}

【测试环境】

vs2019

opencvsharp4.8.0

onnxruntime1.16.3

【视频演示】

bilibili.com/video/BV1yC4y1i7dm/

【源码下载地址】

download.csdn.net/download/FL1623863129/88689339

【参考文献】

[1] https://blog.csdn.net/matt45m/article/details/132845005

http://www.lryc.cn/news/272261.html

相关文章:

  • 关于Spring @Transactional事务传播机制详解
  • 力扣139.单词拆分
  • Docker 镜像命令总汇
  • 客户服务:助力企业抵御经济衰退的关键要素与策略
  • 第八周:AIPM面试准备
  • 阿里云2核2G3M服务器能放几个网站?有限制吗?
  • Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C#)
  • 从零开始配置kali2023环境:镜像保存和导入
  • Transformer梳理与总结
  • php之 校验多个时间段是否重复
  • atoi函数的模拟实现
  • 编程笔记 html5cssjs 009 HTML链接
  • Vue实现导出Excel表格,提示“文件已损坏,无法打开”的解决方法
  • 分发糖果,Java经典算法编程实战。
  • 鸿蒙原生应用再添新丁!中国移动 入局鸿蒙
  • 一个人能不能快速搭建一套微服务环境
  • 计算机毕业设计------经贸车协小程序
  • 数据结构OJ实验11-拓扑排序与最短路径
  • 你的第一个JavaScript程序
  • CMake入门教程【基础篇】列表操作(list)
  • 普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)
  • 普中STM32-PZ6806L开发板(使用过程中的问题收集)
  • 八股文打卡day12——计算机网络(12)
  • 自然语言处理2——轻松入门情感分析 - Python实战指南
  • pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字
  • 前端面试
  • Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】
  • KG+LLM(一)KnowGPT: Black-Box Knowledge Injection for Large Language Models
  • 使用anaconda创建爬虫spyder工程
  • 网络通信(7)-TCP协议解析