[22.03] RepLKNet
巨無霸卷積核
Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
近年來,CNN 架構受到 ViT 挑戰,地位顯得搖搖欲墜 。
有人說,ViT 這麼強,是因為多頭注意力機制的加持,多頭注意力更靈活,更少歸納偏差,對扭曲更穩健等。
但是又有一派人把「多頭注意力」去除後,發現性能也相去不遠,於是把性能歸功於「架構」。
這篇論文跟他們都不同,它主要專注於一個觀點:大卷積核的設計。
定義問題
除了一些老式模型如 Inceptions 之外,大核模型在 VGG 之後不再流行。
VGG 已經得到了堆疊小核就能達到同樣效果的「感受野」,因此大核的設計逐漸乏人問津。
雖然近年也有一些對於大核的研究,但是這些研究沒有回答一個關鍵問題:
- 為什麼傳統 CNN 性能不如 ViT?建立大感受野的方式是縮小 CNN 和 ViT 表現差距的關鍵嗎?
大核卷積使用說明書
為了回答這個問題,作者有系統地探索了 CNN 的大核心設計,並總結了五個經驗指南。
深度大核卷積仍然高效
我們總會認為大核卷積的計算成本很高,因為核心大小會成倍增加 FLOPs 數量。
但是你只要改成深度卷積的形式,就可以大大克服這個缺點。
另一方面,由於現代 GPU 等平行運算裝置對於深度卷積的支援性不足,記憶體存取成本增加。
現成的深度學習工具對於深度卷積的支援也不夠,如下表所示,可以看到 PyTorch 的實作方式的推論延遲非常高。
為了解決這個問題,作者重新發佈了高效的 PyTorch 實作,在這個實作中深度卷積的延遲次 49.5% 減少到 12.3%,大概上與 FLOPs 佔用成正比:
大核卷積十分依賴殘差連接
作者使用 MobileNet-V2 進行基準測試,因為它大量使用 DW 層並且有兩個已發布的變體(有或沒有殘差連接)。對於大內核對應部分,只需將所有 DW 3×3 層替換為 13×13 層。
上表顯示大核心將使用捷徑的 MobileNet-V2 的準確率提高了 0.77%。然而,如果沒有捷徑,大核心會將準確率降低到只有 53.98%。
一如我們之前看過的論文,捷徑使模型成為由具有不同感受野的眾多模型組成的隱式集合,因此它可以從更大的最大感受野中受益,同時又不失去捕獲小規模模式的能力。
大核卷積需要重新參數化
上表顯示直接將核心大小從 9 增加到 13 會降低準確性,而重新參數化可以解決此問題。
眾所周知,ViT 在小資料集上存在最佳化問題。一個常見的解決方法是引入卷積先驗,例如,在每個自注意力區塊中添加一個 DW 3×3 卷積,這與我們的類似。這些策略在網路之前引入了額外的平移等方差和局部性,使得在小資料集上更容易優化而不失通用性。
同樣與 ViT 的行為類似,作者也發現當預訓練資料集增加到 7,300 萬張影像時,可以省略重新參數化而不會降低效能。
大核卷積明顯提升下游任務性能
上表顯示,將 MobileNet V2 的核心大小從 3×3 增加到 9×9 將 ImageNet 精度提高了 1.33%,但 Cityscapes mIoU 提高了 3.99%。
另外一個實驗野顯示了類似的趨勢:隨著核心大小從 [3, 3, 3, 3] 增加到 [31, 29, 27, 13],ImageNet 精度僅提高了 0.96%,而 ADE20K 上的 mIoU 提高了 3.12%。這種現象表明,相似 ImageNet 分數的模型在下游任務中可能具有非常不同的能力。
作者造成這種現象的原因有二:
- 大內核設計顯著增加了有效感受野(ERF)。許多工作已經證明「上下文」資訊(這意味著大型 ERF)對於許多下游任務(例如物件檢測和語義分割)十分重要。
- 大內核設計為網路帶來了更多的形狀偏差。簡而言之,ImageNet 圖片可以根據紋理或形狀進行正確分類。然而,人類主要根據形狀線索而不是紋理來識別物體,因此具有更強形狀偏差的模型可能會更好地轉移到下游任務。
此外,最近的研究指出 ViT 具有強烈的形狀偏差,這部分解釋了為什麼 ViT 在遷移任務中超級強大。相較之下,在 ImageNet 上訓練的傳統 CNN 往往偏向紋理。