<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          CPVT:一個(gè)卷積就可以隱式編碼位置信息

          共 5185字,需瀏覽 11分鐘

           ·

          2021-04-11 23:59

          ↑ 點(diǎn)擊藍(lán)字 關(guān)注極市平臺

          作者丨小小將
          來源丨機(jī)器學(xué)習(xí)算法工程師
          編輯丨極市平臺

          極市導(dǎo)讀

           

          當(dāng)使用ViT模型時(shí),當(dāng)圖像輸入大小變化時(shí)會造成性能損失而本文介紹了一個(gè)新方案-CPVT。CPVT通過引入一個(gè)帶有zero-padding的卷積來隱式地拜納姆位置信息,從而省去了顯式的positional embedding。>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿

          對于transformer來說,由于self-attention操作是permutation-invariant的,所以需要一個(gè)positional encodings(PE)來顯示地編碼sequence中tokens的位置信息。ViT模型是采用學(xué)習(xí)的固定大小的positional embedding,但是當(dāng)圖像輸入大小變化時(shí),就需要對positional embedding來插值來適應(yīng)輸入tokens數(shù)量帶來的變化,這一過程會造成性能損失。這里介紹的CPVT,就主要來解決這個(gè)問題,CPVT的解決方案是引入一個(gè)帶有zero-padding的卷積來隱式地編碼位置信息(PEG),從而省去了顯式的positional embedding,最重要的是CPVT模型在輸入圖像大小變化時(shí)性能是穩(wěn)定的。CPVT這種特性是很多圖像任務(wù)所需要的,比如分割和檢測往往需要大小變化的輸入圖像。

          位置編碼的影響

          由于self-attention的permutation-invariant使得transformer需要一個(gè)特殊的positional encodings來顯式地引入sequence中tokens的位置信息,因?yàn)闊o論是文本還是圖像sequence,位置信息都是非常重要的。論文中以DeiT-tiny為實(shí)驗(yàn)?zāi)P?,分別采用no positional encodings,learnable absolute positional encodings,fixed sin-cos positional encodings以及relative postional encodings等,不同的策略在ImageNet下的效果如下表所示:

          主要結(jié)論如下:

          • positional encodings對模型性能比較關(guān)鍵,不采用任何PE效果最差;
          • relative postional encodings相比absolute positional encodings效果稍差,絕對位置編碼比較重要;
          • 采用顯式的PE,當(dāng)圖像分辨率提升時(shí)直接對PE插值處理,性能會下降;

          對于顯式的PE,當(dāng)圖像分辨率與訓(xùn)練時(shí)不一致,往往需要finetune來彌補(bǔ)PE插值帶來的性能損失。另外,論文中還提到了采用顯式的PE會破壞圖像tokens的“平移等價(jià)性”(translation equivariance,論文中說的是translation invariance:“平移不變性”,但是我理解應(yīng)該前者更合適):當(dāng)一個(gè)物體在圖像中進(jìn)行平移時(shí),只是物體對應(yīng)的tokens發(fā)生了變化,但是token embeddings并不會變(卷積也具有平移等價(jià)性:物體平移,“特征”也是同樣平移)。但是不同位置的PE是不同的,雖然token embeddings是一樣的,但是會加上不同的PE,那么平移等價(jià)性就被破壞了。

          PEG:Conditional Positional Encodings

          基于上面的實(shí)驗(yàn)分析,論文中認(rèn)為一個(gè)理想的positional encoding應(yīng)該滿足一下條件:

          1. 處理sequence時(shí),操作具有permutation-variant但translation-equivariance特性:對位置敏感但同時(shí)具有平移等價(jià)性;
          2. 能夠自然地處理變長的sequence;
          3. 能夠一定程度上編碼絕對位置信息(absolute position)。

          基于這三點(diǎn),論文中給出的方案是采用一個(gè)帶有zero padding的2D卷積( kernel size k ≥ 3)來充當(dāng)positional encodings。卷積是一種局部運(yùn)算,所以當(dāng)tokens順序被打亂,特征就發(fā)生了變化,卷積天生具有平移等價(jià)性,所以卷積滿足第一點(diǎn),對于第二點(diǎn)更是毫無疑問?,F(xiàn)在關(guān)鍵的是第三點(diǎn),因?yàn)閺闹庇X來看,卷積具有平移等價(jià)性,那么是無法編碼絕對信息,這兩個(gè)特性其實(shí)是相互矛盾的。但是其實(shí)CNN已經(jīng)被證明了可以編碼圖像的絕對位置信息,這主要是因?yàn)閳D像的boundary effects以及卷積的zero-padding操作造成的。感興趣的可以看看參考文獻(xiàn)中的論文[2-4]。

          具體的,論文中設(shè)計(jì)了基于卷積的Positional Encoding Generator (PEG)來進(jìn)行positional encodings,其結(jié)構(gòu)圖如下所示:

          首先對input sequence  進(jìn)行reshape到2-D圖像空間得到,然后通過一個(gè)kernel size為k(k ≥ 3),(k?1)/2 zero paddings的2-D卷積操作,最后再reshape成token sequence。這里的zero-padding比較關(guān)鍵,這樣才能編碼絕對位置信息,為了減少計(jì)算量,論文中采用depth-wise convolution。論文中稱這種編碼方式為Conditional Positional Encodings,因?yàn)?positional encodings是基于限定tokens的局部關(guān)系來產(chǎn)生的。PEG的具體實(shí)現(xiàn)比較簡單,PyTorch實(shí)現(xiàn)代碼如下:

          class PEG(nn.Module):    def __init__(self, dim=256, k=3):        self.proj = nn.Conv2d(dim, dim, k, 1, k//2, groups=dim)        # Only for demo use, more complicated functions are effective too.    def forward(self, x, H, W):        B, N, C = x.shape        cls_token, feat_token = x[:, 0], x[:, 1:] # cls token不參與PEG        cnn_feat = feat_token.transpose(1, 2).view(B, C, H, W)        x = self.proj(cnn_feat) + cnn_feat # 產(chǎn)生PE加上自身        x = x.flatten(2).transpose(1, 2)        x = torch.cat((cls_token.unsqueeze(1), x), dim=1)    return x

          CPVT

          和ViT和DeiT類似,論文也基于PEG設(shè)計(jì)了三種不同的CVPT結(jié)構(gòu),如下表所示,最大的模型CPVT-B和ViT-B,DeiTB設(shè)置一樣,而CPVT-S和CPVT-Ti分別和DeiT-small及DeiT-tiny采用同樣的配置。

          ViT和Deit模型都在transformer encoder開始之前,直接將token embeddings加上positional embeddings。而CPVT是將PEG插在第一個(gè)encoder之后效果最好,這是因?yàn)榻?jīng)過encoder之后的特征具有全局信息,再施加PEG可以產(chǎn)生更好的位置信息,這和PEG采用較大的卷積核類似,實(shí)驗(yàn)上也證明了這一點(diǎn)(另外論文中還實(shí)驗(yàn)證明后面的encoder也添加PEG可以實(shí)現(xiàn)更好的效果)。CPVT的簡單實(shí)現(xiàn)如下所示:

          import torchimport torch.nn as nnclass VisionTransformer:    def __init__(layers=12, dim=192, nhead=3, img_size=224, patch_size=16):        self.pos_block = PEG(dim)        self.blocks = nn.ModuleList([TransformerEncoderLayer(dim, nhead, dim*4) for _ in range(layers)])        self.patch_embed = PatchEmbed(img_size, patch_size, dim*4)    def forward_features(self, x):        B, C, H, W = x.shape        x, patch_size = self.patch_embed(x)        _H, _W = H // patch_size, W // patch_size        x = torch.cat((self.cls_tokens, x), dim=1)        for i, blk in enumerate(self.blocks):            x = blk(x)            if i == 0: # 第一個(gè)encoder之后施加PEG                x = self.pos_block(x, _H, _W)        return x[:, 0]

          CPVT相比DeiT,當(dāng)輸入大小增大時(shí)(從224增加到384)表現(xiàn)更好的效果,具體對比如下所示,可以看到CPVT的acc相比DeiT來說不降反升。論文中還有更多細(xì)致的分析,這里就不展開了。

          另外,論文中還提出用GAP( Global Average Pooling)來替換class token來實(shí)現(xiàn)分類,因?yàn)镚AP是translation-invariant的(這里是平移不變性),配合PEG的平移等價(jià)性,模型就是translation-invariant的,這樣效果更好。比如CPVT-Ti采用GAP相比CLT提升了1點(diǎn)以上。

          除了CPVT,近期一篇論文CvT也發(fā)現(xiàn)添加卷積之后,模型完全可以去除PE,而且CvT實(shí)現(xiàn)了更好的效果(在ImageNet-22k預(yù)訓(xùn)練后, 在ImageNet-1k上top-1 accuracy達(dá)到87.7% )。

          參考

          1. Conditional Positional Encodings for Vision Transformers
          2. How Much Position Information Do Convolutional Neural Networks Encode?
          3. Position, Padding and Predictions: A Deeper Look at Position Information in CNNs
          4. On Translation Invariance in CNNs: Convolutional Layers can Exploit Absolute Spatial Location
          5. CvT: Introducing Convolutions to Vision Transformers


          推薦閱讀


          CVPR'21 | Involution:超越卷積和自注意力的神經(jīng)網(wǎng)絡(luò)新算子

          2021-03-23

          深度學(xué)習(xí)中的卷積你掌握了幾種?一文速覽Deep Learning中的11種卷積

          2021-02-23

          卷積神經(jīng)網(wǎng)絡(luò)與Transformer結(jié)合,東南大學(xué)提出視頻幀合成新架構(gòu)

          2020-12-10



          # CV技術(shù)社群邀請函 #

          △長按添加極市小助手
          添加極市小助手微信(ID : cvmart2)

          備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳)


          即可申請加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實(shí)項(xiàng)目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~


          △點(diǎn)擊卡片關(guān)注極市平臺,獲取最新CV干貨

          覺得有用麻煩給個(gè)在看啦~  
          瀏覽 83
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本的一级黄色片 | 国产99自拍 | 亚洲最大在线视频网 | AV-ThePorn | 天堂新版8中文在线8 |