布申申,田懷文
(西南交通大學(xué)可視化研究所,四川 成都 610031)
帶鋼在生產(chǎn)過程中,因受制造工藝、環(huán)境等因素的影響,表面常出現(xiàn)劃痕、裂紋等生產(chǎn)缺陷,不僅影響產(chǎn)品外觀,還會影響產(chǎn)品性能,造成安全隱患和經(jīng)濟(jì)損失。傳統(tǒng)人工目視抽檢,依據(jù)先驗知識估算帶鋼的綜合質(zhì)量,存在效率低、易受身體疲勞等因素的影響,不能滿足現(xiàn)代化工業(yè)生產(chǎn)的需求。
國內(nèi)外相繼提出脈沖渦流[1]、機(jī)器學(xué)習(xí)等多種檢測技術(shù)用于帶鋼表面缺陷檢測。
脈沖渦流檢測技術(shù)由于其信號處理困難、設(shè)備龐大等問題,難以推廣應(yīng)用;普通機(jī)器學(xué)習(xí)方法采用手工提取HOG[2]、SIFT[3]等低層特征,再用文獻(xiàn)[4]分類器對特征進(jìn)行分類,存在特征提取時間長、泛化能力低、檢測精度低、速度慢等缺陷,無法滿足實時檢測要求。
隨著計算機(jī)GPU計算能力的快速發(fā)展,深度學(xué)習(xí)的方法為解決帶鋼表面缺陷檢測問題提供了新思路,文獻(xiàn)[5]提出了一種缺陷檢測CNN算法,解決了特征泛化性低問題,但該算法的輸入圖像為單通道,各層特征圖尺寸過小,特征損失嚴(yán)重,檢測精度低,文獻(xiàn)[6]提出的半監(jiān)督帶鋼表面缺陷分類方法,一定程度上解決了標(biāo)簽問題,但訓(xùn)練集和測試集中缺乏正樣本,難以應(yīng)用于實際生產(chǎn)線的實時檢測,以上深度學(xué)習(xí)方法網(wǎng)絡(luò)結(jié)構(gòu)均采用普通Plain networks[7],網(wǎng)絡(luò)的特征圖利用不充分,網(wǎng)絡(luò)深度增加時易產(chǎn)生梯度消失、梯度爆炸等問題,造成網(wǎng)絡(luò)難以訓(xùn)練或精度不高。
針對以上存在問題,基于卷積神經(jīng)網(wǎng)絡(luò),采用DenseNet[8]網(wǎng)絡(luò)的密集連接算法,解決梯度消失和梯度爆炸的問題,采用堆疊式空洞卷積[9]擴(kuò)大卷積核感受野,采用深度可分離卷積[10],減少網(wǎng)絡(luò)參數(shù)量和計算量,提出一種用于帶鋼表面缺陷檢測的輕量化深度神經(jīng)網(wǎng)絡(luò)模型Ds-DenseNet算法。
在訓(xùn)練VGG-Net[11]這樣的深層卷積神經(jīng)網(wǎng)絡(luò)時,常出現(xiàn)梯度消失、梯度爆炸等問題,造成網(wǎng)絡(luò)難以訓(xùn)練,GoogLeNet[12]和ResNet[13]的Inception模塊和殘差模塊有效緩解了梯度問題,但這些網(wǎng)絡(luò)的每一層僅學(xué)習(xí)該層的前一層或兩層特征,對淺層特征圖利用率低,網(wǎng)絡(luò)學(xué)習(xí)性能不高。CVPR2017年提出的DenseNet其密集連接思想可以有效解決此問題。
DenseNet主要由其核心結(jié)構(gòu)Dense Block和Transition layers結(jié)構(gòu)交替連接而成,在Dense Block結(jié)構(gòu)中,任意一層的輸入是前面所有網(wǎng)絡(luò)層特征圖的并集,該層的特征圖也會作為后面各層的輸入,因此,Dense Block 加強(qiáng)了各層特征圖的利用率,不僅可以有效解決梯度消失問題,還可以大大削減網(wǎng)絡(luò)參數(shù)量。Dense Block的連接模式可以表示為:

