Swin Transformer源码解析
一、Patch Partition、Liner Embedding
为什么通过卷积就能完成patch partition操作?
因为卷积核大小就是一个patch,通过卷积操作(一次卷积操作把一小块图变成一个数),将原图中一个patch大小的图块,变成一个指定维度(和指定的过滤器数量即输出维度有关)的特征图。
Liner Eebedding 操作是为了什么,为什么要做该操作?
类比NLP中的embedding 操作,因为一个patch就是一个token,对于一个词,在NLP中我们把词投射到某个高维词向量空间中,以获得词和词之间的关系。而这里的liner embedding就是通过卷积后的flatten(2)和transpose(1, 2)操作将特征图转成embedding的格式 (bs,token,dim),至于为什么要转成这种格式,是因为要做自注意力。
输入输出示例
输入两张224x224的rgb图片,即输入为(2,3,224,224),设置patch_size为4x4,那么共54x54=3136个patch,设置输出维度为96,经过经过卷积和embedding操作变成了(2,3136,96)