图像分割-RSPrompter

文章目录

    • 前言
    • 1. 自动化提示器
      • 1.1 多尺度特征增强器
      • 1.2 RSPrompter
        • Anchor-based Prompter
        • Query-based Prompter
    • 2. SAM的扩展
    • 3. 结果
      • WHU数据集
      • NWPU数据集
      • SSDD数据集

前言

《RSPrompter: Learning to prompt for remote sensing instance segmentation based on visual foundation model》,2024

本篇论文提出了目前SAM存在的一些问题:

  1. SAM严重依赖于人工先验(点、框、mask)且分割结果是没有标记类别的,如下图,单点、两点、边框提示的不同分割结果
  2. SAM在遥感图像分割任务中的性能在很大程度上仍未被探索和证明

1. 自动化提示器

针对问题1,不由得想到:如果能够自动生成多个与类别相关的提示,SAM 的解码器就能够产生带有类别标签的多个实例级掩码。

论文提出训练一个自动化的提示器(RSPrompter),能够处理来自测试集的任何图像,同时对对象进行定位,并推断它们的语义类别和实例掩码。最后通过RSPrompter+SAM,实现分割任务的自动化。

这个过程存在两个主要挑战:(i)类别相关的提示从哪里来?(ii)应选择哪种类型的提示作为掩膜解码器的输入

RSPrompter的结算流程如下:

  1. 通过冻结权重的SAM image encoder生成多个中间特征图 F i F_i Fi (K×h×w×c)和最终的图像嵌入 F i m g F_{img} Fimg (h×w×c)
  2. F i F_i Fi通过多尺度特征增强器(结构和原理见1.1)逐步处理获得多尺度特征 F m s F_{ms} Fms
  3. 将多尺度特征 F m s F_{ms} Fms输入RSPrompter(结构和原理见1.2)以获得多组提示语( F s p a r s e m ∈ R K p × c , m ∈ { 1 , ⋅ ⋅ ⋅ , N p } F^m_{sparse} ∈ R^{K_p×c}, m ∈ \{1, · · · , Np\} FsparsemRKp×c,m{1,⋅⋅⋅,Np})和它们的语义类别( c m ∈ R c , m ∈ { 1 , ⋅ ⋅ ⋅ , N p } c_m ∈ R^c, m ∈ \{1, · · · , Np\} cmRc,m{1,⋅⋅⋅,Np}),其中, K p K_p Kp定义了每次掩码生成的提示嵌入次数; N p N_p Np是提示的个数,用来定义输出实例掩码的个数。

需要注意的是, F s p a r s e m F^m_{sparse} Fsparsem只包含前景目标实例提示,其语义类别由 c m c_m cm给出。单个 F s p a r s e m F^m_{sparse} Fsparsem是多个提示的组合,即用多个点嵌入或一个边框表示一个实例掩码。

1.1 多尺度特征增强器

为了在不增加提示器(Prompter)计算复杂度的情况下提取具有语义相关性和判别性的特征,论文提出了一种轻量级的多尺度特征增强器。该增强器包括特征聚合器(Feature Aggregator)和特征分割器(Feature Splitter)。

Feature Aggregator的设计是为了从SMA ViT backbone的众多中间特征层中学习具有代表性的语义特征并进行融合,Feature Splitter被用于从融合后的特征图中生成多尺度金字塔特征图。具体过程如下:

  1. 对每个中间层特征图下采样(1×1卷积降维+3×3卷积提升空间信息)到同一通道:h×w×c -> h×w×32
  2. 通过跳连+add形势逐渐合并各层特征,FusionConv表示最终的融合卷积层,由两个3 × 3卷积层和一个1 × 1卷积层组成,以恢复通道维度,得到最终融合特征图 F a g g F_{agg} Fagg
  3. F a g g F_{agg} Fagg输入特征分割器,Feature Splitter使用转置卷积层生成上采样特征,使用最大池化生成下采样特征。通过利用上/下采样层,最终获得了五种不同尺度的特征图: F m s j ∈ R H 2 j + 1 , W 2 j + 1 , c F_{ms}^j ∈ R^{\frac{H}{2^{j+1}},\frac{W}{2^{j+1}},c} FmsjR2j+1H,2j+1W,c,其中 j ∈ { 1 , 2 , 3 , 4 , 5 } j ∈ \{1, 2, 3, 4, 5\} j{1,2,3,4,5}

