【AIGC】17、MM-OVOD | 同时使用文本示例和图像示例来指导分类

news2024/11/15 10:37:04

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 框架总览
        • 2.1.1 Text-based classifiers from language descriptions
        • 2.1.2 Vision-based Classifiers from Image Exemplars
        • 2.1.3 Constructing Classifiers via Multi-Modal Fusion
    • 三、效果
      • 3.1 数据集
      • 3.2 实现细节
      • 3.3 开集目标检测结果

论文:Multi-Modal Classifiers for Open-Vocabulary Object Detection

代码:https://github.com/prannaykaul/mm-ovod

官网:https://www.robots.ox.ac.uk/~vgg/research/mm-ovod/

出处:ICML 2023

一、背景

本文的目的是为了实现开集目标检测(open-vocabulary object detection),也就是希望能构建一个能够检测在训练过程中没见过的类别样本的模型,让使用者不需要进行重新训练就能够检测出其感兴趣的类别。

作者使用标准的两阶段检测器作为检测框架,并且探索了三种不同的方式来实现对新类别的输出:

  • 语言描述
  • 图像示例
  • 语言描述和图像示例结合

贡献点:

  • 提出了一个 large language model(LLM)来对目标类别生成有用的语言描述
  • 在图像示例上使用了一个视觉聚合器,能够接受任意数量的图像作为输入
  • 提出了一个简单的方法来将语言描述和图像示例进行融合,能够产生一个多模态的分类器

现有工作的回顾:

  • 现有的工作已经探索了使用 text embedding 来代替传统检测器中的可学习分类器,主要是通过使用手工 prompt 将类别名称送入训练好的 text encoder 中进行重新编码,如 ’a photo of a dalmatian‘,但这种方式不是最优的,有下面三个问题:

    • 这种方式很大程度上依赖于 text encoder 的能力,可能会导致词汇歧义,如 ’nail’ 即可以是指甲也可以表示钉子, “the hard surface on the tips of the fingers” 和 “a small metal spike with a flat tip hammered into wood to form a joint”,只对 class name 进行编码很难区分这两个概念

    • 对使用者来说,class name 也可能是不知道的,但 image exemplar(图片示例)就可以和好的解决该问题

    • 多模态信息可能更好,比如一个有罕见翅膀的蝴蝶,这就很难用语言来描述出来,如果使用图片示例就能够 ”tell a thousand words",也更有效率

本文工作是怎么解决的:

  • 提出了 multi-modal 开集目标检测器,通过使用语言描述、图片示例、以及两者的结合来实现对样本的检测
  • 作者建立了一个自动寻找目标类别视觉描述的方法,即先问 LLM 问题,在得到了回答之后,将该回答作为线索来加强 text encoder 生成的类别描述
  • 此外,作者还提出了 image exemplers,来帮助更清楚的描述所需的样本
  • 最后,作者提出了一个融合语言描述的图像示例的方式,产生了一个多模态分类器,比任意单模态的方法表现都要好

二、方法

整个问题描述:给定一个图片 I ∈ R 3 × H × W I \in R^{3 \times H \times W} IR3×H×W 输入开集目标检测器,会有两个输出:

  • 类别标签 c j ∈ C T E S T c_j \in C^{TEST} cjCTEST(infer 时候定义的)
  • 框位置,定义了检测目标的位置

如何训练:使用两个数据集来训练

  • 检测数据集 D D E T D^{DET} DDET,包含 bbox 坐标,类别词汇标签 C D E T C^{DET} CDET
  • 分类数据集 D I M G D^{IMG} DIMG,只包含图像的 label,对应的是类别词汇标签 C I M G C^{IMG} CIMG
  • 且一般来说, C T E S T 、 C D E T 、 C I M G C^{TEST}、C^{DET}、C^{IMG} CTESTCDETCIMG 没有严格的重合或不重合的限制

2.1 框架总览

在这里插入图片描述

检测器:CenterNet2

输出: { c j , b j } j = 1 M \{c_j,b_j\}_{j=1}^M {cj,bj}j=1M

输出可以被重写如下:

在这里插入图片描述

  • 每个输入都会按顺序经过:image encoder、proposal generator、RoI feature pooling module,得到最终的 RoI features f j f_j fj
  • RoI features 会被输入 bbox module 来产生位置坐标,也会被输入 classification module 来产生分类结果

