# 論文:InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions
CVPR 2023 highlighted paper
## 介紹
近期 ViT 出現,許多研究都 Focus 在基於 ViT 的大型模型
但沒有什麼大型 CNN 相關的研究
因此此篇論文提出 InternImage:CNN-based 的大型模型
CNN 和 ViT 之間的差距可以大致分成幾個面向:
* MHSA 帶來的 Global 相關性資訊優勢。雖然近期有人嘗試用很大 Kernel 的 Convolution 來做,但效果還是不如最先進的 ViTs
* ViT 有一些標準 CNN 沒有的 Components,例如:Layer Norm、Feed Forwrd network、GeLU
* 常見的 CNN 有較強烈的歸納偏差,所以通常收斂比 ViT 快,需要比較少訓練資料。但限制是沒有能力從更大量的資料中學習更 general 的 patterns
於是模型使用 deformable (可變型的) convolution 作為主要的 Operator
可以帶來類似 MHSA 的好處: long-range dependence 和 adaptive spatial aggregation
同時又不會造成運算效率低落

另外也結合一系列類似 Transformer 的架構設計和 Blocks
並基於以上設計擴展參數量,來學習更大規模的訓練資料,可以和 ViT 一樣得到好處
在表現上面,InternImage 在 COCO dataset 上達到 65.4 mAP (新紀錄)
超越目前領先的 CNNs 和 ViTs。
## Deformable Convolution (DCN)

如圖所示,dynamic sparse convolution,Window Size 只用常見的 $3*3$
擁有以下優勢:
* 可以彈性的去學習 reception fields (long-range / short range)
* Sampling offset 和 Modulation scalar 依照 Input data 動態調整,達到像是 ViT 的 Adaptive spatial aggregation (適應性空間聚合:MHSA 的 weights 依照 input 動態調整) 特性。
* Window size 為 $3*3$,不會因為 large dense kernels 造成效率問題
### 重新審視 DCNv2.
input image:
DCNv2:
* $p_0$:current pixel
* $p_k$:正規卷積中的第 k 個 Sample 點(相對 $p_0$ 的 $\{(−1, −1), (−1, 0), ..., (0, +1), ..., (+1, +1)\}$)
* $\Delta{p_k}$:每個 Sample Point 對應的 offset(依 input 動態調整)
* $w_k$:第 k 個 Sample Point 的 projection weight
* $m_k$:第 k 個 Sample Point 的 modulation scalar
(Sigmoid Normalized $[0, 1]$,依 input 動態調整)

DCNv2 通常拿來作為普通卷積的擴充,讀取預訓練 weights 來達到更好效果,但不太適合拿來用在要從頭訓練的大型模型,所以做了一些改進,提出 DCNv3:
* Convolution Neurons 之間共享 weights:原本不同的卷積 Neurons 分別有獨立的 linear projection weights,參數量和複雜度受總 Sample points 數量影響。v3 中借用 Seperable Convolution 的概念,並將 $w_k$ 拆成 depth-wise 和 point-wise,Depth-wise 部分給 $m_k$ 負責,point-wise 部分 neurons 之間共享。
(複習一下 Seperable Convolution)

* multi-group:類似 MHSA 中 multi-head 的概念,將 $\Delta{p_k}$ 和 $m_k$ 拆成 g 個組別,讓一個卷積層可以學出多種不同的 spatial aggregation。
* DCNv2 用 Sigmoid Normalize $m_k$(範圍 $[0, 1]$),但是所有 modulation scalar 的總合是不穩定的(範圍 $[0, K]$),這造成參數量多時 gradient 會不穩定。所以將對每個 $m_k$ 做 sigmoid 改成對全部的 $m_k$ 做 Softmax,就可以讓總和在範圍 $[0, 1]$ 內,讓各個 scale 的訓練更穩定。
DCNv3 Equation:
* $x_g$:Sliced Input Feature Map(切割 Channels,,)
* $w_g$:shared point-wise weight of group g
* $m_{gk}$:group g、第 k 個 Sample point 的 modulation scalar
* $\Delta{p_{gk}}$:group g,sample point $p_k$ 對應的 offset
## InternImage Model

### Basic Block
Basic Block 的堆疊方式跟 ViTs 比較像,且其中包含 LN、FFN 和 GeLU

Sampling offset $\Delta{p}$ 和 modulation scalar $m$ 產生方式:將 input 傳入一個 seperable convolution(3x3 DWCONV -> linear projection)
另外,與 tranformer 一樣採用 post-normaliztion

### Stem & Downsampling
|  | $s2$:stride = 2 <br/> $p1$:padding = 1 |
| -------- | -------- |
Convolutional Stem:before first stage,將 input 縮小成原本的 $\frac{1}{4}$
|  | $s2$:stride = 2 <br/> $p1$:padding = 1 |
| -------- | -------- |
Downsampling:將上一層 output 縮小成原本的 $\frac{1}{2}$ 再送入下一層
### Stacking Rule & Scaling Rule
分成以下幾種 Hyper-params:

模型有 4 個 Stages,所以總共會有 12 個 hyper-params
但這樣 search space 會太大,所以加入 4 個 rules 來縮小 search space

* $C_2$、$C_3$、$C_4$ 以 $C_1$ 來決定(乘上 $2^{i-1}$)
* Group 數:channel 數除上 hyper-param $C^\prime$
* stage 1、stage 2、stage 4 的 Basic Number 數量相同,且皆少於或等於 stage 3
要決定的 hyper-param 就剩下 4 個:$C_1$、$C^\prime$、$L_1$、$L_3$
接著先 $C_1$、$C^\prime$、$L_1$ 限制在幾個數字:
$C_1$:$\{48, 64, 80\}$
$C^\prime$:$\{1,2,3,4,5\}$
$L_1$:$\{16,32\}$
並選擇總參數量 30M 的 Model 來測試
Search Space 縮小到 30,從中選出表現最好的:(64,16,4,18)
當作 InternImage-T ,並以此當作基礎來放大,如下表:

而放大主要分成兩個面向,分別是 Depth 和 Width,可以寫成以下式子:
$D^\prime = \alpha^\phi D$,$\alpha \geq 1$
$C_1^\prime = \beta^\phi D$,$\beta \geq 1$
且 $\alpha\beta^{1.99} \approx 2$
(此處 1.99 專為 InternImage 設定,計算方法為將深度固定然後寬度加倍)
最後找出最好的 scaling setting 為 $\alpha=1.09$、$\beta=1.36$
## 貢獻與實驗表現
* 第一個參數量超過 1 billion 的 CNN, 並用 400 million 大型資料來訓練
* improve 3×3 DCN operator,並一一檢視 block 設計、堆疊設計、模型放大策略
* 測試在圖像分類、物件偵測、Segmentation,測試 model size 30M~1B,data 1M~400M
測試表現:
* InternImage-B 用 ImageNet-1k 訓練,達 84.9 top-1,跟對應的模型($31*31$ kernel CNN)相比,高了至少 1.1 個百分點
* 1B params + 427M data InternImage-H ImageNet-1k top-1 達到 89.6,跟設計良好的 ViTs 還有混合 ViTs 相近
* COCO dataset:InternImage-H(2.18B params) 65.4% box mAP,2.3 points higher than SwinV2-G,27% fewer parameters。
### Classification
Training settings:
* InternImage-T/S/B trained on ImageNet-1K (∼1.3 million) for 300 epochs
* InternImage-L/XL pre-trained on ImageNet-22K (∼14.2 million) for 90 epochs, fine-tuned on ImageNet-1K for 20 epochs
* InternImage-H pre-train on large-scale joint dataset (427 million) for 30 epochs, fine-tune the model on ImageNet-1K for 20 epochs
Performance:
* InternImage-T achieves 83.5% top-1 accuracy, outperforming ConvNext-T by 1.4 points
* InternImage-B surpasses the hybrid-ViT CoAtNet-2 by 0.8 points
* InternImage-XL pre-train on ImageNet-22K, top-1 accuracy 88.0%
* InternImage-H pre-train on large-scale joint dataset, top-1 accuracy 89.6%,跟目前最先進的 ViT 差距剩約一個百分點。
### Object Detection
Settings:
* 2 種 object detection frameworks Mask R-CNN 和 Cascade Mask R-CNN
* initialize the backbone with pre-trained classification weights
* 1× (訓練 12 epochs) 或 3× (訓練 36 epochs)
Performance:
* InternImage-T、1×、Mask R-CNN
* box AP 47.2%
* 比 Swin-T 高 4.5 個百分點
* 比 ConvNeXt-T 高 3.0 個百分點、
* InternImage-XL、3×、Cascade Mask R-CNN
* box AP 56.2%
* 比 ConvNeXt-XL 高一個百分點
* InternImage-H、weights pre-trained on ImageNet-22K / large-scale joint dataset、DINO detector、fine-tune 26 epochs on Objects365 then 12 epochs on COCO
* COCO val2017 65.0 box AP、COCO test-dev 65.4 box AP
* test-dev 比 FD-SwinV2-G 高 1.2 百分點,且參數量少 27%,不須經過複雜的Distillation
### Instance Segmentation
Performance:
* InternImage-T、1×、Mask R-CNN
* mask AP 42.5%
* 比 Swin-T 高 3.2 個百分點
* 比 ConvNeXt-T 高 2.4 個百分點、
* InternImage-XL、3×、Cascade Mask R-CNN
* mask AP 48.8%
* 比相對的模型們高至少 1.1 個百分點
### Semantic Segmentation
Settings:
* pre-trained classification weights、with UperNet for Semantic Segmentation、train on ADE20K for 160k iterations
* InternImage-H with more advanced Mask2Former for Semantic Segmentation
Performance:
* InternImage-B 50.8 mIoU on ADE20K val
* 超越 ConvNeXt-B (49.1) 和 RepLKNet-31B (49.9),且參數量幾乎一樣
* InternImage-H 60.3 MS mIoU on ADE20K val
* 超越 SwinV2-G (59.9),且參數更少(1.12B vs. 3.00B)
* InternImage-H using Mask2Former mIoU of 62.9
* 超越目前最好的 BEiT-3(62.8)
## Ablation Study(消融實驗)
透過去除某些元件來測試該設計對 Performance 的影響
可以確定以下幾件事:
* Sharing weights among convolution neurons matters

InternImage-H share weights 以後,參數量少了 42%,Memory 用量少 84.2%
而且沒有造成太多的準確率下降

* Multi-group spatial aggregation brings stronger features

同一個 query point(藍星),不同的 Group 會 Focus 在不一樣的地方
在第一、第二個 stages,receptive field 相對比較小,越往下漸漸擴大成 Global

可以看到如果把 multi-group 拿掉的話,準確率下降。
## Conclusion & Limitations
此論文證明除了 ViT 之外,對於 large-scale vision task,CNN 也是一個值得考慮的選項
但對於要求快速的 tasks,DCN based 的 Model 帶來的 Latency 還是個問題。
但大型 CNN 模型的研究還在初始階段,InternImage 也許是個很好的起點。