Paper Reading: RSPrompter,基于视觉基础模型的遥感实例分割提示学习

2023-11-08

在这里插入图片描述

简介

题目:《RSPrompter: Learning to Prompt for Remote Sensing Instance Segmentation based on Visual Foundation Model 》,基于视觉基础模型的遥感实例分割提示学习

日期:2023.6.28

单位:北航、北京数字媒体重点实验室、虚拟现实技术与系统国家重点实验室、上海人工智能实验室

论文地址:https://arxiv.org/abs/2306.16269

GitHub:https://github.com/KyanChen/RSPrompter

作者:

陈科研

个人主页:https://kyanchen.github.io/
在这里插入图片描述
谷歌学术
在这里插入图片描述
其他作者


  • 摘要
    利用大量的训练数据(SA-1B), Meta AI Research提出的基础分段任意模型(SAM)显示出卓越的泛化和zero-shot能力。尽管如此,作为一种与类别无关的实例分割方法,SAM在很大程度上依赖于涉及点、框和粗粒度掩码的先前手动指导。此外,其在遥感图像分割任务上的性能还有待充分的探索和论证。在本文中,我们考虑设计一种基于SAM基础模型,结合语义分类信息的遥感图像实例自动分割方法。受prompt learning的启发,我们提出了一种学习生成合适的Prompt来作为 SAM 的输入。这使得SAM能够为遥感图像产生语义上可辨的分割结果,我们将其称为RSPrompter。我们还基于SAM社区的最新发展,为实例分割任务提出了几个正在进行的衍生工具,并将它们的性能与RSPrompter进行比较。在WHU building、NWPU VHR-10和SSDD数据集上的大量实验结果验证了我们提出的方法的有效性。

目标

  • 背景
    由于其交互式框架,SAM 需要提供先验的Prompt,例如点、框或掩模来表现为一种类别无关分割方法, 如下图(a)所示。显然,这些限制使 SAM 不适用于遥感图像的全自动解译。
    在这里插入图片描述

(a)描述了基于点的提示、基于框的提示、SAM的“一切”模式(对图像中的所有对象进行分割)和RSPrompter的实例分割结果。SAM执行与类别无关的实例分割,依赖于手动提供的先前提示。(b)给出了不同位置的点提示、两点提示和框提示的分割结果。提示的类型、位置和数量严重影响SAM的结果。

此外,我们观察到遥感图像场景中的复杂背景干扰和缺乏明确定义的物体边缘对 SAM 的分割能力构成重大挑战。SAM 很难实现对遥感图像目标的完整分割,其结果严重依赖于prompt类型、位置和数量。在大多数情况下,精细的手动prompt对于实现所需效果至关重要,如上图(b)所示。这表明 SAM 在应用于遥感图像的实例分割时存在相当大的限制。

  • 目标动机
    增强SAM在图像分割任务上的能力。每一组prompt能够得到一个的实例化mask,若能自动生成多个与类别相关的prompt,SAM 的解码器就能够产生带有类别标签的多个实例级掩码。由此,本文提出了RSPrompter,用于学习如何生成可以增强 SAM 框架能力prompt。
    其中,
    1. 类别相关的prompt来源:提取SAM ViT backbone的中间层的特征,输入一个轻量级的特征聚合器
    2. 生成的prompt的输出形式为prompt embeddings(不生成坐标,作者认为生成坐标会限制优化空间;还避免了从高维到低维再返回到高维特征的梯度流的障碍,即从高维图像特征到点坐标,然后再到位置编码。)

工作重点

  1. 一种自动化的实例分割方法同时融入语义信息
  2. 基于SAM的prompt工程
  3. 对SAM社区进行了研究,就SAM的实力分割任务提出了一些变体
  4. 实验方面,使用了3个遥感数据集进行了验证(在数据量、数据类别、模态上都有一些差别)

方法

在这里插入图片描述描述了SAM的示意图,它包括一个图像编码器、一个提示编码器和一个掩码解码器。SAM根据提供的输入提示生成相应的对象掩码。

