Swin Transformer源碼解析
一、Patch Partition、Liner Embedding
為什么通過卷積就能完成patch partition操作?
因?yàn)榫矸e核大小就是一個(gè)patch,通過卷積操作(一次卷積操作把一小塊圖變成一個(gè)數(shù)),將原圖中一個(gè)patch大小的圖塊,變成一個(gè)指定維度(和指定的過濾器數(shù)量即輸出維度有關(guān))的特征圖。
Liner Eebedding 操作是為了什么,為什么要做該操作?
類比NLP中的embedding 操作,因?yàn)橐粋€(gè)patch就是一個(gè)token,對(duì)于一個(gè)詞,在NLP中我們把詞投射到某個(gè)高維詞向量空間中,以獲得詞和詞之間的關(guān)系。而這里的liner embedding就是通過卷積后的flatten(2)和transpose(1, 2)操作將特征圖轉(zhuǎn)成embedding的格式 (bs,token,dim),至于為什么要轉(zhuǎn)成這種格式,是因?yàn)橐鲎宰⒁饬Α?/p>
輸入輸出示例
輸入兩張224x224的rgb圖片,即輸入為(2,3,224,224),設(shè)置patch_size為4x4,那么共54x54=3136個(gè)patch,設(shè)置輸出維度為96,經(jīng)過經(jīng)過卷積和embedding操作變成了(2,3136,96)
標(biāo)簽: