官术网_书友最值得收藏!

3.2 卷積神經網絡

卷積神經網絡模型(Convolutional Neural Network,CNN)應用廣泛,是最重要的神經網絡模型之一。其常被用于圖像處理中的圖片分類和目標識別、跟蹤,最早的成熟CNN是Yann LeCun等作者于1998年在論文“Gradient-Based Learning Applied to Document Recognition”[20]中提出的LeNet-5。之后常用的卷積神經網絡模型包括Alex Krizhevsky等作者于2012年提出的AlexNet[21]、Matthew Zeiler和Rob Fergus于2013年提出的ZF Net[22]、Christian Szegedy等作者于2014年提出的GoogLeNet[23]、Karen Simonyan和Andrew Zisserman于2015年提出的VGG Net[24],它們在ImageNet[25]舉辦的圖片分類比賽中獲得了突出的成績。

3.2.1 卷積層和濾波器

在模式識別(Pattern Recognition)任務中有兩個主要模塊:特征提取模塊和分類器。分類的精度依賴于提取的特征是否反映了圖片的主要信息,例如,對于貓和狗的圖片分類,提取的特征應該反映出貓和狗的不同。特征提取模塊針對不同的分類任務反映了任務的特性,卷積神經網絡中的特征提取模塊是卷積層,卷積層中包含很多個濾波器(Filter),用來提取不同的圖片局部特征,不同的卷積核(Convolution Kernel)對應不同的濾波器,形成多個特征圖(Feature Map)。

卷積神經網絡需要對高維的圖片數據進行降維,提取圖片數據中的重要特征,進而對圖片進行分類。圖片中的像素點很多,相鄰或相近的像素點之間的相關性很大,常常屬于同一個物體。卷積層考慮了圖片中相鄰像素點所在局部的特征,用來提取圖像的局部特征。在卷積神經網絡模型處理圖片之前,需要對圖片像素點進行歸一化處理,類似實例歸一化方法,將圖片像素點的區間歸一化到0到1之間。濾波器是卷積神經網絡模型處理圖片的第一步,提取圖片的局部特征(Local Feature),形成特征圖。不同的濾波器提取的局部特征不同,對應的特征圖也不同。

圖3.4給出了卷積神經網絡模型中濾波器的示意圖。這是一個簡化的例子,圖中每個方格代表一個像素點,圖片是11像素×11像素的,即長和寬方向都是11個像素點,對應圖中無陰影區域。這里的濾波器是3像素×3像素的方塊,又稱為感知域(Receptive Field),對應圖中加粗黑線表示的3像素×3像素邊框。在每個加粗黑線邊框中,9個像素點進行加權平均,得到的值被記錄到右側特征圖的對應方格中。加粗黑線框移動的間距是步長,相鄰加粗黑線框之間間隔2個方格,此處的步長(Stride)是2。在圖片邊緣的像素點取加粗黑線框時,為了補足9個像素點,需要在原來11像素×11像素的圖片外側包裹一層寬度等于步長的框,對應圖中的陰影區域,陰影區域中像素點的值常常都設為0,用0來填充外側陰影區域(Zero-Padding)。加粗黑線方框代表濾波器,形成了對原本圖片中像素點的移動平均(Moving Average),計算出右側的特征圖。

圖3.4還給出了卷積神經網絡模型中的濾波器卷積核膨脹(Dilation)的例子,卷積核膨脹又稱為擴張卷積(Dilated Convolution)或者空洞卷積。這里的膨脹率(Dilation Rate)是2,卷積核是3像素×3像素的方塊,通過膨脹,變成了5像素×5像素的方塊。在圖片的像素點中,選取5像素×5像素的方塊,但是僅考慮其中3×3=9個格子中的值。如圖3.4所示,僅考慮5×5方塊中3×3格點上的值:1、2、3、4、5、6、7、8、9,其余格子的值都用0填充,然后進行加權平均,計算特征圖中相應位置的值。卷積核膨脹的作用是擴大感受野(Receptive Field),適應多變的輸入圖片的精度。對于精度很高的圖片,像素點很多很密集,處理這樣的圖片可以使用下采樣層降低圖片的精度、增加卷積神經網絡的層數等,但是這些都比較麻煩,使用膨脹的卷積核可以處理這樣的圖片。

