知行编程网知行编程网  2022-02-09 17:00 知行编程网 隐藏边栏 |   抢沙发  25 
文章评分 0 次,平均分 0.0
屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

BERT 模型出来之后,Transformer 架构基本成为 NLP 任务的底色。诸如 Roberta、XLNet、ELECTRA、GPT3 等刷榜各类 NLP 任务的模型,无一不是基于 Transformer 框架。

无疑,Transformer 开启了 NLP 的统治时代,或者说,Transformer 已经成为 NLP 的 Back-bone Networks (基石网络)。

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

但是,隔壁的 CV 界的 Back-bone 却仍然保留着 CNNs  框架,这个统治了 CV 界 20 多年的王者依旧稳如泰山,对比NLP领域 Transformer 的崛起,不禁让人浮想联翩,是否真正存在一种框架,能够做到横跨两界,千秋万载,一统江湖?

最近,MSRA 的一篇论文《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》带来了好消息,论文所提出的 Swin Transformer 霸榜 CV 各大榜单,颇有当年 BERT 一刀斩群雄的气派。如果 Transformer 果真能成为 CV 任务的 Back-bone,那么距离 CV、NLP 大一统时代是否更进一步呢?

这里,本文将通过对比 NLP 和 CV 在 Transformer 框架上的使用异同,来理解在 CV 领域是如何使用 Transformer 结构的。

论文题目:
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

论文链接:
https://arxiv.org/abs/2103.14030

原文代码:
https://github.com/microsoft/Swin-Transformer

Arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0517】 下载论文PDF~

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……1 背景概述屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

在讨论论文细节之前,让我们先来了解一下背景知识,好好扒一扒 CV 和 NLP 的历史发展,看看到底为什么 CV 迟迟没有用上 Transformer

CV vs NLP,AI 时代两朵鲜花的恩怨情仇

根据历史经验,我们知道,在社会主义(人工智能)的初级阶段,往往是那些简单的,易于理解的模式占领上风,走在前列。而当社会主义(人工智能)发展到了中后期,那些简单且易于理解的模式又会因为过于简单而成为其进一步发展的阻碍

在 2012 年那会儿(国内可能要到 2015 年),人工智能刚刚展露头角的时候, CV( Computer Vision )产业一时风头无量——图片分类、人脸识别、物体检测等等任务纷纷落地,而相比之下,NLP 的发展就要缓慢的多。究其原因,其主要原因还是在于任务编码输入的差异

我们知道,图片天然由像素组成,而像素的存储天然是数字( 0-255 ),这也就意味着计算机可以毫不费力的去读取一张图片。而随后在 Embedding 之后接入的一系列 DNN 算法,使得计算机就能轻松的从读取图片变为读懂图片。这也正是 CV 在这波人工智能浪潮中能走在前列的一个主要原因。

而此时的 NLP 呢?科学家们还在费劲心思的用各种方法将字符形式的文字转化为计算机可编码的数字符号,NLPer 尝试过用 ASCII 编码,字母编码映射,最终却选择了丑陋的one-hot,纵然它是稀疏矩阵,纵然它限制了词表大小,纵然它有 OOVOut Of Vocabulary )问题,纵然它丑陋无比,但 NLPers 别无选择。

与此同时,另一个使得 CV 能够表现卓著的原因应该归功于 CNN 的发展。由于 CV 天然的空间特性(对应的 NLP 有很好的序列特性,可以被狭义的认为是时间特性),让 CNN 架构在 CV 上大放异彩。当然,后期针对于 NLP 的这种序列特性, NLPer 也开发了 RNN 系列,算是和CNN分庭抗礼吧!但哪怕在 RNN 出现后, NLP 的时代还远没有到来,最多算作从备受挤压到平分秋色。

2017 年,Transformer 框架被《 Attention Is All You Need 》提出[1]。2018年,BERT 模型问世 《 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 》[2]。可以这么说,BERT模型的出现,对于 NLP 来说是一个里程碑式的节点,它为以后的各类 NLP 任务画定了一个框架,即一个 PLM + fine-tune 的框架,而以后基本所有的 PLM 都是基于 Transformer 框架。是的,一个崭新的时代到来了,一个属于NLP的时代,它,来临了!

Transformer 适用于 NLP,确不适合 CV