1.2 RSPrompter

在获取语义特征后,利用提示器为SAM mask decoder生成提示嵌入就变得可行。采用了两种不同结构的提示器:anchor-based和query-based。

Anchor-based Prompter

首先利用基于锚点的区域建议网络( RPN )生成候选目标框。随后通过RoI Pooling从位置编码的特征图中提取每个对象的独特视觉特征表示。

然后利用对象的视觉特征得到3个感知头:语义头(semantic head)、定位头(localization head)和提示头(prompt head)。

  • 语义头部的作用是识别特定的物体类别
  • 定位头部负责建立生成的提示表示与目标实例掩码之间的匹配准则,即基于定位( Intersection over Union , IoU)的贪婪匹配。
  • 提示头为SAM mask decoder生成必要的提示嵌入。

在这里插入图片描述

ps:PE 是positional encoding

简单来说,该提示器本质上就是一个简单的目标检测网络。其主要框架和Faster RCNN基本一致。其损失函数如下:

在这里插入图片描述

包含:

  • 候选区生成网络损失 L r p n L_{rpn} Lrpn
  • 分类损失 L c l s L_{cls} Lcls:交叉熵(CE)
  • 回归损失 L r e g L_{reg} Lreg:SmoothL1 loss for 偏移量
  • 分割损失 L s e g L_{seg} Lseg:表示SAM decoder 掩码与真实实例掩码之间的二进制CE损失,其中框的IoU决定了有监督的匹配准则。
Query-based Prompter

Anchor-based的方法较为复杂,需要使用框信息进行掩码匹配和监督训练。

因此提出了以最优传输为基础的query-based提示器。如下图所示:

  • 编码器用于提取高层次聚集的语义特征,建模各尺度特征图间的关系,输出建模后的多尺度特征图 F ^ i \hat F_i F^i,其中 F ^ m \hat F_m F^m是尺寸最大的特征图(原图四分之一大小)
  • 解码器通过交叉注意力交互将预设的可学习查询token转换为SAM和相应语义类别的提示嵌入
    • 可学习的查询token: F q u e r y i ∈ R N p × c F^i_{query} ∈ R^{N_p×c} FqueryiRNp×c,其中 N p N_p Np为提示个数,即实例数量
    • 可学习的查询token和多尺度特征图进行交叉注意力计算再经过三个head后得到:
      • 输出类别: c ^ i ∈ R N p × c \hat c_i ∈ R^{N_p×c} c^iRNp×c
      • 输出掩膜滤波器: f ^ i ∈ R N p × c \hat f_i ∈ R^{N_p×c} f^iRNp×c
      • 输出提示嵌入 c ^ i ∈ R N p × K p × c \hat c_i ∈ R^{N_p×K_p×c} c^iRNp×Kp×c,其中 K p K_p Kp用于定义每个提示的嵌入次数,即表示一个实例目标所需的提示数量。
    • 第i级粗分割掩膜( m ^ c o a r s e i \hat m_{coarse}^i m^coarsei)由 F ^ m \hat F_m F^m通过 f ^ i \hat f_i f^i线性加权得到
    • 然后将 m ^ c o a r s e i \hat m_{coarse}^i m^coarsei经过SAM promopt encoder编码后得到稠密提示编码 F d e n s e i F^i_{dense} Fdensei
    • 通过计算 e i + s i n ( e i ) e_i + sin(e_i) ei+sin(ei)后得到稀疏提示编码 F s p a r s e i F^i_{sparse} Fsparsei

整体方程可以沿着层级i循环计算,以获得多语义结果。为了进行推理,只考虑最后一层,通过数学运算得到二值掩码的边框。

在这里插入图片描述

在基于查询的提示器的训练过程中,主要进行了两个步骤:( i ) N p N_p Np预测掩码与K个真实实例掩码(一般来说, N p > K Np > K Np>K)的匹配;( ii )利用匹配的标签进行监督训练的后续实现。

