OneFormer: One Transformer to Rule Universal Image Segmentation论文笔记

news/2024/7/19 12:14:23 标签: transformer, 论文阅读, 深度学习
论文https://arxiv.org/pdf/2211.06220.pdf
Codehttps://github.com/SHI-Labs/OneFormer

文章目录

  • 1. Motivation
  • 2. 方法
    • 2.1 与Mask2Former的相同之处
    • 2.2 OneFormer创新之处
    • 2.3 Task Conditioned Joint Training
    • 2.4 Query Representations
    • 2.4 Task Guided Contrastive Queries
  • 3. 实验
    • 3.1 BenchMarks
    • 3.2 Ablation Studies
    • 3.3 超参数实验

1. Motivation

在这里插入图片描述

  • 通用图像分割并不是本文所提出的一个概念。远有UperNet,近有Mask2Former、K-Net,这些网络也都是作为一种通用分割架构被提出。
  • 但是,本文认为,这些网络对于语义分割、实例分割、全景分割三种虽然可以做到模型结构的统一,但是还是需要特定任务单独训练得到各自专用的模型,作者将这一类模型称之为semi-universal
  • 本文提出的OneFormer不仅模型结构统一,同时,语义分割、实例分割、全景分割只需要在全景分割数据集训练一遍,据可以得到一个三种任务通用的模型用于推理,达到真正意义上的universal

2. 方法

在这里插入图片描述

2.1 与Mask2Former的相同之处

先不看(b)模块中与文本相关的内容,OneFormer的其余部分模型结构与Mask2Former基本一致:

  1. Backbone:使用ImageNet预训练的网络编码多尺度特征;
  2. Pixel Decoder:使用Multi-Scale Deformable Transformer (MSDeformAttn) 建模多尺度上下文特征;
  3. Transformer Decoder:使用{1/8、1/16、1/32}三个分辨率的特征图对object query进行更新,李勇的主要结构是cross attention、self attention、FFN;
  4. 利用更新后的object query预测(K+1)个类别;
  5. 利用更新后的object query和1/4特征图点积给每个query生成对应的binary mask;

2.2 OneFormer创新之处

相比于Mask2Former,OneFormer的创新点或者说不同之处有以下几点:

  1. Task Conditioned Joint Training:为了将语义分割、实例分割、全景分割三个任务在一个统一的架构中进行统一训练,需要引入特定任务的任务提示词。
  2. Query Representations:除了Mask2Former这一类方法中的用到的object query,为方便理解称之为visual query,本文提出了text query,语义分割、实例分割、全景分割都有各自对应的不同的text query。
  3. Task Guided Contrastive Queries:计算visual query和text query之间的对比损失,因为不同任务的text query是不同的,这样做就可以使得不同任务训练得到的visual query能够具有区分度;

2.3 Task Conditioned Joint Training

  • 首先,对于每种任务,使用the task is { }来构造任务提示词 I t a s k I_{task} Itask ,该提示词随后会经过Tokenize和Embedding以及MLP,得到task-token Q t a s k Q_{task} Qtask
  • 此外,如下图所示,对于每种任务,统计其中出现的各类thing或者stuff的数目,采用a photo with a {CLS}这样的短语构造 T l i s t T_{list} Tlist 序列,。为了使得batch内部的文本长度对齐,需要使用a/an {task} photo这样的短语进行padding,代表no-object,padding后的结果是 T p a d T_{pad} Tpad

在这里插入图片描述

2.4 Query Representations

Query Representations部分主要介绍text query Q t e x t Q_{text} Qtext 和object query Q Q Q是如何构造和初始化的:

  • Q t e x t Q_{text} Qtext:将 T p a d T_{pad} Tpad 进行 Tokenize 以及Embedding,随后采用6层transformer encoder得到 N t e x t N_{text} Ntext个Embedding。然后,将 N c t x N_{ctx} Nctx个可学习的Embedding和 N t e x t N_{text} Ntext个embedding连接起来,最终得到 N N N 个text query Q t e x t Q_{text} Qtext
    在这里插入图片描述

  • Q Q Q:首先,将 Q t a s k Q_{task} Qtask 复制 N − 1 N-1 N1 次,的到初始化后的object query Q ′ Q' Q,然后,使用1/4特征图对 Q ′ Q' Q 进行更新(使用2层transformer),最后,将 Q t a s k Q_{task} Qtask Q ′ Q' Q 连接得到 N N N 个object query Q Q Q

2.4 Task Guided Contrastive Queries

将语义分割、实例分割、全景分割统一在同一个模型中的关键挑战在于,怎么为每个任务生成任务特定的object query,那么,该如何让每种任务的object query之间彼此区分呢?

本文的解决方案是,计算text query Q t e x t Q_{text} Qtext 和object query Q Q Q 之间的对比损失,因为 Q t e x t Q_{text} Qtext是从特定任务的GT中通过统计thing和stuff的数量得到的,所以不同任务的 Q t e x t Q_{text} Qtext之间是彼此区分的,那么只需要将 Q Q Q Q t e x t Q_{text} Qtext 对齐。

所采用的对比损失如下:

在这里插入图片描述
B B B 是一个batch内部的object-text pairs.

3. 实验

3.1 BenchMarks

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.2 Ablation Studies

在这里插入图片描述

3.3 超参数实验

在这里插入图片描述


http://www.niftyadmin.cn/n/5027262.html

相关文章

Mysql---第五篇

系列文章目录 文章目录 系列文章目录一、ACID靠什么保证的?二、什么是MVCC一、ACID靠什么保证的? A原子性由undo log日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql C一致性由其他三大特性保证、程序代码要保证业务上的一致性 I隔离性由MVCC来保证…

智能文本纠错API的应用与工作原理解析

引言 在数字时代,文本撰写和传播变得日益重要,无论是在学校里写论文、在职场中发送邮件,还是在社交媒体上发表观点。然而,文字错误、标点符号错误、语法问题和不当的表达常常会削弱文本的质量,降低信息传达的效果。为…

Fork/Join 并行计算框架

文章目录 Fork/Join 介绍Fork/Join 组件Fork/Join原理-分治法Fork/Join原理-工作窃取算法Fork/Join案例 Fork/Join 介绍 Fork/Join框架自JDK 7引入,是一种并行计算框架,见名知义,其基于Fork和Join两个操作,它们的作用是将一个大任…

ArcGIS 10.3安装教程!

软件介绍:ArcGIS是一款专业的电子地图信息编辑和开发软件,提供一种快速并且使用简单的方式浏览地理信息,无论是2D还是3D的信息。软件内置多种编辑工具,可以轻松的完成地图生产全过程,为地图分析和处理提供了新的解决方…

瑞吉外卖复盘之建表

是复盘,写完这个之后在去完成一下苍穹外卖,我自己的复盘应该是按照功能点进行拆分的,从数据表开始复盘,虽然这东西课程资料里面有 会有错误哈 表相关的 这个会先给出自己想出来的表结构,然后与官方给出的对比,不同之处…

《极客时间:左耳听风——程序员练级攻略》【文章笔记个人思考】

原文链接:https://time.geekbang.org/column/intro/100002201 69 | 程序员练级攻略:开篇词70 | 程序员练级攻略:零基础启蒙编程入门入门语言 Python入门语言 JavaScript操作系统入门 Linux编程工具 Visual Studio CodeWeb 编程入门实践项目小…

mybatis 数据库字段为空or为空串 忽略条件过滤, 不为空且不为空串时才需nameParam过滤条件

name未配置视为不考虑name条件 select * from user where (( (ISNULL(name)) OR (name) ) OR name #{user.nameParam} ) 三个or语句 推荐这个 select * from user where ISNULL(name) OR name OR name #{user.nameParam} select * from user where ISNULL(name) OR …

tabs组件封装

Tabs组件封装 封装到tabs组件&#xff0c;最简单的方式肯定是写几个div&#xff0c;内容和导航栏写在一起。例如 <div :class"{active:index1}">1</div><div :class"{active:index2}">2</div><div :class"{active:index3…