多模态:DetCLIPv3解析

news2024/11/15 10:52:17

文章目录

  • 前言
  • 一、介绍
  • 二、方法
    • 2. Open vocabulary detector
      • 2.1 encoder
      • 2.2 decoder
    • 3. Object captioner
  • 三、数据工程
    • 1. Auto-annotation data pipeline
  • 四、训练策略
  • 五、实验
  • 总结


前言

目前多模态目标检测逐渐成为检测领域的主要发力方向,从最初的检测大模型grounding dino, 到YOLO-world, 本文记录最新的多模态目标检测论文DetCLIPv3

paper:http://arxiv.org/pdf/2404.09216


一、介绍

现有的开放词汇表目标检测器(OVD)通常需要用户提供预定义的类别集,这在实际应用场景中限制了它们的使用。
现有方法不同,人类认知能够以分层的方式理解不同粒度的对象,这在当前的OVD系统中尚未实现。
为了解决这些限制,作者提出了 DetCLIPv3,这是一种新型的目标检测器,能够扩展开放词汇表目标检测的范围。

以下面这张图做个简单说明,就能更好的理解作者的purpose;
对于当前OVD来说,输入一张图,模型只能给出预定义的category list中的certain class
但对于人类,我们可以从多粒度去感知它,Phrase, Category, Parent Category


so 作者想实现一个能够多粒度感知的OVD系统
请添加图片描述

二、方法

请添加图片描述

2. Open vocabulary detector

该架构是一个双路径的模型,包括 image encoder and text encoder,detector部分包括一个pixel encoder 和 object decoder。encoder部分指导细粒度特征融合,为decoder提出候选query。

2.1 encoder

这部分思想类似Grounding Dino中的Language-Guided Query Selection请添加图片描述

"""
Input:
image_features: (bs, num_img_tokens, ndim)
text_features: (bs, num_text_tokens, ndim)
num_query: int.
Output:
topk_proposals_idx: (bs, num_query)
"""
logits = torch.einsum("bic,btc->bit",
image_features, text_features)
# bs, num_img_tokens, num_text_tokens
logits_per_img_feat = logits.max(-1)[0]
# bs, num_img_tokens
topk_proposals_idx = torch.topk(
logits_per_image_feature,
num_query, dim = 1)[1]
# bs, num_query

具体来说,通过CLIP分别获得其文本特征和图像特征,输入两个特征张量 image_features 和 text_features,其中 image_features 的维度为 (bs, num_img_tokens, ndim),text_features 的维度为 (bs, num_text_tokens, ndim),bs 表示 batch size,num_img_tokens 和 num_text_tokens 分别表示图像特征和文本特征的总数,ndim 则表示特征维度。

代码首先使用 torch.einsum 函数计算两个特征张量之间的得分矩阵 logits,得分矩阵中的每个元素表示一个图像特征与一个文本特征之间的得分。接下来使用 logits.max(-1)[0] 得到 logits_per_img_feat 张量,该张量的维度为 (bs, num_img_tokens),其中每个元素表示一个图像特征与所有文本特征之间的最大得分。因为我们只需要最大值张量,所以使用 [0] 表示取出最大值张量。使用 torch.topk 函数得到每个图像特征对应的前 num_query 个文本特征的索引。具体来说,该函数用于在某个维度上寻找前k个最大值。

encoder部分思想和grounding dino的基本一致,grounding dino encoder部分如下图:
请添加图片描述

2.2 decoder

解码器部分直接采用DETR-like detector,loss函数如下:
请添加图片描述
作者使用 L1 损失及 GIOU 损失用于框回归;沿用 GLIP,对预测目标是否匹配文本使用对比损失约束(和Grounding Dino采用相同的loss)。

3. Object captioner

请添加图片描述
本文的核心要点在于此,对象标题生成器使 DetCLIPv3 能够为对象生成详细和层次化的标签设计灵感来自 Qformer,采用多模态 Transformer 架构,输入包括视觉(对象或图像)查询和文本标记。

