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