---
# System prepended metadata

title: '【ViT】FLatten Transformer: Vision Transformer using Focused Linear Attention論文閱讀'
tags: [論文, CV, 深度學習, ViT, attention, Transformer]

---

---
slideOptions:
  transition: slide
---

# FLatten Transformer:Vision Transformer using Focused Linear Attention



---

## 1.作者研究動機

---

### Vision TransFormer應用於影像分類技術


----

Vision TransFormer通過Split image與Linear Projection產生出patch embedding向量，並與position Embedding添加位置訊息的結果相加，最後通過 Encoder和MLP以及一層softmax，產生出這照張圖片的分類
    
![image](https://1.bp.blogspot.com/-_mnVfmzvJWc/X8gMzhZ7SkI/AAAAAAAAG24/8gW2AHEoqUQrBwOqjhYB37A7OOjNyKuNgCLcBGAsYHQ/s16000/image1.gif =500x)

##### 詳細:https://arxiv.org/pdf/2010.11929

----

<font size=6>在這個過程中，Embedded會通過Encoder內部的self attention，取代CNN層去關注eceptive field
</font>
<font size=6>然而我們的輸入是一張圖片轉換過的向量，整個序列的長度比普通文字輸入還要長很多，這就會導致self attention成為整個模型的性能瓶頸</font>
![image](https://hackmd.io/_uploads/BJIFTK23C.png)
<font size=3>李弘毅:Self-attension:是一種複雜的CNN，會考慮整張圖片，機器自己去學習receptive field的大小</font>

---

### Softmax attention的性能問題

self-attention步驟:

1. 兩個不同向量的q和k內積得到attention matrix
2. 縮小matrix避免softmax結果只有0和1
3. 通過softmax
4. 與V相乘得到q與v的相似度
    


![image](https://hackmd.io/_uploads/r1Tby_ahC.png =200x)


----

* Q,K,V都是N\*D的矩陣,N=token數，D=channel維度 
* Q必須先乘以K，$QK^T$就會變成N*N，整體複雜度來到$O(N^2d)$
* Vision transformer的N一定會大於D
* 如果能拿掉softmax，就可以利用結合律先算${K^t}\times{V}$
$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$

![image](https://hackmd.io/_uploads/HJFNh_a30.png =350x)

---

### Linear attention的優缺點

self-attention就是以qk為權重對v做加權平均，把公式一般化，可以寫成
<br>

$\sum_{j=1}^{n}\frac{sim(q_i,k_j)}{\sum_{j=1}^{n}sim(q_i,k_j)}V_j$

<br>
* sim代表一般函數
* sim結果不能是負數
<font size=3>詳細:<a herf = "https://arxiv.org/abs/2006.16236">Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention</a>
</font>
    

----

直接去掉softmax，sim就會變成

$sim(q,k) = qk^t$

為了確保q和k不為負數，必須加上kernal function變成

$sim(q,k) = \phi(q)\phi(k^t)$



----

所以可以把一般化公式改寫成

$\sum_{j=1}^{n}\frac{\phi(q_i)\phi(k_j^t)}{\sum_{j=1}^{n}\phi(q_i)\phi(k_j^t)}V_j$


這樣一來，就可以透過結合律先計算K和V

$\frac{\phi(q_i)(\sum_{j=1}^{n}\phi(k_j^t)V_j)}{\phi(q_i)(\sum_{j=1}^{n}\phi(k_j^t))}$

複雜度$O(N^2)$ ->$O(N)$

----

#### Linear attention的劣勢

因為替換成ReLU，結果變得寬鬆，顯示出來的結果就是顏色特別的淡

![image](https://hackmd.io/_uploads/ryfxmcanC.png)

----

由於Rank受制於Q和K的d，導致Attention Map上會出現許多相同的排列，多樣性不足

$Rank(\phi(q_i)\phi(k^t)) \le min(Rank(\phi(q),Rank(\phi(k))$
$\le min(N,d)$

![image](https://hackmd.io/_uploads/BJdVSqpnR.png =600x)

---

## 2.Focus Linear Attention Module


根據上面兩個痛點，作者提出了Focus Linear Attention改善，不只精準度比其他Linear attention高，甚至還贏過softmax 

![image](https://hackmd.io/_uploads/r1xZhcT20.png)

----

靠著以下兩點，讓Linear attention在Vision Transformer中可以超越 softmax attention
1. Focused Function:恢復注意力銳利度
2. DWC Module:恢復特徵多樣性

---

### Focused Function:恢復注意力銳利度

原始的一般化Linear attention function長這樣

$Sim(Q_i,K_j) = ϕ_p(Q_i)ϕ_p(K_j)^T$

Efficient Attn:kernel fn使用ReLU，確保non-negetive
![image](https://hackmd.io/_uploads/HJb9QqChR.png)

##### EfficientViT內的Linear attention架構

----

作者重新設計了Kernal function

$ϕ_p(x)=f_p (ReLU(x))$
$f_p(x)=\frac{∥x∥}{∥x^{∗∗p}∥}x^{∗∗p}$
<br>
* $f_p$就是focus function，讓norm(長度)不變的情況下只改變方向
* $x^{**p}$代表x對p做element-wise power(把每個元素做n次方)
* p是一個超參數，相關數值Experinment會講
* 讓與訓練資料與越相近的query和key更接近

----

#### 根據$f_p$,作者提出了假設，說明如何影響注意力分布

> 給定條件： 兩個向量 $x = (x_1, ..., x_n)$ 和 $y = (y_1, ..., y_n)$，其中所有元素 $x_i$, $y_j$ 都大於等於 0。假設 x 和 y 分別只有一個最大值，分別為 $x_m$ 和 $y_n$。

$∃ p >1, s.t. ⟨ϕp(x),ϕp(y)⟩ > ⟨x,y⟩.$
<br>
斷言：當 m = n 時（即 x 和 y 的最大值在同一個位置），存在一個值 p > 1，使得經過聚焦函數 $ϕ_p$ 映射後的向量內積 $⟨ϕ_p(x), ϕ_p(y)⟩$ 會大於映射前的向量內積 $⟨x, y⟩$


----

$∃ p >1, s.t. ⟨ϕp(x),ϕp(y)⟩ < ⟨x,y⟩.$
<br>
斷言：當 m ≠ n 時（即 x 和 y 的最大值在不同位置），存在一個值 p > 1，使得經過聚焦函數 $ϕ_p$ 映射後的向量內積 $⟨ϕ_p(x), ϕ_p(y)⟩$ 會小於映射前的向量內積 $⟨x, y⟩$。

----

從圖表來看，$f_p$確實讓與query相近的key更加靠近，在attention map上的對比度也變得更尖銳

也就恢復了原本softmax該有的注意力
![image](https://hackmd.io/_uploads/rJCtDWxT0.png)

---

### DWC Module:恢復特徵多樣性

$O = (ϕ(Q)ϕ(K)^T +M_{DWC})V=M_{eq}V$
<br>
* DWC:(Depthwise convolution)輸入資料的每一個Channel都建立一個k\*k的Kernel，其對應的Kernel都各自做卷積。
* 特點:在降低傳統Conv運算量的同時保持差不多的性能
* $M_{DWC}$:完成DWC後的spare matrix，可以到Full rank(捕捉到的特徵更多)
* $M_{eq}$:完整的attention matrix

----

至此，我們可以得到完整的Focus Linear Attention Module

$O=Sim(Q,K)V =ϕ_p(Q)ϕ_p(K)TV +DWC(V)$

---

## 3.Experinment

1. ImageNet-1K分類
2. 使用ADE20K做Semantic Segmentation
3. COCO dataset做物件偵測
4. 與其他Linear attention比較
5. 不同平台上的推理時間
6. 消融實驗

---

### ImageNet-1K分類 
* 模型選擇:DeiT、PVT、PVT2、Swin、CSwin
* optimizer:ADAMW(Weight decay=0.05)
* 超參數設置:
    * epoch:300
    * batch size:1024
    * learning rate: 0.001
    * Warn up: 20個epoch以後，cosine learning rate 到 0.05
* Trick:用DeiT上的技巧如:RandAugment、Mixup、CutMix、random erasing避免過擬合、EMA給予近期的數據更高的權重

----

#### 實驗結果

在相同的計算量下，增加Focus模組的模型表現會更好(能效比更佳)

![image](https://hackmd.io/_uploads/S10kDXga0.png =400x)


---

### 使用ADE20K做Semantic Segmentation

* 骨幹Model:PVT-T、Swin-T/S
* Semantic Segmentation用Model:S-FPN、UperNet

mIOU(真實label面積與預測面積的比值)與mAcc皆有所上升

![image](https://hackmd.io/_uploads/Sy4_ZNgaR.png =500x)

---

### COCO dataset做物件偵測

* 骨幹Model:ImageNet
* 偵測用Model:MaskR-CNN、CascadeMaskR-CNN

<font size=3>AP皆有上升</font>
![image](https://hackmd.io/_uploads/ry1HXNxaR.png =400x)
<font size=1>
>Average precision，precision和recall畫成圖對應的面積
>$AP$、$AP_{50}$、$AP_{75}$:代表IOU在\[0.5,0.95,0.5]、50、70對應的面積
>$AP_s$、$AP_m$、$AP_l$:代表檢測範圍在小($32^2$)中($32^2~96^2$)大(96^2)
>Schedule:Training Schedule對應的長度
</font>

---

### 與其他Linear attention比較

* 基底Model:DeiT-T、Swin-T
* 預比較Attention:HydraAttn、EfficientAttn、LinearAngularAttn、EnhancedLinearAttn

Focus Linear Attention取得了相比於其他attention更好的成績，作者說甚至超越了softmax attention
![image](https://hackmd.io/_uploads/B1LM5VepA.png =300x)

---

### 不同平台上的推理時間
* 比較平台:Intel i5-8265U、RTX2080Ti、RTX3090

各平台都有提升，在CPU端的提升更佳明顯，足足有2.1倍

![image](https://hackmd.io/_uploads/SJBg0Ng6C.png)


---

### 消融實驗

----

#### $f_p$ 和 DWC

從原始的Linear attention，逐漸加上focus function跟dwc模組，可以發現準確率逐步上升
![image](https://hackmd.io/_uploads/H1QYQSeaC.png)

----

可視化版本
![image](https://hackmd.io/_uploads/BkvJ-SlaA.png =500x)

----

#### Focus factor p

就是focus function內$x^{**p}$裡面的$p$，2~32測試下來準確率變化不大，證明抗干擾能力強

其中最好的是$p=3$，論文內的其他測試都是使用這個數值
![image](https://hackmd.io/_uploads/B1fB4HxpA.png)

----

#### Receptive field大小

Swin-T 引入了Sliding window機制讓注意力限制在一個窗口內，隨著窗口大小增加，準確度也在慢慢增加，證明window attention有效，但依然不如global attention
![image](https://hackmd.io/_uploads/B1mi8Be6A.png)

----

#### 在不同階段套用Focus linear attention

替換前兩個階段可以讓準確度提升最多，作者推測是因為 Swin的前兩個階段具有更大的解析度，更適合focus linear attention具有大Receptive field準確度越大的特性

![image](https://hackmd.io/_uploads/B1r1cHgaR.png)


---

## 4.總結

* 通過解決現有linear attention在聚焦能力和特徵多樣性方面的局限性，成功超越softmax
* 大量的實驗表明，作者的模組可以廣泛應用於各種ViT，並在計算效率和模型性能之間取得更好的平衡


---

### 小小心得

這是我碩士生涯第一篇看的論文，剛好抽到了一篇還算簡單好讀的，看到別人paper那個公式真的是完全看不懂(´。＿。｀)

在整理的時候把power的意思錯誤理解成相乘，講出來後老師也覺得很奇怪，最後還是學長提醒才知道是做次方，好險不用重報

路還很長，試試看把路上看到的東西都記錄下來，如果有哪邊有理解錯誤或可以改進的的也請多多指教(。・∀・)