SpatialVLM和SpatialRGPT论文解读

  

目录

一、SpatialVLM

1、概述

2、方法

3、实验

二、SpatialRGPT

1、概述

2、方法

3、训练方法

4、实验


一、SpatialVLM

1、概述

        SpatialVLM是最早的依赖传统VLMs实现3D空间推理能力的论文,在24年1月由DeepMind团队提出,当时对比的还是GPT4v,Gemini-pro,qwen-vl-plus这一组大模型,这些大模型在空间推理上能力较差,究其原因是数据集的问题,缺少含有空间数据的图文对信息。

        所以SpatialVLM设计了一个新的数据集,然后在VLM上训练获得了强大的空间推理能力。

        从图例来看,SpatialVLM也是首次实现在VLM模型上输出准确的3D空间中具体数值信息的模型,其实这也归根于数据集中的深度信息和点云信息。

2、方法

Spatial VQA Dataset

        数据集从互联网图像中保留场景级照片,并设定一个自动化过程,无需人工标注。

(1)语义过滤:利用CLIP模型对图像分类,保留室内或室外场景照片,拒绝“单物体”“白色背景商品图”“GUI”截图等不适合空间推理的图像

(2)物体中心信息提取:整合多个专家模型,用开放词汇检测模型定位物体边界框,再用FlexCap生成该区域1-6词的差异化描述,避免传统检测器粗粒度歧义(很妙啊),之后用ShapeMask模型分割物体像素簇,支持后续3D重建

(3)2D->3D转换:采用ZoeDepth预测metric depth,利用内参转换到3D点云,并检测水平面信息,拟合平面方程,进而将点云转换到世界坐标系。(在appendix中有完整的介绍)

(4)歧义消除:比如同一个蛋糕,指代图像中的若干个蛋糕,所以计算所有物体描述的CLIP,对物体名字相似的物体加以方位词,分别这两个物体,如果没有解决,直接剔除该图像。

(5)QA模版生成:包括38类空间问题,定性问题和定量问题各占一半,每类问题含有20+问题模版和10+的答案模版,避免组合重复。对于答案生成,空间关系计算则基于物体3D bbox中心计算距离和方位,另外引入人类对齐处理,也就是准确数据如何转换为人类的模糊语言,比如数值四舍五入(0.86m->约1m),概率化采样单位(80%采用公制单位,20%采用英制)

        Spatial VQA dataset如下:

架构设计

        沿用PaLM-E(的更小体量PaLM 2-S)架构实现,数据集混合原有的PaLM数据集(95%)和该论文的Spatial VQA dataset(5%),训练过程完全依赖PaLM的训练方法,PaLM架构如下,这个PaLM模型是一个具身智能领域的多模态大语言模型,主要是通过给定假设,给定图像条件,来实现规划和推理。但是这个模型也是缺乏3D信息的,只是依赖具身智能相关和通用图像信息来硬训练的。

        训练过程解冻ViT微调,使得视觉编码器学习几何特征。

链式空间推理

        将一个复杂的LLM问题拆解为若干个简单的空间子问题,并利用SpatialVLM发起子问题查询,最终利用LLM汇总子答案,合成结论。

        比如下图,询问“三个可乐罐是否构成等腰三角形?(最长边与最短边差<0.1米)”

        链式推理利用SpatialVLM计算每一个边的距离,最后利用LLM汇总,得到误差内是一个等腰三角形。

VLA结合 

        利用SpatialVLM生成奖励信号,来指导机器人动作优化。

        比如让机器臂去抓一个橘色茶杯,那么手与橘色茶杯的距离将作为机械臂强化学习的奖励,根据实时估计物体距离,生成单调递增的奖励曲线。   

