楊彬,亞森江·木沙,張凱
(新疆大學機械工程學院,新疆 烏魯木齊 830047)
缺陷檢測是生產(chǎn)實際中不可缺少的一個程序。傳統(tǒng)的機器視覺在檢測物體缺陷時,必須要設(shè)定明確的規(guī)則去進行檢測。但是在實際生產(chǎn)中很難用這種方法去實現(xiàn)檢測要求。當今工業(yè)產(chǎn)品外形的多樣性,使得很多生產(chǎn)企業(yè)員工或技術(shù)人員很難用這些特殊規(guī)則去描述其產(chǎn)品外表的缺陷。雖然人們很容易去看懂一個缺陷,但是真正用程序化語言去描述它是非常困難的。深度學習技術(shù)是一種不需要人工設(shè)計規(guī)則的數(shù)據(jù)驅(qū)動方法。
通過構(gòu)建多層網(wǎng)絡(luò)來構(gòu)建基于視覺的缺陷檢測模型,用于評估產(chǎn)品外表上的缺陷。同時,利用合理的損失函數(shù)和優(yōu)化算法使模型自主學習隱含在圖像數(shù)據(jù)內(nèi)部的潛在關(guān)系,從而使模型具有更好的泛化能力,以至于自主預(yù)測出產(chǎn)品的缺陷。
基于深度學習的缺陷檢測大致可分為三大類。分別為基于分類的方法,基于檢測的方法及基于分割的方法等。文獻[1]使用分類的方法,用一種多層的CNN網(wǎng)絡(luò)對DAGM2007數(shù)據(jù)集中的六類缺陷樣本進行分類。文獻[2]基于GoogLeNet 網(wǎng)絡(luò)的CNN 對LCD屏進行異常檢測。文獻[3]使用GoogLeNet網(wǎng)絡(luò)遷移學習的方法進行熱軋帶鋼表面質(zhì)量檢測。雖然基于分類的方法具有檢測速度快等優(yōu)點,但無法能夠精確描述缺陷的具體信息。為了克服分類法的這種不足,許多研究者想到每次把樣本圖像分成多個區(qū)域,然后逐次選擇某個小區(qū)域并判斷在選定區(qū)域內(nèi)是否存在缺陷。利用深度學習分類網(wǎng)絡(luò)對樣本圖像的各個小區(qū)域進行分類訓練,然后利用滑動窗口對整張圖片進行預(yù)測,直到把缺陷區(qū)域分割出來文獻[4]利用這種方法對混凝土裂縫進行檢測。
但是這種方法同樣無法完成像素級的缺陷檢測,其檢測精度很難得到保證。目標檢測主要是找到圖像中感興趣的特征信息,并精確定位其位置。在缺陷檢測中,文獻[5]把Faster R?CNN用于土木建筑領(lǐng)域的混凝土、鋼裂紋等的損傷檢測。文獻[6]結(jié)合SSD、YOLO等方法構(gòu)建了一種從粗到細的級聯(lián)檢測網(wǎng)絡(luò),并應(yīng)用到高鐵線路緊固件缺陷檢測。
然而,目標檢測技術(shù)使用矩形框架來定位物體的缺陷,而缺陷的分布和表面形狀不規(guī)則。因此,這種方法也無法能夠描述缺陷的具體特征。有些學者為了提高檢測精度,將缺陷檢測任務(wù)作為一個語義分割任務(wù)來處理。其目的是對樣本圖像中的缺陷進行像素級的分類。
即,將缺陷區(qū)域和非缺陷區(qū)域分為兩類,并產(chǎn)生像素級的檢測結(jié)果,將會大大提高檢測精度。文獻[7]應(yīng)用FCN進行檢測混凝土裂縫,但是這種網(wǎng)絡(luò)架構(gòu)不適用于數(shù)據(jù)集較少的情況。然而在現(xiàn)實情況中產(chǎn)品缺陷的圖片是較少的,且比較難獲得的。因此,找到一種在訓練集較少的情況下能夠得到較高的檢測精度和效率是非常關(guān)鍵。
在缺陷檢測中許多產(chǎn)品表面是高紋理的,例如紡織品、大理石等,它們存在的高紋理對缺陷的識別帶來了更大的挑戰(zhàn)性,背景紋理和缺陷存在相似性,紋理和缺陷不容易區(qū)分。針對這種類型的缺陷,對不同高紋理背景下存在不同缺陷的數(shù)據(jù)集進行檢測,會得到高紋理下缺陷檢測更加通用的模型。
U?Net網(wǎng)絡(luò),如圖1所示。它是一種全卷積網(wǎng)絡(luò)結(jié)構(gòu),可以對任意大小的圖像進行快速精確分割,能夠在很少的訓練圖像前提下產(chǎn)生更精確的分割。該網(wǎng)絡(luò)首先由文獻[8]提出,并應(yīng)用于各種生物醫(yī)學圖像分割。在最近幾年由于U?Net優(yōu)異的性能也被用在其他領(lǐng)域的應(yīng)用中。例如,用它從遙感圖像中提取水體[9]、橋梁裂縫檢測[10]、石塊圖像分割[11]等。由于缺陷數(shù)據(jù)集往往有采集比較困難、數(shù)據(jù)量比較小以及圖片大小可能隨時變化等特點,檢測中采用基于U?Net的網(wǎng)絡(luò)很好彌補這些缺點。
圖1 原始的U?Net網(wǎng)絡(luò)模型Fig.1 Original U?Net Network Model
由于缺陷檢測更偏向于分析數(shù)字圖像中的紋理信息,缺陷的語義信息比較弱。因此,底層的特征信息對于缺陷檢測非常重要。然而在U?Net網(wǎng)絡(luò)中經(jīng)過大量卷積和池化后丟失掉諸多底層特征信息,這對于缺陷檢測是非常不利的。
主要對原始的U?Net網(wǎng)絡(luò)結(jié)構(gòu)進行三處優(yōu)化。在下采樣階段中,對每前一階段獲得的特征經(jīng)過下采樣融合到下一階段中,使其在采樣過程中能夠充分利用底層信息,防止過多紋理細節(jié)的丟失。在上采樣階段,將每一階段的特征進行轉(zhuǎn)置卷積到跟輸出層一樣的大小,使它們?nèi)诤系捷敵鰧又?。在下采樣的最后一層用空洞卷積來替代普通卷積,增加卷積核的感受野。
在缺陷檢測中,缺陷沒有具體的形狀,且語義信息較弱,在檢測中應(yīng)該更注重底層的紋理特征信息。在原始網(wǎng)絡(luò)模型的下采樣過程中,隨著深度的增加會丟掉許多有用的底層特征信息。在下采樣過程中采用特征融合策略可以有效保留更多有用的紋理信息,從而提高檢測精度。
以U?Net 作為基礎(chǔ)網(wǎng)絡(luò),對其網(wǎng)絡(luò)結(jié)構(gòu)中的上采樣階段stage1到stage4進行改進。在stage1到stage4中,每個階段的第一層和第二層為卷積層,第三層為最大池化層。將輸入特征圖和第一階段的中間層進行融合,在stage1到tage4中下一階段的中間層依次融合上一階段的最后一層。讓每一階段都能夠充分融合到上一階段的特征,讓底層特征盡可能保留更多的細節(jié)信息。在U?Net網(wǎng)絡(luò)結(jié)構(gòu)中上采樣都融合了對稱的下采樣的信息。即,在下采樣和上采樣過程中都進行了豐富的紋理特征信息。改進的網(wǎng)絡(luò),如圖2所示。
圖2 改進的U?Net網(wǎng)絡(luò)模型Fig.2 Improved U?Net Network Model
在缺陷檢測中缺陷大小是未知的,形狀也是不規(guī)則的。為了能夠?qū)θ毕葸M行精確的檢測,在上采樣階段采用多尺度融合的策略,將局部細節(jié)信息和整體輪廓信息結(jié)合,使其更好地適用于缺陷較大或較小時的檢測精度。
對U?Net網(wǎng)絡(luò)結(jié)構(gòu)中的上采樣階段stage6到stage9進行如下改進。在上采樣中每個階段的第一層為反置卷積層,第二層和第三層為卷積層。把stage6到stage8的最后一層進行轉(zhuǎn)置卷積,轉(zhuǎn)置卷積到與stage9 第一層同樣的大小,并把它們直接拼接到stage9的第一層。這樣在stage9中融合了多尺度特征,可以有效地提高檢測的精度。
通過計算在下采樣階段最高層的感受野為(140*140)。針對最高層的邊緣特征感受野不夠大,要提高特征的感受野,利用空洞卷積提高感受野,并且不會帶來額外的計算量。
在原始U?Net網(wǎng)絡(luò)中stage5兩層都為卷積核大小為(3*3)步幅為1的卷積層。在stage5中使用空洞卷積來代替卷積層,增加卷積核的感受野,兩個空洞卷積的膨脹系數(shù)分別取1和4。用普通卷積stage5輸出的感受野為(140*140),換成空洞卷積后感受野變?yōu)椋?68*268),遠大于普通卷積的感受野??梢栽黾訉D像中邊緣缺陷檢測的準確度。
在DAGM(The German Association for Pattern Recognition)和GNNS(German Chapter of the European Neural Network Society)聯(lián)合舉辦的“工業(yè)光學檢測的弱監(jiān)督學習”競賽提出的基準數(shù)據(jù)集DAGM[12]上進行大量的實驗,評估所提出方法的有效性。
DAGM數(shù)據(jù)集包含大小為(512×512)像素的6個類的圖像樣本,如圖3所示。在圖中缺陷用紅色橢圓標出,它由常見的不同的高紋理類和不同的缺陷類型組成。在圖3(a)中代表了高紋理下的模糊類缺陷,圖3(b)和圖3(e)代表了高紋理下劃痕缺陷,圖3(c)代表了高紋理下壞點缺陷,圖3(e)代表了高紋理下擦傷缺陷,圖3(f)代表了高紋理下裂紋缺陷。每一類由1000個無缺陷圖像和150個缺陷圖像組成。此數(shù)據(jù)集為弱標記數(shù)據(jù)集,分割標簽不是以像素級給出的,而是以橢圓圈出缺陷區(qū)域。由于在實際標注中,像素級的標注代價成本特別高,弱標記可以節(jié)省大量成本,對標注要求低,更符合現(xiàn)實情況。
此數(shù)據(jù)集具有很高的挑戰(zhàn)性。它的部分樣例,如圖3所示。在圖3(a)中,背景中有和缺陷相似的均勻紋理信息;在圖3(d)和(f)中背景紋理信息干擾特別大,其具有和缺陷類似的高頻紋理信息;在圖3(c)中背景紋理信息和缺陷具有很大相似性;在圖3(b)和圖3(e)中背景噪聲很大,使得缺陷區(qū)域和非缺陷區(qū)域區(qū)別不明顯,對缺陷監(jiān)測造成較大的干擾。
圖3 DAGM數(shù)據(jù)集中的部分樣例展示Fig.3 Some Examples of DAGM Dataset
在實驗中,每一類隨機選擇575張圖片作為訓練集,剩下的575 張圖片作為測試集。在訓練集中采用5 折交叉驗證,總共3450幅圖像被隨機分成5組,編號從0到4。每次選擇4組作為訓練集,其余一組作為驗證集。每類每次有2760張訓練圖像和690張驗證圖像。
采用Adam算法對模型進行優(yōu)化。Adam算法是一種對隨機目標函數(shù)執(zhí)行一階梯度優(yōu)化的算法[13],其學習率在訓練過程中會發(fā)生改變。Adam 可以通過計算梯度的一階矩估計和二階矩估計,為不同的參數(shù)設(shè)計獨立的自適應(yīng)性學習率。這就可以加快前期訓練的速度,而不影響后期訓練的收斂性。算法的初始學習率η=0.0001,一階矩估計的指數(shù)衰減率β1=0.9,二階矩估計的指數(shù)衰減率β2=0.999。每次隨機選擇2張樣本圖像作為一個小批量進行訓練。
在U?Net進行分割中的評價指標為Dice系數(shù),其計算公式如式所示:
式中:mask—真實標注;prediction—預(yù)測結(jié)果;Dice—描述圖像分割算法的結(jié)果與其相應(yīng)的真實缺陷標注的相似程度;用Dice損失函數(shù)訓練可以更直觀地達到更高的Dice值;Dice損失函數(shù)如式所示:
在進行訓練時發(fā)現(xiàn),Dice損失無法在初始訓練時提供有意義的梯度。這會導致模型的不穩(wěn)定性,而這種不穩(wěn)定性往往會促使模型難以訓練。用Dice損失函數(shù)訓練過程中訓練損失和驗證損失,如圖4所示。
圖4 Dice損失函數(shù)下訓練和驗證損失Fig.4 Training And Verifying Loss with Dice Loss Function
由于交叉熵損失函數(shù)在開始訓練中收斂速度快,算法也引入了交叉熵損失函數(shù),其數(shù)計算公式如式所示:
采用交叉熵損失函數(shù)和Dice損失函數(shù)的聯(lián)合形式訓練的訓練損失和驗證損失,如圖5所示。
圖5 聯(lián)合損失函數(shù)下訓練和驗證損失Fig.5 Training and Verifying Loss with Joint Loss Function
缺陷檢測算法實驗采用Python3.7.3開發(fā),其深度學習框架采用TensorFlow[14]。實驗設(shè)備為一臺CPU 為Intel Xeon E5?2650L v3、顯卡為NVIDIA GTX?970上進行。所改進的網(wǎng)絡(luò)結(jié)構(gòu)同文獻[3]中基于滑動窗口的CNN方法、SegNet方法、U?Net方法進行比較?;诨瑒哟翱诘腃NN 方法是把原始圖像(512*512)分割成(32*32)像素后做分類訓練。一個圖像分成256個小塊,預(yù)測時在原圖上滑動窗口進行預(yù)測。通過實驗發(fā)現(xiàn),滑動步長越小,預(yù)測精度越高,但是預(yù)測用時越長。當所設(shè)的步長為1、4、8、16、32時,所用的時間分別為351ms、23ms、16ms、8ms、2ms等??紤]到預(yù)測的實時性,預(yù)測時設(shè)定滑動窗口大小為32,滑動步長為8,對原圖進行預(yù)測。對改進的U?Net方法和原始U?Net方法、SegNet方法以及基于滑塊窗口的CNN方法進行比較。檢測結(jié)果圖,如圖6所示。在圖中可以看出改進的網(wǎng)絡(luò)具有比較好的檢測效果。
圖6 各算法缺陷檢測結(jié)果對比Fig.6 Comparison of Defect Detection Results of Each Algorithm
對測試集上的圖片進行預(yù)測時,由于基于滑動窗口CNN的方法在檢測中不能提供像素級的缺陷檢測,當預(yù)測時滑動窗口具有比較明顯的滑動痕跡。當把滑動步長減少時,雖然滑動窗口痕跡變?nèi)?,精度變高,但是檢測時間變長,達不到實時性要求。只列出它在預(yù)測中滑動窗口步長為8時的預(yù)測圖片,不再用它與其它檢測方法進行參數(shù)比較。對于其它檢測方法分別用Dice系數(shù)值和Accuracy值來進行評估。得到它們的平均Dice系數(shù)值、最大Dice值以及Accuracy值,如表1所示。
表1 各算法缺陷檢測參數(shù)值對比Tab.1 Comparison of Defect Detection Parameters of Each Algorithm
對于Accuracy設(shè)定,當有缺陷時預(yù)測的Dice<0.5或把無缺陷預(yù)測成有缺陷時,假設(shè)為預(yù)測失敗。當有缺陷時預(yù)測的Dice>0.5或預(yù)測正確無缺陷類型時,認為預(yù)測成功。其Accuracy評價指標用如下公式確定:
式中:TP—預(yù)測成功的數(shù)量;FP—預(yù)測失敗的數(shù)量;Dice系數(shù)公式如式(1)所示。
在DAGM缺陷數(shù)據(jù)集上驗證了改進的U?Net算法,并與原始U?Net算法、SegNet算法以及文獻[3]中基于滑動窗口的CNN網(wǎng)絡(luò)進行對比。實驗結(jié)果表明,改進的U?Net方法平均Dice系數(shù)值以及Accuracy值都高于其它檢測方法,具有更高的分割精度和檢測效率。特別是對第四類缺陷進行檢測時,其余方法存在檢測不到或錯檢的現(xiàn)象,而改進的U?Net 網(wǎng)絡(luò)可以有效地檢測出缺陷。這就說明該算法有較強的通用性,對不同高紋理圖案的適應(yīng)性強。在同等條件下的缺陷檢測中,能夠體現(xiàn)出更高的檢測精度和的更好穩(wěn)定性。