img

圖3.4 卷積神經網絡模型中的濾波器和卷積核膨脹示意圖

圖3.5給出了圖3.4中濾波器參數的示意圖,這是一個簡化的例子。左側加粗黑線框代表3像素×3像素的濾波器,里面包括9個像素點。右側加粗黑線框代表濾波器中的權重參數,此處示意圖忽略了偏差參數。這里給出的簡化濾波器對9個像素點進行加權平均來計算提取的特征,加權平均后通過Sigmoid或者Tanh函數進行非線性變換,在卷積神經網絡中可以根據全局誤差函數(Global Loss Function)進行反向傳播來計算濾波器中的權重和偏差參數。

img

圖3.5 卷積神經網絡中的濾波器參數示意圖

根據任務需求不同,濾波器可以使用任何函數來對局部的像素點進行特征提取,相應的參數在卷積神經網絡模型的訓練過程中確定。例如,在對貓和狗的圖片進行分類時,貓和狗可以處于圖片中的任何位置,因此,所有濾波器中的權重參數都應該是一樣的,無論貓和狗的位置在哪里,提取出來的局部特征都反映了它們是否存在。如圖3.5所示,圖片中所有濾波器使用的都是這9個權重參數,這樣的設置有利于減小濾波器的權重參數,又不降低模型的表示力。在卷積神經網絡中可以使用多個不同的濾波器來提取不同的圖片局部特征,不同的濾波器使用不同的權重參數,多個濾波器得到的多個特征圖繼續進行后續的處理。

3.2.2 池化層和下采樣層

池化層是一種下采樣層,可對卷積層輸出的多個特征圖進行進一步降維,以提取圖片中有效的特征,對特征進行進一步的抽象。當輸入圖片的像素很高時,需要很多池化層對特征進行抽象;當輸入圖片的像素較低時,需要相對較少的池化層對特征進行抽象。在卷積神經網絡的設計中,卷積層后往往緊跟著池化層,這樣的卷積層和池化層的配對會被重復很多次,以對圖片中的特征進行抽象、提取和總結。

池化方式主要有兩種:最大值池化(Max-Pooling)和平均值池化(Mean-Pooling)。最大值池化計算特征圖的局部最大值,平均值池化計算特征圖的局部平均值。圖3.6給出了簡化的池化層示意圖。池化層對特征圖進行降維,在特征圖中取出移動但不重疊的3像素×3像素的方塊,降維成右側特征圖中的每個方格。此時的步長等于移動方塊的尺寸,于是方塊之間不重疊。在池化層的濾波器中,方塊之間往往是不重疊的,然而重疊也是可以的。最常用的是最大值池化,具有更好的魯棒性,在迭代和傳播過程中更穩定。

img

圖3.6 池化層示意圖

圖3.7給出了最大值池化和平均值池化的簡化示意圖。在池化局部方塊內,最大值池化計算移動加粗線方塊內所有元素的最大值,放入降維后的特征圖。平均值池化計算方塊內所有元素的平均值,放入降維后的特征圖。在降維過程中,保證獲取的特征與圖片中的位置無關。最大值反映了局部區域內最大的信號特征,而平均值反映了局部區域內平均的信號特征。類似地,還可以采用中位數池化等來對局部的特征進行總結和抽象。元學習常常用在神經網絡模型的自動設計中,在每個任務上根據任務的特性,對神經網絡模型的結構進行改造,使之智能地適應新任務,在新任務上找到最優的神經網絡模型。

img

圖3.7 最大值池化和平均值池化示意圖

在池化層中,移動的局部方塊也可以重疊。在AlexNet的論文[21]中指出,使用重疊的局部方塊進行特征圖的池化,有利于提高ImageNet圖片分類精度。然而在一般情況下,為了提高對圖片中特征抽象和總結的效率,在池化層的濾波器中移動的方塊之間不重疊,且濾波器的尺寸較大,在實際應用中這樣的方式有利于加快神經網絡的訓練,然而不利于神經網絡精度的提高。一般認為,卷積神經網絡的層數越多、濾波器尺寸越大、濾波器方塊移動的步長越小,越有利于提高神經網絡模型的精度,但是這樣做會增加模型訓練的時間。