除了本文提出的RSPrompter之外,还介绍了另外三种基于SAM的实例分割方法进行比较,如图3 (a)、(b)和©所示,以评估它们在遥感图像实例分割任务中的有效性,并为未来的研究提供启发。这些方法包括:外部实例分割头、对掩码类别进行分类、使用检测到的目标框,分别对应图3 (a)、(b)、( c )。在接下来的部分中,我们将分别将这些方法称为SAMseg、SAM-cls和SAM-det。
在这里插入图片描述

图中从左到右分别展示了SAM-seg、SAM-cls、SAM-det和RSPrompter作为将SAM应用于遥感图像实例分割任务的备选解决方案。(a)在SAM图像编码器后添加实例分割头。(b) SAM的“一切”模式为图像中的所有物体生成掩码,随后由分类器将其分类为特定类别。©首先由目标检测器产生目标边界框,然后将其作为SAM的先验提示输入,以获得相应的掩码。(d)本文提出的RSPrompter为即时分割掩码创建与类别相关的提示嵌入。图中雪花符号表示该部分的模型参数被冻结。

  • SAM产生mask的过程表达式:

在这里插入图片描述

  • SAM-seg

在这里插入图片描述

SAM-seg利用了 SAM 图像编码器存在的知识,同时保持编码器不变。它从编码器中提取中间层特征,使用卷积块进行特征融合,然后使用现有的实例分割(Mask R-CNN和 Mask2Former)执行实例分割任务。

  • SAM-cls

在这里插入图片描述

在 SAM-cls 中,首先利用 SAM 的“全图像”模式来分割图像中的所有潜在实例目标。其实现方法是在整个图像中均匀分布点并将每个点视为实例的prompt输入。在获得图像中所有实例掩码后,可以使用分类器为每个掩码分配标签。

为了便捷,本文直接使用轻量级的 ResNet18 来标记掩码。其次,可以利用预训练的 CLIP 模型,使 SAM-cls 能够在不进行额外训练的情况下运行以达到零样本的效果。

  • SAM-det

在这里插入图片描述

SAM-det 方法更加简单直接,已经被社区广泛采用。首先训练一个目标检测器来识别图像中所需的目标,然后将检测到的边界框作为prompt输入到 SAM 中。


  • RSPrompter

在这里插入图片描述

图像通过冻结的SAM图像编码器处理生成Fimg ,{Fi}是从backbone中抽取的一些富含语义信息的特征(中间层);{Fi}通过一个轻量级的特征聚合器Φaggregator,得到一个稠密的特征图Fagg ;Fagg输入prompter,生成多组prompt imbedding(Tj)以及对应的类别(cj);最后Tj输入mask decoder中生成实例mask

  • Feature Aggregator

在这里插入图片描述

如图所示,所提出的轻量级特征聚合器从大型ViT主干中提取语义信息并执行轻量级融合过程。

在这里插入图片描述

对ViT backbone中提取的各种中间特征层的语义特征Fi进行下采样:64×64×1280–>32×32×32;通过残差连接使信息可以流动;最后通过融合卷积ΦFusionConv得到稠密特征Fagg

两种不同类别的prompter

  • Anchor-based Prompter,锚点式

在这里插入图片描述

使用RPN head对稠密特征中的目标进行召回,生成一些proposal;proposal通过RoI Pooling生成一些视觉向量,再通过3个感知头:语义头、定位头和提示头。用于定于目标类别、建立生成的提示表示与目标实例掩码之间的匹配标准(IoU)、生成prompt imbedding

在这里插入图片描述

在生成prompt imbedding的过程中通过了一个sin变换,目的是为了对齐SAM的prompt encoder和生成的prompt imbedding的空间(原始的prompt encoder是一种高频的信号,而通过mlp生成的prompt是一种平稳的信号,使用sin函数将低频映射至高频,使之对齐两个表达空间)

Loss Function:该模型的损失包括RPN网络的二元分类损失和定位损失,语义头的分类损失,定位头的回归损失以及冻结的SAM掩码解码器的分割损失。总损失可以表示为:
在这里插入图片描述

  • Query-based Prompter,查询式

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