3、实验

        在数据集中其实引入了一部分的高斯噪声,但是在实验中发现,引入一部分高斯噪声σ=0.2训练,仍能保证模型训练稳定,这也就证明了如果深度相机存在问题的情况下,仍然可以保证一定的准确性。下表为高斯噪声在σ=0.2下鲁棒性最高。答案在真实值的50%-200%范围内更高。

        当然当时没有那么多的评测benchmark,只能在正确性和稳定性上进行判断。这里评测的是对于时序问题的情况:

        二元谓词情况,可以理解为传统问题

        相比于backbone(PaLM)的对比,OKVQA和VQAv2都是通用知识的问题,OK-VQA更加依赖非视觉的外部知识,纯推理题,所以有所降低,但是对于VQAv2这种依赖视觉的推理知识可以提升一点。

二、SpatialRGPT

1、概述

        SptialRGPT同样是24年的论文(NVIDIA),基于SpatialVLM的问题进一步优化。

        动机:同样是VLMs在空间推理任务上深度信息缺失的问题,但是扩展到区域级场景,整体上学习了SpatialVLM的很多操作,比如数据合成,空间推理时的物体歧义,链式推理,人类标注基准等,但SpatialRGPT相比于SpatialVLM提出了一个新的区域级评估,SpatialRGPT-Bench,覆盖更广的环境(包括室内,室外,模拟环境),另外SpatialVLM只是利用深度信息点云信息来构建问答数据集中的文本信息,SpatialRGPT则将深度估计器直接作为一个插件,并列于图像提取器,用于提取不同的数据信息,保证数据与文本之间的高度统一。

2、方法

SpatialRGPT数据集

        Open Spatial Dataset数据集分为两步,将单图生成三维场景图,再通过LLM生成复杂的VQA对。

        对于数据集的图像来源主要为OpenImages数据集(1.7M图像)。

(1)图像过滤:通过CLIP-based开放词汇分类模型(这里用的EVA-CLIP)进行图像分类,方法与Spatial-VLM相同,并且定义正面标签和负面标签,过滤掉负面的标签信息(700K)。正例更专注于自然场景。

(2)开放词汇检测与分割:优化了SpatialVLM中的专家模型,这里先利用图像标注模型Recognize Anything识别所有对象类标签,确保泛化性,之后采用GroundingDino来实现开放词汇下检测,获取对象边界框,采用SAM-HQ模型细化边界框为高精度掩码,确保对象轮廓准确。

        这一套流程可以理解为,图像标注模型获得整张图片中有哪些物品,开放词汇下检测获取每一个物体的检测框,SAM则根据这个检测框和文字信息,获得他的准确物体掩码。

(3)度量深度估计:从单张图像中预测深度图,使用Metric3Dv2模型预测深度和表面法线,之后将深度图投影到3D点云,感觉以往的单图估计方法应该不太准确。

(4)相机校准:使用WidCamera模型预测4自由度内参,并利用PerspectiveFields获取每个像素上的向量和纬度值,转换为相机外参,通过旋转矩阵将点云从相机坐标系转换到世界坐标系。这种方法也是后来很常用的方法,没有采用SpatialVLM中依赖地面分割,得到地面坐标系的方法,因为这种方法可能因为地面没有正确分割而失败。

(5)构建3D场景图:3D场景图类似于一个集合,比如Graph=(Nodes,Edges),其中节点表示物体实例(如椅子,苹果),边表示物体间空间关系(如椅子在苹果左侧)。

        首先在原有的世界坐标系下的场景点云图中,通过移除离群点,体素下采样,DBSCAN剔除噪声,并通过两个视角下的点云信息,使用轴对齐边界框(AABB)拟合可以获得空间关系,并且提到方向包围盒OBB虽然更准确,但是缺乏物体姿态估计。

        对于每个位置的空间关系,定义相对关系和度量关系两种,最终输出场景图。比如下面这种:

{"nodes": [{"id": 0, "label": "apple", "width": 0.2, "height": 0.3},{"id": 1, "label": "table", "width": 1.5, "height": 0.8}],"edges": [{"source": 0, "target": 1, "relation": "on_top", "distance": 0.4},{"source": 0, "target": 1, "relation": "left", "horizontal_dist": 0.3}]
}

(6)生成模版基础VQA对:提取场景图节点的信息,使用预定义的模版生成问题,比如下图的模板对。

