劉之瑜,徐精誠,羅長銀,王豪石,張淑芬
(1. 華北理工大學 理學院,河北 唐山 063210;2. 河北省數據科學與應用重點實驗室,河北 唐山 063210;3. 唐山市數據科學重點實驗室,河北 唐山 063210)
隨著計算機網絡和數碼設備的發(fā)展,大量數據不斷地產生與傳播,數據的種類多種多樣,除了經過統(tǒng)計呈現出來的數值型數據,還存在大量的自然語言和視頻圖像等類型的數據。傳統(tǒng)的數據處理方法難以實現對大規(guī)模圖像數據集的分析,如ImageNet[1]數據集,包含有超過2萬種的圖像種類和超過 1 000萬的圖像樣本。處理數以萬計的圖像數據集,傳統(tǒng)的人工設計特征提取算子的方法耗時耗力精度不足,現在主流的方法用到卷積神經網絡[2](CNN),CNN 通過卷積層自動獲取圖像特征,經過層層處理后進行分類,精度很高,同時還用 Pytorch和Tensorflow框架來加速訓練。卷積神經網絡在語音識別,目標檢測[3]、語義分割[4]和圖像分類[5]等計算機視覺領域應用廣泛,其性能在圖像識別任務中表現出色。
圖像分類任務利用數字圖像中所學習到的圖像特征信息,對圖像的類別進行劃分,是計算機視覺和圖像處理領域的基礎問題[6]。處理圖像分類任務的方法有很多,主要分為傳統(tǒng)方法和深度學習方法。傳統(tǒng)方法(如SIFT[7],HOG[8]等圖像特征提取算法)通過人工設計特征提取算子對圖像提取多種特征作為標簽對圖像分類,人工設計的特征提取算子很難解決圖像低維特征到高維特征之間存在的語義差別,算子設計繁瑣應用成本高,準確率較低。深度學習中的卷積神經網絡在圖像識別領域應用較廣,網絡自動學習圖像由低維到高維的特征,準確率高。
CNN卷積層的基本參數有卷積核的大?。↘ernel Size)、步幅(Stride)、邊界擴充(Padding)、輸入與輸出通道(Channels)。卷積核的大小定義了卷積核的感受野[9](現通常為3×3),步幅定義了卷積核遍歷圖像矩陣時的步幅大小,邊界擴充定義了網絡層處理樣本邊界的方式,輸入通道決定了卷積核的通道數,輸出通道決定了卷積核的個數。
其中邊界擴充操作會在圖像四周填充數值0,邊界填充后卷積輸出的圖像矩陣不會減小,但會模糊邊緣信息,影響模型精度,本文對卷積層邊界擴充的內容進行研究,對填充值進行改進,保留更多圖像邊緣信息。
比較著名的卷積神經網絡模型有AlexNet[10]、ZFNet[11]、VGGNet[12]、GoogleNet[13]和 ResNet[14],這五種網絡均在 ImageNet數據集的圖像分類任務中取得了很高的精度。卷積神經網絡通常包含卷積層(Convolutions layer)、池化層(Pooling layer)和全連接層(Full connected layer)。在其網絡結構中,卷積層用于學習輸入圖像的特征,對圖像的特征進行特征提取和表示,通過卷積核卷積圖像矩陣生成特征圖(feature map),其后通常由非線性激活函數處理,激活函數使線性計算的網絡變成非線性的,增強網絡的分類能力,常用的激活函數有 sigmoid、tanh、ReLU函數;池化層用來降低卷積層輸出的維數,減少計算量增加訓練速度的同時改善過擬合的情況,常用的池化操作有平均池化和最大池化[15-17];全連接層類似于一個分類器把分布式特征映射到樣本標記空間。
在卷積層中卷積核按類型和大小分為很多種。卷積核的類型有擴張卷積[18](空洞卷積)-擴大感受野、轉置卷積(反卷積)-卷積操作的反向操作、可分離卷積[19]-通過拆分卷積核來提高計算效率、可形變卷積[20]-改變了卷積核固定的幾何結構、組卷積[21]等。大小如 1×1,3×3,5×5,7×7,11×11等等,卷積核越大感受野越大,能獲得更多更全面的特征信息,但卷積核越大卷積后輸出的矩陣尺寸會越小,導致網絡模型的深度減小,且涉及到的參數更多導致計算量急劇增加。假設圖像大小為N×N,卷積核的大小為C×C,步長為S,Padding的像素數為P=0,輸出圖片的大小n×n,則有:
其中,N為圖像的大小,C為卷積核大小,P為Padding操作填充數值,S為卷積核移動步長,n為經過Padding填充后輸出的圖像大小。
一個 7×7大小的圖像,經過大小為 5×5,步長為1,無Padding填充的卷積核卷積后輸出的特征圖矩陣大小為3×3,如圖1所示。
圖1 5×5 卷積核卷積圖示Fig.1 5×5 convolution diagram of convolution kernel
若改為經過大小為 3×3步長為 1無 Padding的卷積核卷積,則有第一次卷積后輸出的特征圖矩陣大小為 5×5,第二次卷積后輸出的圖像大小為3×3如圖2所示。
圖2 3×3 卷積核卷積圖示Fig.2 3×3 convolution diagram of convolution kernel
即 3×3大小的卷積核卷積兩次等同于一個5×5大小的卷積核卷積一次的效果,二者的輸出特征圖矩陣大小相同。同理3×3大小卷積核卷積三次等同于一個7×7大小的卷積核卷積一次,如此即可保持感受野大小不變。網絡層數的增加增強了網絡的非線性表達能力,提高識別精度。而使用更小的卷積核需要訓練的參數更少,兩個3×3卷積核的參數為 3×3×2個,一個 5×5的卷積核的參數為5×5個,同理三個3×3卷積核的參數為3×3×3個,一個7×7的卷積核的參數為 7×7個,參數量大大減少,放在大型的卷積神經網絡模型中起到了減少計算量加速訓練的效果,同時由于用兩次卷積代替了一次卷積增加了網絡深度,使網絡模型對圖像特征的表現更加豐富。所以選擇使用3×3卷積核更有優(yōu)勢。本文采用3×3卷積核進行網絡設計和實驗。
經上面計算沒有進行邊界填充的卷積操作會使圖像大小縮減,圖像四周邊緣像素只被卷積了一次,這造成了圖像邊緣信息的損失。要使卷積后圖像大小不變并更多的保留邊界信息,需要在圖像四周進行邊界填充(Padding),現在常用的有OpenCV中提供的兩種填充模式:same模式和valid模式。填充值時外圍虛線部分填充0,根據卷積核大小和步幅的不同會填充不同圈數的 0,如步長為1,則填充一圈,步長為2填充2圈。
設圖像大小為7×7,卷積核的大小為3×3,步長為1。填充模式有兩種:
valid mode表示當卷積核的邊角與矩陣的邊角重合時開始做卷積運算,此時和沒有 Padding的情況相同,輸出的矩陣會變小,如圖3所示,深色部分為卷積核。
圖3 valid 填充模式Fig.3 valid mode
same mode表示當卷積核的邊角與填充后矩陣的邊角重合時開始做卷積運算,同時保持與輸出的矩陣大小相同,此時在矩陣外圍填充一圈0,如圖4所示,虛線處為邊界填充值。
圖4 same填充模式Fig.4 same mode
在卷積層對圖像矩陣進行邊緣填充,采取same mode模式,在矩陣外圍填充一圈數值0,卷積核卷積填充值時結果為 0,如圖 4所示,這保證了圖像邊界值可以被重復卷積,但也導致卷積后邊緣的信息有損失,在圖像邊界處可能會出現明顯的不連貫的現象[22]。為了更好的保留圖像邊界的特征信息,將 Padding填充值權重化,將邊界填充的數值0替換為邊界值加權后的值,在圖像外圍填充一圈值,填充值由圖像邊界值經過加權計算取得,另外,四角填充的值取0。
在每個圖像矩陣邊界值外側分別填充該邊界值的加權計算值,如7×7大小圖像在外圍填充一圈值,變?yōu)?9×9大小,四角值取數值 0,如圖 5所示。將邊界填充值記為Y,權重記為X,邊界單個元素的值記為Vi,i的取值為Padding填充值的個數 0至 31,經過計算最終填充的值為Y=X×Vi× 5 0,其中的50為訓練過程中取分類精度較高時的值。
圖5 P adding權重化填充Fig.5 Padding weighting filling
整個計算流程為:
輸入:讀取圖片路徑,讀取待訓練圖片
Step.1 獲得訓練數據集,將圖片以數字矩陣形式讀取
Step.2 對圖片進行 Padding操作,填充邊界填充值Y
Step.3 將填充后的矩陣A進入第1個卷積層進行卷積
Step.4 經Relu1和BN1處理后進入第1個池化層,經池化得到矩陣B
Step.5 矩陣B經過Padding操作填充值后,進入第2個卷積層進行卷積
Step.6 經Relu2和BN2處理后進入第2個池化層,經池化得到矩陣C
Step.7 矩陣C經過Padding操作填充值后,進入第3個卷積層進行卷積,得到矩陣D
Step.8 經 Relu3和 BN3處理后進入全連接層,最終完成分類
輸出分類結果
數據集為Fashion-MNIST數據集,數據集劃分為訓練集和測試集,訓練集有60 000張圖片測試集有10 000張圖片,每張圖片的大小為28×28。不同于MNIST手寫數據集,Fashion-MNIST數據集包含了 10個類別的服裝圖像,包括 T恤衫(t-shirt),牛仔褲(trouser),套衫(pullover),裙子(dress),外套(coat),涼鞋(sandal),襯衫(shirt),運動鞋(sneaker),包(bag),短靴(ankle boot)。部分舉例如圖6所示。
圖6 Fashion-M NIST圖片舉例Fig.6 Fashion-MNIST image example
本文使用卷積神經網絡,該網絡較為簡單,包含3個卷積層2個池化層和2個全連接層,其中卷積核大小為 3×3,池化層取最大池化。訓練時在卷積層后進行批標準化處理,加速網絡的收斂速度,在2個全連接層之間加Dropout層,防止模型過擬合。網絡模型圖如圖7所示。
圖7 CNN 模型圖Fig.7 CNN model diagram
實驗設備參數:
使用Intel(R) Core(TM) i5-8300H CPU @2.30 GHz CPU,OS:win10專業(yè)版1909 64位操作系統(tǒng),16 G運行內存,運行環(huán)境位Python3.7.6。
搭建卷積神經網絡并隨機初始化參數,將Fashion-MNIST數據集輸入網絡模型進行訓練,Padding修改前后的網絡分別對數據集進行訓練和測試并記錄數據,每個網絡訓練兩個epoch(周期),每個epoch分為2 000個批次進行訓練,訓練完成后兩個網絡的loss值下降緩慢訓練達到穩(wěn)定狀態(tài),網絡修改前的loss值由1.33129降低到0.39343,如圖8所示。
圖8 網絡修改前l(fā)oss值Fig.8 Loss value before network modification
修改后的loss值由1.227362降低到0.388945,修改后的網絡模型loss值更小,比修改前的網絡模型更穩(wěn)定,如圖9所示。
圖9 網絡修改后loss值Fig.9 Loss value after network modification
訓練完成后使用測試集進行測試,每個epoch結束后求取平均準確率,Padding修改前的網絡分類準確率為 85.7%,修改后的網絡分類準確率為87.22%,平均準確率增加了1.52%,如表1所示。對結果進行分析,說明對于 Padding的改動有效改善了圖像邊緣信息模糊的情況,提高了準確率。
表1 網絡測試準確率Tab.1 Accuracy of network test
在計算機視覺領域,卷積神經網絡多被用在處理圖像分類任務中并表現良好,在卷積層,圖像矩陣經過邊界填充操作進行矩陣的填充,以保持卷積后輸出矩陣的大小不變,進而保持訓練深度。本文對邊緣填充的方法和類型進行了討論,并對填充的內容進行了改進,將圖像邊緣元素經加權計算后填充至圖像外圈。經實驗證明該方法有效,更多的保留了圖像邊緣信息,經對比發(fā)現提升了圖像分類準確率1.52%。