下采樣層(Sub-Sampling Layer或者Downsampling Layer)對卷積層輸出的特征圖進行降維,提取圖像中的有效信息。下采樣層包括池化層,但是不僅限于池化操作。降維的方法有許多,都可以考慮在下采樣層中使用,下采樣層是從像素點到特征之間的映射。在下采樣層中,對輸入特征圖取出移動的局部方塊,加入權重和偏差參數計算加權平均,對加權平均后的結果進行非線性變換。例如,Sigmoid或者Tanh函數的變換,類似于卷積層的操作,只是此處移動的局部方塊是不重疊的,而卷積層中的方塊之間有重疊,而且在一般情況下,下采樣層中不包含權重或者偏差這種可訓練的參數。然而事無定則,在下采樣層中也可以包含可訓練的參數,濾波器中移動的方塊也可以有重疊,一切都要視具體情況而定,是追求精度,還是追求時間效率,具體的計算設備也會影響精度和時間成本,選擇合適的解決實際問題的模型設計即可。

3.2.3 全連接層和上采樣層

全連接層采用普通神經網絡結構,所有神經元之間都有連接。在卷積神經網絡中,在處理圖片分類問題時,全連接層是隱藏層到輸出層之間的全連接,意味著隱藏層中的所有神經元和輸出層中的所有神經元全部交叉連接。在分類問題中,輸出層的神經元個數等于類別數目,隱藏層神經元的輸出作為輸出層神經元的輸入,全連接層將隱藏層給出的圖片抽象特征映射成圖片分類結果。

上采樣層(Upsampling Layer)或者圖像插值(Interpolation)通過在圖片的像素點之間進行插值來放大圖像,是從特征到像素點的映射,常用的上采樣層方法包括反卷積(Deconvolution)和圖像插值。上采樣層常常用于需要在像素點上進行預測的任務,例如,邊框(Bounding Box)問題。一種解決方案是通過對每個像素點進行分類來找到目標物體的輪廓。帶有全連接層的CNN用于圖片分類,將用于圖片分類的CNN中的全連接層更換成上采樣層,將隱藏層輸出的圖片抽象特征映射到圖片的每個像素點上,進而對圖片中的每個像素點進行分類預測。判斷每個像素點是否屬于目標物體,從而估計目標邊框,這樣就將用于圖片分類的CNN轉換成了基于像素點級預測的邊框估計CNN模型。

圖3.8給出了卷積神經網絡示意圖。最左端是輸入層,最右端是輸出層,中間層包括卷積層和池化層,用來進行特征提取,對高維輸入進行降維。根據需要,可以設置很多層的卷積層和池化層,還可以對學習率、激活函數、卷積核大小、步長等超參數進行優化,以實現更好的模型精度。這之后就是全連接層或者上采樣層,全連接層將提取的特征和輸出層連接起來,輸出數據所屬的類別;上采樣層將提取的特征映射到像素點上,輸出層是像素點級的預測值。卷積神經網絡的結構形式靈活,可拓展性強,可以靈活組合基本結構,對超參數進行優化設置,獲取更好的精度,適應不同的任務。

img

圖3.8 卷積神經網絡CNN示意圖

3.2.4 經典卷積神經網絡

ImageNet[25](詳情參見鏈接9)是著名學者李飛飛等提出的著名圖片數據集,在論文“ImageNet: A large-scale hierarchical image database”中給出了詳細的講解。ImageNet中的圖片來自互聯網上搜索名詞后下載的所有相關圖片,圖片標注來自人工標注。ImageNet在2010—2017年每年舉辦圖片分類比賽ILSVRC[26],比賽數據集的訓練集中有一百多萬張高清圖片,需要將這些圖片分類到一千個不同的類別。用CNN對這些圖片分類取得了不錯的效果,其中具有代表性突出貢獻的CNN包括AlexNet[21]、ZFNet[22]、GoogLeNet[23](Inception模塊)和VGG Net[24]。在元學習和遷移學習中,常將在ImageNet上預訓練過的CNN模型進行微調,再用于新的圖片分類問題中,可獲得不錯的分類精度。