据论文介绍,该模型能够在两种模式下工作:当提供预定义的类别词汇表时,DetCLIPv3 直接预测列表中提到的对象的位置。在没有词汇表的情况下,DetCLIPv3 能够定位对象并为每个对象生成层次化标签。

三、数据工程

1. Auto-annotation data pipeline

训练数据情况如下
请添加图片描述
图中展示了经过多次处理后的标注信息变化,经过VLLM和GPT的调整,图像标注信息越来越丰富,果然数据工程才是如今多模态的core point!!!
数据集包括检测、定位和图像-文本对数据,这些数据包含边界框伪标签。每个输入样本被结构化为一个三元组,包括输入图像、一组边界框和一组概念文本。


此外文章提出了一个自动标注数据pipeline,流程图如下:
请添加图片描述
1)Recaptioning with VLLM:
首先利用BLIP对240K图像-文本对重新标注。prompt如下:
“Given a noisy caption of the image: {raw caption}, write a detailed clean description of the image.”
2)Entity extraction using GPT-4:
利用GPT-4过滤来自VLLM的无实体描述 prompt:
“Here is a caption for an image: {caption}. Extract the part of factual description related to what is directly observable in the image, while filtering out the parts that refer to inferred contents, description of atmosphere/appearance/style and introduction of history/culture/brand etc. Return solely the result without any other contents. If you think there is no factual description, just return ‘None’.”

从过滤后的caption中提取目标实体 prompt:
请添加图片描述
请添加图片描述
3)Instruction tuning of VLLM for large-scale annotation:
在此阶段,使用caption文本和刚获取的目标实例信息fine-tune LLaVA。作者合并了之前的信息使其成为一个简洁的prompt。question-answer pair is constructed as:
请添加图片描述
fine-tune 过程VLLM使用 原始图像和原始caption作为输入,目的是让VLLM去生成精细化的标签。

请添加图片描述

4)Instruction tuning of VLLM for large-scale annotation:

自动标注边界框,使用预训练的开放词汇表对象检测器为图像-文本对数据分配伪边界框标签。

当从VLLM中获得准确的候选对象实体时,可以大大提高检测器的精度。具体来说,我们使用字段“phrase”和“category”作为检测器的文本输入,并使用预定义的分数阈值来过滤产生的边界框。如果两个字段中的任何一个匹配,我们为该对象分配整个实体{phrase, category, parent category}。在使用预定义的置信度阈值进行过滤后,大约有50M的数据被采样用于后续的训练,我们称之为GranuCap50M

为了训练检测器,我们使用“phrase”和“category”字段作为文本标签; 而对于对象captioner,我们将三个字段连接起来——“phrase|category|parent category”——作为对象的基本真理描述。


四、训练策略

为了解决高分辨率输入的计算成本问题,作者提出了一个基于“预训练+微调”的多阶段训练策略,包括:

1)训练开放词汇表检测器 (Stage 1)。
2)预训练对象标题生成器 (Stage 2),使用较低分辨率的输入以提高效率。
3)整体微调 (Stage 3),旨在使标题生成器适应高分辨率输入,同时改进开放词汇表检测器。

通过这些设计,DetCLIPv3 在开放词汇表检测性能上取得了显著的成果,例如,在 LVIS minival 基准测试中,使用 Swin-T 骨干模型取得了 47.0 的零样本固定 AP,显著优于以前的工作

请添加图片描述

五、实验

请添加图片描述
作者还是做了蛮多评测实验的,上表在LVIS数据集上评估了模型的零样本性能,即模型的零样本开放词汇表对象检测能力,可以看出,通过使用固定AP(Average Precision)作为评价指标,DetCLIPv3 在 LVIS minival 上取得了 47.0 和 48.8 的AP,显著优于先前的方法,包括但不仅限于 GD 和 GLIP
(其它实验评测可以参考原文)


总结

DetCLIPv3是一个创新的开放词汇表(OV)检测器,它不仅能够根据类别名称定位对象,还能生成具有层次结构和多粒度(multi-granular)的对象标签。这种增强的视觉能力使得DetCLIPv3能够实现更全面的细粒度(fine-grained)视觉理解,从而扩展了开放词汇表检测(OVD)模型的应用场景。

