赞
踩
上一篇博文整理了Vision MLP(MLP-Mixer,RepMLP,ResMLP,gMLP,aMLP),这篇文章继续整理最近的一些文章。
CycleMLP: A MLP-like Architecture for Dense Prediction
现有MLP架构(比如MLP-Mixer、ResMLP、gMLP)均与图像尺寸/分辨率相关,导致它们难以向下游任务迁移。所以作者提出CycleMLP模型,即提出一种即插即用的新MLP架构CycleFC,模型架构如上,其可以直接替换Mixer里面的spatial MLP进行空域投影并促进模型进行上下文聚合与信息通道(Channel是和图像尺寸无关的所以不做更改)。其优势在于:
CycleFC沿通道维进行全连接,同时在空域里面采样以使得感受野放大,采样点使用pseudo-kernel概念。
Y
i
,
j
=
∑
C
i
−
1
F
j
,
c
T
⋅
X
i
+
c
%
S
Y_{i,j}=\sum^{C_i-1} F^T_{j,c} \cdot X_{i+c\%S}
Yi,j=∑Ci−1Fj,cT⋅Xi+c%S
S为kernel尺寸,当其为1x1的时候就退化为ChannelFC了,其区别可以看下图:
paper: https://arxiv.org/abs/2107.10224
code: https://github.com/ShoufaChen/CycleMLP
Swin Transformer: Hierarchical vision Transformer using shifted windows
ICCV21’的Best paper。主打解决的问题是以前的文章如ViT和iGPT使用的都是小尺寸的图像作为输入,这种直接resize的策略无疑会损失很多信息。另外明明在深度学习中特别重要的一点是随着网络层次的加深效果会越好,如CNN层数越多,其节点的感受野也在不断扩大。因此Swin Transformer提出的这种层次结构,也赋予了它可以屠榜的能力。
相比ViT,它的改进主要是
总体的模型图如下,关键点在于如何搭“多层”,和如何减少自注意力的“复杂度”。两者也分别对应着模型中的Hierarchical representation和SW-MSA策略。
我们可以先看看逐层的步骤:
从而可以逐层堆叠,其可以使底部的结构处理的数据更多也更局部,顶部的网络处理的数据更少但是语义信息是更加丰富的。
然后关于如何减少复杂度,也是在上面流程中出现过的Shifted Window based MSA。具体的计算如下图,红色区域是window,灰色区域是patch。
W-MSA将输入图片划分成不重合的windows,然后在不同的window内进行self-attention计算。因为它不重合,所以可以使计算注意力的时间复杂度由
4
h
w
C
2
+
2
(
h
w
)
2
C
4hwC^2+2(hw)^2C
4hwC2+2(hw)2C 变成
4
h
w
C
2
+
2
M
2
h
w
C
4hwC^2+2M^2hwC
4hwC2+2M2hwC,其中M是patch数目。
不过虽然降低了计算复杂度,但是不重合的window之间缺乏信息交流,于是作者进一步引入shifted window partition来解决不同window的信息交流问题,所以才有了框架图中最右侧画出来的,在两个连续的Swin Transformer Block中交替使用W-MSA和SW-MSA。即主要是将注意力限制在不重叠的局部窗口,通过通过允许跨窗口连接,以使这种分层结构可以灵活地在不同尺度上建模并有图像大小的线性复杂度。
Swin Transformer不还是建模局部吗?差异在哪里?
其他注目局部的改进Transformer的方法,像Transformer in Transformer会在每层同时对局部和全局进行特征交互。而金字塔型Transformer每层都对全局进行关系建模,只不过特征图宽高不断缩小、提纯特征。Swin Transformer每层仅对局部进行关系建模,同时不断缩小特征图宽高,扩大感受野,即不同stage,不同block,这一点和CNN的设计就很相似了(卷积的locality、translation invariance和hierarchical layer都可以套用过来了)。
Patches are all you need
ConvMixer这篇文章想讨论的核心是,ViT的强大来自于Transformer架构,还是被patch的输入形式?因为在image上进行全像素算注意力会导致计算成本太高,所以现在的文章基本都是基于patch,然后再改装Transformer到CV领域。但这篇文章的结果想证明的事实ViT的良好性能可能来源于其独特的patch输入形式。
因此ConvMixer不沿用Transformer,而是直接用Conv卷积来搭架构,如上图所示,具体过程大致为:
即只输入patch然后分离空间depthwise卷积和通道混合pointwise卷积,实验结果证明这种方式的性能不差。
import torch.nn as nn class Residual(nn.Module): def __init__(self, fn): super().__init__() self.fn = fn def forward(self, x): return self.fn(x) + x def ConvMixer(dim, depth, kernel_size=9, patch_size=7, n_classes=1000): return nn.Sequential( nn.Conv2d(3, dim, kernel_size=patch_size, stride=patch_size), nn.GELU(), nn.BatchNorm2d(dim), *[nn.Sequential( Residual(nn.Sequential( nn.Conv2d(dim, dim, kernel_size, groups=dim, padding="same"), nn.GELU(), nn.BatchNorm2d(dim) )), nn.Conv2d(dim, dim, kernel_size=1), nn.GELU(), nn.BatchNorm2d(dim) ) for i in range(depth)], nn.AdaptiveAvgPool2d((1,1)), nn.Flatten(), nn.Linear(dim, n_classes) )
paper:https://openreview.net/pdf?id=TVHS5Y4dNvM
code:https://github.com/tmp-iclr/convmixer
A Battle of Network Structures: An Empirical Study of CNN, Transformer, and MLP
CNN,Transformer和MLP这几种visual架构,通用的启发有那些呢?补最近的这篇文章,作者通过通过在一个统一的框架中对CNN、Transformer和MLP进行一系列受控实验,证明了以下观点:
UniNet: Unified Architecture Search with Convolution, Transformer, and MLP
别纠结,直接揉一起吧。这篇文章提出用神经架构搜索(NAS)去自动搭建一个结合卷积CNN、Transformer和MLP的最优组合,架构如上图,将对操作符GOP和降采样DSM同时进行搜索。其中操作符GOP即是三种架构:Convolution, Transformer, and MLP。降采样DSM也有三种,具体如下图所示,一目了然:
其中有两种都是作者提出的新的上下文感知降采样模块,以适应Transformer和MLP操作符编码的全局信息。最后,再在统一的搜索空间中联合搜索所有的操作符和降采样模块。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。