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