图像分割(二)—— Segmenter: Transformer for Semantic Segmentation

2023-12-26 23:10

本文主要是介绍图像分割(二)—— Segmenter: Transformer for Semantic Segmentation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Segmenter: Transformer for Semantic Segmentation

    • Abstract
    • 1. Introduction
    • Our approach: Segmenter
      • 3.1. Encoder
      • 3.2. Decoder

Abstract

图像分割往往在图像 patch 的级别上模棱两可,并需要上下文信息达成标签一致。本文介绍了一种用于语义分割的 transformer 模型—Segmenter.

与基于卷积的方法相比,本文的方法允许在第一层和整个网络中建模全局上下文。以最近的 ViT 为基础,并将其扩展到语义分割。为此,本文依赖于与图像 patch 对应的输出嵌入,并使用逐点线性解码器(point-wise linear decoder)或一个 mask transformer 解码器从这些嵌入中获得类标签。本文利用了用于图像分类的预训练模型,并表明本文的模型可以在用于语义分割的中等规模数据集上微调它们,线性解码器已经可以获得优秀的结果,但性能可以由 mask transformer 产生类掩模进一步提高。

1. Introduction

最近的语义分割方法通常依赖于卷积编码器-解码器架构,其中编码器生成低分辨率图像特征,解码器对特征进行采样,以逐像素类分数分割地图。最先进的方法部署了全卷积网络 (FCN),并取得很好的结果。这些方法依赖于可学习的堆叠卷积,可以捕获语义丰富的信息。然而,卷积滤波器的局部特性限制了对图像中全局信息的访问。同时,这些信息对于分割尤为重要,局部 patches 的标记往往依赖于全局图像上下文。为了规避这个问题,DeepLab 引入了膨胀卷积的特征聚合和空间金字塔池。这样可以扩大卷积网络的接收域,获得多尺度特征。

随着自然语言处理的最新进展,一些分割方法探索了基于通道或空间注意和点方向注意的替代聚合方案,以更好地捕获上下文信息。

不足:然而,这样的方法仍然依赖于卷积 backbone,因此偏向于局部交互。广泛使用专门的层来纠正这种偏差,表明了卷积结构在分割方面的局限性。

为了克服这些限制,本文将语义分割问题定义为序列到序列问题,并使用 transformer 架构在模型的每个阶段利用上下文信息。根据设计,transformer 可以捕获场景元素之间的全局交互,并且没有内置的感应先验,见图 1。然而,全局交互的建模需要二次方成本,这使得这些方法在应用于原始图像像素时非常昂贵。

在这里插入图片描述

继 Vision Transformers (ViT) 的最新研究之后,将图像分割成小块,并将线性小块嵌入作为 Transformers 编码器的输入 tokens。然后由 transformer 解码器将编码器产生的上下文化 tokens 序列上采样为逐像素类分数。对于解码,本文考虑一个简单的逐点线性映射的 patch 嵌入到类分数,或者一个基于 transformer 的解码方案,其中可学习的类嵌入与 patch tokens 一起处理以生成类 mask。我们通过消融模型正则化、模型大小、输入patch大小及其在精度和性能之间的权衡,对用于分割的变压器进行了广泛的研究。

本文所做工作如下:

  • 我们提出了一种基于视觉转换器(ViT)的新的语义分割方法,该方法不使用卷积,通过设计捕获上下文信息,并且优于基于FCN的方法。
  • 我们提出了一系列具有不同分辨率级别的模型,它允许在精度和运行时之间进行权衡,从最先进的性能到具有快速推理和良好性能的模型。
  • 我们提出了一个基于变压器的解码器生成类掩模,它优于我们的线性基线,并可以扩展到执行更一般的图像分割任务。
  • 我们证明了我们的方法在ADE20K[68]和Pascal Context[38]数据集上都产生了最先进的结果,并且在Cityscapes[14]上具有竞争力。

Our approach: Segmenter

Segmenter 基于一个完全基于转换器的编码器-解码器架构,它将一系列 patch 嵌入映射到像素级的类注释。模型的概览如图 2 所示。patch 序列由第 3.1 节中描述的变压器编码器编码,并由第 3.2 节中描述的逐点线性映射或 mask Transformer 解码。本文的模型采用逐像素交叉熵损失的端到端训练。在推理时,上采样后应用 argmax,获得每个像素单类。
在这里插入图片描述

3.1. Encoder

