經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

卷積神經網路設計史上的主要里程碑:模組化、多路徑、因式分解、壓縮、可擴充套件

一般來說,分類問題是計算機視覺模型的基礎,它可以延申解決更復雜的視覺問題,例如:目標檢測的任務包括檢測邊界框並對其中的物件進行分類。而分割的任務則是對影象中的每個畫素進行分類。

卷積神經網路(CNNs)首次被用於解決影象分類問題,並且取得了很好的效果,所以在這個問題上,研究人員開始展開競爭。透過對ImageNet Challenge中更精確分類器的快速跟蹤研究,他們解決了與大容量神經網路的統計學習相關的更普遍的問題,導致了深度學習的重大進展。

在本文中我們將整理一些經典的CNN模型,詳細介紹這些模型的設計理論和關鍵設計點:

VGGNet

我們介紹的第一個CNN,命名是為VGGNet[2]。它是AlexNet[3]的直接繼承者,AlexNet[3]被認為是第一個“深度”神經網路,這兩個網路有一個共同的祖先,那就是Lecun的LeNet[4]。

我們從它開始,儘管它的年代久遠,但是由於VGGNet的特殊性,,直到今天仍然站得住腳(這是極少數的DL模型能夠做到的)。第一個介紹VGGNet還有一個原因是它還建立了後續cnn所採用的通用元件和結構。

經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

如上圖1所示,卷積神經網路從一個輸入層開始,它與輸入影象具有相同的尺寸,224x224x3。

然後,VGGNet堆疊第一個卷積層(CL 1),其中包括64個大小為3x3的核,輸出一個224x224x64的張量。

接下來,它在具有相同配置的64個通道上堆疊使用相同大小的3x3核的CL 2,生成相同尺寸的特徵對映。

然後,使用filter size為2x2、填充和步幅為2的最大池化來降低特徵對映的空間解析度,從224x224x64降低到112x112x64。最大池並不影響特性對映深度,因此通道的數量仍然是64。

這裡我將這三層之上稱作module 1,一般情況下也被稱作stem,可以理解為它提取的是最基本的線條特徵。我們將其稱為module 被是因為它定義為以一定解析度操作的處理單元。所以我們可以說VGGNet的module 1以224x224解析度工作,並生成解析度為112x112的特徵圖,後面的module 2繼續在其上工作。

類似地,module 2也有兩個帶有3x3核的CLs,用於提取更高級別的特徵,其次是最大池化,將空間解析度減半,但核的數量乘以2,使輸出特徵對映的通道數量翻倍。

每個module 處理輸入特徵對映,將通道加倍,將空間解析度除以2,以此類推。但是不可能一直這樣做,因為module 6的空間解析度已經是7x7了。

因此,VGGNet包括一個從3D到1D的展平(flatten)操作,然後應用一個或兩個稠密層,最後使用softmax計算分類機率(這裡是1000個標籤)。

讓我們總結一下VGGNet引入的設計模式,以在準確性方面超越所有以前的研究:

模組化架構允許卷積層內的對稱性和同質性。透過構建具有相似特徵的卷積層塊,並在模組之間執行下采樣有助於在特徵提取階段保留有價值的資訊,使用小核,兩個 3x3 核的卷積的感知範圍可以等效於單個 5x5 的感知範圍。級聯的小核卷積也增強了非線性,並且可以獲得比具有一層更大核的更好的精度。小核還可加快 Nvidia GPU 上的計算速度。

與平均池化或跨步卷積(步幅大於 1)相比,最大池化操作是一種有效的下采樣方法。最大池化允許捕獲具有空間資訊的資料中的不變性。因為影象分類任務需要這種空間資訊減少才能達到類別分數的輸出,而且它也被“流形假設”證明是合理的。在計算機視覺中,流形假設指出 224x224x3 維度空間中的真實影象表示非常有限的子空間。

將整體下采樣與整個架構中通道數量的增加相結合形成金字塔形結構。通道的倍增補償了由於學習到的特徵圖的空間解析度不斷降低而導致的表徵表達能力的損失。在整個層中,特徵空間會同步變窄和變深,直到它準備好被展平並作為輸入向量傳送到全連線層。每個特徵都可以看作一個物件,其存在將在整個推理計算過程中被量化。早期的卷積層捕獲基本形狀,因此需要的物件更少。後面的層將這些形狀組合起來,建立具有多種組合的更復雜的物件,所以需要大量的通道來儲存它們。

Inception

接下來介紹與VGGNet[2]同年出現但晚一點的第二個CNN,Inception[5]。這個名字的靈感來自克里斯托弗諾蘭的著名電影,這個網路引發了關於“尋求更深層次的 CNN”的爭論,並很快變成了一個問題。事實上,深度學習研究人員意識到,如果能正確訓練更深層次的神經網路,那麼獲得的準確性就越高,尤其是在涉及 ImageNet 等複雜分類任務時。簡而言之,更多的堆疊層提高了神經網路的學習能力,使其能夠捕捉複雜的模式並並能在複雜的資料中進行泛化。