读完文章不得不说,现在的数据工程真的是百花齐放,利用VLLM+GPT产生的数据fine-tune VLLM的想法实在令人赞叹!

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

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

相关文章

2024年最新版Ajax+Axios 学习【包含原理、Promise、报文、接口等...】

基础知识 AJAX概念 AJAX概念:是浏览器与服务器进行数据通信的技术。 认识URL 定义:统一资源定位符,简称网址,用于访问网络上的资源。 组成: http协议:超文本传输协议,规定浏览器和服务器之…

C++系统教程001

1. 安装 Dev-C编程软件 2. 熟悉 Dev-C的界面 3. cout 输出语句的使用 4. 学会 C程序的编译运 一、认识编译器 我们平时所说的程序,一般指双击后就可以直接运行的程序,这样的程序又称为可执行程序。Windows系统下,可执行程序的后缀一般为.ex…

【C++】手动实现栈的封装

完成了以下功能的封装 目录 代码实现&#xff1a; 输出结果如下&#xff1a; 代码实现&#xff1a; #include <iostream> #include <cstring>using namespace std;class Static { private:int *arr; //动态分配栈int top; //指向栈顶元素i…

Docker中的容器内部无法使用vi命令怎么办?

不知道你是否遇到过,在修改容器内部的配置的时候,有时候会提示vi命令不可用。尝试去安装vi插件,好像也不是很容易,有什么办法可以帮助我们修改这个配置文件呢? 解决办法 这时候,我们就需要用到docker cp 命令了,它可以帮助我们把容器内部的文件复制到宿主机上,也可以将…

深入探究 RocketMQ:分布式消息中间件的卓越之选》

《深入探究 RocketMQ&#xff1a;分布式消息中间件的卓越之选》 一、引言 在当今复杂的网络通讯环境中&#xff0c;传统的 Http 请求同步方式存在诸多弊端。当客户端与服务器进行通讯时&#xff0c;客户端必须等待服务端完成处理后返回结果才能继续执行&#xff0c;这种同步调…

万字详解 Redis

1 Redis 是什么 1.1 定义 Redis是一种开源的、基于内存的数据结构存储系统&#xff0c;可以用作数据库、缓存、消息队列等。它支持多种数据结构&#xff0c;如字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集…

黑马点评2——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装

文章目录 什么是缓存&#xff1f;添加Redis缓存店铺类型查询业务添加缓存练习题 缓存更新策略给查询商铺的缓存添加超时剔除和主动更新的策略 缓存穿透缓存空对象布隆过滤 缓存雪崩解决方案 缓存击穿解决方案基于互斥锁方式解决缓存击穿问题基于逻辑过期的方式解决缓存击穿问题…

DrissionPage设置启动浏览器为edge

1.查看浏览器启动路径 在浏览器地址栏输入下面地址&#xff0c;拿到可执行文件的路径 。 edge://version/ 2.替换路径 打开DrissionPage._configs. chromium_options.py文件&#xff0c;找到def browser_path(self)这个函数&#xff0c;将返回内容替换为edge的启动路径&#x…

xacro->urdf->pdf

在ROS 2系统中&#xff0c;要将xacro文件转换为PDF文件&#xff0c;可以按照以下步骤操作&#xff1a; 步骤1&#xff1a;将Xacro文件转换为URDF文件 首先&#xff0c;需要将xacro文件转换为urdf文件。可以使用ROS 2提供的xacro工具来完成这个转换。 ros2 run xacro xacro p…

6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)

目录 一.堆(Heap)的基本介绍 二.堆的常用操作&#xff08;以小根堆为例&#xff09; 三.实现代码 3.1 堆结构定义 3.2 向下调整算法* 3.3 初始化堆* 3.4 销毁堆 3.4 向上调整算法* 3.5 插入数据 3.6 删除数据 3.7 返回堆顶数据 四.下篇内容 1.堆排序 2.TopK问题 一…

案例-KVM+GFS分布式存储系统构建KVM高可用(虚拟化实战)

