【论文阅读】遥感大模型GeoChat : Grounded Large Vision-Language Model for Remote Sensing

论文概述

本文是遥感领域的大模型相关的一篇工作,发表在CVPR2024。
本文标题:GeoChat : Grounded Large Vision-Language Model for Remote Sensing
论文地址:https://arxiv.org/abs/2311.15826
开源代码:https://github.com/mbzuai-oryx/GeoChat

通过大模型,可以完成多个领域任务,该工作支持的任务包括:

  • 关联图像描述:Grounded Image Captioning
  • 视觉问答:Visual QA
  • 指代表达:Referring Expression
  • 场景分类:Scene Classification
  • 区域描述:Region Based Captioning
  • 多轮交流:Multi-turn Conversation

注:部分任务翻译可能不太精准,如Grounded Image Captioning,很难找到完全准确的翻译,有些文章将“Grounded"直译为“接地”,造成误解,实际该任务目的为对给定的一张图片,模型在生成该图片描述时,生成词语的attention map要集中在正确对应的图中物体上[1]。

在这里插入图片描述

1.动机

大模型目前比较多,但遥感领域的大模型相对较少,此前已有相关工作如RSGPT(2023)构建了遥感领域的Benchmark,但该工作存在以下两个缺点:1.需要对每个任务进行微调,使用麻烦不可推广;2.无法进行区域推理以及区域视觉文本关联。该工作主要解决这两个问题。

2.贡献

对此,本文主要做了以下三点贡献:

  • 利用Vicuna-v1.5对现有的对象检测数据集创建简短描述,构建了一个遥感多模态指令数据集。
  • 使用构建的数据集,对LLaVA-1.5进行LoRA微调,创建了遥感领域视觉语言模型GeoChat。
  • 建立了大语言模型在遥感领域的评估机制。

这三个贡献点关联的还是比较紧密的,先解决数据集的问题,之后利用数据集构建算法,最后对算法进行评估

3.数据集构建

为了突出GeoChat这套模型架构,本文将数据集构建部分放在了第四节,而把模型架构放在了第三节介绍,这里从贡献点的顺序出发,首先看数据集构建部分。

本文使用以下6种遥感数据集:

在这里插入图片描述

  1. 合并数据集
    这6种数据集来自三个不同任务:目标检测、场景分类和视觉问答,本文对其进行合并。
  2. 填补缺失类
    不同数据集的类别不尽相同,为了构建基本类别的数据集,需要对缺乏基本类(如建筑物,道路,树木)的数据集进行标签补充。对此,本文使用ViTAE-RVSA模型,在LoveDA数据集上进行预训练,之后再用于在SAMRS数据集上推断这些类,产生伪标签。
  3. 属性提取
    对于每一个目标,构建以下五个属性:

  • (1)类别(category)
    比较容易获取,对于目标检测任务,每一个gt box都有类别注释。

  • (2)颜色(color)
    无法直接获取,本文是采用像素聚类的方式,对于每一个box中的像素,使用K-Means 进行聚类,选择最大集群的中心作为对象的颜色。

  • (3)相对尺寸(relative size)
    无法直接获取,本文统计所有gt box的大小,由小到大进行排序,前20%作为小(small)对象,后20%作为大(large)对象,其余作为中等(normal)对象。

  • (4)相对定位(relative location)
    无法直接获取,本文将整个图像划分为3×3网格,定义区域,如右上、上、左上、左、中、右、右下、左下和下。根据对象的中心像素坐标,指定其相对位置。

  • (5)对象关系(relation)
    无法直接获取,本文根据边界框之间的距离对不同的对象进行分组,同时考虑目标本身的类别,选择合适的关系描述词,如下图所示:
    在这里插入图片描述

  1. 生成描述
    本文采用了基于 Rsvg 的预定义文本模板,对每一个目标生成一句统一格式的描述:
    The/A <relative size><color> category <in/on the relative location>
  2. 视觉关联描述
    对于不同的任务,采用不同的prompts描述,具体如下表所示:
    在这里插入图片描述

4.GeoChat模型架构

下面进入到本文核心提出来的GeoChat模型架构,如下图所示:

在这里插入图片描述
核心架构主要包括图像编码器,MLP和大语言模型(LLM)三部分组成。

这样设计的思路其实不难理解,本文的主要目的是通过大语言模型对遥感图像进行理解和对话,因此输入是遥感图像和prompts,输出是文本回答。

因此,首先需要利用一个多模态转换器将图像数据编码成Token,本文采用了 CLIP-ViT(L-14) 作为预训练主干网络,该网络输入的分辨率为336x336。考虑到遥感数据的分辨率普遍大于该值,因此对位置编码进行插值,使输入图像的分辨率上升为504x504。

