Multi-Scale Densenet续作?搞定Transformer降采样,清华联合华为开源动态ViT!
作者丨小馬
編輯丨極市平臺
先驗知識
Transformer最近在CV領域展現出了不錯的效果,Vision Transformer(ViT)的大致流程可分為兩步:
1)因為Self-Attention(SA)的計算復雜度是和輸入特征的大小呈平方關系的,所以如果直接將224x224的圖片輸入到Transformer中,會導致計算量的“爆炸”。因此,ViT的第一步是將圖片轉換成更小的token(比如16x16),然后將這些token進行flatten后輸入到Transformer中。
2)利用Transformer進行視覺特征的提取并分類。
在第一步中,圖片轉換成token的操作相當于是一個降采樣的操作,降采樣的倍數越大(獲得的token越少),損失的信息越大,ViT的計算速度也就越快。降采樣的倍數越小(獲得的token越多),損失的信息越小,ViT的計算速度也就越慢。在以前的ViT中,沒有考慮圖片的內容,將所有圖片都轉換成固定大小的token,就會導致對于“簡單圖片”,這樣的“降采樣”過于精細,造成計算資源的浪費;對于“復雜”圖片,這樣的降采樣細粒度不足,造成精度的損失。因此,本文作者就提出了動態的ViT來解決這個問題。
Noting:感興趣的同學可以再去看看黃高老師的Multi-scale DenseNet[1],我個人覺得,這篇文章的Motivation和Multi-scale DenseNet很像。
Multi-scale DenseNet的Motivation這樣的:對于分類網絡的測試而言,有些輸入圖像是網絡容易分類的(也就是簡單樣本,通常是主體比較明確,背景比較清晰),有些輸入圖像是網絡難分類的(也就是困難樣本,通常是主體被遮擋會很小,背景比較復雜)。以softmax輸出為例,假設一個2分類的例子,如果一張圖像屬于兩個類的概率分別是0.01和0.99,和一張圖像屬于兩個類的概率分別是0.51和0.49,顯然相比之下前者更容易分類。那么從這個點出發,作者就想到了能不能對于簡單圖像僅采用淺層的速度較快(對應到這篇文章就是用更少的token)的網絡來分類,而對于難分類圖像再采用深層的(對應到這篇文章就是更多的token)速度慢一點的網絡來分類。
1. 論文和代碼地址
Not All Images are Worth 16x16 Words: Dynamic Vision Transformers with Adaptive Sequence Length
論文地址:https://arxiv.org/abs/2105.15075
代碼地址:https://github.com/blackfeather-wang/Dynamic-Vision-Transformer
2. Motivation
首先作者做了一個實驗(Table1),用14x14的token能達到76.7%的準確率;用4x4的token就能達到60.8%的準確率,這說明ImageNet中很多的圖片用4x4的token就能識別準確了(也就是有很多圖片都是簡單樣本)。用14x14token計算量是4x4的token計算量的8.5倍,因此全部圖片都用14x14的token在計算上其實是一種浪費。
因此,作者就提出了先用少的token進行預測,如果置信度能夠大于某一個閾值,就直接輸出結果;否則就用更多的token進行預測,如果置信度能夠大于某一個閾值,就直接輸出結果…一直循環,直到最后一層ViT(用最多的token進行預測)。
3. 方法
3.1.1. Overview
首先我們來看整個網絡的結果,非常簡單,由一系列串聯的ViT組成,每個結構都是接收了不同token數量表示的圖片。在訓練的時候,是從上層到下層,全部結構都訓練;而在測試的時候,每經過一個ViT,都會對當前輸出進行一次驗證,如果prediction大于閾值,那么就直接輸出類別;否則就進入下一層ViT進行預測。
訓練時的損失函數如下:
除了串聯的ViT,這個結構中三個部分值得注意1)Feature Reuse;2)Relationship Reuse;3)Exit(Adaptive Inference)。下面我們詳細講一下這三個結構的具體實現:
3.1.2. Feature Reuse
下層的ViT如果只接受更多token表示的圖片信息,而將上層通過ViT后的特征進行丟棄,這就意味著上面ViT的計算結果對于下面的ViT計算毫無用處,這就造成了計算資源的浪費。因此Feature Reuse就是一個特征重用的模塊,將上游ViT最后一層輸出的特征取出,經MLP變換和上采樣后,作為上下文信息,以Concat的方式整合入下游模型每一層的MLP模塊中。
具體實現如上圖的灰色框中所示的一樣,首先將上層ViT的特征通過LN-MLP進行非線性變換并壓縮維度:
然后,將上面的到的上下文信息El以concat的方式與當前層ViT的特征進行融合,再進行LN-MLP:
3.1.3. Relation Reuse
相比于CNN,ViT的一個顯著優點是,它的Self-Attention能夠聚合整個圖像中的信息,從而有效地對長序列信息進行建模。既然不同token之間的關系也是非常重要的,作者進一步對上游ViT的關系矩陣進行了重用,使得下層的ViT能夠進行更加準確的關系建模,這一步就是論文中的Relation Reuse。
Relation Reuse的操作如上圖的灰色框所示:
對于每一層ViT,如果不進行Relation Relation,那么Self-Attention的計算過程為:
現在我們需要將上層的attention map進行重用,第一步,我們首先將上層所有的attention map進行concat:
然后我們將這些attention map通過一個轉換網絡rl()(結構如下圖所示),使得大小和維度與當前層的attention對應;然后將轉換后的上層attention map與當前層的attention進行相加,得到relation reuse的attention map。
3.1.4. Exit(Adaptive Inference)
對于第i層的預測,我們可以得到預測結果pip_ipi?,并且第i層會有閾值ηi\eta _iηi?,如果pi>ηip_i > \eta _ipi?>ηi?,那么就可以執行exit操作,輸出預測結果;否則進入下一層ViT。
在FLOPs<B的情況下,我們希望能到更高的準確率,這就變成了一個優化的問題:
作者采用遺傳算法來解決這個問題。
4.實驗
4.1. 在ImageNet上的實驗結果
上面2張圖時分別用T2T-ViT和DeiT作為ViT結構的實驗,可是看出在相同的準確率下,本文的結構確實可以加速很多。
下表展示了,在相同的速度下,本文準確率更高;在相同準確率下,本文速度更快。
4.2. CIFAR-10/100上的結果
從上表可以看出,在小數據集上,在相同準確率下,本文預測速度更快。
4.3. Feature Reuse的消融實驗
可以看出,使用所有上層的Feature信息,比不使用和只使用淺層或者一半的效果更好。
4.3. Relation Resue的消融實驗
可以看出,使用所有上層的Relation信息,比不使用和只使用淺層或者一半的效果更好。
4.4. 可視化
從圖中可以看出,簡單樣本是那種背景簡單,主體占據圖片的絕大部分區域;困難樣本則相反。
5. 總結
1、至少在我看來,這篇文章的思想真的跟黃高老師以前的那篇Multi-scale DenseNet的思路真的motivation非常像,當然在實現上還是有所不同的。說明一個好的idea永遠不會過時。
2、這篇文章雖然測試的時候能根據圖片自適應劃分token,但是一次要訓練多個ViT,那么訓練時間就會大大延長。如果不同token數量的ViT能夠參數共享,并且在訓練之前就能夠通過一個網絡自動判斷出最合適的token劃分方法,那就是真正的input adaptive的動態ViT了。
參考文獻
[1]. Huang, Gao, et al. “Multi-scale dense convolutional networks for efficient prediction.” arXiv preprint arXiv:1703.09844 2 (2017).
總結
以上是生活随笔為你收集整理的Multi-Scale Densenet续作?搞定Transformer降采样,清华联合华为开源动态ViT!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超越Swin,Transformer屠榜
- 下一篇: 圆形的CNN卷积核?华中科大清华黄高团队