CNN 本身极其擅长于解读图像的信息,通过卷积核和卷积核的移动可以捕捉到图像的各个方位的信息,同时将信息映射到更低维的空间中,达到提取空间特征的作用。而且因为其轻量级的架构特征,使得它能高效的抽取 CV 这类高分辨率输入,所以 CNN 一经提出就在 CV 任务上大方光彩,到如今依然久久不息

CNN 也有自己一直被诟病的问题,那就是 CNN 算子的感受野比较局限,即使通过卷积核移动能够获得全局的特征,但往往需要后面连接 RNN 或 Transformer 层来进一步处理全局的信息

此外,虽然 CNN 模型极其适用于图像结构,但是对于文本、语音等信息的处理能力确偏弱(其实是相对于 Transformer 偏弱),虽然 Kim 在 2014 年提出了 TextCNN [3],但与 CV 处理的兼容性仍然不高。因此 CNN 对于多模态学习来说,并非是完美的 Back-Bone 对象。因此,CV 同志们一直在探索如何将 Transformer 架构完美落地于 CV 任务,达到真正的 CV + NLP 的大一统。

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

Transformer 落地于 CV 的第一个问题就是图片输入的高分辨率会导致超大的计算量。我们先看一下对于一个文本输入,Transformer 是如何通过注意力机制完成语义理解的。

对于一个长度是 H 的句子,做一次 Attention 计算,需要进行H*H 次注意力计算。而同样输入一张分辨率为 H*H 的图片,做一次 Attention 计算,需要进行 (H*H)^2 次注意力计算

此外,512 的文本长度已经可以满足大多数 NLP 任务的需求,但 768*768 分辨率的图片对于 CV 任务确是常见至极。如此高的计算损耗,就意味着 Transformer 难以在 CV 中大展手脚,这也就是为什么目前的 CV 还是 CNN 统治下的天下。

另一个问题就是 CV 任务与 NLP 任务相比在处理粒度( Scaled )上有很大差异。对于 NLP 问题,任务的处理粒度往往是 Token 级别或者大于 Token 级别,而对于图片分类,会有像素级别、物体级别、图片级别甚至视频级别,粒度跨度非常大。这意味着如果 CV 需要使用统一的预训练模型,需要在不同 Scale 任务上都有很好的效果,也就是说CV的预训练模型需要同时理解图片在不同 Scale 上的语义差异。

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……2 论文主体屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

因为图片有高分辨率、任务 Scale 差异大的特征,导致 Transformer 结构在 CV 的落地一直是一个难题。之前 Transformer 在 CV 上的主要功能是对 CNN 之后特征进行查漏补全(特征进一步提取、注意力权重计算等),通常提取之后的特征数量远小于像素数量,所以计算量还是可以接受的。

但是 Swin Transformer 则使用另一种方法,试图开创一种将 Transformer 作为 CV 任务 Back-Bone 的框架结构,解决 CV 高分辨率带来高计算量的问题。那么 Swin Transformer 是如何做到的呢?

图片切分:Patches and Windows

首先,我们先接触两个 Swin transformer 中的术语, PatchesWindows。比如下图中一张 16*16 的图片,我们通过无覆盖的划分方法将其分割为 64 个小的方格,这里每一个 2*2 的方格就是一个 Patch 。我们再将 4*4 个 Patch 进行联合,就形成了一个 Window 。如下面动图的 Layer l 就是由 64 个 Patches 和 4 个同等大小的 Windows 组成。对应到 NLP ,一个 Patch 等效于一个单词,一个 Window 等效于一个句子,而一张图片则是一个 Document。这样,Transformer 好像可以在 CV 上开始落地了!

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

其实,使用这种 Patch 的方法并不是 Swin Transformer  首创(DETRVision Transformer-ViT 等也使用过)。当 CVer 发现像素等效于NLP中的一个字母,那么我们把相邻的多个像素进行连接,这是不是就是一个单词了?这就是 Patch 的思想。但其中难点在于:

  1. 如何确定一个 Patch 的 SizePatch 太小,那么计算量仍然会很大。Patch 太大,那么信息损失又会很严重。
  2. 一个 Patch 没有通用意义。区别于 NLP,“ hello ”就是“你好”的意思,表示“打招呼”的一种方法,这是高级信息表征带来的天然优势。但一张图片中位置为[0:3,0:3] 这 9 个像素点组成的 Patch 不是每次都有通用意义的,这对于训练 CV 的预训练模型是十分大的挑战

