Vision Transformers for Dense Prediction 介紹

How哥
10 min readNov 13, 2021

--

以往預測深度使用 Convolution Network,但在還原 resolution 時會遺失資訊,因此作者們用 Vision Transformer 當作 Encoder 提出 DPT Model,處理 feature 時解析度不會變小還能有全局關注度,一舉成為最好的 Monocular Depth Estimation Model

Intel Labs

ICCV 2021

Introduction

在 Dense Prediction 任務中,主要使用的基於 Convolution Network 的 Encoder-Decoder 架構,這種架構進行 Down-Sampling 時,會在較深的 Layers 遺失掉一些資訊,Encoder 中丟失的訊息不可能在 Decoder 中還原

右一右二是這篇論文的輸出

因此本篇論使用 Transformer 來當基礎架構,它輸入輸出採用 Sequence to Sequence 就不會有資料遺失問題,此外它還擁有 Global Attention 機制,使得模型能夠對整張圖片的掌控度更高,進而有更加的預測結果

Related Work

這邊簡單的介紹一下 Vision Transformer,原本的 Transformer 是 NLP (自然語言處理) 任務中的架構

Transformer in NLP

上的輸入是 this is a book,這四個輸入稱為 token,模型會把這四個 token 個別做相關性的運算,找出他們之間的關係

Vision Transformer

上圖動畫為 Vision Transformer,由於記憶體的考量,我們不可能把一個 pixel 當成一個 token 輸入,運算量太大,所以我們將圖片切成多個 16 x 16 的小圖片當成一組輸入 token,這些小圖片稱為 patch,記得還是要加上 position encoding,因為位子資訊對影像來說也是重要的

Architecture

底下是架構圖,主要由三個部分組合而成

  1. Transformer (Encoder)
  2. Reassemble (Decoder)
  3. Fusion
網路架構圖

Transformer encoder

把圖片切成 p² 為一組,經過 Embeded 之後變成數組 feature,接著額外加入一組 readout token (紅色部分),這部分是仿造 ViT 原文的作法,ViT 加入這組 token 是想要最後在預測圖片時,把他丟入 prediction head 產生最終結果,而這裡加入 readout token 是希望他能夠收集一些額外的資訊

Transformer

Transformer 的好處在於,feature 經過運算的時候 spatial 大小並不會像 convolution 一樣變小,會維持原本的大小,再來是 receptive field 問題

Transformer 並不用額外考慮視野域,因為他的每一次運算都是 global receptive field,擁有 Multiple Head Self Attention 機制,使模型能夠找出哪一塊訊息需要被重點關注

接著提出三種架構稍微差異的模型

  • ViT-Base : 使用基本的 patch-based embedding 和 12 transformer layers
  • ViT-Large : 使用基本的 patch-based embedding 和 24 transformer layers和更多的 D 個 dimension
  • ViT-Hybrid : 使用 ResNet50 當 image embedding 和 和 12 transformer layers

p 都設定 16,ResNet50 調整成輸出解析度為輸入的 1/16 (原始是1/32),為的是保留更多細節

Convolutional decoder

Reassemble (Decoder)

從不同層的 encoder 接出來接上 decoder,處理這些 feature 有三個步驟

decode feature 的過程
  • 把 readout token 融合到其他特徵中,readout token 原本是拿來預測用的,這裡他捕捉全局的資訊
維度從 Np+1 變成 Np

把 readout token concatenate 到全部其他 token 之後,並且重新映射

  • 把這些經由上述處理的 token 按照原本圖片的順序組合起來,token 本來就是由圖片的 patch 組成,這步驟就是希望排列 token 順序還原圖片
  • Resample

先透過 1x1 convolution 調整維度,然後 s 把圖片變成原本的幾倍小,假如 s 是 32 (比 p=16) 大,表示圖片要變得更小,就會接上 3x3 的 convolution

假如 s 是 8 (比 p=16) 小,表示圖片要變的更大,就會接上 3x3 的 transpose convolution 來放大

Fusion

Fusion

最後要把 feature 融合在一起,提出不同的模型拉出不同層的 layer

  • ViT-Large, layer = {5, 12, 18, 24}
  • ViT-Base, layer = {3, 6, 9, 12}
  • ViT-Hybrid, layer {9, 12} 和前兩個 ResNet block
fusion block

圖片藉由上面的 block 連接起來,最後的大小會是原輸入圖像的二分之一大,最後接上 output head 預測最終結果

Experiments

使用的設備是 Intel Xeon Platinum 8280 CPU @ 2.70GHz with 8 physical cores and an Nvidia RTX 2080 GPU

384x384 的方形圖片輸入

這邊使用的 MIX6 是作者有提另一篇論文,整合 Dataset 的結果

Large 在整合資料集上表現最好
NYUv2 的表現
KITTI 上的表現

下圖嘗試怎麼處理 readout token 效果較佳,Add 是連在其他 token 後面,沒有 projection,Project 是連在其他 token 後面 + projection

下圖嘗試抽取哪一層 encoder 的特徵效果比較好

Hybrid 要抽到 ResNet 效果才會最好,Base 使用 3, 6, 9, 12 層
visualizaton

下圖是換 backbone 的實驗,ResNet 結果看起來可以這麼好是因為他在 ImageNet pretrain 了幾十億張圖片,加上一堆有的沒的工法,DPT 的 pretrain 根本不用那麼多。DeIT 模型是 ViT 加上distillation token,跟 DPT 比起來少了 Reassemble 的部分。DeIT-Base-Dist 能夠贏 DPT-Base 也是贏在 pretrain 數量比較多

換 backbone的結果

在 inference time 輸入比訓練圖片 (384x384) 更高的解析度,當使用 convolution layer 時,靠近輸入端的地方視野域已經夠小了,輸入圖片解析度又增大,能看到的區域又更小,反之 Vision Transformer 就不會有這問題

不同 resolution 在 inference time 的準確度

Inference speed,值得注意的是 DPT-Large 參數最多,但是速度卻不慢

inference speed

下面是 DPT-Large 和 DPT-Hybrid 的 attention map 比較

Origin, Prediction Result : DPT-Hybrid
Origin, Prediction Result : DPT-Large
DPT-Hybrid
DPT-Large

可以發現 Hybrid 在淺層就能發現比較豐富的 feature (ResNet 的功勞),還能夠觀察到比較淺層的網路負責 local 一點的資訊,深層網路整合 global 的資訊

底下是自己做的實驗

原始影片
DPT-Hbrid
Monocular2

經過比較就會知道 Monocular2 到底有多差,ICCV 2019 的論文,兩年後被也是 ICCV 2021 的新論文加上 Transformer 吊打

Conclusion

本篇論文提出的 DPT model 在 NYUv2 上達到最好的表現,就我所知,在深度預測這個任務上第一次有人使用 Transformer 來做,一舉成為深度預測最好模型

Transformer 的好處是可以處理全局的圖片,壞處是不好訓練,會比 Convolution 還需要高多訓練資料結果才會好,所以作者提出另一篇論文來整合現有的深度預測 Dataset,好讓他的模型能夠超越現有的模型成為版本答案

--

--

How哥

台灣科技大學資工所研究生,把有趣的電腦視覺論文整理上來,希望能幫助到有需要的人,聯絡信箱 b10515007@gmail.com