【深度学习】CNN图像分类:从LeNet5到EfficientNet
?深度學習
Author:louwill
From:深度學習筆記
在對卷積的含義有了一定的理解之后,我們便可以對CNN在最簡單的計算機視覺任務圖像分類中的經典網絡進行探索。CNN在近幾年的發展歷程中,從經典的LeNet5網絡到最近號稱最好的圖像分類網絡EfficientNet,大量學者不斷的做出了努力和創新。本講我們就來梳理經典的圖像分類網絡。
計算機視覺的三大任務
自從神經網絡和深度學習方法引入到圖像領域,經過近些年來的發展,從一開始的圖像分類逐漸延伸到目標檢測和圖像分割領域,深度學習也逐漸在計算機視覺領域占據絕對的主導地位。如果要想利用深度學習技術開啟計算機視覺領域的研究,明確并深刻理解計算機視覺的三大任務非常關鍵。計算機視覺三大任務如圖1所示。
圖1 計算機視覺的三大任務
從圖中我們可以簡單描述計算機視覺三大任務的要義。圖像分類就是要回答這張圖像是一只貓的問題,跟傳統的機器學習任務并無區別,只是我們的輸入由數值數據變成圖片數據。本節的內容就是介紹CNN在圖像分類的發展歷史上出現的一些經典的網絡。
而目標檢測則不僅需要回答圖像中有什么,而且還得給出這些物體在圖像中位置問題,以圖中為例就是不僅要識別圖中的貓和狗,還得給出貓和狗的具體定位。所以目標檢測的任務簡單而言就是分類+定位。在無人駕駛的應用中,我們的目標是訓練出一個具有極高準確率的物體檢測器,在工業產品的瑕疵檢測中,我們的目標是能夠快速準確的找出產品中的瑕疵區域,在醫學肺部結節的檢測中,我們的任務是能夠根據病人肺部影像很好的檢測出結節的位置。圖2是一個自動駕駛場景下對于各個目標物體的檢測和識別。
圖2 無人駕駛的目標檢測示例
圖像分割則是需要實現像素級的圖像分割,以圖中為例就是要把每個物體以像素級的標準分割開來,這對算法的要求則更高。圖3就是一個定位和實例分割示例。
圖3 定位+實例分割
CNN圖像分類發展史
在神經網絡和深度學習領域,Yann LeCun可以說是元老級人物。他于1998年在 IEEE 上發表了一篇42頁的長文,文中首次提出卷積-池化-全連接的神經網絡結構,由LeCun提出的七層網絡命名為LeNet5,因而也為他贏得了卷積神經網絡之父的美譽。
LeNet5的網絡結構如圖4所示。LeNet5共有7層,輸入層不計入層數,每層都有一定的訓練參數,其中三個卷積層的訓練參數較多,每層都有多個濾波器,也叫特征圖,每個濾波器都對上一層的輸出提取不同的像素特征。所以LeNet5的簡略結構是這樣:輸入-卷積-池化-卷積-池化-卷積(全連接)-全連接-全連接(輸出)。
圖4 LeNet5結構
作為標準的卷積網絡結構,LeNet5對后世的影響深遠,以至于在16年后,谷歌提出 Inception網絡時也將其命名為GoogLeNet,以致敬Yann LeCun對卷積神經網絡發展的貢獻。然而LeNet5提出后的十幾年里,由于神經網絡的可解釋性以及數據和計算資源等原因,神經網絡的發展一直處于低谷。
故事的轉折發展在2012年,也就是現代意義上的深度學習元年。2012年,深度學習三巨頭之一Geoffrey Hinton的學生Alex Krizhevsky率先提出了AlexNet,并在當年度的ILSVRC(ImageNet大規模視覺挑戰賽)以顯著的優勢獲得當屆冠軍,top5的錯誤率降至了16.4%,相比于第二名26.2%的錯誤率有了極大的提升。這一成績引起了學界和業界的極大關注,計算機視覺也開始逐漸進入深度學習主導的時代。
AlexNet繼承了LeCun的LeNet5思想,將卷積神經網絡的發展到很寬很深的網絡當中,相較于LeNet5的六萬個參數,AlexNet包含了6億3千萬條連接,6000萬個參數和65萬個神經元,其網絡結構包括5層卷積,其中第一、第二和第五層卷積后面連接了最大池化層,然后是3個全連接層。AlexNet的網絡架構圖5所示。
圖5 AlexNet結構
AlexNet不算池化層總共有8層,前5層為卷積層,其中第一、第二和第五層卷積都包含了一個最大池化層,后三層為全連接層。所以 AlexNet 的簡略結構如下:輸入-卷積-池化-卷積-池化-卷積-卷積-卷積-池化-全連接-全連接-全連接-輸出。
AlexNet 就像是打開了深度學習的潘多拉魔盒,此后不斷有新的網絡被提出,這些都極大的繁榮了深度學習的理論和實踐,致使深度學習逐漸發展興盛起來。在2013年的ILSVRC 大賽中,Zeiler和Fergus在AlexNet的基礎上對其進行了微調提出了ZFNet,使得top5的錯誤率下降到11.2%,奪得當年的第一,ZFNet和AlexNet的結構很相似,這里就不再單獨細述。
到了2014年,不斷的積累實踐和日益強大的計算能力使得研究人員敢于將神經網絡的結構推向更深層。在2014年提出的 VGG中,首次將卷積網絡結構拓展至16和19層,也就是著名的VGG16 和VGG19。相較于此前的LeNet5和AlexNet的5*5卷積和11*11卷積,VGG結構中大量使用3*3的卷積濾波器和2*2的池化濾波器。VGG的網絡雖然開始加深但其結構并不復雜,但作者的實踐卻證明了卷積網絡深度的重要性。深度卷積網絡能夠提取圖像低層次、中層次和高層次的特征,因而網絡結構需要的一定的深度來提取圖像不同層次的特征。VGG16的結構如圖6所示。
圖6 VGG結構
VGG 的網絡結構非常規整,2-2-3-3-3的卷積結構也非常利于編程實現。卷積層的濾波器數量的變化也存在明顯的規律,由64到128再到256和512,每一次卷積都是像素呈規律的減少和通道數呈規律的增加。VGG16在當年的ILSVRC以7.32%的top5錯誤率取得了當年大賽的第二名。這么厲害的網絡為什么是第二名?因為當年有比VGG更厲害的網絡,也就是前文提到的致敬LeNet5的GoogLeNet。
GoogLeNet在借鑒此前1*1卷積思想的基礎上,通過濾波器組合構建Inception模塊,使得網絡可以走向更深且表達能力更強。從2014 年獲得當屆ILSVRC冠軍的Inception v1到現在,Inception網絡已經更新到v4了,Inception真正實現了Go Deeper的目的。
通常在構建卷積結構時,我們需要考慮是使用1*1卷積、3*3卷積還是5*5卷積以及是否需要添加池化操作。而GoogLeNet的Inception模塊就是幫你決定采用什么樣的卷積結構。簡單而言,Inception模塊就是分別采用了1*1卷積、3*3卷積和5*5卷積構建了一個卷積組合然后輸出也是一個卷積組合后的輸出。
對于28*28*192的像素輸入,我們分別采用1*1卷積、3*3卷積和5*5卷積以及最大池化四個濾波器對輸入進行操作,將對應的輸出進行堆積,即32+32+128+64=256,最后的輸出大小為 28*28*256。所以總的而言,Inception網絡的基本思想就是不需要人為的去決定使用哪個卷積結構或者池化,而是由網絡自己決定這些參數,決定有哪些濾波器組合。這是Inception的通道組合功能。Inception另一個關鍵在于大量使用1*1卷積來生成瓶頸層(Bottleneck Layer)來達到降維的目的,在不降低網絡性能的情況下大大縮減了計算量,可謂是Inception網絡的點睛之筆。一個基于1*1卷積的Inception模塊如圖7所示。
圖7 Inception模塊
構建好Inception模塊后,將多個類似結構Inception模塊組合起來便是一個Inception網絡,這是最初的Inception v1版本。Inception v2對網絡加入了BN(Batch Normalization)層,進一步提高了網絡的性能。Inception v3在v2的基礎上提出了卷積分解的方法,比如將3*3卷積分解為1*3和3*1,這樣做的好處是既可以提高計算速度又可以將一個卷積拆分為兩個,從而加深網絡深度。Inception v4最大的特點是在v3的基礎上加入了殘差連接,形成了Inception-ResNet v1和Inception-ResNet v2兩個優秀的網絡結構。Inception v1在當年度激烈的ILSVRC大賽中以6.67%的top5錯誤率榮膺第一名,讓同樣出色的VGG只能屈居第二,此后每一版本的Inception網絡在ImageNet任務上均能達到SOTA(State of the Art)的水準。
通過VGG和GoogLeNet 中,我們了解到卷積神經網絡也可以進行到很深層,VGG16 和VGG19就是證明。但卷積網絡變得更深呢?當然是可以的。深度神經網絡能夠從提取圖像各個層級的特征,使得圖像識別的準確率越來越高。但在2014年前后,將卷積網絡變深且取得不錯的訓練效果并不是一件容易的事。
深度卷積網絡一開始面臨的最主要的問題是梯度消失和梯度爆炸。那什么是梯度消失和梯度爆炸呢?所謂梯度消失,就是在深層神經網絡的訓練過程中,計算得到的梯度越來越小,使得權值得不到更新的情形,這樣算法也就失效了。而梯度爆炸則是相反的情況,是指在神經網絡訓練過程中梯度變得越來越大,權值得到瘋狂更新的情形,這樣算法得不到收斂,模型也就失效了。當然,通過設置ReLu和歸一化激活函數層等手段使得我們很好的解決這些問題。但當我們將網絡層數加到更深時卻發現訓練的準確率在逐漸降低。這種并不是由過擬合造成的神經網絡訓練數據識別準確率降低的現象我們稱之為退化(Degradation)。
圖8 退化現象
圖6.8是兩個網絡訓練和測試誤差情況。我們可以看到56層的普通卷積網絡不管是在訓練集還是測試集上的訓練誤差都要高于20層的卷積網絡,這是個典型的退化現象。退化問題不解決,深度學習就無法go deeper. 于是何愷明等一眾學者就提出了殘差網絡ResNet。
要理解殘差網絡,就必須理解殘差塊(residual block)這個結構,因為殘差塊是殘差網絡的基本組成部分。回憶一下我們之前學到的各種卷積網絡結構(LeNet5/AlexNet/VGG),通常結構就是卷積池化再卷積池化,中間的卷積池化操作可以很多層。類似這樣的網絡結構何愷明在論文中將其稱為普通網絡(Plain Network),何凱明認為普通網絡解決不了退化問題,我們需要在網絡結構上做出創新。
何愷明給出的創新在于給網絡之間添加一個捷徑(shortcuts)或者也叫跳躍連接(skip connection),可以讓捷徑之間的網絡能夠學習一個恒等函數,使得在加深網絡的情形下訓練效果至少不會變差。殘差塊的基本結構如圖9所示。
圖9 殘差塊
殘差塊是一個兩層的網絡結構,輸入X經過兩層的加權和激活得到F(X)的輸出,這是典型的普通卷積網絡結構。但殘差塊的區別在于添加了一個從輸入X到兩層網絡輸出單元的shortcut,這使得輸入節點的信息單元直接獲得了與輸出節點的信息單元通信的能力 ,這時候在進行ReLu激活之前的輸出就不再是F(X)了,而是F(X)+X。當很多個具備類似結構的這樣的殘差塊組建到一起時,就構成了殘差網絡。殘差網絡能夠順利訓練很深層的卷積網絡,能夠很好的解決網絡的退化問題。
或許你可能會問憑什么加了一條從輸入到輸出的捷徑網絡就能防止退化訓練更深層的卷積網絡?或是說殘差網絡為什么能有效?我們將上述殘差塊的兩層輸入輸出符號改為和 ,相應的就有:? ? ? ? ? ? ? ? ? ? ?
加入的跳躍連接后就有:
? ? ? ? ? ? ? ?? ? 在網絡中加入L2正則化進行權值衰減或者其他情形下,l+2層的權值是很容易衰減為零的,假設偏置同樣為零的情形下就有等號成立。深度學習的試驗表明學習這個恒等式并不困難,這就意味著,在擁有跳躍連接的普通網絡即使多加幾層,其效果也并不遜色于加深之前的網絡效果。當然,我們的目標不是保持網絡不退化,而是需要提升網絡表現,當隱藏層能夠學到一些有用的信息時,殘差網絡的效果就會提升。所以,殘差網絡之所以有效是在于它能夠很好的學習上述那個恒等式,而普通網絡學習恒等式都很困難,殘差網絡在兩者相較中自然勝出。
當多個殘差塊組合到一起便形成了殘差網絡ResNet。ResNet在2015年ILSVRC大賽上 top5單模型的錯誤率縮小到了3.57%,在其他數據集上也有著驚人的表現,結果當然就是收割各類獎項了。
以上幾個網絡除了早期的LeNet5之外都是在ILSVRC大賽的助力下不斷向前發展的,從這一點來看,ILSVRC大賽和ImageNet數據集對深度學習的發展具有重大意義。ILSVRC大賽于2017年正式停辦,但在開辦的6年來極大地促進了深度學習和計算機視覺的發展。ImageNet歷年top方案如表1所示。
表1 ILSVRC歷年冠軍解決方案
年份 | 網絡名稱 | Top5成績 | 論文 |
2012 | AlexNet | 16.42% | ImageNet Classification with Deep Convolutional Neural Networks |
2013 | ZFNet | 13.51% | Visualizing and understanding convolutional networks |
2014 | GoogLeNet | 6.67% | Going Deeper with Convolutions |
VGG | 6.8% | Very deep convolutional networks for large-scale image recognition | |
2015 | ResNet | 3.57% | Deep Residual Learning for Image Recognition |
2016 | ResNeXt | 3.03% | Aggregated Residual Transformations for Deep Neural Networks |
2017 | SENet | 2.25% | Squeeze-and-Excitation Networks |
由表1可以看到,2017年的冠軍方案SENet的錯誤率已經降至2.25%,這個精度已經超過人類視覺水平,I LSVRC大賽也在這一年停辦,但深度學習和計算機視覺的研究仍然繼續向前發展。2017年,劉壯等人在ResNet的基礎上提出了DenseNet網絡,作為2017年CVPR的最佳論文,作者通過大量使用跨層的密集連接,強化了卷積過程中特征重要性,另外也縮減了模型參數,進一步提高了深度卷積網絡的性能。DenseNet密集連接結構如圖10所示。
圖10 DenseNet結構
除了以上各種優秀的深度卷積網絡之外,近幾年各種網絡都在存儲和速度問題上不斷做出改進和創新。近兩年提出的SqueezeNet、MobileNet、ShuffleNet、NASNet和Xception等深度網絡正是致力于讓CNN走出實驗室達到工業應用的目的而提出的網絡結構。作為本節的結尾,我們想重點提一下去年5月份谷歌大腦發布的號稱目前最好的CNN分類網絡的EfficientNet。
EfficientNet在吸取此前的各種網絡優化經驗的基礎上提出了更加泛化的解決方法。什么叫更加泛化的方法呢?作者認為,我們之前關于網絡性能優化要么是從網絡深度、要么是從網絡寬度(通道數)、要么是從輸入圖像的分辨率單獨來進行模型縮放調優的。但實際上網絡性能在這三個維度上并不是相互獨立的。EfficientNet的核心在于提出了一種混合的模型縮放方法(Compound Model Scaling)算法來綜合優化網絡深度、寬度和分辨率,通過這種思想設計出來的網絡能夠在達到當前最優精度的同時,大大減少參數數量和提高計算速度。Compound Model Scaling的設計思想如圖11所示。
圖11 混合模型擴展
作為谷歌這樣超級巨頭,自然有大量的數據資源和計算資源來做出這樣更加泛化的研究。對于普通人而言,很難有這樣的算力來進行成百上千次的大規模調參。但EfficientNet也提高了我們普通人做深度學習的baseline,站在巨人的肩膀上,一直都是件值得興奮的事情。
參考文獻:
LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.
Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.
Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 1-9.
He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
Huang G, Liu Z, Van Der Maaten L, et al. Densely connected convolutional networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4700-4708.
Tan M, Le Q V. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[J]. arXiv preprint arXiv:1905.11946, 2019.
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯總結
以上是生活随笔為你收集整理的【深度学习】CNN图像分类:从LeNet5到EfficientNet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】全方位解读 | Faceboo
- 下一篇: 【深度学习】利用深度学习进行时间序列预测