(ISPRS,2023)RS-CLIP: 基于对比视觉-语言监督的zero-shot遥感场景分类

文章目录

  • 相关资料
  • 摘要
  • 引言
  • 方法
    • CLIP回顾
    • 伪标签生成
    • 课程学习策略
  • 实验
    • 数据集
    • 不同文本提示
    • 失败案例分析
    • 课程学习
    • zero-shot分类

相关资料

论文:RS-CLIP: Zero shot remote sensing scene classification via contrastive vision-language supervision

摘要

零样本遥感场景分类旨在解决未见类别的场景分类问题,在遥感领域吸引了大量研究关注。现有方法大多使用浅层网络进行视觉和语义特征学习,并且在零样本学习过程中,语义编码器网络通常是固定的,因此无法捕获强大的特征表示进行分类。
在这项工作中,我们介绍了一种基于对比视觉-语言监督的遥感场景分类的视觉-语言模型。我们的方法能够使用对比视觉-语言损失在嵌入空间中学习语义感知的视觉表示。通过在大规模图像-文本数据集上预训练,我们的基线方法在遥感场景上显示出良好的迁移能力。为了在零样本设置中启用模型训练,我们引入了一种伪标记技术,可以自动从未标记的数据中生成伪标记。开发了一种课程学习策略,通过多阶段模型微调来提高零样本遥感场景分类的性能。
我们在四个基准数据集上进行了实验,并展示了在零样本和少样本遥感场景分类上都取得了显著的性能提升。所提出的RS-CLIP方法在UCM-21、WHU-RS19、NWPU-RESISC45和AID-30数据集的新类别上分别达到了95.94%、95.97%、85.76%和87.52%的零样本分类准确率。我们的代码将在https://github.com/lx709/RS-CLIP上发布。

引言

然而,现有方法大多使用在 Wikipedia 语料库上预训练的 word2vec 模型来从类别名称或描述中提取语义嵌入。在零样本学习过程中,语义嵌入被预处理并固定,而不与要对齐的视觉特征进行适应。这可能导致提取的语义嵌入的表示能力不足,以及视觉和语义特征之间的相当大的差异。以前的方法提出的另一个挑战是,它们通常使用浅层网络来学习视觉和语义特征。
为了解决这些问题,我们在本文中引入了一个用于遥感场景理解的视觉-语言模型。近年来,视觉-语言模型在计算机视觉中得到了广泛探索,并且为各种视觉识别任务构建了众多基础模型,特别是对于零样本和少样本学习。与自监督视觉特征学习方法不同,视觉-语言模型可以学习强大的视觉特征表示,并直接将视觉表示与自然语言在整体框架中连接起来,从而在语义知识的引导下实现更好的零样本迁移。
为了使模型适应遥感领域,我们引入了一种伪标记技术,可以自动从未标记的数据集中生成伪标记,从而在遥感领域上对模型进行微调。此外,开发了一种课程学习策略,通过多阶段模型微调来提高零样本遥感场景分类的性能。

方法

CLIP回顾

CLIP模型使用语言监督学习视觉表示,如图1所示。给定一批 N N N图像-文本对,CLIP模型试图预测图像和文本输入之间的正确对应关系。为了实现这一点,CLIP模型使用视觉编码器网络 E i E_i Ei来学习视觉表示,使用语言编码器网络 E t E_t Et来学习文本表示。在训练期间,CLIP模型预测一个相似度矩阵 S ∈ R N × N S∈ \mathbb{R}^{N×N} SRN×N,其中每一行表示一个图像与所有 N N N文本匹配的概率。CLIP模型通过最大化 N N N正对的相似度得分和最小化 N 2 − N N^2-N N2N负对的相似度得分来优化。这是通过优化相似度矩阵上的对称交叉熵损失来实现的。
在这里插入图片描述

对于下游分类任务的 C C C个类别,{1, 2, … , C C C},CLIP使用预定义的提示,例如,“an image of a [CLASS]”,来构建文本输入 I I I,其中[CLASS]标记表示每个类别的名称/描述。然后,可以使用文本编码器网络生成所有类别的语义特征,即 F t = E t ( T ) ∈ R C × d F_t= E_t(T) \in \mathbb{R}^{C \times d} Ft=Et(T)RC×d,其中 d d d表示特征维度。给定一批输入图像表示为 I ∈ R B × H × W × 3 I \in \mathbb{R}^{B \times H \times W \times 3} IRB×H×W×3,其中 B B B H H H,和 W W W分别表示批量大小、图像高度和宽度,我们可以通过图像编码器网络生成它们的视觉特征,即 F i = E i ( I ) ∈ R B × d F_i = E_i(I) \in \mathbb{R}^{B \times d} Fi=Ei(I)RB×d。之后,可以通过以下方式获得分类概率矩阵:

[ P = \text{Softmax}(\frac{A^v A^l}{\sigma}) ]

其中 F i F_i Fi F t F_t Ft是L2归一化的,它们的矩阵乘法等同于计算它们的余弦相似度。在类别维度上应用Softmax层,得到一个概率矩阵表示为 P ∈ R B × C P \in \mathbb{R}^{B \times C} PRB×C P P P的每一行表示将一张图像分配给所有可能类别的概率。最终的分类预测可以通过选择概率最大的类别来获得:

[ \hat{y} = \text{argmax}(P) ]

伪标签生成

在这里插入图片描述

我们采用伪标记技术来启用模型在目标领域数据集上的训练,这在半监督学习中常用于自动从未标记数据生成伪样本。伪标记背后的直觉是,如果模型对某些样本给出了高置信度分数,我们可以使用预测的标签作为伪标签来重新训练模型并提高性能。
我们使用CLIP作为一个先验模型,为我们的零样本分类任务生成遥感图像的伪标签。我们遵循(Huang等人,2022)为每个类别选择相同数量的样本作为伪标签,这在在选择伪样本时防止了类别压倒性问题。
具体来说,对于每个类别 c c c,我们从概率矩阵中的方程(1)中选择置信度分数最高的top-K样本,可以表示为:
在这里插入图片描述
其中 P c P_c Pc表示概率矩阵 P P P的第 c c c列。通过所有可能类别的伪样本的并集,可以获得整体的伪标记样本,计算为:
在这里插入图片描述

课程学习策略

在这里插入图片描述

我们采用课程学习策略,在多轮中逐步选择更多样本进行模型训练。在早期的几轮中,模型对目标数据集的调整较少,因此,只有少数可信样本被选择作为伪数据进行训练。在后面的几轮中,模型对目标数据集的分类变得更有信心,从而可以选择更多未标记的样本作为伪标签。更具体地说,在迭代 r r r时,我们选择 K r K_r Kr样本作为伪标签,其中 K r K_r Kr是根据伪精度确定的。一般我们设 K r ≥ K r − 1 K_r≥K_{r-1} KrKr1,表示后期会选择更多的伪样本。.

实验

数据集

在这里插入图片描述

不同文本提示

在这里插入图片描述

失败案例分析

在这里插入图片描述

课程学习

在这里插入图片描述
在这里插入图片描述

zero-shot分类

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

未来已来:Spring Boot引领数据库智能化革命

深入探讨了Spring Boot如何与现代数据库技术相结合,预测并塑造未来的数据访问趋势。本书不仅涵盖了Spring Data JPA的使用技巧,还介绍了云原生数据库的概念,微服务架构下的数据访问策略,以及AI在数据访问层的创新应用。旨在帮助开…

视频搬运的素材网站有哪些?打包好的视频素材在哪找?

短视频创作的朋友们,欢迎进入这个充满创意的世界!如果你曾为找不到合适的素材而苦恼,那么今天就让我为你介绍几个能够快速丰富你视频内容的素材平台。无论是为了搬运视频还是寻找灵感,下面这些网站都将是你的强力助手。特别地&…

lammps金刚石三棱锥刀具建模

大家好,我是小马老师。 本文介绍lammps三棱锥刀具建模方法。 lammps切削模拟的刀具形状有很多,如球形、锐角、钝角、三棱锥等刀具。 球形、锐角、钝角等刀具建模已经在公众号发过,本文介绍三棱锥的建模。 形状如下图所示: 主要原…

探索 Vue Devtools 4.0 的新世界!

大家好,我是前端宝哥。Vue Devtools 4.0 版本带来了一系列激动人心的新特性和改进,让我们一起来探索这些更新亮点! 宝哥省流版: 🛠 直接编辑组件数据,实时预览变更效果。⚙️ 快速编辑功能,一键…

使用python实现超市购物系统(一个小例子)

可以增加其他功能,这里就展示一个小的例子~

git基本使用——回退,撤销add,commit,合并分支

学习笔记 笔记中表格中的—— 表示需要回退的地方,也就是使用命令之后会改变的地方 网页软件分享 这是一个非常好用web端笔记画图软件,解决了typora画图不方便的问题

【评价类模型】Topsis

综合赋权法:Topsis法: 主要适用情况:题目提供了足够的评价指标和数据,数据已知,评价指标的类型差异较大 基本思想:将所有方案与理想解和夫理想解进行比较,通过激素那方案与这两个解的举例去欸的…

mysql面试之分库分表总结