SW-MSA:特殊的 Attention 计算方法

Swin 中,Attention 的计算也稍有不同,这里总结为“一同两异”。在 NLP 中,我们针对于每个单词进行 Attention 计算;而 Swin 中,我们针对于每个 Patch 进行 Attention 计算,这是“一同”。

但是 NLP 中,我们对整个 Document 进行长程( long-range )的 Attention 计算,而 Swin 中的 Attention ,只针对于一个 Window 之内的计算(相当于 NLP 中只对一个句子进行了 Attention 计算),这是“一异”。

在 NLP 中,Attention 只被计算一次;在 Swin Transformer 中,Attention 会被计算两次,通过 W - MSA + SW - MSA 分步骤获取 Window 内部和相邻 Windows 之间的 Attention 权重,这是“另一异”。

从上面的“一同两异”,我们基本可以看出 Swin Transformer 的主要创新点。它将 CV 问题通过 Patch  和 Window 的模式转化为了 NLP 问题,这样,理论上在 NLP 中很好用的 Transformer 框架就可以在 CV 上落地了。同时,针对CV中的一些特殊性,Swin Transformer 使用了独特的 Attention 方法。

  1. 独特性一只对 Window 内的 Patch 进行 Attention 计算,而不是在所有的Patches之间进行,否则 Attention 的计算量还是太大。那么对于一张像素为 H*H*3 的图片,我们以 n*n 划分为一个 Patch ,然后将 m*m 个相邻 Patch 作为一个 Window ,可以得到 个 Window 。那么对于一张图片的 Attention 计算次数 。此时与图片像素成平方的复杂度,同NLP中 Attention 计算和句子长度成平方的复杂度相一致
  2. 独特性二:如果只进行 Window 内部的 Attention 计算,那么只是 Local Attention 。对于两个不同 Windows 之间的像素点,就没法获得他们之间的关联性了(也就是缺乏 Global Attention 的能力)。Swin 这里使用了迂回的方法,它仍然基于一个假设,那就是越靠近的像素点之间越需要计算注意力,彼此关联更紧密。所以,Swin 在进行 Attention 计算的时候,除了我们见到的那种方方正正的 Window 结构(用 W-MSA, Windows-based Multi Self-Attention 计算),还设计了一种叫做 Shift Window Partitioning 的方法,将相邻的 Windows 进行 Merge ,计算 SW-MSA( Shift Windows-based Multi Self-Attention )。通过这种 Cross-Windows 的关系计算,尽量保证更多的像素之间能计算出彼此的相关性,从而代替获得 Global Attention实验结果表明,增加了 SW-MSA 之后,结果能有很大的提升

其实,SW-MSA 也是通过近似的方式去获取 Global Attention ,它假设“越靠近的像素点之间关系越紧密”,如同 NLP 问题中假设单词与单词位置越靠近,语义影响越大一样。

但实际的图片任务中,仍然存在像素和像素有长程依赖性,而 SW-MSA 是无法解决的。不过即便如此,加入了 SW-MSASwin Transformer 仍然能大大刷新 CV 任务榜单,因此,期待在未来出现更优美的 Attention 计算方法。

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……3 算法框架屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

接下来,我们看看 Swin Transformer 的模型框架图,下图是 Swin-TSwin Transformer Tiny 版)的架构图。左边图(a)是整个模型的框架图,右边彩色的图(b)是单个 Swin Transformer Block 的解析图。

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

如图所示,我们把整个模型框架看成一张图片从输入模型到最后输出模型的过程,论文将其分为4个 Stage (我自己补上了一个 Stage0 ,主要是对图片进行 Patch 切分)。

  • Stage0:这个相当于数据处理,按照 Patch 的处理方法 ,将一张图片切分为一个个的 Patch。
  • Stage 1Linear Embedding 进行特征映射,然后过 两遍Swin Transformer block(就是上面讲的适用于图片的 Transformer 训练方法,你可以理解为 BERT 12层中的一层)。如图b,对于一个 Swin Transformer Block ,先经过一个 LN + W - MSA ,然后接上一个残差网络;再接上 LN + MLP ,再接残差网络,获得高维空间的表征映射;最后将 W-MSA 替换为 SW-MSA ,重复上面的步骤。
  • Stage 2:将相邻的两个 Patch 进行融合,称为 Patch Merging ,然后再过两遍 Swin Transformer Block 。用作者的话说,Patch Merging 的目的是为了让模型随着训练程度的加深,能够获取更高层的意义表征。
  • Stage 3:将相邻的两个 Patch 进行融合,然后再过 6 遍 Swin Transformer Block
  • Stage 4:将相邻的两个 Patch 进行融合,然后再过 2 遍 Swin Transformer Block