1. 在执行最优运输匹配时,建立如下的匹配成本,该成本同时包含了预测的类别和掩码:

在这里插入图片描述

ω 表示分配关系。使用匈牙利算法来确定 N p N_p Np个预测和K个目标之间的最优分配。匹配代价考虑了预测和真实标注之间的相似性。具体来说,它包括类分类匹配代价( L c l s L_{cls} Lcls )、掩码交叉熵代价( L s e g − c e L_{seg-ce} Lsegce )和掩码dice代价( L s e g − d i c e L_{seg-dice} Lsegdice是一种相似性度量损失,和iou loss类似)。

2. 匹配后即可计算最终loss,由分类交叉熵损失和mask二元交叉熵损失构成:

在这里插入图片描述

2. SAM的扩展

针对上述问题2:除了提出的RSPrompter,还引入了另外三种基于SAM的实例分割方法进行对比分析,以探索SAM性能改进方向。其中,前两种方法为论文提出,具有简单实现的SAM - det已经在社区内引起了相当大的关注和应用。

在这里插入图片描述

  • (a)SAM-seg:冻结SAM Image Encoder,使用多尺度增强器获取多尺度特征,然后输入到其他网络的实例分割头,即Mask RCNN或Mask2Former的mask decoder。
  • (b)SAM-cls:在图像上均匀分布点,并将每个点作为实例的提示输入,将提示输入到SAM以获得图像中所有潜在的实例目标。在获得所有实例的掩码后,再使用分类器为每个掩码分配标签。
  • (c)SAM-det:首先,训练一个目标检测器,以精确定位图像中的期望目标。随后,将检测到的边界框作为提示输入到SAM中。
  • (d)SAM-RSPromopt:和SAM-det的理念是比较相似的,区别在于直接生成提示嵌入,而非提示本身。

3. 结果

在本文中使用了三个公共的遥感实例分割数据集:

  • WHU建筑提取数据集中的航空图像子集
  • NWPU VHR-10数据集(包含10个类比的遥感图像目标检测数据集)
  • SSDD数据集(SAR图像舰船检测数据集)

WHU数据集是单类建筑物目标提取分割,NWPU VHR-10是多类目标检测分割,SSDD是SAR船只目标检测分割。使用 mAP 进行模型性能评价。

WHU数据集

在这里插入图片描述

在这里插入图片描述

NWPU数据集

在这里插入图片描述

![[Pasted image 20240406180018.png]]

SSDD数据集

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Linux操作系统之docker基础

目录 一、docker 1.1 简介 1.2 安装配置docker 二、dockerfile 1.1、简介 1.2、dockerfile 关键字 一、docker 1.1 简介 容器技术 容器其实就是虚拟机,每个容器可以运行不同的系统【系统是以linux为主的】 为什么要使用docker? docker容器之间相互隔…

一文读懂Memory consistency model (内存模型)

Memory consistency model又称Memory model (内存模型),定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。Memory model定义了软硬件接口规范,以便程序员预料硬件会有什么行为,而硬件实现者知道可以使用什么样…

MySQL面试题系列-9

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据…

牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f 思路 前缀树动态规划参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

GO并发总是更快吗?

许多开发人员的一个误解是,并发解决方案总是比串行更快,大错特错。解决方案的整体性能取决于许多因素,例如,结构的效率(并发)、可以并行处理的部分以及计算单元的竞争程度。 1. GO调度 线程是操作系统可以执行的最小单元。如果一个进程想要同时执行多个动作,它可以启动…

LeetCode 264 丑数II

题目信息 LeetoCode地址: . - 力扣(LeetCode) 题目理解 所谓丑数就是满足: (2^x)*(3^y)*(5^z), 其中,x,y,z > 0的数。 题目要求的是求严格递增的第n个丑数。 最小堆写法 可以维护一个小顶堆,每一次拿出堆顶元素,然后分别…

OpenCV4.9处理平滑图像

返回:OpenCV系列文章目录(持续更新中......) 上一篇:使用OpenCV4.9的随机生成器和文本 下一篇:OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何使用 OpenCV …

