1. 程式人生 > >深度學習在計算機視覺四大任務中的應用

深度學習在計算機視覺四大任務中的應用

(2) 影象分類經典網路結構

基本架構 用conv代表卷積層、bn代表批量歸一層、pool代表匯合層。最常見的網路結構順序是conv -> bn -> relu -> pool,其中卷積層用於提取特徵、匯合層用於減少空間大小。隨著網路深度的進行,影象的空間大小將越來越小,而通道數會越來越大。

針對你的任務,如何設計網路? 當面對你的實際任務時,如果你的目標是解決該任務而不是發明新演算法,那麼不要試圖自己設計全新的網路結構,也不要試圖從零復現現有的網路結構。找已經公開的實現和預訓練模型進行微調。去掉最後一個全連線層和對應softmax,加上對應你任務的全連線層和softmax,再固定住前面的層,只訓練你加的部分。如果你的訓練資料比較多,那麼可以多微調幾層,甚至微調所有層。

  • LeNet-560k引數。網路基本架構為:conv1 (6) -> pool1 -> conv2 (16) -> pool2 -> fc3 (120) -> fc4 (84) -> fc5 (10) -> softmax。括號中的數字代表通道數,網路名稱中有5表示它有5層conv/fc層。當時,LeNet-5被成功用於ATM以對支票中的手寫數字進行識別。LeNet取名源自其作者姓LeCun。

  • AlexNet 60M引數,ILSVRC 2012的冠軍網路。網路基本架構為:conv1 (96) -> pool1 -> conv2 (256) -> pool2 -> conv3 (384) -> conv4 (384) -> conv5 (256) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。AlexNet有著和LeNet-5相似網路結構,但更深、有更多引數。conv1使用11×11的濾波器、步長為4使空間大小迅速減小(227×227 -> 55×55)。AlexNet的關鍵點是:(1). 使用了ReLU啟用函式

    ,使之有更好的梯度特性、訓練更快。(2). 使用了隨機失活(dropout)。(3). 大量使用資料擴充技術。AlexNet的意義在於它以高出第二名10%的效能取得了當年ILSVRC競賽的冠軍,這使人們意識到卷機神經網路的優勢。此外,AlexNet也使人們意識到可以利用GPU加速卷積神經網路訓練。AlexNet取名源自其作者名Alex。

  • VGG-16/VGG-19 138M引數,ILSVRC 2014的亞軍網路。VGG-16的基本架構為:conv1^2 (64) -> pool1 -> conv2^2 (128) -> pool2 -> conv3^3 (256) -> pool3 -> conv4^3 (512) -> pool4 -> conv5^3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。 ^3代表重複3次。VGG網路的關鍵點是:(1). 結構簡單

    ,只有3×3卷積和2×2匯合兩種配置,並且重複堆疊相同的模組組合。卷積層不改變空間大小,每經過一次匯合層,空間大小減半。(2). 引數量大,而且大部分的引數集中在全連線層中。網路名稱中有16表示它有16層conv/fc層。(3). 合適的網路初始化和使用批量歸一(batch normalization)層對訓練深層網路很重要。VGG-19結構類似於VGG-16,有略好於VGG-16的效能,但VGG-19需要消耗更大的資源,因此實際中VGG-16使用得更多。由於VGG-16網路結構十分簡單,並且很適合遷移學習,因此至今VGG-16仍在廣泛使用。VGG-16和VGG-19取名源自作者所處研究組名(Visual Geometry Group)。

  • GoogLeNet 5M引數,ILSVRC 2014的冠軍網路。GoogLeNet試圖回答在設計網路時究竟應該選多大尺寸的卷積、或者應該選匯合層。其提出了Inception模組,同時用1×1、3×3、5×5卷積和3×3匯合,並保留所有結果。網路基本架構為:conv1 (64) -> pool1 -> conv2^2 (64, 192) -> pool2 -> inc3 (256, 480) -> pool3 -> inc4^5 (512, 512, 512, 528, 832) -> pool4 -> inc5^2 (832, 1024) -> pool5 -> fc (1000)。GoogLeNet的關鍵點是:(1). 多分支分別處理,並級聯結果。(2). 為了降低計算量,用了1×1卷積降維。GoogLeNet使用了全域性平均匯合替代全連線層,使網路引數大幅減少。GoogLeNet取名源自作者所處單位(Google),其中L大寫是為了向LeNet致敬,而Inception的名字來源於盜夢空間中的"we need to go deeper"梗。

  • Inception v3/v4 在GoogLeNet的基礎上進一步降低引數。其和GoogLeNet有相似的Inception模組,但將7×7和5×5卷積分解成若干等效3×3卷積,並在網路中後部分把3×3卷積分解為1×3和3×1卷積。這使得在相似的網路引數下網路可以部署到42層。此外,Inception v3使用了批量歸一層。Inception v3是GoogLeNet計算量的2.5倍,而錯誤率較後者下降了3%。Inception v4在Inception模組基礎上結合了residual模組(見下文),進一步降低了0.4%的錯誤率。

  • ResNet ILSVRC 2015的冠軍網路。ResNet旨在解決網路加深後訓練難度增大的現象。其提出了residual模組,包含兩個3×3卷積和一個短路連線(左圖)。短路連線可以有效緩解反向傳播時由於深度過深導致的梯度消失現象,這使得網路加深之後效能不會變差。短路連線是深度學習又一重要思想,除計算機視覺外,短路連線也被用到了機器翻譯、語音識別/合成領域。此外,具有短路連線的ResNet可以看作是許多不同深度而共享引數的網路的整合,網路數目隨層數指數增加。ResNet的關鍵點是:(1). 使用短路連線,使訓練深層網路更容易,並且重複堆疊相同的模組組合。(2). ResNet大量使用了批量歸一層(3). 對於很深的網路(超過50層),ResNet使用了更高效的瓶頸(bottleneck)結構。ResNet在ImageNet上取得了超過人的準確率

  • preResNet ResNet的改進。preResNet整了residual模組中各層的順序。相比經典residual模組(a),(b)將BN共享會更加影響資訊的短路傳播,使網路更難訓練、效能也更差;(c)直接將ReLU移到BN後會使該分支的輸出始終非負,使網路表示能力下降;(d)將ReLU提前解決了(e)的非負問題,但ReLU無法享受BN的效果;(e)將ReLU和BN都提前解決了(d)的問題。preResNet的短路連線(e)能更加直接的傳遞資訊,進而取得了比ResNet更好的效能。

  • ResNeXt ResNet的另一改進。傳統的方法通常是靠加深或加寬網路來提升效能,但計算開銷也會隨之增加。ResNeXt旨在不改變模型複雜度的情況下提升效能。受精簡而高效的Inception模組啟發,ResNeXt將ResNet中非短路那一分支變為多個分支。和Inception不同的是,每個分支的結構都相同。ResNeXt的關鍵點是:(1). 沿用ResNet的短路連線,並且重複堆疊相同的模組組合。(2). 多分支分別處理。(3). 使用1×1卷積降低計算量。其綜合了ResNet和Inception的優點。此外,ResNeXt巧妙地利用分組卷積進行實現。ResNeXt發現,增加分支數是比加深或加寬更有效地提升網路效能的方式。ResNeXt的命名旨在說明這是下一代(next)的ResNet。

  • 隨機深度 ResNet的改進。旨在緩解梯度消失和加速訓練。類似於隨機失活(dropout),其以一定概率隨機將residual模組失活。失活的模組直接由短路分支輸出,而不經過有引數的分支。在測試時,前饋經過全部模組。隨機深度說明residual模組是有資訊冗餘的。

  • DenseNet 其目的也是避免梯度消失。和residual模組不同,dense模組中任意兩層之間均有短路連線。也就是說,每一層的輸入通過級聯(concatenation)包含了之前所有層的結果,即包含由低到高所有層次的特徵。和之前方法不同的是,DenseNet中卷積層的濾波器數很少。DenseNet只用ResNet一半的引數即可達到ResNet的效能。實現方面,作者在大會報告指出,直接將輸出級聯會佔用很大GPU儲存。後來,通過共享儲存,可以在相同的GPU儲存資源下訓練更深的DenseNet。但由於有些中間結果需要重複計算,該實現會增加訓練時間。

內容實在有點多!我就自己看吧,連結接奉上,你們也自個兒看看吧~