之后,为了将编码好的Token直接能输入后面的LLM之中,通过MLP将编码器得到的1024维度的Token映射成4096维度,并使用GeLU作为激活函数。

最后,通过LLM输出结果。这里的LLM采用Vicuna-v1.5 作为基础,通过低秩自适应(LoRA)的策略对LLM进行微调。使用时,LLM会被植入前置系统命令,以完成初始化:A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. 训练时,冻结CLIP-ViT和MLP Adaptor部分,仅对LLM进行微调。

5.实验试玩

论文里对不同任务进行了实验测试,由于对其它任务指标并不了解,这里略过,下面来试用该工作开源的代码。

(1) 配置环境
该仓库提供了pyproject.toml文件,可通过仓库介绍直接安装相关依赖。
实际测试发现,直接安装deepspeed会报错,而该依赖并不影响推理过程,因此可以将pyproject.toml文件第二十行删除:

 "deepspeed==0.9.5",

(2)下载模型
作者将模型放在了Hugging Face上,下载地址:https://huggingface.co/MBZUAI/geochat-7B
由于大模型训练时,往往是多卡训练,因此下载模型时,需要将整个模型文件夹下载下来:
在这里插入图片描述

放置模型,在geochat_demo.py中修改模型路径:

parser.add_argument("--model-path", type=str, default="weights")

(3)运行交互
运行geochat_demo.py,弹出以下链接,表示运行成功。
在这里插入图片描述
在浏览器输入:

http://localhost:7860/

弹出以下界面:
在这里插入图片描述
该Demo中,已包含下面四个Example,也可以上传自己的图片,下面我上传了一张VisDrone数据集中的图片,问它里面有多少车,并告诉方位。

在这里插入图片描述
实验环境采用的是一张4090显卡,推理时约需10GB显存,单轮推理约5秒出结果。

下面测试了一下区域推理,通过画笔在图片上圈出一个人,让它进行识别,它一开始认为这是个十字路口,再次询问,回答出是一个人。

在这里插入图片描述
注:该demo中,可以调节Temperature,该值越大,则输出内容会越随机,此外,可以通过打Tag的方式来提示LLM具体做什么任务。

总结思考

本文提出的GeoChat思路不复杂,不过工作量巨大。这类工作不仅需要较大的算力和多领域数据集制作,而且还需要对不同领域的任务均有一定了解,工作具有一定门槛。同时,也引发了我进一步思考,在遥感图像分析工作中,是否有必要引入LLM,是否可以通过SAM等纯视觉大模型的路线完成一些通用工作。引入LLM的目的,是为了增强模型性能,还是为了拓展更多多模态的任务?这可能需要进一步分析探索。

参考

[1] 【论文分享】More Grounded Image Captioning by Distilling Image-Text Matching Model:https://zhuanlan.zhihu.com/p/358704852
[2] 【论文阅读】GeoChat : Grounded Large Vision-Language Model for Remote Sensing:https://blog.csdn.net/weixin_56603442/article/details/136145874

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络编程TCP

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java网络编程(下)&#x1f649; &#x1f439;今日诗词: 壮士当唱大风哥, 宵小之徒能几何&#xff1f;&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微…

Liunx音频

一. echo -e "\a" echo 通过向控制台喇叭设备发送字符来发声&#xff1a; echo -e "\a"&#xff08;这里的 -e 选项允许解释反斜杠转义的字符&#xff0c;而 \a 是一个响铃(bell)字符&#xff09; 二. beep 下载对应的包 yum -y install beep 发声命令 be…

Linux shell编程学习笔记55:hostname命令——获取或设置主机名,显示IP地址和DNS、NIS

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。其中主机名也是我们要收集的信息之一。 1. hostname命令 的功能、格式和选项说明 我们可以使用命令 hostname --help 来查看hostname命令…

[vue2项目]vue2+supermap[mapboxgl]+天地图之地图的基础操作(画线+自定义打点)