在闭集目标检测中,上面所有部件都是固定好的,但在开集目标检测中,分类器 Φ C L S \Phi_{CLS} ΦCLS 不是在训练中固定的,可以从其他途径获得。

这就允许推理的类别可以和检测训练的类别不一样,可以在推理的时候重新设置检测的类别。

下面会介绍不同的分类器类别设置方式:

  • 从自然语言获得
  • 从图像示例获得
  • 从两者的结合获得

2.1.1 Text-based classifiers from language descriptions

现有的 OVOD 方法,如 Detic 和 ViLD,都是简单的使用 text-based 分类器来实现,也就是使用手工定制的 prompt 来编码类别名称,如 a photo of a(n) {class name} 或者 a(n) {class name}

这种方法主要依赖于 text encoder 对 class name 的理解来产生 text-based 分类

本文的方法,作者使用 LLM 来先生成对一个类别的描述,该描述会包括很多额外的细节信息,有两个好处:

  • 能够缓解词汇意思的混淆(比如一个 class name 可能有两种不同的含义)
  • 也能够避免人们要花费很多的时间来斟酌描述词来实现对想要的类别的描述

如图 2 展示了基于 text 来生成的描述信息

提问的 prompt 为:what does a(n) {class name} look like?

作者使用 GPT-3 来为每个类别生成 10 个描述,图 2 展示了 3 个,更多的示例见附录。

在这里插入图片描述

对类别 c,给定 M 个简单文本描述,作者使用 CLIP text encoder 对所有关键元素进行了 encode,然后对这几个描述求平均即可得到对该类别的描述。

在这里插入图片描述

在检测推理阶段,text-based 分类器是被冻结的,其他参数是可以更新的,也就是公式 1-2 中除了 Φ C L S \Phi_{CLS} ΦCLS 外,其余都更新。

一些回答示例:

在这里插入图片描述

2.1.2 Vision-based Classifiers from Image Exemplars

当无法很明确的用语言描述想要的类别特征时,使用图像示例是一个很不错的选择。

所以,本文作者提出了使用图像示例的方式来指导分类器,如图 3 所示

在这里插入图片描述

