[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.hqwc.cn/news/321458.html

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

相关文章

MySQL检索距离当前最近的7个小时内,靠近每个时间点数据信息

MySQL检索距离当前最近的7个小时内,靠近每个时间点数据信息 如果你想在最近7个小时内找到每个时间点最接近的数据,即使某些时间点没有数据,你可以使用子查询和窗口函数。以下是一个示例查询: sqlCopy codeSELECTt.time_point,CO…

【KingbaseES】实现MySql函数Median

本方法只支持在聚合函数窗口中调用 不支持在GROUP BY中使用,使用plsql写的玩意新能都会稍微差一些 建议使用原生方法修改 CREATE OR REPLACE FUNCTION _final_median(numeric[])RETURNS numeric AS $$SELECT AVG(val)FROM (SELECT valFROM unnest($1) valORDER BY …

OpenAI换血大震动始末:“ChatGPT之父”奥特曼,缘何被“扫地出门”?

近期,AI业界发生了一场“大地震”。作为聊天机器人ChatGPT的开发者,OpenAI无疑是最受关注的人工智能公司之一。就是这家公司的联合创始人、CEO、有“ChatGPT之父”之称的阿尔特曼在“疯狂的5天”里,经历了被闪电免职、加入微软、最终又官复原…

佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理方法

5B00错误代码的含义 5B00错误代码是指佳能G3800打印机的“废墨仓已满”。这个废墨仓是打印机内部的一个部件,主要用于收集打印过程中产生的废墨。当废墨仓已满时,打印机就会报5B00错误代码。 佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理办法 …

Hadoop入门学习笔记——八、数据分析综合案例

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 八、数据分析综合案例8.1. 需求分析8.1.1. 背景介绍8.1.2…

润滑剂,2026年市场规模将达130亿美元

润滑剂是一种广泛应用于工业生产和机械维护中的材料,它可以降低机器设备的摩擦,提高性能和延长使用寿命。全球市场分析 从全球市场来看,润滑剂市场规模持续增长。根据市场调研机构的数据显示,预计2026年,全球润滑剂市场…

构建基础wlan网络 hcia无线

实验 旁挂组网 二层网络 ac为 dhcp的服务器给ap地址 s1给sta的ip地址 DHCP 业务为直接转发 实验步骤 第一步 poe 开启 poe en 开启 第二步 有线连接 vlan的配置 s1 vlan batch 100 101 连接的端口 port link-type trunk port trunk allow-pass …

计算机网络—网络搭建NAT内外网映射

使用Windows Server 2003 网络拓扑 Router 外网:NAT IP 网段 192.168.17.0/24内网:仅主机模式 IP 172.16.29.4 Client1:仅主机模式 IP 172.16.29.2 网关 172.16.29.1 Client2:仅主机模式 IP 172.16.29.3 网关 172.16.29.1…

ElasticSearch使用Grafana监控服务状态-Docker版

文章目录 版本信息构建docker-compose.yml参数说明 创建Prometheus配置文件启动验证配置Grafana导入监控模板模板说明 参考资料 版本信息 ElasticSearch:7.14.2 elasticsearch_exporter:1.7.0(latest) 下载地址:http…

Linux 进程(八) 进程的退出码

main 函数的返回值叫做进程的退出码。当进程成功退出的时候,我们一般用0来表示。进程失败的时候一般用非零来表示。我们使用不同的数字来表示进程退出时不同的失败原因。 我们查看系统的有多少退出码以及其含义时需要用到strerror() 他的头文件和用法如下。 通过一…

2024腾讯云轻量应用服务器详细介绍_轻量全解析

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器,CPU内存带宽配置高并且价格特别便宜,大带宽,但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年,540元三年、2核4G5M带宽218元一年,756元3年、…

快手推荐算法工程师三面回顾

快手三次技术面试一次HR面试的简单回顾,希望对大家有所启发。 一面 面试官一上来就让写算法题,第一个是计算岛屿数量,第二个是最长回文字串。 然后就是介绍自己的论文。对于论文的工作,面试官只是在问关于论文的问题&#xff0…