天天看點

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

作者:deephub

卷積神經網絡設計史上的主要裡程碑:子產品化、多路徑、因式分解、壓縮、可擴充

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

卷積神經網絡(CNNs)首次被用于解決圖像分類問題,并且取得了很好的效果,是以在這個問題上,研究人員開始展開競争。通過對ImageNet Challenge中更精确分類器的快速跟蹤研究,他們解決了與大容量神經網絡的統計學習相關的更普遍的問題,導緻了深度學習的重大進展。

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

在本文中我們将整理一些經典的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

作者:Houssem Ben Braiek

繼續閱讀