针对类别 c,给定 K 个 RGB 图像示例,使用 CLIP visual encoder 对每个图像示例进行编码,产生 K 个编码特征,然后输入 Transformer 结构中(有一个可学习的 token [CLS] —— t C L S t_{CLS} tCLS

在这里插入图片描述

Transformer 结构能很好的聚合这 K 个图像示例,并且使用 [CLS] token 来作为类别

训练 transformer 聚合器的所有图像示例都来自于 ImageNet-21k-P

如何离线训练视觉聚合器:

视觉聚合器是离线训练的,不会在训练检测模型时更新

训练的目标是学习如何结合多个图像示例来产生对 OVOD 有效的 vision-based 分类器

作者使用 CLIP image encoder来对每个图像示例进行特征提取,且在训练时会冻结参数来提高训练效率,并且防止忘记一些类别。

为了得到强有力的 vision-based 分类器,作者使用了对比学习:

  • 对每个类别,从 visual aggregator 中输出的 embedding 都期望和其他类别的 embedding 的相似度变大,和同类样本的相似度变小
  • 所以,作者使用 infoNCE loss,且使用 ImageNet-21k-P 训练图像分类,大约包括 11 M 图像(11K 类别)

一些 image exemplers 示例:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.1.3 Constructing Classifiers via Multi-Modal Fusion

对于给定的类别 c,同时使用 text-based 和 vision-based 分类器的多模态分类器计算如下:

在这里插入图片描述

如图 1 展示了整个 pipeline

在这里插入图片描述

三、效果

3.1 数据集

标准 LVIS Benchmark:

本文的很多实验都基于 LVIS 目标检测数据集,包含大量的词汇类别和长尾分布的目标实例。

LVIS 包含 1203 个类别,约 100k 图像,基于没类的样本数量将图像被分为三大类:稀缺、常见、频繁出现

训练数据集:

  • 移除了 LVIS 中稀缺类别 317 个,但不移除整个图像,也就是对稀缺类别目标移除标注框
  • 使用常见、频繁出现的数据作为 LVIS-base,即使用 LVIS-base 作为 D D E T D^{DET} DDET

测评:

  • 之前的方法都是使用 LVIS 测试集来测评,将 rare classes 作为新类别
  • rare classes 的 mask AP 为 APr
  • 所有类别的 mask AP 为 mAP

3.2 实现细节

1、目标检测框架

框架使用 CenterNet2,backbone 为 resnet-50,在 ImageNet-21k-P 上进行了预训练

2、检测器的训练

训练方式类似 Detic,使用联合 loss

作者只使用检测数据集 D D E T D^{DET} DDET 来训练 OVOD 模型,使用 4x schedule(大约 LVIS-base 58 个 epochs,或使用 batch size 64 训练 90k iterations )。

当使用额外的 image-labelled data(LN-L)时,同时训练 D D E T D^{DET} DDET D I M G D^{IMG} DIMG 训练 4x schedule(90k iterations),采样比例为 1:4,batch size 为 64 和 256。

对于图像级别标注的数据 D I M G D^{IMG} DIMG,只有图像级别的标签,没有 bbox,作者参考 Detic,选择了类别未知的最大 proposal 框,送入检测器进行训练,更多的细节见 Detic 文章。

3、基于文本的分类器构建

对 LVIS 的每个类别,先使用 GPT-3 生成 10 个描述,然后计算得到平均的 text encoder

4、基于视觉的分类器构建

视觉聚合器是使用 Transformer,训练数据使用的是 ImageNet-21-P 数据集

5、多模态分类器的构建

作者计算的是类别-wise 的每个模态的 l 2 l^2 l2-normalised

3.3 开集目标检测结果

LVIS OVOD Benchmark:

在这里插入图片描述

Cross-dataset Transfer:

在这里插入图片描述

消融实验:

  • 使用视觉特征的分类器为橘色行
  • 使用文本特征的分类器为蓝色行
  • 使用多模态特征的分类器为灰色行

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

双向交错CCM图腾柱无桥单相PFC学习仿真与实现(2)SOGI_PLL学习仿真总结

目录 前言 SOGI基本原理 锁相环基本原理 仿真实现及说明 总结 前言 前面总结了双向交错CCM图腾柱无桥单相PFC系统实现,后面把问题细分,关于SOGI锁相环的应用和学习在这里总结下。 双向交错CCM图腾柱无桥单相PFC学习仿真与实现(1&#x…

Collection接口详细介绍(下)

前言: 本篇文章主要讲解Java中的Collection接口以及相关实现类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601…

CSDN 周赛 59 期

CSDN 周赛 59 期 前言判断题单选题题目1题目2填空题编程题1、题目名称:坏掉的打字机2、题目名称:布尔零点计数小结前言 由于最近,csdn 每日一练新增了两个题目,按照惯例,那么新增的题目,会就近出现在最近的 CSDN 周赛中,嗯,经常参加周赛,并关注每日一练社区的小伙伴应…

51单片机一个TIMER输出6个PWM

51单片机的timer很少,往往16bit的timer只有一个,可以硬件输出的channel也不多。如我手上这就是这个情况,timer1, 16bit, 只有三个通道。我想输出6个pwm,这个就无法硬件的方式了。只能使用软件模拟了。pwm是1-20ms一个周期&#xf…

Thinking in Java第四版2.8注释和嵌入式文档

文章目录 前言一、注释风格1.单行注释2.多行注释 二、语法三、标签总结 前言 Java8官方在线文档 文档描述对每个系统来说都是必备且重要的,这里将介绍一些javadoc标签,以便加深对文档的理解和编写等。 一、注释风格 1.单行注释 单行注释以一个//起头&a…

JavaWeb之tomcarHTTP

1 DOM4j Xml解析 1.1 JAXP  JDK内置,不需要导入第三方jar包,简单工具优先选择。  支持两种解析方式:DOM、SAX 1.1.1 JAXP—DOM 加载xml 生成一个DOM树。获得整个文档的描述对象Document 解析 api 获得工厂 DocumentBuilderFactory –》 …

【MySql】MySql的事务基础篇

文章目录 CURD加控制什么是事物为什么会出现事务事务的版本支持事务的提交方式 CURD加控制 模拟一个买票系统的场景如下所示: MySQL注定会被多个客户端进行访问的,这个是肯定的,存储的都是数据,数据在上层可能有一个线程在用&…

C++17

目录 基本语言特性结构化绑定if和switch初始化器 std::string_view属性[[nodiscard]][[maybe_unused]][[fallthrough]] 模板特性新的标准库组件std::optional<>std::variant<>std::anystd::bytestd::as_const 文件系统库零星新特性 基本语言特性 结构化绑定 概念…

ubuntu安装WPS2019以及解决缺少字体问题

环境&#xff1a;ubuntu22.04.2 LTS 步骤&#xff1a; 1.去官网下载最新的WPS&#xff0c;官网地址如下&#xff1a;WPS Office 2019 for Linux-支持多版本下载_WPS官方网站 2.sudo dpkg -i 安装包.deb 3.安装完成&#xff0c;首次用WPS打开某个文档&#xff0c;会出现如下报…

硬件入门之什么是三极管

硬件入门之什么是三极管 文章目录 硬件入门之什么是三极管一、三极管是什么&#xff1f;&#xff08;百度百科&#xff09;三极管的3种工作状态分别是截止状态、放大状态、饱和状态 二、实际应用场景1.放大电路 &#xff08;放大状态&#xff09;2、开关电路&#xff08;截至状…

【聚类算法】谱聚类spectral clustering

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 说明&#xff1a; 后续增补 1. 正文 1.1 整体理解 谱聚类&#xff08;Spectral Clustering&#xff09;是一种基于图论的聚类方法&#xff0c;将带权无…

基于java,springboot的校园闲置物品租售系统设计与实现

背景 校园闲置物品租售系统应有的主要功能模块&#xff0c;本系统有管理员、卖家和用户&#xff0c;管理员&#xff1b;首页、个人中心、用户管理、卖家管理、商品种类管理、商品信息管理、商品租借管理、商品购买管理、闲置鱼塘、系统管理&#xff0c;用户&#xff1b;首页、…

Java并发中的原子性、可见性和有序性

基于JMM的内存模型&#xff0c;Java并发编程的核心问题&#xff1a;原子性、可见性、有序性 那么在此之前&#xff0c;我们有必要先说一下Java的JMM内存模型&#xff1a;java内存模型&#xff0c;是java虚拟机规范的一种工作模式&#xff0c;它将内存分为主内存和工作内存。线…

【机器学习】十大算法之一 “PCA”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

高性能计算的意义是什么

高性能计算&#xff08;High-Performance Computing&#xff0c;HPC&#xff09;在现代科学、工程和商业领域中具有重要意义。以下是一些高性能计算的重要意义&#xff1a; 加速科学研究和创新&#xff1a;高性能计算可以提供大规模的计算能力和存储资源&#xff0c;使得科学家…

stm32数据对齐、PRESERVE8、freertos堆栈

为什么需要数据对齐&#xff1f; 避免数据在内存中跨边界存储&#xff0c;减少读取数据次数&#xff0c;提高效率&#xff0c;本质上是以空间换时间的做法 下图中属于同一水平位置的为同一边界 变量在同一边界里的一次存储周期就可以读取 一旦跨了上下两个边界来存储就需要至少…

干爆源码系列之Step by step lldb/gdb调试多线程

Step by step lldb/gdb调试多线程 0.叙谈1.断点分析2.多线程切换 2.1 并发队列 2.1.1 两次入队 2.2 线程调度 2.2.1 执行build端子MetaPipeline 2.2.1.1 Thread6调度第一个PipelineInitializeTask 2.2.1.2 Thread7调度第二个Pipelin…

TypeScript 数据联合类型的解读

概念&#xff1a; 联合类型&#xff08;Union Types&#xff09;表示取值可以为多种类型中的一种&#xff0c;或者也可以理解将多个类型合并为一个类型对变量进行注解。 语法结构&#xff1a; 联合类型使用 | 分隔每个类型。 let 变量&#xff1a;类型1 | 类型2 | 类型3… 案列…

基于Java校园代购服务订单系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

你的前端技术是否能通过这些高频面试题?

文章目录 1.储存了某个数据到 localStorage&#xff0c;立即进行 localStorage.getItem&#xff0c;能否取到值&#xff1f;2.实现异步的方式有几种3.异步不阻塞4.选择 div 的第二个子元素5.display: none 和 visibility: hidden 的区别6.如果想要让一个元素的宽高包含元素的 b…