Paper Reading Note
URL:https://arxiv.org/pdf/2103.14030.pdf
Milestone!!
transfomer屠榜cnn的最新力作
cnn老年迟暮,transfomer新王加冕
文章的出发点:
- 对于nlp和cv来说两个领域的scale不同,粒度的差距,nlp中词语token都是固定的然而cv中的patch这种scale是vary substantial的,也就是cv的scale有着很大的变化范围。
- 对于cv来说,resolution远超nlp。计算复杂度是平方的关系,因此对于transfomer来说是intractable。文章说最后的计算复杂度能到线性于图片size。
从这幅图就可以管中窥豹为什么算法复杂度变成线性,原本的self-attention是 有多少个patch,就是要算 patch x patch,现在他把self attention的范围划在了红色的范围内,算法复杂度就是 (patch/16)x (16x16)=16 x patch, (红框数量)x(红框里的patch自注意力运算)。另外每个红框有16个patch是固定的。本质上这个self-attention放弃了和较远位置的关注,只和周围做,这又多么像cnn的卷积核,太巧秒了,再往上逐渐pooling,感受野逐渐变大,cool!!
文章说的很有深度的话,不禁让人想到大一统的感觉,transfomer能在多模态融合领域能掀起怎样的波澜让人非常期待。
It is our belief that a unified architecture across computer vision and natural language processing could benefit both fields, since it would facilitate joint modeling of visual and textual signals and the modeling knowledge from both domains can be more deeply shared.
Dataset/Algorithm/Model/Experiment Detail
swin transfomer 有两大主要结构:
- hierarchical transfomer的design 有点像fpn和u-net
- shift partition window
整体结构:
首先patch partition把图切割成H/4xW/4块,因为每个patch是4x4,所以相当于是固定patch大小,然后得到了patch数量,因此每个patch是4x4x3维,所以C维是48。注意在stage1经历了linear embedding应该就是经过了mlp加正则(还没看代码)
在stage2 embedding层换成了patch merge层,然后把2x2的patch在c concatenate,过了mlp从4C到2C有点像传统cnn的pooling层,这块叫做patch merge后面经过了几个stage是一样的。
第一个核心点讲了怎么逐渐的把patch变少
第二个核心点该说加window限定self-attention范围,也就是MxM个patch在一起做self-attention也就是图中的红框,这点非常好理解,但是固定的window位置会导致不同的window之间没有connection。因此才会有shift of window partition。
shift partition window
没看懂,目的是为了连接不同window,具体看代码吧
Thoughts
我在这个方法里看到了太多cnn的影子,又看到transfomer独有的self-attention的,但转念一想这样做的mlp不就是卷积核?那不过在卷积核前加入了multi head self attention,佩服佩服,真的是一种巧妙的结合,至此你说他不是cnn?又有点像是cnn+self-attention。