NFS GlusterFS 基于共享存储 采用GFS做共享存储&#xff1b; 实验环境&#xff1a;101 102 103 104 做gfs集群&#xff1b;201 202做虚拟机&#xff1b; 同步一下会话&#xff1b; 为了方便使用主机名进行通信&#xff0c;修改hosts文件&#xff1b; 为了使用GlusterFS的仓库…

国内独家首发 | OpenCSG开源中文版fineweb edu数据集

01 背景 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术&#xff0c;特别是自然语言处理&#xff08;NLP&#xff09;的飞速发展深刻影响着各个行业。从智能客服到内容生成&#xff0c;从语音识别到翻译工具&#xff0c;NLP的应用已经无处不在。在这一领域中&…

[线程]JUC中常见的类 及 集合类在多线程下的线程安全问题

文章目录 一. JUC中常见的类1. Callable接口2. ReentrantLock3. Semaphore 信号量4. CountDownLatch 二. 集合类在多线程下的线程安全问题多线程下使用ArrayList多线程下使用哈希表(重要) 下面介绍的内容是面试中常考, 但是实际开发中用不到的知识 一. JUC中常见的类 JUC : ja…

『功能项目』主角身旁召唤/隐藏坐骑【20】

本章项目成果展示 我们打开上一篇19坐骑UI搭建及脚本控制显/隐的项目&#xff0c; 本章要做的事情是在坐骑UI界面点击召唤及隐藏坐骑的功能 首先在外包中拖拽一个坐骑熊的预制体 完全解压缩 重命名为MountBear 在资源文件夹Resources下的/预制体文件夹Prefabs下新建坐骑文件夹…

海外合规|新加坡网络安全认证计划简介(三)-Cyber Trust

一、 认证简介&#xff1a; Cyber Trust标志是针对数字化业务运营更为广泛的组织的网络安全认证。该标志针对的是规模较大或数字化程度较高的组织&#xff0c;因为这些组织可能具有更高的风险水平&#xff0c;需要他们投资专业知识和资源来管理和保护其 IT 基础设施和系统。Cy…

新质生产力人工智能+系列5-智能业务识别研究(含任务、数据、算力资源)

在新质生产力高质量发展的要求下&#xff0c;中国移动在“人工智能”和 “数据要素X”方面不断发力&#xff0c;持续发布高质量电信数据集。围绕网元智能、运维智能、服务智能三大方向建设&#xff0c;涵盖无线信道、基站、云网、核心网、哑资源等多领域&#xff0c;支持感知、…

护工系统|护工陪护系统|护工小程序

在医疗服务行业日新月异的今天&#xff0c;陪护机构正乘着数字化转型的东风&#xff0c;扬帆远航&#xff0c;其中&#xff0c;护工系统的引入无疑为其插上了一对强劲的翅膀&#xff0c;引领着行业向更加高效、精细化的方向迈进。这一系统不仅是对传统陪护模式的深刻重塑&#…

oracle物理存储结构文件详解

文章目录 oracle物理文件结构图① 控制文件&#xff1a;② 数据文件&#xff1a;③ 联机Redo日志文件&#xff1a;④ 参数文件&#xff1a;⑤ 归档文件&#xff1a;⑥ 密码文件&#xff1a; oracle物理文件结构图 Oracle数据库的物理结构由控制文件&#xff08;Control f…

硬件工程师笔试面试知识器件篇——电容

目录 电容 2.1、基础 电容原理图 电容实物图 2.1.1、定义 2.1.2、原理 2.1.3、电容的类型 分类1: 分类2: 2.1.4、电容的应用 2.2、相关问题 2.2.1、电容器的电容值如何测量 2.2.2、不同类型的电容器在实际应用中有那些具体差异 2.2.3、如何选择合适的电容器来满…

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 2

OrangePi AIpro 香橙派 昇腾 Ascend C 算子开发 与 调用 - Tiling实现 2 flyfish 前置知识 1 前置知识 2 Host侧CPU和Device侧NPU的主要区别 不同的硬件资源 CPU是为了执行通用计算任务而设计的&#xff0c;但在处理大量的并行计算&#xff08;如矩阵乘、批数据处理&#…