Transformer在CV上的应用前景

仅做学术分享,如有侵权,联系删除

转载于 :链接:https://www.zhihu.com/question/437495132

编辑:深度学习与计算机视觉

目前已经有基于Transformer在三大图像问题上的应用:分类(ViT),检测(DETR)和分割(SETR),并且都取得了不错的效果。

那么未来,Transformer有可能替换CNN吗,Transformer会不会如同在NLP领域的应用一样革新CV领域?后面的研究思路可能会有哪些呢?

作者:mileistone

https://www.zhihu.com/question/437495132/answer/1669853586

Transformer的核心模块是self-attention,CNN的核心模块是conv,我认为在计算机视觉领域self-attention不会替代conv,而是和conv融合、取长补短。

我在CNN与GCN的区别、联系及融合:https://zhuanlan.zhihu.com/p/147654689中对比了self-attention和conv,简述如下:

对比公式(1)和公式(3)

一、每个node的空间变换
(1)和(3)都会对node做空间变换即 ,和 。但是(1)中每个点的空间变换是相同的,而(3)中不同点做的空间变换不同。

二、对node与node之间相关性的建模
(1)中通过 对每个空间变化之后的特征进行加权, (即self-attention)显式地对node与node之间的相关性进行了建模,而且这个相关性相对输入而言是动态的。

(3)中虽然没显式地针对node与node之间地相关性进行建模,但是每个node的空间变换不相同,这个不相同隐式地包含了点与点之间的相关性,不过这个相关性相对输入而言是静态的,即无论输入怎么变,点与点之间的相关性一经训练完成就再也不会变化。

这个有点像BN和SENet,BN中的对每个通道有一个加权,SENet会通过SE模块去学每个通道的加权(论文中叫attention),BN中的是静态的,训练结束后每个通道的加权不会根据输入的变化而变化,而SENet中的attention是动态的,每个通道上的attention会因为输入不同而发生变化。

三、局部与全局
(1)中 取决于上一层所有的node,而(3)中 仅取决于 附近的node(卷积核的size决定其范围)。

可以看到从三个角度来看,self-attetion和conv采取了不同的思路。给定一个角度,self-attention的思路一定比conv更好吗?我想可能不一定,不同思路对应不同的数据分布,也就是各有优劣。

给定数据分布,针对不同角度,我们选取self-attention和conv中更好的思路,最后可以融合成一个更好的模块。比如CNN与GCN的区别、联系及融合中所提到的:

公式(1)和(3)既有相似又有区别,那么很直接的一个想法是能否对它们的特性做排列组合,得到更好的模型呢?

比如,结合(3)中的局部性和(1)中的self-attention,得到

再比如,结合(3)中不同点之间不共享空间变化这个特点和(1)中的self-attention,得到

举几个具体的例子。

A、图像跟文本不太一样的一个地方是图像比文本维度更大,直接全部用self-attention,会导致计算量出奇的大,这明显是我们不太愿意看到的,如果借用conv的局部思想也许就可以缓解这个问题,或者干脆在网络前面部分直接用conv。

比如ViT(文章里提到的将图片分成多个无overlap的patch,每个patch通过linear projection映射为patch embedding,这个过程其实就是conv)、DETR。我在关于Vision Transformer的一些思考:https://zhuanlan.zhihu.com/p/276145805里详细分析过ViT,有兴趣可以看一下。

B、conv有两个假设,局部相关性和空间平稳性,在conv横行计算机视觉领域的时候,学术界认为conv之所以这么有效是因为这两个假设和图像的数据分布非常匹配。

假如conv的这两个假设实际上真的和图像的数据分布非常匹配,那其实可以将这两个假设和self-attention结合起来,即self-attention不是针对全局的,而是类似conv一样,一个patch一个patch滑,每个patch里做self-attention。

另外,我们面对一个领域内多种方法的时候,总想排个序,看看谁最好,谁最差。但是实际上,大部分情况下,没有放之四海而皆准的最好,每个方法有自己的适用范围,有自己优点和缺点。我们葆有一个更开放和包容的心态也许更好,在不知道具体数据分布的时候,不要强行排序,也不要接受他人的排序。