一个图像 x ∈ R H × W × C x∈R^{H×W×C} xRH×W×C被分割成一个块序列 x = [ x 1 , . . . , x N ] ∈ R N × P 2 × C \mathbf{x}=[x_1,...,x_N]∈R^{N×P^2×C} x=[x1...xN]RN×P2×C
,其中 ( P , P ) (P,P) (P,P)是划分的块的大小, N = H W / P 2 N = H W / P^2 N=HW/P2 是块的数量,C是通道的数量。每个块被展平成一个一维向量,然后线性投影到一个patch embeddings,产生一个块嵌入序列 x 0 = [ E x 1 , . . . , E x N ] ∈ R N × D x_0=[E_{x_1},...,E_{x_N}]∈R^{N×D} x0=[Ex1...ExN]RN×D,其中 E ∈ R D × ( P 2 C ) E∈R^{D×(P^2C)} ERD×(P2C). 为了获取位置信息,将可学习的位置嵌入 pos = [ p o s 1 , . . . , p o s N ] ∈ R N × D \text{pos}= [ pos_1 , . . . , pos_N ] ∈ R^{N × D} pos=[pos1...posN]RN×D 添加到块序列中,得到token z 0 = x 0 + p o s z_0=x_0+pos z0=x0+pos的输入序列。
将由L层组成的transformer编码器应用于标记 z 0 z_0 z0 的序列,生成上下文化编码 z L ∈ R N × D z_L∈R^{N×D} zLRN×D 序列。transformer层由一个多头自注意(MSA)块组成,然后是一个由两层组成的点向MLP块组成,在每个块之前应用LayerNorm(LN),在每个块之后添加残差块。

3.2. Decoder

块编码序列 z L ∈ R N × D z_L∈R^{N×D} zLRN×D 被解码为分割映射 s ∈ R H × W × K s∈R^{H×W×K} sRH×W×K,其中K为类数。解码器学习将来自编码器的patch级编码映射到patch级的类分数。接下来,这些patch级类分数通过线性插值双线性插值上采样到像素级分数。我们将在下面描述一个线性解码器,它作为一个基线,而我们的方法是一个掩码转换器,见图2。

Linear 对块的编码 z L ∈ R N × D z_L∈R^{N×D} zLRN×D应用点向线性层,产生块级类对数 z l i n ∈ R N × K z_{lin}∈R^{N×K} zlinRN×K. 然后将序列重塑为2D特征图 s l i n ∈ R H / P × W / P × K s_{lin}∈R^{H/P×W/P×K} slinRH/P×W/P×K,并提前上采样到原始图像大小 s ∈ R H × W × K s∈R^{H×W×K} sRH×W×K. 然后在类维度上应用softmax,得到最终的分割映射。

Mask Transformer 对于基于transformer的解码器,我们引入了一组K个可学习的类嵌入 c l s = [ c l s 1 , . . . , c l s K ] ∈ R K × D cls=[cls_1,...,cls_K]∈R^{K×D} cls=[cls1...clsK]RK×D, 其中K是类的数量。每个类的嵌入都被随机初始化,并分配给一个语义类。它将用于生成类掩码。类嵌入cls由解码器与补丁编码 z L z_L zL联合处理,如图2所示。解码器是一个由M层组成的transformer编码器。我们的mask transformer 通过计算解码器输出的 L 2 L_2 L2 标准化patch嵌入 z M ′ ∈ R N × D z^{\prime}_M∈R^{N×D} zMRN×D 与类嵌入 c ∈ R K × D c∈R^{K×D} cRK×D之间的标量乘积来生成K个掩码。类掩码的集合计算如下:
M a s k s ( z M ′ , c ) = z M ′ c T (4) Masks(z^{\prime}_M,c)=z^{\prime}_Mc^T\tag{4} Masks(zM,c)=zMcT(4)
其中, M a s k s ( z M , c ) ∈ R N × K Masks(z_M,c)∈R^{N×K} Masks(zM,c)RN×K 是一组块序列。然后将每个mask序列重塑为二维mask,形成 s m a s k ∈ R H / P × W / P × K s_{mask}∈R^{H/P×W/P×K} smaskRH/P×W/P×K, 并提前上采样到原始图像大小,获得特征图 s ∈ R H × W × K s∈R^{H×W×K} sRH×W×K. 然后在类维度上应用一个softmax,然后应用一个层范数,得到像素级的类分数,形成最终的分割图。

这篇关于图像分割(二)—— Segmenter: Transformer for Semantic Segmentation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/541113

相关文章

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

HalconDotNet中的图像特征与提取详解

文章目录 简介一、边缘特征提取二、角点特征提取三、区域特征提取四、纹理特征提取五、形状特征提取 简介   图像特征提取是图像处理中的一个重要步骤,用于从图像中提取有意义的特征,以便进行进一步的分析和处理。HalconDotNet提供了多种图像特征提取方法,每种方法都有其特定的应用场景和优缺点。 一、边缘特征提取   边缘特征提取是图像处理中最基本的特征提取方法之一,通过检

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了个性化生成的效率和效果。 UniPortrait以统一的方式定制单 ID 和多 ID 图像,提供高保真身份保存、广泛的面部可编辑性、自由格式的文本描述,并且无需预先确定的布局。

基于YOLO8的图片实例分割系统

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 segment_app.py 二、核心代码介绍篇2.1 segment_app.py2.2 scan_taskflow.py 三、结语 代码资源:计算机视觉领域YOLO8技术的图片实例分割实

Winfrom中解决图像、文字模糊的方法

1.添加清单 2.将清单中的下面内容取消注释