式中:Xl—Dense Block 第l層輸出;[X0,X1…Xl-1]—將特征圖從X0到Xl-1進(jìn)行拼接;Hl(·)—對拼接后的特征圖依次進(jìn)行BN、ReLU、1×1Conv、BN、ReLU、3×3Conv 操作。Transition layers結(jié)構(gòu)用于降維,由BN、1×1Conv、2×2AveragePooling 操作依次連接構(gòu)成。
淺層信息特征圖像素的感受野對網(wǎng)絡(luò)的性能影響很大,因此DenseNet網(wǎng)絡(luò)的首層采用(7×7)大卷積核,但大卷積核參數(shù)量較大,因此本算法提取淺層網(wǎng)絡(luò)特征時采用空洞卷積,在參數(shù)量較少的情況下,獲得較大感受野,普通卷積和空洞卷積結(jié)構(gòu)對比,如圖1所示。

圖1 普通卷積和空洞卷積Fig.1 Ordinary Convolution and Dilated Convolution
空洞卷積采用在卷積核權(quán)值間插入空洞(補(bǔ)零)的方法,增大卷積核感受野,兩個權(quán)值間的空洞個數(shù)加1叫作空洞系數(shù)(Dilation rate),若f—原卷積核尺寸,dr—空洞系數(shù),則其卷積核的有效大小Fdr的計算公式為:

如果步長為stride,卷積核尺寸為Ksize,則卷積神經(jīng)網(wǎng)絡(luò)第n層特征圖每個像素的感受野RFn計的算公式[14]為:

由式(3)可知,卷積核多次堆疊可有效增大感受野,但多次堆疊Dilation Rate相同或非互質(zhì)的空洞卷積,易產(chǎn)生部分像素未覆蓋,造成Gridding Effect問題,因此本算法依次選擇空洞系數(shù)分別為5、2、1,權(quán)重參數(shù)為(3×3)的空洞卷積進(jìn)行堆疊,堆疊卷積效果,如圖2所示。

圖2 堆疊式空洞卷積Fig.2 Stacked Dilated Convolutions
為驗證本算法中堆疊式空洞卷積的優(yōu)越性,對其感受野和參數(shù)量進(jìn)行計算,由式(2)可知,空洞系數(shù)為5、2、1的(3×3)空洞卷積核有效大小分別為:(11×11)、(5×5)、(3×3),由公式(3)可知,此堆疊式空洞卷積最終輸出的特征圖感受野為(17×17),參數(shù)量為(3×3×3),相比DenseNet的(7×7)卷積核,堆疊式空洞卷積不僅感受野大大增加,參數(shù)量也有所減少。
DenseNet 雖采用Dense Block、Transition layers 結(jié)構(gòu)加強(qiáng)了各層特征圖的利用率,但其卷積操作仍采用傳統(tǒng)卷積,計算量和參數(shù)量十分龐大,本算法進(jìn)一步采用深度可分離卷積對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化,其結(jié)構(gòu)示意,如圖3所示。

圖3 深度可分離卷積結(jié)構(gòu)Fig.3 Depthwise Separable Convolution
深度可分離卷積的結(jié)構(gòu)可分為Depthwise和Pointwise,Depthwise指采用多個二維卷積組對輸入特征圖各通道分別進(jìn)行卷積,其輸出通道數(shù)與輸入通道相等,采用(1×1)卷積核的Pointwise用于對Depthwise的輸出進(jìn)行維度變換處理。若輸入特征圖大小為(Hi×Hi×M),卷積核尺寸為(F×F),則傳統(tǒng)卷積與深度可分離卷積的參數(shù)量,如式(4)和式(5)所示。計算量,如式(6)和式(7)所示,深度可分離卷積和普通卷積的計算量之比,如式(8)所示。

