(CVPR,2023)SAN:用于开放词汇语义分割的边缘适配网络

news2024/12/28 3:25:58

文章目录

  • 相关论文
  • 相关资料
  • 摘要
  • 引言
  • 方法
    • 对视觉 token 的特征融合
    • 使用注意力偏差进行掩码识别
    • 分割图像生成
  • 实验

相关论文

(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零样本语义分割

相关资料

论文:Side Adapter Network for Open-Vocabulary Semantic Segmentation

代码:https://github.com/MendelXu/SAN

摘要

在这里插入图片描述

本文提出了一种新的开放词汇语义分割框架,名为边缘适配器网络(SAN)。我们的方法将语义分割任务建模为区域识别问题一个边缘网络附加到一个冻结的CLIP模型上,具有两个分支:一个用于预测掩模提案,另一个用于预测注意偏差,该偏差应用于CLIP模型中以识别掩模的类别。这种解耦的设计使得CLIP在识别掩模提案的类别时受益良多。
由于附加的边缘网络可以重用CLIP特征,因此可以非常轻量级。此外,整个网络可以进行端到端的训练,允许边缘网络适应冻结的CLIP模型,从而使得预测的掩模提案具有CLIP感知能力。我们的方法快速、准确,并且仅添加了少量的可训练参数。我们在多个语义分割基准数据集上评估了我们的方法。我们的方法显著优于其他对比方法,可训练参数数量少达18倍,推断速度快达19倍。图1展示了在ImageNet上的一些可视化结果。我们希望我们的方法能够作为一个坚实的基线,并帮助简化未来在开放词汇语义分割方面的研究。

引言

识别和分割任何类别的视觉元素是语义分割的追求。现代语义分割方法依赖于大量标记数据,但通常数据集往往只包含数十到数百个类别,昂贵的数据收集和注释限制了我们进一步扩展类别的可能性。最近,代表性的大规模视觉语言模型,如CLIP,使得在图像级别进行任意类别识别成为可能,即开放词汇的图像分类,这一巨大成功鼓励我们探索其在语义分割中的应用。

将CLIP模型应用于开放词汇的语义分割是具有挑战性的,因为CLIP模型是通过图像级对比学习进行训练的。它学习的表示缺乏语义分割所需的像素级别的识别能力。解决表示粒度差异的一种解决方案是在分割数据集上对模型进行微调。然而,分割数据集的数据规模远远小于视觉语言预训练数据集,因此微调模型在开放词汇识别上的能力经常受到影响

将语义分割建模为区域识别问题可以避开以上困难。早期尝试采用了两阶段训练框架。在第一阶段,一个独立模型被训练以生成一组被掩码的图像裁剪作为掩码提议。在第二阶段,使用视觉语言预训练模型(例如CLIP)来识别掩码图像裁剪的类别。然而,由于掩码预测模型完全独立于视觉语言预训练模型,它错过了利用视觉语言预训练模型的强特征的机会,而且预测的掩码图像裁剪可能不适合识别,这导致了一个笨重、缓慢且性能低下的模型。
在这里插入图片描述

本文旨在充分发挥视觉语言预训练模型在开放词汇语义分割中的能力。为了实现这一目标,我们提出了一个新的框架(图2),称为辅助适配器网络(SAN)。由于端到端训练,其掩码预测和识别都是CLIP感知的,并且由于利用了CLIP的特征,它可以是轻量级的

辅助适配器网络有两个分支:一个预测掩码提议,一个预测应用于CLIP的自注意力块的注意力偏置以进行掩码类别识别。我们展示了这种解耦设计提高了分割性能,因为CLIP用于识别掩码的区域可能与掩码区域本身不同。为了最小化CLIP的成本,我们进一步提出了单次前向设计:浅层CLIP块的特征被融合到SAN中,其他更深层的块与注意力偏置结合以进行掩码识别。由于训练是端到端的,因此辅助适配器网络可以最大程度地适应冻结的CLIP模型。

准确的语义分割需要高分辨率的图像,但发布的ViT CLIP模型设计用于低分辨率图像(例如224×224),直接应用于高分辨率图像会导致性能下降。为了缓解输入分辨率的冲突,我们在CLIP模型中使用低分辨率图像,在辅助适配器网络中使用高分辨率图像。我们展示了这种不对称的输入分辨率非常有效。此外,我们还探索了仅对ViT模型的位置嵌入进行微调,并注意到了改进。

方法

在这里插入图片描述

SAN 是由一个轻量级的ViT实现的,可以利用 CLIP 的特征,它有两种输出:掩码提议注意力偏差。注意力偏差被应用于 CLIP 的自注意力,用于识别掩码提议的类别。 实际中,我们将浅层 CLIP 层的特征融合到 SAN 中,并将注意力偏差应用于更深层的 CLIP 层进行识别,从而最小化 CLIP 模型的成本。
SAN 的详细架构如图 3 所示。输入图像被分割成 16×16 个 patch,并应用线性嵌入层将其投影为视觉 token。这些视觉 token 然后与 N 个可学习的查询 token 连接在一起,输入到后续的Transformer层。我们在每个Transformer块中为视觉 token 和查询 token 添加绝对位置嵌入。位置嵌入在各层间共享。

在掩码预测中,查询 token 和视觉 token 首先通过两个独立的 3 层 MLP 投影为 256 维,我们将投影的查询 token 表示为 Q m a s k ∈ R N × 256 Q_{mask}∈ℝ^{N×256} QmaskRN×256,其中 N 是查询 token 的数量,将投影的视觉 token 表示为 V m a s k ∈ R H / 16 × W / 16 × 256 V_{mask}∈ℝ^{H/16×W/16×256} VmaskRH/16×W/16×256,其中 H 和 W 是输入图像的高度和宽度。然后,掩码通过 Q m a s k Q_{mask} Qmask V m a s k V_{mask} Vmask 的内积生成:
在这里插入图片描述
其中 M ∈ R H / 16 × W / 16 × N M∈ℝ^{H/16×W/16×N} MRH/16×W/16×N。生成注意力偏差的方式类似于掩码预测。查询 token 和视觉 token 也通过 3 层 MLP 投影,分别表示为 Q a t t n ∈ R N × 256 Q_{attn}∈ℝ^{N×256} QattnRN×256 V a t t n ∈ R H / 16 × W / 16 × K × 256 V_{attn}∈ℝ^{H/16×W/16×K×256} VattnRH/16×W/16×K×256,其中 K 是 ViT CLIP 模型的注意力头数。通过 Q a t t n Q_{attn} Qattn V a t t n V_{attn} Vattn 的内积,我们得到注意力偏差:
在这里插入图片描述

其中 B ∈ R H / 16 × W / 16 × K × N B∈ℝ^{H/16×W/16×K×N} BRH/16×W/16×K×N。此外,如果需要,注意力偏差将进一步调整为 B ∈ R h × w × K × N B∈ℝ^{h×w×K×N} BRh×w×K×N,其中 h h h w w w 是 CLIP 中注意力图的高度和宽度。在实践中, Q m a s k Q_{mask} Qmask Q a t t n Q_{attn} Qattn 可以共享,注意力偏差将应用于 CLIP 的多个自注意力层,即偏差在不同的自注意力层中使用。

掩码预测和识别分离设计的动机很直观:CLIP 中识别掩码所用的感兴趣区域可能与掩码区域本身不同。

对视觉 token 的特征融合

ViT 模型由视觉 token[CLS] token 组成,但我们只将视觉 token 融合到 SAN 中。由于 CLIP 和 SAN 的视觉 token 数量和特征维度可能不同,我们首先将视觉 token 重新排列为特征图,经过 1×1 卷积和调整大小操作来调整通道维度和特征图大小,然后通过按元素相加的方式将其与 SAN 对应的特征图合并。特征融合会执行多次,以 12 层 ViT-B/16 CLIP 模型和 8 层 SAN 模型为例,我们将 CLIP 的 { s t e m , 3 , 6 , 9 } \{stem, 3, 6, 9\} {stem,3,6,9}层特征与 SAN 的 { s t e m , 1 , 2 , 3 } \{stem, 1, 2, 3\} {stem,1,2,3}层特征进行融合。

使用注意力偏差进行掩码识别

原始 CLIP 模型只能通过 [CLS] token 进行图像级别的识别。我们的工作在不改变 CLIP 模型参数的情况下,试图通过引导 [CLS] token 的注意力图到感兴趣区域来实现准确的掩码识别。为此,我们创建了一组 [SLS] token 作为 [CLS] token 的影子副本。这些 [SLS] token 单向地由视觉 token 更新,但视觉 token 和 [CLS] token 不受它们的影响(图 4)。
在这里插入图片描述

在更新 [SLS] token 时,将预测的注意力偏差 B k ∈ R h × w × N B_k ∈ℝ^{h×w×N} BkRh×w×N 添加到注意力矩阵中:
在这里插入图片描述
其中 l l l 表示层数, k k k 表示第 k 个注意力头。

Q [ S L S ] = W q X [ S L S ] Q_{[SLS]} = W_qX_{[SLS]} Q[SLS]=WqX[SLS] V [ S L S ] = W v X [ S L S ] V_{[SLS]} = W_vX_{[SLS]} V[SLS]=WvX[SLS] 分别是 [SLS] token 的查询和值嵌入, 而 K v i s u a l = W k X v i s u a l K_{visual} = W_kX_{visual} Kvisual=WkXvisual 是视觉 token 的键嵌入。 W q W_q Wq W k W_k Wk W v W_v Wv 分别是查询、键和值嵌入层的权重。

我们注意到,如果通过将所有类型的 token 连接在一起并使用掩码自注意力层来实现,计算复杂度为 O ( ( T v i s u a l + T [ C L S ] + T [ S L S ] ) 2 ) O((T_{visual}+T_{[CLS]}+T_{[SLS]}) ^2 ) O((Tvisual+T[CLS]+T[SLS])2),其中 T v i s u a l T_{visual} Tvisual T [ C L S ] T_{[CLS]} T[CLS] T [ S L S ] T_{[SLS]} T[SLS] 分别是不同类型 token 的数量。

但是,我们可以通过交叉注意力来更新 [SLS] token,这与自注意力共享嵌入权重。

因此,计算复杂度变为 O ( ( T v i s u a l + T [ C L S ] ) 2 + T [ S L S ] ( T v i s u a l + T [ C L S ] ) ) O((T_{visual}+T_{[CLS]})^ 2 + T_{[SLS]}(T_{visual} + T_{[CLS]})) O((Tvisual+T[CLS])2+T[SLS](Tvisual+T[CLS]))

通过注意力偏差,[SLS] token 的特征逐渐演化以适应掩码预测,可以通过比较 [SLS] token 与类名 CLIP 文本嵌入 P ∈ R C × N P ∈ℝ^{C×N} PRC×N 之间的距离/相似度来轻松获得掩码的类别预测,其中 C 是类别数。

分割图像生成

使用掩码提议 M ∈ R H / 16 × W / 16 × N M ∈ℝ^{H/16×W/16×N} MRH/16×W/16×N 和掩码的类别预测 P ∈ R C × N P ∈ℝ^{C×N} PRC×N,我们可以计算出分割图S:
在这里插入图片描述

其中 S ∈ R H / 16 × W / 16 × C S ∈ℝ^{H/16×W/16×C} SRH/16×W/16×C 。这是语义分割的标准输出,因此与主流的语义分割评估兼容。

为了训练我们的模型,我们遵循[7]的做法。掩码生成受 dice 损失 L m a s k d i c e L_{mask_dice} Lmaskdice 和二元交叉熵损失 L m a s k b c e L_{mask_bce} Lmaskbce 的监督。掩码识别受交叉熵损失 Lcls 的监督。总损失为:

在这里插入图片描述

其中损失权重 λ1、λ2、λ3 分别为 5.0、5.0 和 2.0。

SAN 的梯度流如图2所示。通过端到端训练,侧适配器网络可以最大限度地适应冻结的 CLIP 模型,因此掩码提议和注意力偏差都具有 CLIP 感知性。

实验

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

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

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

相关文章

javaWeb项目-财务管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、Springboot框架 …

计算机工作者学习平台

给大家分享了几个非常有用的学习平台,可以作为参考,具体为: 1.中国大学MOOC 中国大学MOOC_优质在线课程学习平台 2.牛客 牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 3.CSDN https://www…

Learn ComputeShader 02 Multiple kernels

前面已经成功创建了第一个compute shader,并且使用它替换掉quad的材质的纹理,现在我们将要在计算着色器中创建多个kernel。 首先调整上次的计算着色器,让它显示为红色。 然后再次创建一个kernel,显示为黄色。 结果应该是这样的…

vulhub weblogic全系列靶场

目录 简介 需要使用的工具 CVE-2017-10271 0x00 漏洞产生原因 0x01 影响范围 0x02 漏洞地址 0x03 环境 0x04 漏洞复现 1. 手工 2. 漏洞利用工具 CVE-2018-2628 0x00 漏洞产生原因 0x01 影响范围 0x02 环境 0x03 漏洞复现 1.nmap扫是否是T3协议 2.漏洞检测&…

数据结构学习之路--玩转队列的内核知识(附C源码)

嗨嗨大家~我又来啦!今天为大家带来的是与队列相关的知识。我们马上进入知识的海洋~ 目录 前言 一、队列 1 队列的概念 2 队列的实现 2.1 队列的定义 2.2 队列的初始化 2.3 队列的判空 2.4 入队 2.5 出队 2.6 取队头元素 2.7 取队尾元素 2.8 取…

CountDownLatch倒计时器源码解读与使用

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1. 前言 2. CountDownLatch有什么用 3. CountDownLatch底层原理 3.1. count…

React Router 6 + Ant Design:构建基于角色的动态路由和菜单

要根据用户的角色生成不同的路由菜单并实现权限控制,你可以采取以下步骤: 定义路由配置 首先,你需要定义一个包含所有可能路由的配置文件,例如: const routes [{path: /dashboard,element: <DashboardPage />,roles: [admin, manager, user]},{path: /users,element:…

Unity场景光照数据Light data asset

首先描述一下遇到的问题&#xff0c;游戏运行过程中切换场景之后发现模型接收的光照不对。 Unity编辑模式下正常显示&#xff1a; 运行模式下从其他场景切入之后显示异常&#xff1a; 排查了灯光参数和环境光以及着色器都没发现异常。 根据ChatGPT的回答&#xff0c;问题可能…

15.Nacos服务分级存储模型

服务跨集群调用问题&#xff1a; 服务调用尽可能的选择本地集群的服务&#xff0c;跨集群调用延迟较高。 本地集群不可访问的情况下&#xff0c;再去访问其他集群。 如何配置集群的实例属性&#xff1a; spring: cloud:nacos:server-addr: localhost:8848 #nacos服务端地址d…

[lesson48]同名覆盖引发的问题

同名覆盖引发的问题 父子间的赋值兼容 子类对象可以当做父类对象使用(兼容性) 子类对象可以直接赋值给父类对象(<font color>兼容性)子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象 当使用父类指针(引用)指向子类对象时 子类…

Vitis HLS 学习笔记--优化指令-BIND_OP_STORAGE

目录 1. BIND_OP_STORAGE 概述 1.1 BIND_OP 1.2 BIND_STORAGE 2. 语法解析 2.1 BIND_OP 2.2 BIND_OP 用法示例 2.3 BIND_STORAGE 2.4 BIND_STORAGE 示例 3. 实例演示 4. 总结 1. BIND_OP_STORAGE 概述 BIND_OP_STORAGE 其实是两个优化指令的合称&#xff1a;BIND_OP…

数栈+AI:数栈V6.2创新发布,让数据开发更智能

近日&#xff0c;以“DataAI&#xff0c;构建新质生产力”为主题的袋鼠云春季发布会圆满落幕&#xff0c;大会带来了一系列“AI”的数字化产品与最新行业沉淀&#xff0c;旨在将数据与AI紧密结合&#xff0c;打破传统的生产力边界&#xff0c;赋能企业实现更高质量、更高效率的…

究竟该怎么寄快递才能安全无误的送到手中呢?

最近&#xff0c;小编上班了发现有同事在吐槽快递送到手中的时间很晚了&#xff0c;比预计的时间差了很多&#xff0c;并且产品也有不同程度的损坏。这就让我们很是恼火了&#xff0c;但是细细研究后才发现有一部分的原因竟然是我们的原因才导致的寄快递出现了很多纰漏。 首先…

echart实现排名列表

function createHorizontalBarChart(chartId, data) {if (typeof echarts undefined) {console.error(请先引入 ECharts 库);return;}// 初始化echarts实例var myChart echarts.init(document.getElementById(chartId));// 对数据按照 value 进行降序排序var sortedData dat…

hexo配置教程、主题使用及涉及的技术学习

一、背景 最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程. 方案 一开始的方案是从零开始,模仿常见个人博客的设计,基于vueSpringbootMySQL的去实现网站. 新建项目之后,发现vu…

Git 新手快速入门教程

一、什么是 Git 1. 何为版本控制 版本控制是一种记录文件变化的系统&#xff0c;可以跟踪文件的修改历史&#xff0c;并允许用户在不同版本之间进行比较、恢复或合并。它主要用于软件开发过程中管理代码的变更&#xff0c;但也可以应用于任何需要跟踪文件变更的场景。 版本控…

【问题】java查询MySQL时,mysql查询tinyint类型 的数据时,0会被转为false,1或以上会转为true

在做接口测试的数据库断言时&#xff0c;发现type字段断言总是失败&#xff0c;期望是0&#xff0c;打印数据库实际值是false 查看数据库格式&#xff1a; 解决&#xff1a; 在数据库url上&#xff0c;添加&#xff1a;&tinyInt1isBitfalse ——可解决java查询MySQL时&a…

密钥密码学(二)

原文&#xff1a;annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十章&#xff1a;可变长度分数化 本章涵盖 基于摩尔斯电码的密码 混合字母和双字母 可变长度二进制码字 基于文本压缩的密码 本章涵盖…

【JavaWeb】Day52.Mybatis动态SQL(二)

动态SQL-foreach 案例&#xff1a;批量删除员工功能 SQL语句&#xff1a; delete from emp where id in (1,2,3); Mapper接口&#xff1a; ~~~java Mapper public interface EmpMapper {//批量删除public void deleteByIds(List<Integer> ids); } ~~~ XML映射文件&am…

C++学习进阶版(一):用C++写简单的状态机实现

目录 一、基础知识 1、状态机 2、四大要素 3、描述方式 4、设计步骤 5、实现过程中需注意 &#xff08;1&#xff09; 状态定义 &#xff08;2&#xff09; 状态转换规则 &#xff08;3&#xff09; 输入处理 &#xff08;4&#xff09; 状态机的封装 &#xff08;5…