(7)依赖LLM生成复杂的VQA对:依赖于Llama3-70B结合(6)中的基础VQA对,生成更加依赖语言的描述,创建推理性问题。

(8)整合数据集:最终数据集包含8M的模版基础QA和0.7M的LLM-based QA,并利用人类验证过滤错误标注。

        Open Spatial Dataset数据集如下:

SpatialRGPT模型架构

        SpatialRGPT依赖LLaMA2-7B大语言模型主干,输入部分采用双分支提取器,一个视觉编码器,一个区域特征提取器以及RGB和Depth连接器用于与大语言模型对齐。

        视觉编码器采用冻结的CLIP-ViT-L/14提取全局特征信息,分辨率为336x336。

        深度编码器权重采用RGB编码器初始化,同样采用CLIP-ViT-L/14提取特征,在Visual Backbone中关闭,不作为LLM的输入,只输入视觉编码器的输出CLIP特征。

        区域特征提取器依赖用户给定的框或掩码,作为定向区域的条件,用于提取局部CLIP特征,具体来说,依赖图像和深度的CLIP特征作为输入,经过两层反卷积上采样特征图,在掩码区域执行MaskPooling,边界框区域计算RoIAlign,从而生成区域RGB嵌入和区域深度嵌入。

        Connector层通过独立的线性层来对齐CLIP特征与LLM嵌入语言空间。

3、训练方法

        采用三阶段训练,完全冻结CLIP主干,减少训练成本。

        先单独利用CC3M图像-文本对训练RGB Connector对齐。

        在用MMC4+COYO通用VLM数据,进行视觉语言预训练,训练多模态信息,此时训练LLM+Region Feature Extractor。

        最后引入OSD数据和区域指令数据,和通用VQA数据,强化空间推理能力,训练深度Connector和Region Feature Extractor。

4、实验

Spatial-RGPT Bench

        SpatialRGPT-Bench是论文中提出的​​首个专为评估视觉语言模型(VLM)3D空间认知能力设计的基准​​。

        解决现有VLM在3D空间理解(如方向、距离、尺寸)上存在显著缺陷,如SpatialVLM模型依赖2D人工标注产生透视歧义,并且缺乏更多场景的需求。

        数据来源:包括室内场景SUNRGBD,ARKitScenes,室外场景nuScenes,KITTI,模拟场景Hypersim。

        数据标注:来自基于Omni3D预处理的3D立方体标注,并带有语义类别标签,所有物体在同一个相机坐标系下。

        问题设计:包括定性问题(方向关系,尺寸关系)与定量问题(距离,尺寸,方向)

        指标设计:定性问题--准确率,定量问题--成功率(误差±25%),相对误差,方向误差。并利用GPT-4作为裁判,判断定性问题中是否满足真值,定量问题上单位的标准性和误差计算。

        基线模型:实验中对比了三类基线包括盲测LLM(如GPT-4,仅文本输入),普通VLM(如GPT-4V,LLaVA-1.6),区域感知VLM(如KOSMOS-2框输入,RegionVILA掩码输入,GPT-4V+SoM交互标注,这一类都具有支持区域提示输入的特性)

        在eval中,定性实验中方向判断近乎完美,并且整体上显著超越基线。定量实验中由于深度信息的引入,显著提升度量精度。

        另外提到的一个SpatialRGPT-VILA模型是直接在预训练VILA-1.5上微调得到的,更加节省训练成本,在保留VILA所有语言模型和视觉编码器的情况下,将深度特征集成到统一框架上。在实验中测试通用benchmark,并没有因为微调降低原有的模型学习到的图像和视频理解信息。

        其中SpatialRGPT更适合基础空间感知(比如机器人奖励),Spatial-VILA更适合复杂环境实时推理(多跳推理)。

        同样的,SpatialRGPT类比SpatialVLM也可以计算奖励用于机器人的路径规划下。

        多跳推理。

参考论文:

[2401.12168] SpatialVLM: Endowing Vision-Language Models with Spatial Reasoning Capabilities

[2406.01584] SpatialRGPT: Grounded Spatial Reasoning in Vision Language Models

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

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

相关文章

理解GPU架构:基础与关键概念

GPU 基础概述&#xff1a;从图形渲染到 AI 与高性能计算的核心 Graphics Processing Units&#xff08;GPU&#xff09;已从专用的图形渲染硬件演进为 AI、科学计算与高性能任务的中坚力量。本文将介绍 GPU 架构的基础知识&#xff0c;包括其组成部分、内存层次结构&#xff0c…

订单状态定时处理(Spring Task 定时任务)

订单状态定时处理 如果最后一秒刚好支付了咋办?如何补偿? 需要将支付状态和订单状态一起考虑,或者直接使用状态机 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 **定位:**定时任务框架 **作用:**定时自动执行某段Java代码 …

职得AI简历-免费AI简历生成工具

本文转载自&#xff1a;职得AI简历-免费AI简历生成工具 - Hello123工具导航 ** 一、核心功能解析 职得 AI 简历是 AI 驱动的智能求职平台&#xff0c;通过深度学习算法分析百万优质简历数据&#xff0c;提供从简历生成到面试准备的全流程服务&#xff0c;显著提升求职竞争力。…

8.14 机器学习(1)

机器学习基础一、什么是机器学习定义&#xff1a;让计算机利用大量数据在特定任务上持续改进性能的过程&#xff0c;可以让任务完成的更好。机器学习的领域很多。二、机器学习基本术语数据集、样本、特征&#xff08;属性&#xff09;、属性空间、向量表示、训练集&#xff08;…

给电脑升级内存,自检太慢,以为出错

公司电脑是16G内存&#xff0c;用虚拟机时非常吃力。于是跟领导说&#xff0c;买了32G内存和1T SSD。电脑有两个SATA数据线&#xff0c;SATA电源头只有一个。于是买了几个1转2&#xff0c;顺利接上。把原来的16G拔下&#xff0c;换上32G内存。结果开机没反应。心里就有点嘀咕&a…

Effective C++ 条款43:学习处理模板化基类内的名称

Effective C 条款43&#xff1a;学习处理模板化基类内的名称核心思想&#xff1a;模板化基类&#xff08;templatized base classes&#xff09;中的名称在派生类模板中默认不可见&#xff0c;需要通过this->前缀、using声明或显式基类限定来引入。这是因为编译器在解析模板…

Mybatis简单练习注解sql和配置文件sql+注解形式加载+配置文件加载

项目结构 d:\test\runjar\data\static\data\mybatis_helloworld\Mybatis\ ├── lib\ │ ├── asm-3.3.1.jar │ ├── c3p0-0.9.1.2.jar │ ├── cglib-2.2.2.jar │ ├── commons-logging-1.1.1.jar │ ├── ehcache-core-2.6.8.jar │ ├── javassi…

抗日胜利80周年 | HTML页面

飞翔的和平鸽&#xff1b;屹立的人民英雄纪念碑&#xff1b;倒下的日本国旗&#xff1b;旋转的金色勋章无不代表着我们胜利了&#xff01;&#xff01;&#xff01;HTML源代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta cha…

web仿写网站

一、完成自己学习的官网&#xff0c;至少三个不同的页面。1、界面1&#xff08;1&#xff09;代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

基于element-plus和IndexedDB数据库的基础表单

本文介绍了基于Vue 3和Element Plus的表单项目配置页面实现。页面包含搜索栏、操作按钮、数据表格和分页组件&#xff0c;使用IndexedDB进行本地数据存储。主要功能包括&#xff1a;1) 通过模糊查询搜索项目&#xff1b;2) 分页显示项目数据&#xff1b;3) 添加/编辑/删除项目操…

paimon实时数据湖教程-主键表更新机制