但是設法訓練更深的網路是非常困難的。堆疊更多層會產生成本,並使訓練神經網路變得更加困難。這是由於梯度消失問題,當損失梯度透過無數計算層反向傳播,並逐漸收斂到幾乎為零的微小的值時,就會發生這種情況。因此訓練網路的早期層(距離輸入近的層)變得很複雜,這些層無法執行特徵提取並將提取的資訊傳遞給後續層。

在Inception中,研究人員在一個深度級別上模擬了幾個層。這樣既增強了神經網路的學習能力,又擴大了神經網路的引數空間,避免了梯度的消失。

經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

上圖 2 是這個多尺度處理層的內部檢視結構。關注藍色 元件,我們看到一個 nxnx3 的輸入層和一個 nxnxΣki 的輸出層。它不是應用 k 個大小為 3x3 的卷積濾波器,而是並行應用多個處理層。相同的輸入將同時透過 1x1 卷積、3x3 卷積、5x5 卷積和最大池化(步長為 1 以保持解析度)。然後將所有生成的大小為 nxnxk1、nxnxk3、nxnxk5 和 nxnxk 的特徵圖連線成大小為 nxnxΣki 的輸出特徵圖。

但是我們看到多尺度的特徵的維度並不相同,所以這裡的紅色元件聚合來自不同感知領域和處理路徑的多尺度特徵。每條路徑至少產生 k 個通道,其中 k 是輸入通道的數量。

記住我之前提到的:使用最大池層的下采樣階段不會影響通道數。

但是堆疊多個多尺度層肯定會引發記憶體不足異常,為了克服這個問題初始設計者引入了逐點卷積,只是經典的卷積層,但是核大小為1x1,這樣r < k,從而有效地減少特徵圖的深度,而不會犧牲此時提取的相關資料處理水平。

Inception的主要設計成果:

多路徑是基於在體系結構中包含多重分支的想法,模擬單個神經網路中的子網路的整合。這種多尺度分層是很重的(資源需求和計算大),從來沒有被廣泛採用,但是在一個層內組合多條路徑的能力激發了後續神經網路的發展。

1x1卷積是計算機視覺中一種非常有用和普遍的工具。這是一種低成本的操作,引數佔用小,處理時間相對較快。使用它可以有效地減少在輸出特徵圖中的通道數量,使神經網路需要更少的記憶體和計算能力。增加額外的1x1卷積層會減少引數的數量,這是因為每一層的引數數量受到輸入通道數量的強烈影響。

ResNet

接下來是ResNet[6],它是最具革命性的深度學習發明之一,也是被引用次數最多的研究論文之一。這是因為ResNet是第一個成功堆疊超過100層的CNN。在當時100個層完全是瘋狂的想法。現在我們談論的是transformers中的一千億個引數都是很平常的事情。但是在當時,如果告訴你ResNet有100層時,你肯定會先問:他們解決了梯度消失的問題了嗎?這是ResNet出名的原因。因為今天我們不再聽到梯度消失問題任何聲音了。

讓我們看看這個革命性的技巧。我們使用VGGNet模組化架構,並更改單個塊的內容。如下圖3所示,殘差塊有nxnx3作為輸入,也有nxnx3作為輸出。

經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

處理路徑之一是一個帶有3x3核的標準卷積,然後在它旁邊新增一個快捷/跳過連線,即,一個直接將輸入傳遞到輸出的單位函式。這是深度學習領域最具革命性的創新之一。乍一看可能很奇怪,但你想得越多它就越合乎邏輯。

Resnet是一堆模組加上下采樣,然後是堆疊更多模組加上再次下采樣。在模組內包含一個殘差塊,其中包含將輸入連結到輸出的跳過/殘差連線。輸入的資料只通過這些快捷連線,這正是 ResNet 解決梯度消失問題的原因。

當輸入透過快捷連線(一個恆等函式)時如何不丟失梯度?有兩件事可以解釋:

A)ResNet的跳過連線允許繞過給定輸入資料的任何不必要的處理級別,因為深度神經網路中的一些層可能與檢測應用於物件子集的特定模式有關。

B)我們可以假設輸入包含響應,計算層的目標是細化它,直到推匯出類。因此在每個級別新增處理結果作為迭代細化時,維護原始輸入流是有意義的。

因為ResNet的出現,所以ImageNet社群決定不再進行神經網路層數堆疊挑戰,因為問題已經解決,爭論也差不多結束了。研究人員已經開始著手解決其他的問題,例如:試圖減少FLOPS或記憶體佔用的總數。這就是我接下來要討論的神經網路。

MobileNet

我們在成本最小化時代的第一個CNN是MobileNet[7]。它是一個緊湊的CNN,引數較少,在移動平臺上執行速度快,同時也提供高效能。