AlexNet[21]是一種重要的CNN網絡,包含6000萬個參數、65萬個神經元、5個卷積層、最大值池化層的組合、3個全連接層、1個Softmax輸出層、分類為1000個不同類別。AlexNet結合了隨機失活方法緩解過擬合問題。Alex Krizhevsky等人在論文“ImageNet Classification with Deep Convolutional Neural Networks”[21]中提到,他們提出的AlexNet在兩個內存為3GB的GTX580 GPU上并行計算,運行5~6天獲得了滿意的訓練結果,雖然計算量很大,但是AlexNet提升了圖片的分類精度。在人工智能領域,人們往往追求精度的提升,而忽視計算量的投入。因為計算能力的提升非常迅速,可以預見,計算量大在未來并不是困難,人們愿意付出計算量來換取精度提升,而方法的提出往往是面向未來的,所以計算量往往不是人工智能領域人們考慮的重要因素。

ZFNet[22]也是一種重要的CNN網絡,其命名與AlexNet類似,取自模型作者的姓名。ZFNet的結構和AlexNet相似,作者采用反卷積層設計了在卷積層和池化層中提取特征的逐層可視化方法。在反卷積層中將提取的特征映射到圖片的像素點上,獲得將提取的特征可視化的圖片,看到特征反映在圖片上呈現的內容,進而直觀了解特征的平移不變性。通過對特征的逐層可視化,有利于改進卷積神經網絡的結構,獲得更好的精度。

GoogLeNet[23]是最重要的CNN網絡模型之一,其是一個22層的卷積神經網絡。通過反復疊加使用Inception模塊增加了卷積神經網絡的深度和寬度,在ImageNet圖片分類比賽ILSVRC14中獲得了最佳精度。AlexNet使用的參數數量是GoogLeNet的10多倍,但是GoogLeNet的層數比AlexNet多,而且GoogLeNet的精度比AlexNet更好。論文列表中的論文[23]中給出了兩種形式的Inception模塊,一種是將前一層的輸出分別輸入到1×1卷積層、3×3卷積層、5×5卷積層、3×3最大值池化層,然后將處理后的特征拼接起來,將不同尺寸的特征聚合考慮;另一種見圖3.9,將前一層的輸出分別輸入到1×1卷積層、1×1卷積層+3×3卷積層、1×1卷積層+5×5卷積層、3×3最大值池化層+1×1卷積層,其中的1×1卷積層達到了對特征進行降維的效果,然后將處理后的特征拼接起來,將不同尺寸的特征聚合考慮。GoogLeNet將Inception模塊疊合起來組成卷積神經網絡模型,增加了深度和寬度,將不同Inception模塊組成的CNN模型集成起來,獲得了更好的模型表現。

img

圖3.9 Inception模塊示意圖

VGG Net[24]也是最重要的CNN網絡模型之一,使用非常小的3×3卷積核,并且加深了卷積神經網絡模型的層數,取得了很好的模型表現。卷積層中的步長是1個像素點,最大值池化層中使用2×2的像素框,步長是2個像素點,激活函數使用ReLU函數,VGG網絡層數在11~19這個數量級,網絡寬度在第一層是64,最大到512,這樣的設計提升了CNN的精度。

這些都是經典的深度卷積神經網絡模型,是非常棒的圖片特征提取器。在ImageNet上預訓練過的這些經典深度卷積神經網絡模型可以下載,在遷移學習和元學習中,可以將下載的預訓練模型中的輸出層參數進行更新,應用到新的圖片分類任務中。

主站蜘蛛池模板: 博兴县| 大足县| 清徐县| 金阳县| 庆元县| 托里县| 呼玛县| 张家港市| 云霄县| 林甸县| 日照市| 保亭| 定南县| 普格县| 师宗县| 博白县| 金昌市| 许昌县| 固阳县| 独山县| 班玛县| 木兰县| 康马县| 乌兰浩特市| 民乐县| 林周县| 辰溪县| 龙游县| 乡城县| 永德县| 寻甸| 土默特左旗| 广州市| 奉节县| 莱州市| 余江县| 九台市| 阿尔山市| 香格里拉县| 永福县| 永新县|