<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>

          【CV】VIT:如何將Transformer更好的應用到CV領域

          共 2184字,需瀏覽 5分鐘

           ·

          2022-05-31 21:06

          最近因為在做TRM在多模態(tài)視頻的分類,會寫一些TRM在CV中的應用,今天先來講一下VIT;

          論文名稱是:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

          這個論文看下來,有這么幾個重點需要去掌握:

          1. 將整張圖片轉(zhuǎn)化為多個patches,作為 TRM 的序列輸入
          2. 輸入的時候需要加入位置編碼,三種位置編碼:一維,二維,相對位置編碼,這三種效果沒有太大區(qū)別;
          3. TRM可以接受CNN的輸出作為輸入,作為一種TRM的混合結(jié)構(gòu),區(qū)別于VIT這種無卷積結(jié)構(gòu)
          4. 可能是由于缺乏inductive biases,數(shù)據(jù)集上直接訓練的VIT效果一般,需要先在大數(shù)據(jù)及上做預訓練然后在任務數(shù)據(jù)上做微調(diào)才可以達到不錯的效果;
          5. VIT的【CLS】可有可無
          6. patches重疊與否區(qū)別不是特別大;

          1. 簡單背景介紹

          在CV領域,CNN一直是主流模型;

          TRM的最核心的一點就是自注意力機制,把這點借鑒到CV來說,一個最簡單的想法就是我把每個像素當做是一個token,然后作為序列輸入;

          那么就是對每個token之間都做了多頭注意力機制;假設我們的圖像大小是224 *?224 *?1,那么序列長度就是50176,相當于BERT最大長度的512的100倍左右,這個參數(shù)量肯定是不能承受的;

          針對這種情況,我們怎么處理呢?這個問題,本質(zhì)上是去解決隨著像素增加,復雜度平方級增長的問題;

          一個改進就是將全局的這種注意力機制改為局部的注意力機制,也就是做token周圍幾個領域tokens之間的注意力機制;

          還有一種改進是做稀疏注意力,是對注意力做了改進,本質(zhì)在緩解TRM模型隨著長度的增加,Attention部分所占用的內(nèi)存和計算呈平方比增加的問題。

          這幾種改進思路可行,但是實施復雜;

          所以一個比較簡單的方法,就是將整個圖像化整為零,從一整張圖片轉(zhuǎn)化為一個個的patch,也就是一個個的小方塊;

          直接看下面這個圖:

          其實在這里我想插一句,我之前在對圖片元素做自注意力機制的時候,是對CNN提取圖片的特征圖,然后做attention;只不過,VIT這個模型在追求的一個特點就是完全拋棄掉卷積這個操作~~

          2. 具體細節(jié)

          2.1 模型架構(gòu)圖

          論文中自帶的模型架構(gòu)圖已經(jīng)足夠清晰,我直接搬過來,然后一點點去講一下:

          我們通過形狀來了解一下數(shù)據(jù)的流動情況:

          首先我們有一張圖片,形狀為: ;其中H是高度,W是寬度,C是通道數(shù)量;

          然后我們把這個圖片轉(zhuǎn)化為一個個的pathes,其中每一個patch的形狀是 ; P是每個patch正方形的邊長;

          然后可以將多個通道壓扁,轉(zhuǎn)化為一個一維形狀: ;注意,這里就類似變成了一維數(shù)組;

          總共有N個patches;

          我們TRM的輸入定為維度為大小的token,那么我們就需要對每個一維數(shù)組 做一個linear映射到大??;

          在TRM的輸入中,處理token的embedding,其實還有一個是位置編碼,VIT使用的就是簡單的一維位置嵌入,映射到D維度就夠了;這里論文提了一下,因為原始信息是圖片,所以嘗試了二維編碼,但是沒有明顯提升;

          VIT學習BERT,在最開始加入了CLS符號;

          看到這點我其實疑惑了一下,BERT中加入CLS的一個原因是它預訓練的時候使用了NSP,CLS的輸出可以作為二分類的任務;但是圖片這里顯然沒有第二張圖片,所以加入CLS的解釋就變成了想使用元素之間的注意力學習到所有tokens的信息;

          2.2 位置編碼消融實驗

          還有一點就是位置編碼這塊,作者做了消融,有四組實驗,分別是:沒有位置編碼,一維位置編碼,二維位置編碼,以及相對位置編碼;

          在位置編碼這里,作者還做了另外三組實驗,就是只在最開始輸入的時候加入位置編碼,在每一層加入位置編碼同時各自學習,在每一層加入位置編碼同時共享這個位置編碼;

          實驗結(jié)果看下面這個圖:

          結(jié)論就是沒看出太大的區(qū)別,直接用一維的位置編碼,同時只是在最開始的時候加入位置編碼就可以【從結(jié)果看每一層位置編碼共享效果會更好一點】

          2.3 是否需要加入【CLS】token

          VIT模型為了最小限度的改變trm架構(gòu),依舊沿用了bert中的【CLS】中的這個token;但是就像我在最上面說到的,BERT中加入CLS的一個原因是它預訓練的時候使用了NSP,CLS的輸出可以作為二分類的任務;但是圖片這里顯然沒有第二張圖片,所以可以不加如【CLS】token;

          在整合圖片信息的時候,兩種方式,一種是使用【CLS】token,另一種就是對所有tokens的輸出做一個平均,簡稱GAP;實驗結(jié)果證明,兩者可以達到的同樣的效果,只不過要控制好學習率;

          結(jié)果看下面這個圖:

          3. 預訓練以及下游微調(diào)

          在上面談到,VIT在小數(shù)據(jù)上效果一般,需要做一個預訓練再來一個微調(diào),效果還不錯;

          這個其實不陌生,TRM在文本上也是,小數(shù)據(jù)不如lstm,bert在大量文本上預訓練,學習到了大量的知識,才橫掃了NLP;

          直接看圖吧,絕大部分效果還是不錯的:

          往期精彩回顧




          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  做爱网络视频在线看网站免费 | 日韩无码中文字幕 | 日韩欧美综合 | 91免费成人在线 | 欧美日韩国产综合网 |