(CVPR,2024)SED:一个用于开放词汇语义分割的简单编解码器

news/2025/2/11 5:18:38/

文章目录

  • 相关论文
  • 相关资料
  • 摘要
  • 引言
  • 方法
    • 基于层次编码器的代价图生成
    • 渐进融合解码器
    • 类别早期拒绝
  • 实验

相关论文

(CVPR,2024)SED:一个用于开放词汇语义分割的简单编解码器
(CVPR,2024)CAT-Seg:基于成本聚合的开放词汇语义分割
(CVPR,2023)SAN:用于开放词汇语义分割的边缘适配网络
(ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
(CVPR,2022)ZegFormer:基于解耦的zero-shot语义分割
(CVPR,2023)PADing:通用zero-shot分割的基元生成与语义对齐
(CVPR,2023)ZegCLIP: 使用CLIP进行单阶段零样本语义分割
(NeurIPS,2019)【代码复现】Zero-Shot Semantic Segmentation零样本语义分割

相关资料

论文:SED: A Simple Encoder-Decoder for Open-Vocabulary Semantic Segmentation

代码:https://github.com/xb534/SED

摘要

开放词汇语义分割旨在将像素从一个开放的类别集合中划分为不同的语义组。大多数现有方法利用预训练的视觉-语言模型,其中关键是采用图像级模型进行像素级分割任务。在本文中,我们提出了一种名为SED的简单编码器-解码器,用于开放词汇语义分割,它包括基于层次编码器的代价图生成具有类别早期拒绝的逐渐融合解码器
基于层次编码器的代价图生成采用层次骨干网络,而不是简单的Transformer,来预测像素级图像-文本代价图。与简单的Transformer相比,层次骨干网络更好地捕捉局部空间信息,并且具有与输入大小线性相关的计算复杂度。
我们的逐渐融合解码器采用自顶向下的结构,将代价图和不同骨干层级的特征图结合起来进行分割。为了加速推理速度,我们在解码器中引入了类别早期拒绝方案,在解码器的早期层级拒绝了许多不存在的类别,结果是最多可以加速4.7倍而不损失准确性。
我们在多个开放词汇语义分割数据集上进行了实验证明了我们的SED方法的有效性。当使用ConvNeXt-B时,我们的SED方法在ADE20K数据集上的mIoU得分为31.6%,每张图像82毫秒(ms),在单个A6000上。我们将在https://github.com/xb534/SED.git上发布它。

引言

在这里插入图片描述

传统的单阶段方法直接扩展了单个视觉-语言模型用于开放词汇分割。其中一些方法在图像编码器的最后一层移除了池化操作,并生成像素级特征图进行分割。例如,MaskCLIP [57] 在CLIP图像编码器的最后一层移除了全局池化,并使用值嵌入和文本嵌入直接预测像素级分割图。
CAT-Seg [11] 首先生成像素级图像-文本代价图,然后通过空间和类别聚合来优化代价图。尽管这些方法相对于两阶段方法取得了良好的性能,但我们注意到它们存在以下限制。首先,MaskCLIP [57] 和CAT-Seg都采用了普通的Transformer ViT [15]作为骨干网络,这导致了较弱的局部空间信息和低分辨率输入尺寸。为了解决这些问题,CAT-Seg引入了额外的网络提供空间信息,但这增加了额外的计算成本。其次,CAT-Seg的计算成本随着开放词汇类别数量的增加而显著增加。

为了解决上述问题,我们提出了一种简单而有效的编码器-解码器方法,名为SED,用于开放词汇语义分割。具有以下特点:

  • 我们提出了一个编码器-解码器用于开放词汇语义分割,包括基于层次编码器的代价图生成逐渐融合的解码器
  • 我们引入了一种类别早期拒绝方案,在早期层级拒绝不存在的类别,在显著提高推理速度的同时不会明显降低分割性能。例如,在PC-459上可以提供4.7倍的加速。
  • 我们提出的SED方法在多个开放词汇分割数据集上实现了卓越的性能。具体而言,我们的SED方法在A-150数据集上使用ConvNeXt-L获得了35.2%的mIoU分数,在PC-459数据集上获得了22.6%的mIoU分数。

方法

在这里插入图片描述

图2显示了我们提出的SED的总体架构,包括两个主要组件:基于层次编码器的代价图生成具有类别早期拒绝的渐进融合解码器
在我们的基于层次编码器的代价图生成中,我们采用层次图像编码器和文本编码器生成像素级的图像-文本代价图 F c v F_{cv} Fcv和用于解码器的分层特征图 F 2 、 F 3 、 F 4 F_2、F_3、F_4 F2F3F4
我们的渐进融合解码器采用特征聚合模块(FAM)和跳跃层融合模块(SFM),逐步结合像素级代价图 F c v F_{cv} Fcv和分层特征图 F 2 、 F 3 、 F 4 F_2、F_3、F_4 F2F3F4生成高分辨率特征图 F h F_h Fh。基于 F h F_h Fh,我们采用输出层预测不同类别的分割图。此外,解码器中还使用了类别早期拒绝(CER)策略,用于提高推理速度。

基于层次编码器的代价图生成

基于层次编码器的代价图生成(HECG)采用视觉-语言模型CLIP [10, 37, 39]生成像素级的图像-文本代价图。具体而言,我们首先使用层次图像编码器文本编码器分别提取视觉特征和文本嵌入。

正如前面讨论的,纯Transformer在局部空间信息上相对较弱,并且其复杂度与输入尺寸的平方成正比。为了解决这些问题,我们提出使用层次骨干作为图像编码器来生成代价图。层次编码器可以更好地捕捉局部信息,并且其复杂度与输入尺寸成线性关系。代价图的生成过程如下所述。

给定输入图像 I ∈ R H × W × 3 I ∈ \mathbb{R}^{H×W×3} IRH×W×3,我们首先利用层次编码器ConvNeXt [29, 39]提取多尺度的特征图,表示为 F 2 、 F 3 、 F 4 、 F 5 F_2、F_3、F_4、F_5 F2F3F4F5。这些特征图相对于输入尺寸具有4、8、16、32像素的步长。为了对齐输出的视觉特征和文本嵌入,我们在最后一个特征图 F 5 F_5 F5上附加了一个MLP层,以获得对齐的视觉特征图 F v ∈ R H v × W v × D t F_v ∈\mathbb{R}^{H_v×W_v×D_t} FvRHv×Wv×Dt,其中 D t D_t Dt等于文本嵌入的特征维度, H v H_v Hv等于H/32, W v W_v Wv等于W/32。给定任意一组类别名称 { T 1 , . . , T N } \{T_1,..,T_N\} {T1..TN},我们使用提示模板策略[11, 20, 28]为每个类别生成不同的文本描述 S ( n ) ∈ R P S(n) ∈\mathbb{R}^P S(n)RP,例如“一张 { T n } \{T_n\} {Tn}的照片,许多 { T n } \{T_n\} {Tn}的照片,…”。N表示类别的总数,P是每个类别的模板数量。通过将 S ( n ) S(n) S(n)提供给文本编码器,我们获得文本嵌入,表示为 E = E 1 , . . , E N ∈ R N × P × D t E = {E_1,..,E_N} ∈\mathbb{R}^{N×P ×D_t} E=E1..ENRN×P×Dt。通过计算视觉特征图 F v F_v Fv和文本嵌入 E E E之间的余弦相似度[38],我们获得像素级的代价图 F c v F_{cv} Fcv,表示为:

Fcv(i, j, n, p) = Fv(i, j) · E(n, p) / (∥Fv(i, j)∥∥E(n, p)∥),(1)

其中i、j表示2D空间位置,n表示文本嵌入的索引,p表示模板的索引。因此,初始代价图 F c v F_{cv} Fcv的大小为 H v × W v × N × P H_v × W_v × N × P Hv×Wv×N×P。初始代价图经过一个卷积层生成解码器的输入特征图 F d e c l 1 ∈ R H v × W v × N × D F^{l1}_{dec} ∈ \mathbb{R}^{H_v×W_v×N×D} Fdecl1RHv×Wv×N×D。为简单起见,我们在图2中没有显示 F d e c l 1 F^{l1}_{dec} Fdecl1

渐进融合解码器

在这里插入图片描述

语义分割从高分辨率的特征图中受益匪浅。然而,编码器生成的代价图 F c v F_{cv} Fcv分辨率相对较低且噪声较高。因此,直接使用代价图进行预测无法生成高质量的分割图。为了解决这个问题,我们提出了渐进融合解码器(GFD)。GFD通过级联两个模块逐步生成高分辨率特征图 F h F_h Fh,包括特征聚合模块(FAM)跳跃层融合模块(SFM)。FAM旨在建模局部区域与不同类别之间的关系,而SFM旨在利用层次编码器的浅层特征增强特征图的局部细节。

  1. 特征聚合模块:图3(a)展示了特征聚合模块(FAM)的设计,其中包括空间级别类别级别的融合。我们首先进行空间级别的融合来建模局部区域之间的关系。之前的工作[29, 35]已经证明,大卷积核操作是捕捉局部信息的一种简单而有效的结构。受此启发,我们使用大卷积核[29]进行空间级别的融合。具体而言,输入特征图 F d e c l 1 F^{l1}_{dec} Fdecl1经过深度卷积层MLP层
    深度卷积层包括一个9×9的深度卷积和一个层归一化操作,MLP层包含两个线性层和一个GeLU激活函数层。此外,我们在卷积层和MLP层都使用了残差连接。在空间级别的聚合之后,我们进一步应用线性自注意力机制[11, 25]沿类别维度进行类别级别的特征聚合。特征聚合模块(FAM)生成的特征图表示为Ffam dec。

  2. 跳跃层融合模块:特征图 F d e c f a m F^{fam}_{dec} Fdecfam在空间上较粗糙,缺乏局部细节信息。相比之下,层次编码器中的浅层特征图 F 2 、 F 3 、 F 4 F2、F3、F4 F2F3F4包含丰富的细节信息。为了将这些局部细节融入分割中,我们引入了跳跃层融合模块,逐步将低分辨率特征图 F d e c f a m F^{fam}_{dec} Fdecfam与高分辨率特征图 F 2 、 F 3 、 F 4 F2、F3、F4 F2F3F4进行融合。如图3(b)所示,我们首先使用反卷积操作将低分辨率特征图 F d e c f a m F^{fam}_{dec} Fdecfam上采样2倍。然后,我们使用卷积操作将相应的高分辨率特征图 F j ( j ∈ 2 , 3 , 4 ) Fj(j ∈ 2, 3, 4) Fjj2,3,4的通道维度减少16倍,并重复减少后的特征图N次,使其具有与 F d e c f a m F^{fam}_{dec} Fdecfam相同的类别维度。随后,我们将上采样的特征图和重复的特征图进行拼接。为了融合更多信息,我们还上采样并拼接初始的代价图 F c v F_{cv} Fcv。最后,我们将拼接后的特征图 F d e c c a t F^{cat}_{dec} Fdeccat通过两个卷积层生成输出特征图 F d e c l ( i + 1 ) F^{l(i+1)}_{ dec} Fdecl(i+1)。正如在[11]中观察到的那样,直接从跳跃层融合模块向图像编码器进行梯度反向传播会降低开放词汇语义分割性能。因此,我们停止了从跳跃层融合模块直接向图像编码器进行梯度反向传播
    在这里插入图片描述

我们的观察结果(见表4)显示,与普通的Transformer相比,具有跳跃层融合的层次编码器显著提高了性能。这可能是因为层次编码器能够为分割提供丰富的局部信息,并且停止梯度反向传播避免了对开放词汇分割能力的负面影响。

类别早期拒绝

渐进融合解码器的计算成本与语义类别的数量成正比。当类别数量非常大时,推理时间显著增加。实际上,大多数图像只包含几个语义类别。因此,解码器的大部分推理时间用于计算不存在类别的特征。为了提高推理速度,我们引入了类别早期拒绝方案,在早期解码器层识别这些存在的类别并拒绝不存在的类别。被拒绝类别对应的特征图将从当前解码器层中移除,后续解码器层仅考虑保留的类别。
在这里插入图片描述

在训练过程中,如图4(a)所示,我们在每个层后添加辅助卷积分支分别预测分割图,并通过真值进行监督。为了避免对模型训练产生负面影响,我们禁止它们的梯度反向传播到解码器

在推理过程中,我们在分割图上采用top-k策略来预测存在的语义类别。具体而言,我们选择每个像素最大响应的前k个类别,并从所有像素中生成一个类别的并集,将其输入到下一个解码器层。

我们观察到, k = 8 k = 8 k=8可以确保大多数存在的类别被识别出来。图4(b)展示了推理过程中的类别早期拒绝。我们首先从 F d e c l 1 F^{l1}_{dec} Fdecl1预测分割图,并采用top-k策略选择 N l 1 N_{l1} Nl1个类别。然后,我们移除非选中类别的特征图,并生成输出特征图 F c e r l 1 ∈ R H v × W v × N l 1 × D F^{l1}_{cer} ∈ R^{H_v×W_v×N_{l1}×D} Fcerl1RHv×Wv×Nl1×D。生成的特征图 F c e r l 1 F^{l1}_{cer} Fcerl1被馈送到解码器层。类似地,我们为后续层生成具有较少类别的特征图。因此,大多数不存在的类别在早期层被拒绝,从而提高了解码器的推理速度。

实验

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


http://www.ppmy.cn/news/1430000.html

相关文章

C++超级快读快写2.3

#ifndef VERY_FAST_IO3 #define VERY_FAST_IO3 #include <unistd.h> #include<bits/stdc.h>namespace MTL{using namespace std;//getchar_unlocked/putchar_unlocked貌似快一点&#xff1f; #define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __b…

Redis:redis 版本过低

2020-10-28T03:29:30.334954000Z Reading the configuration file, at line 3302020-10-28T03:29:30.335230000Z >>> vm-enabled no2020-10-28T03:29:30.343203000Z Bad directive or wrong number of arguments

Java初学日记 十三 (GUI)

GUI编程 概述 GUI(Graphical Uers Interface)全称图形用户界面 swing指javax.swing包&#xff0c;该包中包含实现界面的类&#xff0c;这些类都可称为组件 组件可分为两大类&#xff1a; 容器组件 窗口 import javax.swing.*; ​ public class LoginFrame extends JFram…

信创产业发展迅速,信创测试需要伴随

信创产业的发展现状呈现出蓬勃的生机与活力。这一领域不仅构成了数据安全、网络安全的基石&#xff0c;更是新型基础设施建设的重要一环。信创产业涵盖了众多关键领域&#xff0c;如云计算、软件&#xff08;包括操作系统、中间件、数据库及应用软件&#xff09;、硬件&#xf…

MacOS - 打开 App 无法验证开发者解决方案

一、设置安全性与隐私偏好设置 1、点击苹果菜单图标&#xff0c;选择系统偏好设置。 2、点击安全性与隐私。 3、在通用选项卡中&#xff0c;确保已启用允许从以下位置下载的应用程序选项&#xff0c;并选择任何来源。 4、如果已经选中任何来源&#xff0c;则尝试切换到App …

chrome 浏览器 f12 如何查看 websocket 消息?

1. 打开目标页面 2. f12--》网络--》WS&#xff0c;然后刷新页面( 如果不刷页面&#xff0c;就会看不到 websocket 请求&#xff0c;因为 websocket 是长连接&#xff0c;页面加载后只发出一次连接请求&#xff0c;不像 http 接口&#xff0c;不用刷新页面&#xff0c;待会儿也…

如何使用PHPStudy+Cloudreve搭建个人云盘并实现无公网IP远程访问——“cpolar内网穿透”

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+l到最后的字符移到字符串的前部。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…