MobileNet的訣竅在於將卷積運算分解為兩階段的超高效處理。

經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

如上圖4所示,經典的卷積層透過3D過濾器,每個核在輸出特徵對映中產生一個通道。作為一種替代方案,MobileNet提出了一種深度卷積,其中應用一堆僅二維過濾器,這些過濾器透過輸入張量的所有通道。

它所做的只是採用了單個過濾器的結果,不是將它們相加而是讓它們保持非連線,這只是一個經典卷積的應用?

是的,但是這樣做的話,最終會得到許多獨立的特徵地,如果我們只是將它們連線起來,那麼不同的渠道之間將不再有任何關聯。但是我們忽略了兩點:一是特徵對映需要連結,二是通道需要改變。

來自Inception的一個重要結論就出來了:當我們想要以較低的代價改變通道的數量時,我們使用點(1x1)卷積。

所以MobileNet將點向卷積應用到由深度卷積得到的特徵圖上。如下圖5所示,使用任意數量的1x1過濾器來生成任意數量的通道。例如乘以k來得到典型的特徵對映,其大小為nxnxk。

經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

在圖5中,首先看到一個處理2D空間資訊的深度卷積,然後是一個合併和處理z維通道資訊的點卷積。

MobileNet v2

MobileNet已經發布了第二個版本。MobileNet v2[8]是一個殘差神經網路,也就是說它將殘差塊堆疊到更深的層次,除了在層內部,它還分解了卷積操作,以達到成本效益。

MobileNet v2將這些層劃分為一組處理高維資料處理,另一組壓縮資訊並將其傳輸到相鄰的層。

經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

上圖6中是MobileNet v2的基礎塊。首先使用點卷積達到高維k > r,然後使用深度卷積有效地分析資訊,最後再次使用點向卷積返回低維。除此以外還包含了一個從輸入層到輸出層的快捷連線。

這樣的壓縮是如何在不降低效能的情況下工作呢?這個可以參考VGG中提到的系統下采樣的假設。

EfficientNet

EfficientNet[9],這篇文章中要討論的最後一個CNN。儘管它是在2019年底釋出的,但它已經老了。如圖7所示,該網路的效能超過了目前為止所有其他神經網路。

經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

讓我們詳細看看是什麼讓它如此強大。EfficientNet可以說是MobileNetv2,在網路規模上的調整。它真的很簡單,並且非常有效,這也可能是它被稱作Efficient的原因吧。

EfficientNet也會堆疊反向殘差塊,但對神經網路的深度、寬度和解析度的任意選擇提出了自己的理解:網路的深度對應於網路的層數。寬度與一層中的神經元數量相關,或者更確切地說,與卷積層中的核器數量相關。解析度是輸入的高度和寬度。

EfficientNet提出了一種簡單但有效的縮放技術,使用複合係數以原則性的方式均勻縮放網路的寬度、深度和解析度。是一個使用者定義的全域性比例因子(整數),它控制可用資源的數量,而α、β和γ決定如何分別將這些資源分配給網路深度、寬度和解析度。

因此,透過設定=1,可以使用網格搜尋確定超引數- α, β和γ-。由於網路規模小,計算速度快。當確定最優超引數時,可以增大複合係數,從而得到更大、更精確的模型。這就是不同版本的efficiency entnet: B1到B7是如何構造的,B旁邊的整數表示複合係數的值。

使用這個網路規模啟發式的方法優於所有最先進的cnn,儘管所有的設計結構和模式都與MobileNet v2相同。

上面說的是高情商的解釋,如果你看不懂的話那麼低情商的解釋是什麼呢:EfficientNet是暴力調參的結果

總結

2014年是深度學習的元年。現在當你看到VGGNet、ResNet或EfficientNet時可能覺得已經很老了,但是他們的改進和裡面的思路對於我們來說還是非常重要的,這些論文都是值得閱讀和實驗的。如果你對CNN感興趣,可以去看看efficient entnetv2[10],它是在2021年底釋出的。

引用

[1] Sumit Saha, A Comprehensive Guide to Convolutional Neural Networks, TDS, 2018

[2] Simonyan et al。, Very Deep Convolutional Networks for Large-Scale Image Recognition, 2014

[3] Krizhevsky et al。, ImageNet Classification with Deep Convolutional Neural Networks, 2012

[4] Yann Lecun, LeNet-5 convolutional neural networks, 1998

[5] Szegedy et al。, Going Deeper with Convolutions, 2014

[6] He et al。, Deep Residual Learning for Image Recognition, 2016

[7] G。 Howard et al。, MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, 2017

[8] Sandler et al。, MobileNetV2: Inverted Residuals and Linear Bottlenecks, 2018

[9] Tan et al。, EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks, 2019

[10] Tan et al。, EfficientNetV2: Smaller Models and Faster Training, 2021

https://avoid。overfit。cn/post/7f9e04b064324bb0be9868cd34ace7de

作者:Houssem Ben Braiek