当数据分布确定的时候,我们再来分析已有的方法有哪些特性跟它是匹配的,然后“集万千宠爱于一身”,岂不美哉。

就像深度学习火起来的时候,很多初学者内心都有一个疑问“既然有了深度学习,我们是不是不需要传统机器学习算法了?”,我在深度学习的学习历程里讨论过这个问题:

尺有所长,寸有所短。每个模型都有它适用的范围(其实也就是assumption),深度学习也不例外,超过了适用范围,啥模型都得嗝屁。比如你的数据天然是线性可分的,那lr或者svm将会是最好的选择,如果你选了高大上的深度学习,结果反而会适得其反。
面对一个任务,分析这个任务的assumption,然后去你的武器库(也就是各种模型)里寻找跟这个assumption匹配的武器,知己知彼,方能百战不殆。不要瞧不起svm这样的匕首,也不要太高看深度学习这样的屠龙刀。

作者:OpenMMLab
https://www.zhihu.com/question/437495132/answer/1686380553

先直接回答题主的 3 个问题,然后讲一下回答背后的“暴论”

Transformer 有可能替换 CNN 吗?Transformer 和 CNN 都是工具的一种,不会完全互相替代,但是会随着大家对 CV 任务理解的进步而各领风骚。

Transformer 会不会如同在 NLP 领域的应用一样革新 CV 领域?会革新,而且已经在革新了,这是因为大家会或者已经为了使用这个 Transformer,explore 更多的 framework,推动 community 对 CV 的 task 产生新的认识。

后面的研究思路可能会有哪些呢?在有 Transformer 这个新工具的情况下,重新理解 CV 的各个 task,并借助 Transformer 来把新的 framework 验证 work;一步到位,直接做新的 framework。

说好的“暴论”:

根据学术君的观察,CV 领域的创新可以大致概括为两个方面,一个是理解对应的 task 并设计解决方案进行框架上的创新,比如,在 Deep Learning 时代理解 Object Detection,有了 Faster R-CNN,RetinaNet;基于 CNN 理解语义分割,有了 FCN 等一系列后续工作。另一方面,大家也在框架下尝试并改进各种工具,例如大家不断地改进检测器的 neck 部分,提出了 FPG,NAS-FPN 等一系列工作,再如早年为了让 CNN 更 powerful,之前的工作提出了 ResNet、ResNext 等等。

工具和 framework 是螺旋式地相互影响并迭代进步的,也就是说,一段时间内,大家要么在为了exploit 新工具而 explore framework,要么在为了 exploit framework 而去 explore 新工具(这么一看我们好像都是 RL 里的 agent,不是在 fit 框架,就是在 fit 工具)。

为了避免显得口说无凭,举几个例子。如果我们把 CNN 看作最近几年解决各类 AI 问题的一种工具,可以看到我们为了利用这个新工具探索了很多新的 framework。比如为了利用 CNN, Faster R-CNN 和 Mask R-CNN 重新定义了目标检测和实例分割的框架,基于这个框架衍生了一系列经典的工作,比如 Cascade R-CNN 和 HTC。同理,DETR exploit Transformer 重新 explore 了一个 end-to-end 的检测框架,这个新的框架也引出了一系列后续工作,比如 Deformable DETR。DETR 可以说激发了各个 CV 方向 Transformer 化的热潮,然后就引出了题主的一系列问题。

如果认同前面的观点,那么就可以比较自然地得出题主 3 个问题的答案了,我们一个一个来看。

Transformer 有可能替换 CNN 吗?

如果我们仔细看近期各类利用 Transformer 的新工作,会发现不少工作为了使用 Transformer 而对 CV 任务的框架本身有了新的设计和理解。比如 DETR 里基于最小二分匹配的端到端训练框架,但是在这个新框架下,后续的 followup 工作其实是有基于新框架把 Transformer 往 CNN 时代的经典组件修改的趋势的。比如 Deformable DETR 还是用回了 Deformable 和 Multi-scale 特征,Sparse R-CNN 用回了 RoIAlign,OneNet 还是基于 CNN 的但是利用了 DETR 里基于最小二分匹配的端到端训练框架。再比如,SETR 和 ViT-FRCNN 虽然 backbone 用了 Transformer,但是在拿到 Transformer 的表征以后还是用回了 CNN… 所以,更本质的还是任务框架的设计,CNN 和 Transformer 只是一种工具,大家基于对任务的理解会各取所需,Transformer 好用就用 Transformer,需要利用 CNN 的时候就用回 CNN。大家会用脚投票的, Transformer 和 CNN 谁也不用瞧不起谁。

