T-Rex:检测一切 | 基于视觉提示的开集检测器,检测并计数

图1. 我们引入了一个交互式对象计数模型T-Rex。给定参考图像上指定的框或点,T-Rex 可以检测目标图像上的所有与指定对象表现出相似模式的实例,然后将其相加得到计数结果。我们先通过T-Rex生成检测到框提示,再使用SAM得到mask,以获得更好的视觉效果

主页:https://trex-counting.github.io/

github: GitHub - IDEA-Research/T-Rex: Detect and count any objects by visual prompting

论文:https://arxiv.org/abs/2311.13596

1、动机

对象计数领域,常用的方法有:

  • 基于密度图的回归:回归一个2D密度图,作为计数结果;这种方法缺乏直观的视觉效果,很难让用户评估结果的准确性; 
  • 闭集目标检测:这是最常规的检测任务,需要闭集、类别已知,如YOLO系列等;这种方式如果要处理新类别,需要重新标注数据并训练模型,这是耗时且劳动密集的;
  • 开集目标检测:如Grouping DINO,通过文本提示检测任意对象,这种方式的缺点是很多对象没有简洁的文本描述,这样在使用时,要定位想要的对象就变得比较困难,也即,很难找到准确的提示词;
  • 多模态大语言模型问答:也即MLLM QA,用户通过问答来进行计数;这种方式的缺点是LLM的幻觉问题导致结果不可信,通常直接给出结果,却没有让用户可信的证据;

基于对上述方法缺点的观察,作者认为一个实用的计数系统应当具备以下四个特点:

  1. 直观的视觉反馈:应能提供像bbox、point、Mask之类的直观视觉反馈,从而佐证计数结果;
  2. 开集:应能计数任何对象,而非预定义的固定类别;
  3. 视觉提示:应允许用户通过指定一些示例作为提示,来计数特定类别的对象,而不需要像文本描述那样用文本来提示;
  4. 交互性:应能允许用户参与到整个计数过程,进行纠错等操作;
图 2. T-Rex 是一个对象计数模型,其特征是:基于检测、视觉提示、交互和开集

于是,作者设计出了T-Rex,同时具备以上四个特点,允许用户交互式地在开集上进行检测一切、计数一切。

2、方法

2.1 整体架构

T-Rex主要包括三个组件:图像编码器(ImageEncoder)、提示编码器(PromptEncoder)、框解码器(BoxDecoder)。一个典型的跨图操作如下所示:

 简单描述一下:

  1. 先试用ImageEncoder对目标图和参考图分别进行图像编码;
  2. 然后将提示和参考图编码结果送入PromptEncoder,得到编码后的提示;
  3. 再然后将编码后的提示和目标图像的编码结果一起送入BoxDecoder,从而得到在目标图像上的检测结果;
  4. 如果检测结果没问题了(可能会经过多轮提示交互),就可以通过阈值过滤器,得到过滤后的目标计数;

*** 需注意 ***:

  1. 有时候一次提示不一定得到好的结果,可能会需要多轮交互提示;这个时候,图像编码是只做一次的,只需要对修改后的提示进行编码并重新进行框解码即可,也即ImageEncoder只在第一轮做一次,后续只做PromptEncoder和BoxDecoder;
  2. 如果不需要跨图,则上述过程中的目标图和参考图就是同一张图像了,也就只需要对图像做一次编码即可。

系统流程如图3所示:

图 3. T-Rex 模型概述。T-Rex 是一个基于检测的模型,包括一个图像编码器来提取图像特征,一个提示编码器来编码用户提供的视觉提示(点或框),以及一个框解码器来输出检测到的框

 2.2 工作模式

  • Positive-only Prompt Mode:仅正例提示模式,只需用户提供正例prompt即可;
  • Positive with Negative Prompt Mode:正例+负例提示模式,需要用户提示正例和负例;一般是先提供正例看看结果如何,若有误检,再提供负例,以消除误检;
  • Cross-Image Prompt Mode:跨图提示模式,用户在参考图上进行提示,得到目标图上的检测结果;这种方式为自动化标注提供了可能,试想一下,我们对一批图像提前标注好,用这些标注作为prompt,在大量的新图像上进行处理,就可以得到预标注结果;

这几种模式的工作流程如图4所示:

图4. T-Rex提供了三个主要的交互工作流,适用于现实应用中的大多数场景

2.3 讨论

T-Rex本质上是一个基于视觉prompt的开集检测器,相比基于文本prompt的开集检测器,区别在于视觉prompt更为直观且不存在问题描述定义不清的问题(比如:一个你从未见过或者无法用语言准备描述的物体)。

在目标计数任务中,一个重要考量是需要高度可信的预测,哪怕多一个少一个都是计数错误。T-Rex通过多轮交互、正负例提示来获取准确的检测检测结果,从而保证了精确的计数。

此外,多轮交互过程中,图像编码只进行一次,后续只对提示进行编码然后再进行框解码,这保证了整个过程的轻量化。

3. 一个新的计数数据集——Count Anything Benchmark

为了对 T-Rex 模型进行全面性能评估,作者提供了一个新的目标计数基准集——CA-44,其包含了44个数据集,涵盖了8个不同领域,如图5所示:

