Swin-Transformer相比于之前的ViT等模型,最大的特点有两点:
观看B站up主“跟李沐学AI”下两位老师的视频问答,觉得非常有深度,遂整理下来以便复习。
视频地址 https://www.bilibili.com/video/BV13L4y1475U?spm_id_from=333.999.0.0
Q1:沐神,swin transformer在patch merging的那个相隔一个patch选一个patch的操作,是不是也提供了一部分全局信息
A1:这个还是相对局部的。比如最开始第一层的话,一个patch是4x4,即使隔一个patch选一个,也还是很小的区域。全局信息主要还是依靠逐渐的patch merging和shifting window达到的,等到模型后半部分的时候会有很好的全局信息。
Q2:两位老师好,我觉得transformer的重要特征是对长程关系的建模,对局部信息建模很少(第一层patch的全连接),但局部特征对许多视觉任务非常重要(医学图像中的病灶,工业图像中的缺陷),所以想请问两位老师,transformer能有这么好的效果,它是在哪些地方对局部信息的建模有了弥补?
A2:transformer,或者说自注意力的操作虽然是利好长程关系的建模,但他对局部也是会建模的,不代表他局部信息就会差。token自己跟自己之间的计算也可以算作是局部信息的建模,所以其实transformer一直都在做局部建模。如果去看vit论文里的图7,vit刚开始学到的特征也类似于gabor filter,后面学到的特征也是可以描述物体的parts的。
Q3:感谢两位大神的讲解,收获满满,请教几个小问题:①讲解中提到掩码模板用0和-100,是因为我们需要的区域的自注意力值较小,这个值较小是因为LN层吗?②Swin-Transformer Block中包含2个Transformer结构,为一个W-MSA和一个SW-MSA的串联,W前者用于关注窗口内的信息,后者用于窗口间信息的交互,那么是否可以理解为Stage1的输出是将整幅图中各个区域之间作了一定交互的结果?这样的话,Stage2中W-MSA的输出是不是已经是原始图像中多个区域信息交互的结果?也即Stage2及以后的W-MSA和SW-MSA都是图像中很多个区域信息交互的结果,那么这些Stage采用两种MSA与仅使用SW-MSA是不是区别不大?③当SW-MSA次数足够多的时候,是否会出现计算原始图像相邻很远区域的相关性的情况?(比如计算天空与地面的注意力)如果是,SW-MSA中的掩码操作是不是可以去掉?④SW的方式可以有多种,比如可以位移二分之窗口大小,应该也可以位移三分之窗口大小,如果采用多种规格的SW会不会有好处?
A3:1. 我觉得不光是LN的作用,还有别的约束的作用,比如weight decay之类的。一般模型中间的输入输出都比较小,防止过拟合。2. 应该还不行。刚开始的窗口之间,即使经过了shift,也只是跟周围的窗口进行了互动。比如第一层的一个7x7的窗口,经过shift=3的位移之后,也只是跟相邻窗口的元素进行了自注意力操作,但远不是全局的。只有当经过一两次patch merging之后,每个token的感受野增大,这时候再加上shift,才能做到全局的信息交互。所以一直使用SW-MSA也是有必要的。3. 紧跟问题2,确实会的。我觉得理论上确实不需要掩码操作。但估计去掉这些掩码操作,不利于模型前几层的学习,会掉点,所以作者最后还是使用了掩码。4. 有可能,甚至可以训练的时候采取随机位移,达到一种stochastic depth的作用。
Q4:老师,非常感谢您的讲解,十分透彻,可谓醍醐灌顶!有两个小问题向您请教:1. patchmerging和池化效果都是为了降低分辨率,但是patchmerging为什么间隔取样呢而不是取相邻的两个?2. transformer作为骨干网络具有很强的特征提取能力,将其用于分割任务时,解码头大多主要还是用upernet和fpn,我尝试过pspnet,aspp等解码头,发现效果确实不太理想,甚至于不如resnet+pspnet,resnet+aspp,请问老师transformer作为骨干网络时,解码头的选择有什么独特的考虑吗?
A4:1. 也可以像池化一样取相邻的两个。这种间隔取样只是一种常见的操作,比如我视频里说过的pixel shuffle, 实现起来更高效,估计效果也好一些。2. 这个我也不好说,我之前也尝试过别的解码头,确实效果不好。但我觉得更多的还是没有调好,毕竟pspnet和aspp是适配于dilated CNN的,本身比较复杂,目前可能只是还没有优化到能适配transformer的地步。等改动transformer这波卷不动了,自然会有改动解码头的工作出现的。研究动机可以去多看一些研究transformer特性的论文,说不定能找到灵感。
Q5:【沈向洋带你读论文】Swin Transformer 马尔奖论文(ICCV 2021最佳论文) 老师好,这一期胡瀚老师提到说,他们发现swin transformer运行高效是因为不同的query共享key的集合,我不太理解这个是什么意思,请问老师可以解答一下吗
A5:胡瀚老师之前在知乎专栏里提到过,大家可以搜"为何Transformer在计算机视觉中如此受欢迎?" 。具体来说,就是滑动窗口的话,每次滑动出来的窗口都有自己的key集合,所以即使对于同一个query点来说,每次算自注意力也要重新计算,对显存访问不友好。但移动窗口是不重叠的,所以同一窗口内的点始终采用相同的邻域来进行计算,对速度更友好。还有一作提供了更详细的图解,在swin的官方代码库issue 118里,感兴趣的可以去看一下,应该能更清晰一些。
Q6:两位导师好,请问如何看待mataAI最新的ConvNext中Swin作为了背景板,lsa可以被很多类型的卷积所替代,那么transformer性能强大的本质到底是什么
A6:我理解transformer的强大是因为用了更少的inductive bias,所以对数据的拟合能力更强了。至于对LSA的理解,我推荐可以看一下这篇论文,Demystifying Local Vision Transformer: Sparse Connectivity, Weight Sharing, and Dynamic Weight
Q7:cyclic shift之后的masked操作是否真的有必要?transformer不就是为了建立全局的信息依赖,将左上角和右下角的图像区域计算注意力机制不就是正好可以建立长距离的依赖?即使视觉上可能这两块区域不是连续的,但是在转换成token之后计算注意力时也没有太多空间的概念了。
A7:因为论文中没有做关于这个的消融实验,所以我们也不得而知到底这个mask的作用有多大,我估计如果不用的话,会掉点。我觉得理论上来说,因为是自注意力,所以不需要做mask,但swin是在局部窗口算自注意力的。本来窗口就不大,如果强行加入很多不相关元素,可能会导致模型不好学。这个masking和relative positional bias,主要都是为了刷点的,跟文章的主线idea关系不大。
Q8:两位老师您们好,想请问一下您们对于transformer的泛化性强弱是怎么看的呀?虽然transformer系列在许多视觉下游任务上都取得了很好的效果,但这些任务绝大部分都是基于自然场景的图像,他们甚至都有可能已经被包含在了transformer上亿的预训练图像中了,所以想请问一下两位老师你们看好transformer在非自然场景上的迁移吗?
A8:我是比较看好的,transformer的泛化性能不错。之前有一篇在非自然场景式下预训练的,Can Vision Transformers Learn without Natural Images? 虽然下游任务我了解不多,但transformer本身就不需要过多的inductive bias,而且甚至有很多工作是直接拿NLP预训练的模型来微调CV,或者反过来,所以我觉得应该是比较好迁移的。
Q9:对于nlp领域中transformer是用Layer Normalization是为了解决句子不同长度的情况,那对于长度规则的图片是不是可以用BatchNormalization或者别的Normalization呢?
A9:当然是可以使用其他normalization方式的,一般LN和BN在cv这边是伯仲之间,但因为BN太tricky,也不好超大规模并行训练,所以transformer这边一般就都默认LN了。
Q10:老师想问一下,1.transformer在小样本的数据集表现不是很好,最近看到有篇文章是加上一些归纳偏执来解决这个问题,那么对最后的拟和性能会不会有影响呢2.除了这些方法还有什么方法能提升在小样本上的性能呢?3.老师怎么看待snn呢?
A10:1. 我觉得这会是个trade off,所以是会有影响的,具体还得看应用场景和到底数据集有多小。如果实在太小,那也没办法,必须得加归纳偏置才好训练模型嘛。 2. 我觉得只能是在那个domain找很多没有标注的数据,进行大规模的自监督预训练,然后再在小样本上去做,或者最后用上psuedo label之类的,类似于simclrv2的思想。3. 我不太确定你说的snn是哪篇论文。
Q11:两位老师,视觉transformer似乎都需要很大数据的预训练。对于一些和自然图片差距很大的领域,比如医学,是不是一般还不如CNN?
A11:不好说。这些领域虽然没有大量的标注数据,但如果自监督学习的方式变得很厉害,那是可以用大量无标注的数据去做模型预训练,然后再少量数据上微调的。模型是好是坏,很多时候不光是模型本身,更多的还是看数据和训练的方式。很大程度上,CNN的火爆依赖于ImageNet, transformer的火爆依赖于自监督。