Transformer 会不会如同在NLP领域的应用一样革新 CV 领域?

回答第一个问题的时候已经提到,大家为了使用 Transformer 已经对各个任务进行 rethinking 了。最典型的例子就是 ViT,直接把图像拆成 16x16 的 patch,相信不少人看了都会惊呼这也可以,毕竟我们已经在 CNN 上浸淫了太久。同样还有 SETR 基于 ViT 也把 semantic segmentation 用 Sequence-to-Sequence 的框架给做 work 了。

后面的研究思路可能会有哪些呢?

现在各个领域都呈现出了 Transformer 化的趋势,至少估计今年各个方向都会被 Transformer 来一锤子(拼手速的时候到了)。至少在有 Transformer 这个新工具的情况下,大家会重新理解 CV 的各个 task,并借助 Transformer 的帮助来把新的 framework 验证 work。所以如果想赶 transformer 这波热潮的话,有两种姿势:一个是想想 Transformer 的特点还能对 CV 中的哪些任务有显著的帮助然后赶个早集;另一种姿势是基于受 Transformer 启发定义出的新框架来重新看待一下已有的 framework,做一些 follow up 的工作。当然了,更本质一点,还是应该不拘泥于工具本身去思考 framework,避免陷入“拿着锤子找钉子”的窠臼,思考和探索还有哪些问题没有被现有的 framework 解决,并基于自己的理解提出一个合理的解决方案,这或许是永远不会过时的姿势,学术君与诸君共勉~

作者:罗浩.ZJU
https://www.zhihu.com/question/437495132/answer/1759796604

Transformer有自己比较好的特性,在NLP任务上取得了很好的成功。前几年Transformer在CV领域主要被用于sequence信息挖掘,例如一些video任务中接在CNN特征后面进行时序特征融合,这时候应该还在Transformer本职范围内。不过去年的ViT论文扩大了Transformer的使用范围,相信大家讨论Transformer也更关心这种Visual Transformer结构对于CNN的替代性。至于是否会替代CNN这种未来的事不好说,但是Visual Transformer有一些自己比较好的特性:

long range带来的全局特性。CNN的conv算子一个问题就是感受野比较局限,为了扩大网络的关注区域,需要卷积-池化-堆叠多层这种结构,带来的问题其实是“有效/真实”感受野是以某个中心为原点向外高斯衰减的,因此CNN通常的有效attention就是图中的某一两个比较重要的parts。为了解决这个问题,CNN可以设计attention module来得到更大更均衡的attention map,很多工作也证明了attention module的有效性。而Transformer天然自带的long range特性使得从浅层到深层,都比较能利用全局的有效信息,并且multi-head机制保证了网络可以关注到多个discriminative parts,其实每一个head都是一个独立的attention,这是Transformer与CNN不同的地方之一。

更好的多模态融合能力。CNN擅长的是解构图像的信息,卷积核就是以前传统数字图像处理中的滤波操作,当然这使得CNN不擅长融合其他模态的信息,例如文字、标签、语音、时间等等各种信息。通常需要用CNN提取图像特征,再用其他模型对其他模型信息进行embedding后再网络的末端将多模态的embedding进行融合。而Transformer可以在网络的输入端对模态进行融合,因为它的思想是把图像通过conv或者直接对像素进行操作得到初始的embedding放入的Transformer中,不需要保持HWC的feature map结构。就类似position embedding,只要你能编码的信息,都可以非常轻松地利用进来。

Multiple tasks能力。其实已经有不少工作证明一个Transformer可以做很多事情,因为attention机制可以让网络对于不同的task进行不同的学习,一个简单的用法就是加一个task ID的embedding就行。

更好的表征能力。这里就不多说,很多工作都显示的Transformer网络可以在CV任务上取得更好的结果。