在上一章&#xff0c;我们学习了 Paimon 如何保证每一次写入的原子性和一致性。但数据仓库的核心需求不仅是写入&#xff0c;更重要的是更新。想象一个场景&#xff1a;我们需要实时更新用户的最新信息&#xff0c;或者实时累加计算用户的消费总额。传统的 Hive 数据湖对此无能…

第十六届蓝桥杯青少组C++省赛[2025.8.9]第二部分编程题(4、矩阵圈层交错旋转)

参考程序&#xff1a;#include <bits/stdc.h> using namespace std;const int MAXN 105; int a[MAXN][MAXN];int main() {int n;if (!(cin >> n)) return 0;for (int i 0; i < n; i)for (int j 0; j < n; j)cin >> a[i][j];int layers n / 2; // 每…

【FastGTP✨】[01] 使用 FastGPT 搭建简易 AI 应用

简易应用&#xff1a;英语单词解释 例句 1. 前言 FastGPT 是一个低代码 AI 应用构建平台&#xff0c;可以通过简单配置快速创建自己的 AI 应用。 本文将带你用 FastGPT 搭建一个 英语单词解释 例句 的 AI 工具&#xff0c;输入英文单词后&#xff0c;输出&#xff1a; 单词…

【Mysql语句练习】

MysqlMysql语句练习一、建库建表二、插入数据三、查询Mysql语句练习 一、建库建表 1、创建数据库mydb11_stu&#xff0c;并使用数据库 # 创建数据库mydb11_stu mysql> create database mydb11_stu; Query OK, 1 row affected (0.00 sec) # 使用数据库 mysql> use mydb1…

用Python Scrapy征服网络爬虫(反爬技术深入剖析)

目录 第1章:Scrapy是个啥?为什么它是你爬虫路上的最佳拍档? 1.1 Scrapy的核心亮点 1.2 啥时候用Scrapy? 1.3 安装Scrapy 第2章:动手写你的第一个Scrapy爬虫 2.1 创建Scrapy项目 2.2 定义数据结构(Items) 2.3 编写爬虫逻辑 2.4 运行爬虫 2.5 小技巧:调试爬虫 …

解决Electron透明窗口点击不影响其他应用

遇到的问题&#xff1a;在electron透明窗口点击&#xff0c;影响窗口下的应用接受不到点击事件解决方案&#xff1a;CSSIgnoreMouseEvents实现原理&#xff1a;主进程默认设置禁用目标窗口鼠标事件&#xff08;禁用之后能检测到mousemove&#xff09;&#xff0c;UI进程检测页面…

C# 泛型(Generics)详解

泛型是 C# 2.0 引入的核心特性&#xff0c;它允许在定义类、接口、方法、委托等时使用未指定的类型参数&#xff0c;在使用时再指定具体类型。这种机制可以显著提高代码的复用性、类型安全性和性能。一、泛型的核心概念类型参数化泛型允许将类型作为 "参数" 传递给类…

Spring中存在两个相同的Bean是否会报错?

第一种情况&#xff1a;使用XML的方式设置Bean&#xff0c;这种情况在Spring启动时就会报错&#xff0c;因为ID在Spring中是Bean的唯一标识&#xff0c;Spring容器在启动时会校验唯一性&#xff0c;一旦发现重复就会报错。但是如果是在两个不同的XML文件中定义两个相同的Bean&a…

【新手入门】Android基础知识(一):系统架构

目 录 Android 系统架构图 1. 应用 2. JAVA API 框架 3. 原生 C/C 库 4. Android 运行时&#xff08;Android Runtime&#xff09; 5. 硬件抽象层 (HAL) 6. Linux 内核 参考资料 Android 系统架构图 Android底层内核空间以Linux Kernel作为基石&#xff0c;上层用户空…

晶振电路的负载电容、电阻参数设计

系列文章目录 文章目录系列文章目录前言一、晶振主要参数二、有源与无源区别三、无源晶振四、有源晶振总结前言 在硬件电路的设计中&#xff0c;晶振电路是必不可少的&#xff0c;它充当了整个电路心脏的作用。在这个晶振电路的设计中负载电容、电阻参数的选型是很重要的&…