在这里, Stage 1-4 可以认为是一种训练的重复,就如同 BERT 中 12 层的重复结构,每一层的基础单元是 Swin Transformer Block通过和 NLP 中 BERT 的训练框架对比可以看出,模型符合我们常规认知的 Transformer 的框架训练

选取一个训练基元 Swin Transformer Block,然后不断重复叠加,最终获得一个深层的隐藏层表征,后面接各类下游任务进行 Fine-tune 。同样,在 BERT 中,我们通常认为浅层网络更注重于一些语法结构的信息,深层网络则更注重于语义的信息。而 Swin Transformer 通过不断进行 Patch 融合,然后再将维度从 C -> 2C -> 4C -> 8C, 从而获得更深维度的图像意义表征,也有种逐步加深对图片表征理解的感觉。

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……4 模型结果屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

两个字,“屠榜”!

用一句话表述,那就是同等量级的模型,无论是在框架,还是实际系统落地后,基本都有 2-4 个点的提升,这在 CV 任务中已经是一个重大的 Improvement

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……5 结论总结屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

Swin Transformer , 这篇文章号称开启了 CV 领域的新时代,用 Transformer 构建 CV 任务的时代。文章一直提到一个关键词—— Back-Bone Architectures 。所以,文章的目的不是在于对于某个任务获得了更好的算法结果,而是要为所有的 CV 任务制定一种使用 Transformer 的框架结构。从算法结果(屠榜二字)来看,似乎做到了。而且代码开源一天,就有上千的 Star ,其威力可见一斑。

总结一下文章的 Key-Point ,主要有以下几点:

  1. 使用 Patch + Window 的图片处理方法Patch 的划分方法,将图片划分为一个个的 “Token”,将多个 Patch 组合成一个 Window ,相当于多个 “Token” 构建为一个句子,完美的与 NLP 任务对应,为 Transformer 在 CV + NLP 上的大一统迈出重要一步
  2. 混合使用 W-MSA + SW-MSA 获得全局的 Attention。在 Window 内部计算 W-MSA ,实现 Local Attention ,缩小复杂度;使用 Shift Window 的方法部分实现 Global Attention ,扩展特征视野。这种计算方法,将图片的计算复杂度统一到 的量级,让 Transformer 落地于 CV 成为可能。
  3. 多层的 Swin Transformer Block 进行叠加训练,不断优化特征提取的结果。这也是对标 BERT 预训练的操作,逐步获取更深层次的图片内容表征,让 CV 和 NLP 任务在训练模式上统一。

这里,小编的思考,论文使用的 Shift Window 的方法,其实比较简单,后续我想应该会有其他优化方法来获得更好的结果。就如同当时的 BERT ,以及各类接踵而来的 BERT++

比如说,如果以 Windows 作为基元,获取 Windows 之间的相关性,来代替 Global Attention ,是否能更好的表征图片之间的长程依赖?或者根据 Attention 的结果,动态获取新的 Windows 划分(对应于 NLP 中的分句),这样是否可以获得超过 SW-MSA 的结果?

总之,无论如何,从实验结果来看,Swin Transformer 非常有可能完成自己对 Back Bone 的定义,开启一个崭新的 CV 使用 Transformer 的时代!!! 

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

[1].Attention is all need.  https://jalammar.github.io/illustrated-transformer/

[2].BERT:https://arxiv.org/abs/1810.04805

[3].TextCNN:https://www.aclweb.org/anthology/D14-1181.pdf

[4].Swin Transformer 原论文.  https://arxiv.org/abs/2103.14030

[5].Swin Transformer 原作者解析. https://pub.towardsai.net/will-transformers-replace-cnns-in-computer-vision-55657a196833

[6].Vision transformer. https://github.com/lucidrains/vit-pytorch

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享