个人观点,随便写写,未来想到了再补充。

关于未来Transformer是否替代CNN,这个不好说,但是Transformer在CV领域里面还有几个点可以做的更好一点:

计算效率。毫无疑问,目前Transformer还无法替代CNN的一个重要原因就是计算效率,目前CV领域还是直接套用NLP中的Transformer结构,并未对CV数据做专门的设计,但是图像的信息量是远大于text,所以目前计算开销依然很大。当然ViT之后,已经有一些工作开始设计更加适配CV的Transformer结构,估计这一个领域也是目前非常火热的领域,未来应该会有不少工作出来。

应用适配。除了基础网络结构的改进,需要推动Transformer在CV上的发展,还需要很多CV下游任务上的成功。这个看起来有点像把Transformer替换掉CNN,在各个CV任务上重新做一篇以前的事。不过实际上不是替换掉CNN的backbone那么简单,首先Transformer的训练有自己的特性,得去把Transformer啃烂才更可能取得成功。二来要利用Transformer的特性对于CV任务进行专门的改进,让大家看到Transformer比CNN做的更好的地方。

硬骨头的突破。CNN已经在很多CV任务取得了成功,但是依然有一些任务没有完全克服,比如video的一些任务,识别率还无法达到人脸、识别、检测这种精度。Transformer如果能把这些硬骨头做得更好,可能也是一个比较好的信息。

总体而言,Transformer是NLP给CV的一个输出,我们可以去学习Transformer的长处,至于未来是否会替换CNN,或者Transformer与CNN共存,甚至互相弥补,这个还是靠整个学界去决定。CV的任务很多很难,无论是CNN还是Transformer都不会是CV的终点,保持学习、保持接纳、保持探究。

作者:陈大宝
https://www.zhihu.com/question/437495132/answer/1803969411

有可能,不过核心是要解决transformer计算量大的问题并且做出一种像resnet一样的范式。

首先看看卷积的缺点是什么?卷积是channel上全联接,spatial上部分连接。transformer就是把spatial上也做成了全连接。这样的好处是每一层“看”的更广了,缺点就是用的计算量更大了。

计算量这个问题我认为是暂时未解决的,你可以用一些trick,比如用sparse attention,也可以用tensor decomposition的方式把计算量降下来。但是代价就是sparse attention通常在不调参的情况下不如dense attention表现好,没有很强的泛化能力,基本上一个任务一个参数;tensor decomposition就是用空间换时间,速度快但是model size巨大。

我目前没有看到一种transformer能够如CNN一样轻巧,之前看过一个图讽刺transformer,标题是《money is all you need》,图我找不到了。这图主要是讽刺transformer的研究越来越像军备竞赛,有越多的卡,堆越多的transformer效果越好。

希望未来能再出来一个kaiming he,帮我们把transformer也做到100层。

作者:齐国君
https://www.zhihu.com/question/437495132/answer/1658559732

CNN和transformer在处理视觉信息上各有优缺点。

CNN网络在提取底层特征和视觉结构方面有比较大的优势。这些底层特征构成了在patch level 上的关键点、线和一些基本的图像结构。这些底层特征具有明显的几何特性,往往关注诸如平移、旋转等变换下的一致性或者说是共变性。比如,一个CNN卷积滤波器检测得到的关键点、物体的边界等构成视觉要素的基本单元在平移等空间变换下应该是同时变换(共变性)的。CNN网络在处理这类共变性时是很自然的选择。

但当我们检测得到这些基本视觉要素后,高层的视觉语义信息往往更关注这些要素之间如何关联在一起进而构成一个物体,以及物体与物体之间的空间位置关系如何构成一个场景,这些是我们更加关心的。目前来看,transformer在处理这些要素之间的关系上更自然也更有效。

从这两方面的角度来看,将CNN在处理底层视觉上的优势和transformer在处理视觉要素和物体之间关系上的优势相结合,应该是一个非常有希望的方向。

---------♥---------

声明:本内容来源网络,版权属于原作者

图片来源网络,不代表本公众号立场。如有侵权,联系删除

你可能感兴趣的:(transformer,transformer,深度学习,计算机视觉,机器学习)