二、地图的基础操作 1、画线 案例(1) this.map.on("load", () => {let geometryLine = {type: "Feature",geometry: {// 定义类型type: "LineString",coordinates: [[113.39793764, 34.05675322],[113.35187554, 32.4392251],[112.476851…

电子电器架构 --- 什么是域控制器?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

JAVA流程控制do...while循环

1.对于while语句而言&#xff0c;如果不满足条件&#xff0c;则不能进入循环。但有时候我们需要即使不满足条件&#xff0c;也至少执行一次 2.do...while循环和while循环相似&#xff0c;不同的是&#xff0c;do...whlie循环至少会执行一次 do{ //代码语句 }while&#xff08;…

961题库 北航计算机 操作系统 附答案 简答题形式

有题目和答案&#xff0c;没有解析&#xff0c;不懂的题问大模型即可&#xff0c;无偿分享。 第1组 习题 某计算机系统中的磁盘有 300 个柱面&#xff0c;每个柱面有 10 个磁道&#xff0c;每个磁道有 200个扇区&#xff0c;扇区大小为 512B。文件系统的每个簇&#xff08;或…

王源演唱会火爆开枪

王源演唱会火爆开抢&#xff01;当夜幕降临&#xff0c;繁星点点&#xff0c;无数粉丝的心随着一个名字而狂跳——王源&#xff01;就在昨晚&#xff0c;王源的演唱会门票正式开抢&#xff0c;然而&#xff0c;就在这个激动人心的时刻&#xff0c;猫眼突然停止&#xff0c;让无…

Java集合:数据存储与操作的瑞士军刀

Java集合概述 集合是用来存储多个元素的容器。文章从四个方面来概述下集合&#xff0c;让读者对集合有一个大致的了解。 一、 多样化的容器 Java 集合大致包含 2 大体系 Collection体系 List&#xff1a;存储有序、重复的元素 Set&#xff1a;存储无序、不可重复的元素…

MySQL数据表的设计

实际工程中, 对于数据表的设计和创建, 我们遵循以下步骤: 首先确定实体, 找到关键名词, 提取关键信息, 设计表有哪些列, 每一列是什么. (有几个实体, 一般就创建几个表, 一般一个表对应一个实体) 实体之间的关系: 1. 一对一关系 例如: 一个学生, 只能有一个账号; 一个账号只…

simulink中调用C语言:S-Function

S函数的简单介绍 S函数&#xff1a;S-Function 可以使用 MATLAB&#xff0c; C&#xff0c; C&#xff0c; Ada&#xff0c;或 Fortran 语言来编写。使用 MEX 实用工具&#xff0c;将 C&#xff0c; C&#xff0c; Ada&#xff0c;和 Fortran 语言的 S-Function 编译成 MEX-文…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——03.差异表达基因筛选之热图绘制(4)

内容如下: 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的相关性分析…

【C语言】文件操作(中卷)

前言 在文件操作&#xff08;上卷&#xff09;中&#xff0c;讲到的主要都是正式文件操作开始之前的前置知识&#xff0c;而这一卷中&#xff0c;我们将开始正式地操作文件。 在上卷中我们已经说到&#xff0c;stdin stdout stderr是三个C语言程序启动时默认打开的流。这三个流…

猫头虎分享已解决Bug || **Eslint插件安装问题Unable to resolve eslint-plugin-猫头虎

猫头虎分享已解决Bug || **Eslint插件安装问题Unable to resolve eslint-plugin-猫头虎 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的…

cmake的基础使用

根据源程序文件生成可执行文件: 生成可执行文件&#xff1a; set设置变量&#xff1a; 指定输出路径&#xff1a; 搜索一个目录下的所有源文件&#xff1a; 制作静态库&#xff1a; 指定生成库的路径&#xff1a; 包含库文件&#xff1a; cmake中使用if语句&#xff1a; 使用me…

猫头虎分享已解决Bug || SyntaxError: Unexpected token < in JSON at position 0

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250

BeautifulSoup是一个非常流行的Python库&#xff0c;广泛应用于网络爬虫开发中&#xff0c;用于解析HTML和XML文档&#xff0c;以便于从中提取所需数据。它是进行网页内容抓取和数据挖掘的强大工具。 功能特性 易于使用: 提供简洁的API&#xff0c;使得即使是对网页结构不熟悉…

有损线、上升边退化与材料特性(七)

有损线的不良影响 当信号沿着实际有损线传输时&#xff0c;高频分量的幅度减小&#xff0c;而低频分量的幅度保持不变。由于这个种选择性的衰减&#xff0c;信号的带宽降低&#xff0c;信号的上升边会增长。如果上升边的退化与单位间隔比很小&#xff0c;同位模式将比较稳定与…

Redis学习笔记【实战篇--短信登录】

开篇导读 实战篇有什么样的内容 短信登录 这一块我们会使用redis共享session来实现 商户查询缓存 通过本章节&#xff0c;我们会理解缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩等问题&#xff0c;让小伙伴的对于这些概念的理解不仅仅是停留在概念上&#xff0c;更…

【多模态】34、LLaVA-v1.5 | 微软开源,用极简框架来实现高效的多模态 LMM 模型

文章目录 一、背景二、方法2.1 提升点2.2 训练样本 三、效果3.1 整体效果对比3.2 模型对于 zero-shot 形式的指令的结果生成能力3.3 模型对于 zero-shot 多语言的能力3.4 限制 四、训练4.1 数据4.2 超参 五、代码 论文&#xff1a;Improved Baselines with Visual Instruction …