若Dense Block的卷積核大小為(3×3),輸入通道64,輸出通道16,分別由式(4)和式(5)計算可知,參數(shù)量分別為9232 和1680,普通卷積參數(shù)量是深度可分離卷積的5.4倍,計算量之比由式(6)可知,普通卷積計算量是深度可分離卷積的9倍,所以應(yīng)用深度可分離卷積優(yōu)化DenseNet網(wǎng)絡(luò)的密集連接算法,可大大降低其參數(shù)量和計算量。
結(jié)合以上優(yōu)化算法,提出參數(shù)量更少,計算量更小,空間復(fù)雜度更低的Ds-DenseNet模型,具體的結(jié)構(gòu),如圖4所示。

圖4 Ds-DenseNet網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Structure of Ds-DenseNet
本算法整體可劃分為Entry、Middle、Dense、Exit 四個模塊,Entry模塊由兩個Conv-pool、三個空洞率為5、2、1的空洞卷積層和一個3×3最大值池化層堆疊而成,Conv-pool用于提取細(xì)粒度特征和降維處理減小網(wǎng)絡(luò)計算量,堆疊式空洞卷積提取大特征,Middle 模塊由兩個Sep-DB-Sep-TL 結(jié)構(gòu)循環(huán)構(gòu)成,其中,每個Sep-DB有6個循環(huán)concat結(jié)構(gòu),Dense模塊由1個Sep-DB構(gòu)成,有12 個循環(huán)concat 結(jié)構(gòu),Exit 模塊包含兩部分,全局平均池化(GAP)[15]層和分類層,最后網(wǎng)絡(luò)輸出6維向量,經(jīng)過Sofmax激活進(jìn)行分類輸出。
Sep-DB 結(jié)構(gòu)的具體構(gòu)成,如圖5(a)所示。在DenseNet 的Dense Block結(jié)構(gòu)基礎(chǔ)上,采用普通卷積和深度可分離卷積優(yōu)化,并在Dense Block的Depthwise和Pointwise卷積后依次添加Dropout-BN-ReLU處理。

圖5 Sep-DB和Sep-TL結(jié)構(gòu)Fig.5 Sep-DB and Sep-TL Structure
Sep-TL 具體結(jié)構(gòu),如圖5(b)所示。該結(jié)構(gòu)在DenseNet 的Transition Layers 基 礎(chǔ) 上,將Transition Layers 結(jié) 構(gòu) 中BN-1×1Conv-2×2AveragePooling 的1×1Conv卷積結(jié)構(gòu)采用深度可分離卷積優(yōu)化,并對Depthwise的輸出數(shù)據(jù)進(jìn)行Dropout-BN-ReLU處理,對Pointwise卷積后的數(shù)據(jù)進(jìn)行BN-ReLU處理。
分別采用‘mdr’表示空洞率為m的空洞卷積,‘nConv’表示BN-ReLU-卷積-Dropout組合,其中n表示卷積核的個數(shù),采用‘[]×d’表示Sep-DB 中迭代concat的次數(shù)。則Ds-DenseNet 的各層網(wǎng)絡(luò)具體參數(shù),如表1所示。

表1 Ds-DenseNet網(wǎng)絡(luò)參數(shù)Tab.1 Parameters of Ds-DenseNet
采用NEU表面缺陷數(shù)據(jù)集[16]中的5種帶鋼表面缺陷圖片作為缺陷樣本,每種缺陷圖片各300張,分別為裂紋(Cr)、表面夾雜(In)、斑塊(Pa)、磨花(Rs)和劃痕(Sc),NEU 數(shù)據(jù)集缺少正樣本,通過實驗獲取300張合格帶鋼(Qs)圖片用作正樣本,加入NEU數(shù)據(jù)集作為基礎(chǔ)數(shù)據(jù)集。
帶鋼正常樣本及五種表面缺陷的樣本圖片,如圖6所示。每張圖片分辨率為200×200,由圖可知對帶鋼表面進(jìn)行缺陷分類具有以下難點:

圖6 基礎(chǔ)數(shù)據(jù)樣本Fig.6 Basic Data Sample
(1)類內(nèi)差異:同類缺陷存在明顯類內(nèi)差異,比如斑塊大小、劃痕方向、圖像亮度、飽和度等。
(2)類間相似:異類缺陷存在類間相似,比如裂紋和磨花表面,夾雜和劃痕表面等。
Ds-DenseNet的訓(xùn)練及工作過程,如圖7所示。分為數(shù)據(jù)采集,數(shù)據(jù)增強(qiáng),數(shù)據(jù)標(biāo)準(zhǔn)化處理,網(wǎng)絡(luò)訓(xùn)練,網(wǎng)絡(luò)測試,缺陷檢測幾個部分:

圖7 算法訓(xùn)練及工作流程Fig.7 Algorithm Training and Working Process
(1)通過實驗采集正樣本,裁剪成相應(yīng)尺寸后加入NEU數(shù)據(jù)集作為基礎(chǔ)數(shù)據(jù)集。
(2)將每種樣本圖片隨機(jī)選取220張用作基礎(chǔ)訓(xùn)練集,通過90°、180°、270°旋轉(zhuǎn)變換進(jìn)行數(shù)據(jù)增強(qiáng)操作,剩余80張樣本圖片用作測試集,然后分別轉(zhuǎn)換為TFrecord 文件,制成AUG-NEU 數(shù)據(jù)集。
(3)樣本圖片輸入網(wǎng)絡(luò)訓(xùn)練之前,對各通道的像素值進(jìn)行標(biāo)準(zhǔn)化處理:

式中:Xstd—標(biāo)準(zhǔn)化后的圖像矩陣;X—原圖像RGB三通道像素矩陣;μ—像素均值;σ—圖像像素的標(biāo)準(zhǔn)差;N—像素個數(shù)。
(4)學(xué)習(xí)率采用指數(shù)衰減法進(jìn)行動態(tài)更新:

式中:λ0—初始學(xué)習(xí)率;n—迭代次數(shù);ε—衰減系數(shù);λn—第n次迭代的學(xué)習(xí)率;θ—衰減步長。
(5)為預(yù)防網(wǎng)絡(luò)過擬合,需對可訓(xùn)練參數(shù)進(jìn)行Dropout處理,如圖8所示。其主要思想是稀疏網(wǎng)絡(luò),每一輪訓(xùn)練時隨機(jī)設(shè)定一部分神經(jīng)元節(jié)點不參與訓(xùn)練,減小網(wǎng)絡(luò)訓(xùn)練參數(shù)對訓(xùn)練集的過度依賴,增強(qiáng)網(wǎng)絡(luò)泛化能力。

圖8 Dropout結(jié)構(gòu)Fig.8 Dropout Structure
(6)采用交叉熵?fù)p失函數(shù)計算分類損失,選用Adam 優(yōu)化器迭代優(yōu)化。損失函數(shù)表達(dá)式如下:

式中:y(i)—第i種類別期望的概率—第i種類別預(yù)測的概率;Loss—損失函數(shù)。
為了準(zhǔn)確顯示對比實驗結(jié)果,本算法所有對比實驗均在同一臺計算機(jī)上進(jìn)行訓(xùn)練與測試,CPU采用Intel Core i7 8700,GPU采用RTX2080,運行內(nèi)存為DDR4 3200MHz 32GB,Ubuntu16.04 操作系統(tǒng),使用Python、OpenCV進(jìn)行數(shù)據(jù)處理,深度學(xué)習(xí)框架采用Tensorflow。
為驗證Ds-DenseNet算法網(wǎng)絡(luò)性能的優(yōu)越性,將本算法與主流分類算法GoogLeNet、ResNet、DenseNet和現(xiàn)有帶鋼表面缺陷檢測算法文獻(xiàn)[5-6]進(jìn)行對比實驗,六組實驗均在AUG-NEU數(shù)據(jù)集上進(jìn)行訓(xùn)練和測試,超參數(shù)設(shè)置及軟硬件環(huán)境均相同。初始學(xué)習(xí)率設(shè)置為0.001,學(xué)習(xí)率衰減步長為500,學(xué)習(xí)率衰減周期為50,Ds-DenseNet的Dropout系數(shù)設(shè)置為0.4,mini batch設(shè)置為32,165個mini batch 為一個eopch,訓(xùn)練迭代50 個eopch。六種網(wǎng)絡(luò)在AUG-NEU的測試集上精度曲線對比結(jié)果,如圖9所示。