图5. 提出的CA-44基准集概述:CA-44 由八个领域的 44 个数据集组成,主要包括具有较小且密集填充对象的图像

3. 实验结果

 

4. 缺点

目前的T-Rex还有很多缺点:

  1. 在单目标场景中,对目标做了提示后,可能会出现很多背景的误检,模型错误地将背景识别为密集目标;
  2. 密集多目标场景中,不同类别的密集目标可能会误检,需要提供更多负例;
  3. 跨图工作时,尤其是同时也是单目场景时,过拟合的风险很大,模型往往会忽略参考图上的提示,从而在目标图错误地检测出其他类别的目标;

T-Rex中的失败案例:(a)在单目标场景中,如果背景只引入单个提示,T-Rex仍然会检测到图中的密集对象。(b) 在密集的多目标场景中,T-Rex 可以产生错误检测,需要多个提示或否定提示进行校正。(c) 在跨图像工作流程中,T-Rex 在单目标密集场景中的风险过度拟合,导致错误的检测,例如为番茄打丝虫卵。

 

 5. 试玩

在文章开头的主页地址中,我们可以试玩一下作者提供的Demo。

先使用其示例图像:

 再用自己上传的图像(结果有三种选择:point、bbox、mask):

 失败案例(用经典人群计数数据集中的图片,来看看对人头的检测效果如何):

可见,这种密集场景下,人头可判别特征很少,其效果是很不理想的;而对于上面的西瓜、人这种特征明显的目标,则具有不错的效果。

依我之见,此方法和SAM一样,对于常规目标、特征明显的目标是可用且效果显著的,而对于一些特征不显著的非常规目标,如裂缝、密集场景中的人头等,效果不甚理想。

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

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

相关文章

np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?

在代码中,采样是通过以下方式完成的: samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里,np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…

恋上数据结构与算法之二叉堆

文章目录 需求分析Top K 问题堆堆的基本接口设计二叉堆(Binary Heap)最大堆添加思路交换位置的优化实现 删除思路流程图解实现 replace批量建堆自上而下的上滤自下而上的下滤效率对比复杂度计算实现 完整代码 最小堆比较器解析Top K 问题问题分析代码实现内部方法分析问题 2 堆…

vr智慧党建展厅超强参与感增强党员群众认同感、归属感

党建教育与VR虚拟现实技术的结合,是顺应现代信息化发展趋势的要求,不仅打破了传统党建教育的束缚,还丰富了党建宣传教育的渠道,党建教育VR云课堂平台是基于深圳华锐视点自主研发的VR云课堂平台中去体验各种VR党建教育软件或者视频…

主机的容器化技术介绍

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、什么是容器 容器是一个标准化的单元,是一种轻量级、可移植的软件打包技术,容器将软件代码及其相关依赖打包,使应用程序可以在任何计算介质运行。例如开发人员在自己的…

龙芯loongarch64服务器编译安装pyarrow

1、简介 pyarrow是一个高效的Python库,用于在Python应用程序和Apache Arrow之间进行交互。Arrow是一种跨语言的内存格式,可以快速高效地转移大型数据集合。它提供了一种通用的数据格式,将数据在内存中表示为表格,并支持诸如序列化和分布式读取等功能。 龙芯的Python仓库安…

openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能

文章目录 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能136.1 检查办法136.2 异常处理 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能 136.1 检查办法 通过openGauss提供的性能统计工具gs_checkperf可以对硬件性能进行检查。 …

SpringBoot监控Redis事件通知

Redis的事件通知 Redis事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 使用键空间通知功能。 因为 Redis 目前的订阅与发布功能采取的是发送即忘&am…

时间序列预测实战(二十一)PyTorch实现TCN卷积进行时间序列预测(专为新手编写的自研架构)

一、本文介绍 本篇文章给大家带来的是利用我个人编写的架构进行TCN时间序列卷积进行时间序列建模(专门为了时间序列领域新人编写的架构,简单不同于市面上大家用GPT写的代码),包括结果可视化、支持单元预测、多元预测、模型拟合效…

公众号公司数量限制

一般可以申请多少个公众号?目前企业主体只能申请2个公众号,这也意味着想做矩阵公众号的难度提升了。有些公司靠着诸多不同分工的公众号形成一个个矩阵,获取不同领域的粉丝。比如,目前主体为xx旗下公众号,共有30个&…

shell循环

目录 1.循环 循环的三种语句 2.for循环 99乘法口诀 ​编辑​编辑新建用户 将文件下所有.xtx结尾的文件,改名为以.yy结尾 ping存活主机 3.while循环 1100的和 猜数字小游戏 4.until循环 求和 1.循环 已知循环的次数未知循环的次数,但是有一个…

哪个软件消除笔好用?我来告诉你

全民自媒体时代,人人都是自媒体人,越来越多的人接触到修图,剪辑,制作,常常在社交媒体上分享美食制作教程,居家好物,影视混剪,小说解说等各种各样的精彩照片,但是在网上找的图片素材往…

机器学习库:numpy

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 写在开头 基本数据格式 array 数据定位 argmax 数据生成 random.rand random.randn random.randint 维度拓展 expand_dim 结语 写在…