文章目录 1.为什么要分库分表2.分库分表有哪些中间件,不同的中间件都有什么优点和缺点?3.分库分表的方式(水平分库,垂直分库,水平分表,垂直分表)3.1 水平分库3.2 垂直分库3.3 水平分表3.4 垂直分表 4.分库分表带来的问题4.1 事务一致性问题4.2 跨节点关联…

pandas添加行

方法1(df.append()) import pandas as pd# 创建一个空的DataFrame df pd.DataFrame(columns[Column1, Column2])# 新增一行数据 data {Column1: Value1, Column2: Value2} df df.append(data, ignore_indexTrue) print(df)raw_data {"Column1":"adafafa&quo…

【recast-navigation-js】使用three.js辅助绘制Agent

目录 说在前面使用Tweakpane添加CrowAgent其他 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5 使用Tweakpane fps面板interface FPSGraph extends BladeApi<B…

Redis这一篇就够了

一.概述 Redis是什么&#xff1f; Redis是远程服务字典服务&#xff0c;是一个开源的使用ANSI C语言编写&#xff0c;支持网络&#xff0c;可基于内存亦可持久化的日志型&#xff0c;Key-Value数据库&#xff0c;并提供多种语言的API。 redis会周期性把更新的数据写入磁盘或把…

米尔MYC-Y6ULX-V2开发板测评记录

文章目录 1、板子上手体验2、板载硬件3、系统信息4、 驱动测试5、编译linux三大件7、摄像头测试9、总结 1、板子上手体验 首先非常感谢芯查查给了这样一个机会来测评这样一款性能十分强大的开发板&#xff0c;我拿到手的是MYC-Y6ULX-V2核心板及开发板&#xff0c;这块板子具有…

SSMP整合案例第六步 在前端页面上利用axios和element-ui与后端交互实现增删改

新增操作 正常我们都是从新增功能书写 查看源码 显示的是这个 在vue里面开下来 这样就能显示 点击确定 就能把数据发送到后台进行保存 //弹出添加窗口handleCreate() {this.dialogFormVisible true;},//重置表单resetForm() {},//添加handleAdd() {//绑定的是确定按钮 发起请…

IDM优势

目录 &#x1f40b;引言 &#x1f40b;IDM的核心优势 &#x1f988;下载速度提升 &#x1f41f;技术原理&#xff1a; &#x1f41f;对比示例&#xff1a; &#x1f988;断点续传 &#x1f41f;技术原理&#xff1a; &#x1f41f;对比示例&#xff1a; &#x1f988;集…

牛客热题:缺失的第一个正整数

牛客热题&#xff1a;数组中出现一次的两个数字> &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 …

如何使用golang自带工具对代码进行覆盖率测试

在 Go 语言中&#xff0c;测试代码覆盖率通常使用 go test 命令结合 -cover 和 -coverprofile 1. 基本代码覆盖率报告 在项目目录下运行以下命令 go test -cover这将在控制台输出一个代码覆盖率的百分比。但是&#xff0c;这种方式不会保存覆盖率数据&#xff08;可以指定目…

961操作系统知识总结

部分图片可能无法显示&#xff0c;参考这里&#xff1a;https://zhuanlan.zhihu.com/p/701247894 961操作系统知识总结 一 操作系统概述 1. 操作系统的基本概念 重要操作系统类型&#xff1a;批处理操作系统(批量处理作业&#xff0c;单道批处理/多道批处理系统&#xff0c;用…

将 py 文件编译成 pyd 文件

文章目录 一、简介1.1、Python中的文件类型&#xff1a;.py .pyc .pyd1.2、基本原理1.2.1、函数详解&#xff1a;Extension() —— 用于定义扩展模块&#xff08;C/C 扩展&#xff09;的类1.2.2、函数详解&#xff1a;setup() —— 用于配置和构建包的函数 二、构建过程2.0、…

带交互的卡尔曼滤滤波|一维滤波|源代码

背景 一维卡尔曼滤波的MATLAB例程&#xff0c;​背景为温度估计。 代码介绍 运行程序后&#xff0c;可以自己输入温度真实值&#xff1a; 以20℃为例&#xff0c;得到如下的估计值​&#xff1a; 滤波前的值和滤波后的值分别于期望值&#xff08;真实值&#xff09;作差…

海光CPU:国产信创的“芯“动力解读

国产信创CPU-海光CPU CPU&#xff1a;信创根基&#xff0c;国之重器 国产CPU形成三大阵营&#xff1a;自主架构、x86及ARM。自主阵营中&#xff0c;龙芯和申威以LoongArch和SW-64为基石&#xff1b;ARM阵营由鲲鹏、飞腾主导&#xff0c;依托ARM授权研发处理器&#xff1b;x86阵…