助力瓷砖生产智造,基于YOLOv5全系列参数【n/s/m/l/x】模型开发构建瓷砖生产制造场景下1280尺寸瓷砖表面瑕疵检测识别系统

砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光,最后进行质量检测和包装。得益于产业自动化的发展,目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说,一条产线需要配数名质检工&#…

【三十三】【算法分析与设计】回溯(1),46. 全排列,78. 子集,没有树结构,但是依旧模拟树结构,回溯,利用全局变量+递归函数模拟树结构

46. 全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3&a…

【C++】C++ primer plus 第七、八章--函数

函数指针 使用typedef声明函数指针 typedef const double* (*p)(const double*, int);const double* func1(const double* a, int b){auto *c = new(double);*c = *a * b;return c; } // p则可以作为函数指针类型 p f = func1; 内联函数 使用关键字inline声明,在编译过程中…

缺陷检测项目 | 使用OpenCV实现纺织品表面缺陷检测

项目应用场景 面向纺织品表面缺陷检测场景,使用 OpenCV 来实现,因此无需深度学习复杂的训练流程,实现起来会更加便捷。 项目效果: 项目细节 > 具体参见项目 README.md 项目采用 VisualStudio C# 开发,所以用 Visua…

详解SPWM与SVPWM的原理、算法以及两者的区别

详解SPWM与SVPWM的原理、算法以及两者的区别 1、SPWM与SVPWM 2、SPWM与SVPWM的原理 2.1 SPWM原理 2.2 SVPWM原理 3、SPWM与SVPWM的算法 3.1 SPWM算法 3.2 SVPWM 算法 4、SPWM和SVPWM的对比 5、总结 1、SPWM与SVPWM 所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,…

AcWing---转圈游戏---快速幂

太久没写快速幂了... 这是一道数学题orz,能看出来的话答案就是 ,但是很大,同时还要mod n,直接用快速幂即可。 快速幂模版: long long int power(long long int a,long long int b,long long int mod){long long int r…

golang特性3

golang特性 通过通信共享内存 在 Go 中,通信共享内存是通过通道来实现的。Go 语言的设计哲学之一就是“不要通过共享内存来通信,而应通过通信来共享内存”。这意味着不鼓励直接在多个协程之间共享内存,而是通过通道进行数据交换&#xff0c…

C语言.指针(4)

指针(4) 1.回调函数是什么?2.qsprt使用举例2.1使用qsort函数排序整型数据2.2使用qsort函数排序结构体数据 3.qsort函数的模拟实现 1.回调函数是什么? 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针(地址…

Java集合体系面试题

1. Java中有哪些主要的集合接口? 答案:Java中主要的集合接口有Collection、List、Set、Queue和Map。 2. 请解释List和Set之间的主要区别。 答案:List和Set的主要区别在于元素的顺序和唯一性。List是有序的集合,允许存储重复的元…

PHP安装swoole拓展

一:下载swoole拓展 PHP的swoole拓展下载地址:https://pecl.php.net/package/swoole wget http://pecl.php.net/get/swoole-4.2.12.tgz二:安装swoole拓展 1:解压swoole拓展包 tar xzvf swoole-4.2.12.tgz cd swoole-4.2.122&am…

pandas(day6 图表)

一. 计算效率 1. 测量代码运行时间 %%time %%timeit 单纯计算 代码块执行的时长 %%time _sum(np.arange(6)) CPU times: total: 0 ns Wall time: 1.66 ms用于多次运行代码块并计算平均执行时间 %%timeit _sum(np.arange(6))738 ns 10.7 ns per loop (mean std. dev. of 7…

java常用设计模式介绍及代码示例

设计模式是在软件设计中发现、研究和应用的一种有效方法。设计模式并不直接转化成代码,而是提供了解决某一问题的框架。下面介绍一些常用的设计模式以及对应的Java代码示例: 1. 单例模式:确保某一个类只有一个实例,同时提供一个访…

java流式计算Stream

java流式计算Stream 流(Stream)到底是什么呢? 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 “集合讲的是数据,流讲的是计算! ” 特点: Stream自己不会存储元素。 Stream不会改变源对象。相反&#x…