VOLO: Vision Outlooker for Visual Recognition論文筆記

VOLO模型參數(shù)效果圖

北深袁粒老師的工作,仍然是ImageNet上設(shè)計(jì)的transformer型模型,主要貢獻(xiàn)在于提出一種稱為outlooker的注意力層,這種結(jié)構(gòu)結(jié)合了卷積局部信息整合和注意力層的優(yōu)勢(shì),在transformer backbone和patch embedding的幫助下實(shí)現(xiàn)了性能提升 ImageNet上不借助預(yù)訓(xùn)練首次突破87.1%的top1正確率。


核心attention層: outlooker

具體操作

該attention主要操作基于以上偽代碼(pytorch類似)。其核心操作主要有unfold和fold以及中間被替換的score矩陣計(jì)算方式,借助一次線性映射而不是兩次線性映射加一次矩陣乘法,outlooker相對(duì)普通multi-head attention減少了MACs降低了復(fù)雜度。

unfold

unfold操作實(shí)際上類似于conv層滑動(dòng)取窗口的機(jī)制,我們?cè)O(shè)定好kernel_size, stride, dilation等參數(shù)后,即可對(duì)B*C*H*W這樣的張量在H*W這樣的空間維上進(jìn)行滑動(dòng)取窗口,最后得到的新矩陣為B*(C*k*k)*n。k為kernel_size, n為總共取到的窗口數(shù)。

fold

fold則是unfold的逆過程,給定kernel_size,stride, dilation和output_size等參數(shù)后,它可以將B*(C*k*k)*n這樣的矩陣還原回B*C*H*W。這里稍微注意為什么要相對(duì)unfold多給定一個(gè)output_size呢?因?yàn)槠鋵?shí)我們發(fā)現(xiàn)不管輸入矩陣還是給定參數(shù)除了output_size我們并不知道H*W, 給定kernel_size后我們可以求得C, 但是n是由H和W兩個(gè)維度共同構(gòu)成的,所以如果不顯示指明H*W那么是可能包含多種滿足條件的H*W(例如H與W互換)。

同時(shí)在pytorch中,fold實(shí)際上做的操作是把那些由unfold拓展出來的位置上的元素全部加和再放回原始矩陣,那么這個(gè)加和操作就會(huì)使得原位置元素值翻倍而非不變,所以其實(shí)fold和unfold大部分時(shí)候并不是真正互逆的,要想實(shí)現(xiàn)互逆應(yīng)當(dāng)對(duì)元素取平均。

outlooker

那么除去了類似conv這樣考慮滑動(dòng)窗口的unfold和fold過程,outlooker和普通scaled dot-product有什么區(qū)別呢??

大體計(jì)算過程

由公式(4)可以看出其核心思路和attention層并無區(qū)別, 唯一就是score矩陣由原來的QK’, 變成了此處的A_{i,j},而這里的A實(shí)際上是直接由輸入X通過線性映射直接得到的一個(gè)矩陣,也就是說相對(duì)于分別線性映射得到Q和K再做矩陣乘法得到score矩陣,這里直接采用了一個(gè)線性映射得到score矩陣,從而降低了計(jì)算復(fù)雜度。而之前的scaled乘以系數(shù)以及softmax歸一都在代碼中得到了保留。


misc

VOLO模型是基于LV-ViT進(jìn)行改進(jìn)的,其中利用的patch embedding并沒有進(jìn)行額外說明,但是對(duì)模型性能等有重要的影響。同時(shí)將conv和transformer做結(jié)合似乎是一個(gè)現(xiàn)階段的一個(gè)趨勢(shì),其他工作(同一作者的T2T ViT)也保持了這樣的一些變化或比較趨勢(shì)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容