Dual-Flattening Transformers through Decomposed Row and Column Queries for Semantic Segmentation论文解读

Dual-Flattening Transformers through Decomposed Row and Column Queries for Semantic Segmentation 论文解读


论文解读)

前言

  本篇文章将输入特征图分别按行和列展开,获得两个序列特征图,将这两个序列做类似于cross-attention的自注意力。这么做的好处在于以往从低分率特征图h * w到高分辨率特征图H * W需要O(hwHW)的复杂度,现在只需要O(hw(H+W)),同时也能有效的恢复细粒度细节。
论文PDF地址

1. flatten

  下图是整体架构图。
架构图
  输入图片的shape为HxWx3,通过特征提取器shape变为(H/4)x(W/4)xd,这个特征图(m)被逐行flatten展平为上面的序列R,shape为(HxW/16,d)相当于只有一行,HxW/16列,d维度。同样的,前面的特征图(m)逐列flatten展平为下面的序列C。shape为(HxW/16,d)相当于只有一列,HxW/16行,d维度。下面我们将H/4称为h,W/4称为w。
  接下来我们会引入一个seq,这个seq是可学习的,是用来充当attention过程中Q的角色的,对于行来说,seq的shape是Hxd,对于列来说shape是Wxd.注意他们的长度和高度是和输出特征图对齐的而不是输入特征图的长度和高度。

2.Row Transformer Layer

  有了输入我们就可以送入transformer模块了。本文称之为Row Transformer Layer和Column Transformer Layer,共有L层。
还是以行为例,一个Row Transformer Layer中包含MHA和Row-Col interactive attention .
MHA(multi head attention)的计算方法原文如下:
计算
有点复杂,简单来看就是上一层输出加上可学习的seq当Q,放倒的输入R加上位置编码当K,放倒的输入R当V。
分析一下shape。Q的shape是Hxd,K与V的shape是hxd,这样attention计算过程中shape变化过程为:
Q * KT : (Hxd) * (dxh) -> (Hxh)
(Q * KT) * V : (Hxh) * (hxd) -> (Hxd)
上一层输入在第一层时取0.后面的多头合并和FFN都有,就不再表述。
Row-Col interactive attention 的计算方法原文如下:
计算
  从原文来看,以行为例,我们将行的MHA输出结果作为Q,列的MHA输出结果作为K,V来进行attention计算。shape变化情况如下:
Q * KT : (Hxd) * (dxW) -> (HxW)
(Q * KT) * V : (HxW) * (Wxd) -> (Hxd)
所以从结果来说从transformer块里面出来的输出shape和可学习seq的shape是一样的。
那么,经过了L层transformer模块后,我们获得了Hxd和Wxd的两个输出。现在怎么获得最后HxW的输出特征图呢?
结果
HxW输出特征图的每一个像素点(i,j)的值是第i行行输出的结果与第j列列输出的结果之和。

在这里插入图片描述

3.grouping & pooling

  为了进一步减少计算复杂度,本文还使用了两种策略,包括分组和池化。分组和池化是独立进行的,互不干扰。就分组而言就是把输入特征图分为n组。相对应的可学习的seq也要分为n组,然后每一组进行并行的attention计算,最后得到分组输出。就池化来说,将输入特征图池化,注意这时候没有分组,依然是一张特征图,然后再与没有分组的seq进行attention计算。最后得到输出,将分组的输出与池化的输出相加可得最后的结果。
分组和池化

4.Row-wise positional encodings

PE
  下面我们专门介绍一下位置编码是怎么处理的。首先取一个hxd的向量,如果不考虑维度的话,它就是一个h高的一维向量,它的值按原生transformer的位置编码所使用的正弦函数来取。我们将它复制w遍,这样他就有hxwxd,然后按行flatten,shape就能和行seq.R对应上了。下图是简要版的示意图。如果h=3,w=4.就会变成下图这样。那Qseq的位置编码呢?则使用hxd的向量使用线性插值上采样到Hxd就吻合Qseq的shape了。列的位置编码可以类推。上述过程就是绝对位置编码与flatten后的输入对齐的过程。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flatten Transformer是一种基于Transformer结构的语义分割模型,其核心思想是通过将输入图像进行下采样并划分成小的patches,然后将这些patches进行flatten操作,以便作为Transformer的编码器输入。这样做的目的是为了减少计算量并将图像的全局信息编码到每个小的patch中。 在Flatten Transformer中,还会插入一个类别标记(Class token),用于表示整个图像的语义信息。此外,每个patch的位置信息也会被加入到输入中,这是通过对每个位置信息进行简单的加法运算实现的。这些位置信息也可以被视为可训练的参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Dual-Flattening Transformers through Decomposed Row and Column Queries for Semantic Segmentation论文...](https://blog.csdn.net/qq_42476803/article/details/128570281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Transformer计算量和过程统计](https://blog.csdn.net/MicroE_Lv/article/details/122855331)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值