如何看待Transformer在CV上的应用前景,未来有可能替代CNN吗?
共 4877字,需浏览 10分钟
·
2021-02-05 21:13
文章转载自知乎问答,著作权归属原作者,如有侵权请联系删除!
https://www.zhihu.com/question/437495132
mileistone(毕业于上海交大,擅长机器学习、深度学习、计算机视觉)回答:
Transformer的核心模块是self-attention,CNN的核心模块是conv,我认为在计算机视觉领域self-attention不会替代conv,而是和conv融合、取长补短。
我在CNN与GCN的区别、联系及融合中对比了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的一些思考里详细分析过ViT,有兴趣可以看一下。
B、conv有两个假设,局部相关性和空间平稳性,在conv横行计算机视觉领域的时候,学术界认为conv之所以这么有效是因为这两个假设和图像的数据分布非常匹配。
假如conv的这两个假设实际上真的和图像的数据分布非常匹配,那其实可以将这两个假设和self-attention结合起来,即self-attention不是针对全局的,而是类似conv一样,一个patch一个patch滑,每个patch里做self-attention。
另外,我们面对一个领域内多种方法的时候,总想排个序,看看谁最好,谁最差。但是实际上,大部分情况下,没有放之四海而皆准的最好,每个方法有自己的适用范围,有自己优点和缺点。我们葆有一个更开放和包容的心态也许更好,在不知道具体数据分布的时候,不要强行排序,也不要接受他人的排序。
当数据分布确定的时候,我们再来分析已有的方法有哪些特性跟它是匹配的,然后“集万千宠爱于一身”,岂不美哉。
就像深度学习火起来的时候,很多初学者内心都有一个疑问“既然有了深度学习,我们是不是不需要传统机器学习算法了?”,我在深度学习的学习历程里讨论过这个问题:
尺有所长,寸有所短。每个模型都有它适用的范围(其实也就是assumption),深度学习也不例外,超过了适用范围,啥模型都得嗝屁。比如你的数据天然是线性可分的,那lr或者svm将会是最好的选择,如果你选了高大上的深度学习,结果反而会适得其反。
面对一个任务,分析这个任务的assumption,然后去你的武器库(也就是各种模型)里寻找跟这个assumption匹配的武器,知己知彼,方能百战不殆。不要瞧不起svm这样的匕首,也不要太高看深度学习这样的屠龙刀。
小将将(算法工程师,兴趣点不限于图像识别,目标检测,图像分割,模型压缩,GPU编程等)回答:
Attention is All You Need!!
看OpenAI最近放出来的研究文本和图像的工作DALL·E和CLIP,真的被惊艳到了!
先简单来看一下transformer在分类,检测和分割上的应用:
(1)分类 ViT: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
把图像分成固定大小的patchs,把patchs看成words送入transformer的encoder,中间没有任何卷积操作,增加一个class token来预测分类类别。
(2)检测 DETR:End-to-End Object Detection with Transformers
先用CNN提取特征,然后把最后特征图的每个点看成word,这样特征图就变成了a sequence words,而检测的输出恰好是a set objects,所以transformer正好适合这个任务。
(3)分割 SETR:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers
用ViT作为的图像的encoder,然后加一个CNN的decoder来完成语义图的预测。
当然,目前基于transformer的模型在分类,检测和分割上的应用绝不止上面这些,但基本都是差不多的思路。比如ViT-FRCNN:Toward Transformer-Based Object Detection这个工作是把ViT和RCNN模型结合在一起来实现检测的。
关于transformer更多在CV上的工作,可以看最新的两篇综述文章:A Survey on Visual Transformer;Transformers in Vision: A Survey
这里来谈一下自己几点粗鄙的认识:
(1)CNN是通过不断地堆积卷积层来完成对图像从局部信息到全局信息的提取,不断堆积的卷积层慢慢地扩大了感受野直至覆盖整个图像;但是transformer并不假定从局部信息开始,而且一开始就可以拿到全局信息,学习难度更大一些,但transformer学习长依赖的能力更强,另外从ViT的分析来看,前面的layers的“感受野”(论文里是mean attention distance)虽然迥异但总体较小,后面的layers的“感受野“越来越大,这说明ViT也是学习到了和CNN相同的范式。没有“受限”的transformer一旦完成好学习,势必会发挥自己这种优势。
(2)CNN对图像问题有天然的inductive bias,如平移不变性等等,以及CNN的仿生学特性,这让CNN在图像问题上更容易;相比之下,transformer没有这个优势,那么学习的难度很大,往往需要更大的数据集(ViT)或者更强的数据增强(DeiT)来达到较好的训练效果。好在transformer的迁移效果更好,大的数据集上的pretrain模型可以很好地迁移到小数据集上。还有一个就是ViT所说的,transformer的scaling能力很强,那么进一步提升参数量或许会带来更好的效果(就像惊艳的GPT模型)。
(3)目前我们还看到很大一部分工作还是把transformer和现有的CNN工作结合在一起,如ViT其实也是有Hybrid Architecture(将ResNet提出的特征图送入ViT)。而对于检测和分割这类问题,CNN方法已经很成熟,难以一下子用transformer替换掉,目前的工作都是CNN和transformer的混合体,这其中有速度和效果的双重考虑。另外也要考虑到如果输入较大分辨率的图像,transformer的计算量会很大,所以ViT的输入并不是pixel,而是小patch,对于DETR它的transformer encoder的输入是1/32特征这都有计算量的考虑,不过这肯定有效果的影响,所以才有后面改进工作deform DETR。短期来看,CNN和transformer应该还会携手同行。最新的论文Rethinking Transformer-based Set Prediction for Object Detection,还是把现有的CNN检测模型和transformer思想结合在一起实现了比DETR更好的效果(训练收敛速度也更快):
(4)这我想到了神经网络的本质:一个复杂的非线性系统来拟合你的问题。无论是CNN,RNN或者transformer都是对问题一种拟合罢了,也没有孰优孰劣。就一个受限的问题来看,可能有个高低之分,但我相信随着数据量的增加,问题的效果可能最终取决于模型的计算量和参数,而不是模型是哪个,因为之前的工作已经证明:一个三层神经网络可以逼近任何一个非线性函数,前提是参数足够大,而且更重要的是你找到一个好的训练方法。
未来虽然很难说,但依然可期!
齐国君
(University of Central Florida · Professor and Director of MAPLE Lab)回答:
CNN和transformer在处理视觉信息上各有优缺点。
CNN网络在提取底层特征和视觉结构方面有比较大的优势。这些底层特征构成了在patch level 上的关键点、线和一些基本的图像结构。这些底层特征具有明显的几何特性,往往关注诸如平移、旋转等变换下的一致性或者说是共变性。
比如,一个CNN卷积滤波器检测得到的关键点、物体的边界等构成视觉要素的基本单元在平移等空间变换下应该是同时变换(共变性)的。CNN网络在处理这类共变性时是很自然的选择。
但当我们检测得到这些基本视觉要素后,高层的视觉语义信息往往更关注这些要素之间如何关联在一起进而构成一个物体,以及物体与物体之间的空间位置关系如何构成一个场景,这些是我们更加关心的。目前来看,transformer在处理这些要素之间的关系上更自然也更有效。
从这两方面的角度来看,将CNN在处理底层视觉上的优势和transformer在处理视觉要素和物体之间关系上的优势相结合,应该是一个非常有希望的方向。
推荐阅读