Loss Function:

训练过程主要涉及两个关键步骤:

(1)N个mask于k个ground-truth进行匹配(使用匈牙利匹配算法)

在这里插入图片描述

(2)监督训练(主要包括多类分类和二进制掩码分类)
在这里插入图片描述

实验

  • 数据集

    1. WHU building extraction dataset:1 class, RGB,5K, training
    2. NWPU VHR-10 dataset:10 clas, RGB,600 training
    3. SAR Ship Detection dataset:1 class, SAR,900 training

    三个公共的遥感实例分割数据集:WHU建筑提取数据集,NWPU VHR-10数据集和SSDD数据集。WHU数据集是单类建筑物目标提取分割,NWPU VHR-10是多类目标检测分割,SSDD是SAR船只目标检测分割。

  • 评估指标:mAP(box & mask)

  • Comparison with the SOTA: WHU
    在这里插入图片描述

该表给出了在whu数据集上提出的方法与其他最先进方法之间的比较。它在不同的阈值下显示框和掩码的AP(%)值

  • Comparison with the NWPU:
    在这里插入图片描述

  • Comparison with the SOTA: SSDD
    在这里插入图片描述

观察Tab1-3:(1)AP显著提升;(2)在小数据集上和不同领域(domain)有强泛化性;(3)基于anchor和query的prompter在不同数据集上有不同的表现(中、大型数据集上query好于anchor)


  • 消融实验

在这里插入图片描述
给出了各种图像编码器及其对应的参数数量,以及它们在nwpu数据集上的分割性能。

在这里插入图片描述
强调了将sam的主干中的不同层次特征合并到特征聚合器中对分割性能的影响。表示法[start: end: step]指定以步长间隔从开始到结束返回的特征映射的索引。

在这里插入图片描述
特征聚合器中下转和残差连接对分割性能的影响。第一行描述了最终采用的方法。Rs:降低空间维度;Rc:减小通道尺寸;电弧:添加残余连接;Pc:具有特征连接的并行架构。

在这里插入图片描述
显示了改变提示器中变压器编码器和解码器层数对分割性能的影响。

在这里插入图片描述突出显示了提示器中不同的查询数和提示嵌入数对分割性能的影响

在这里插入图片描述
展示了正弦正则化对提示器的影响,在掩码解码器中加入了额外的可训练组件,并采用了多尺度训练机制对分割性能的影响

总结

  • conclusion
    在本文中,我们介绍了RSPrompter,这是一种用于遥感图像实例分割的prompt learning方法,利用了SAM基础模型。RSPrompter的目标是学习如何为SAM生成prompt输入,使其能够自动获取语义实例级掩码。相比之下,原始的SAM需要额外手动制作prompt,并且是一种类别无关的分割方法。RSPrompter的设计理念不局限于SAM模型,也可以应用于其他基础模型。基于这一理念,我们设计了两种具体的实现方案:基于预设锚点的RSPrompter-anchor和基于查询和最优传输匹配的RSPrompter-query。此外,我们还调查并提出了SAM社区中针对此任务的各种方法和变体,并将它们与我们的prompt learning方法进行了比较。通过消融实验验证了RSPrompter中每个组件的有效性。同时,三个公共遥感数据集的实验结果表明,我们的方法优于其他最先进的实例分割技术,以及一些基于SAM的方法。

  • discussions

    1. decoder的计算量大:考虑重新设计head
    2. 基于query的prompter直接、轻量且在中大型数据集上表现更好,但是收敛速度慢,考虑优化
    3. 当数据集较小时,在大模型上上使用pompt learning会有比较好的表现
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Paper Reading: RSPrompter,基于视觉基础模型的遥感实例分割提示学习 的相关文章

  • 如何替换 Pandas Dataframe 中不在列表中的所有值? [复制]

    这个问题在这里已经有答案了 我有一个值列表 如何替换 Dataframe 列中不在给定值列表中的所有值 例如 gt gt gt df pd DataFrame D ND D garbage columns S gt gt gt df S 0
  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