圖9 各算法測試精度對比曲線Fig.9 Test Accuracy Curve of Each Algorithm
由圖可知,六種網(wǎng)絡(luò)對于AUG-NEU數(shù)據(jù)集的訓(xùn)練精度均在8個eopch之后趨于穩(wěn)定,Ds-DenseNet算法識別精度最高且最穩(wěn)定,DenseNet次之,然后分別是ResNet、GoogLeNet、文獻(xiàn)[6]、文獻(xiàn)[5]算法。
將Ds-DenseNet算法與其他幾種算法的網(wǎng)絡(luò)性能進(jìn)行對比分析,綜合參數(shù)量、計算量、識別速度和識別精度4方面因素,對比結(jié)果,如表2所示。6種算法中Ds-DenseNet 算法綜合性能指標(biāo)最強(qiáng),識別精度最高,達(dá)到99.38%,參數(shù)量最小,分別占DenseNet121、ResNet50、GoogLeNet、文獻(xiàn)[6-5]參數(shù)量的1.7%、0.5%、1.9%、1.1%、30%,識別速度達(dá)到1.3ms/frame,是DenseNet121 的2.3倍,ResNet50的2倍,完全可以滿足帶鋼表面缺陷生產(chǎn)線實時檢測的需求,相對于文獻(xiàn)[6-5],本算法計算量雖有所增加,但識別精度大大提升。

表2 各網(wǎng)絡(luò)性能參數(shù)對比Tab.2 Comparison of Network Performance Parameters
文獻(xiàn)[5]和文獻(xiàn)[6]算法分類精度較低,不做詳細(xì)精度對比,其它4種算法對帶鋼表面缺陷檢測的具體分類精度對比結(jié)果,如表3所示。Ds-DenseNet算法在AUG-NEU數(shù)據(jù)集上僅對Cr和Rs缺陷識別有誤,其精度分別為98.75%和97.5%,通過計算可知,Ds-DenseNet算法在AUG-NEU 測試集480張圖片中,僅有3張樣本識別錯誤,1張Cr樣本,2張Rs樣本。

表3 各算法具體分類精度對比Tab.3 The Classification Precision of Each Algorithm
針對現(xiàn)有帶鋼表面缺陷檢測算法識別精度低、特征泛化性不強(qiáng)、算法參數(shù)多、計算量大等缺陷,基于卷積神經(jīng)網(wǎng)絡(luò),提出一種用于帶鋼表面缺陷檢測的深度神經(jīng)網(wǎng)絡(luò)模型Ds-DenseNet算法。采用密集連接方式,解決深層神經(jīng)網(wǎng)絡(luò)易發(fā)生梯度消失、梯度爆炸而難以訓(xùn)練的問題,采用堆疊式空洞卷積增大卷積核感受野,同時提取大尺寸特征和細(xì)粒度特征,采用深度可分離卷積,解決模型參數(shù)量多,計算量大的問題。綜合考慮識別精度、參數(shù)量、計算量、檢測速度4 個方面,Ds-DenseNet 算法的識別精度高達(dá)99.38%,參數(shù)量為117958,僅占DenseNet121、ResNet50參數(shù)量的1.7%、0.5%,識別速度高達(dá)1.3ms/frame,分別是DenseNet121、ResNet50識別速度的2.3倍和2倍,完全可以滿足帶鋼生產(chǎn)線實時性檢測的需求。