謝景洋, 王 巍, 劉 婷
(國合通用(青島)測試評價有限公司,山東 青島 266000)
我國紡織業(yè)的總產(chǎn)量超過了世界總產(chǎn)量的一半,企業(yè)在高量產(chǎn)的同時也不可避免會產(chǎn)生很多帶瑕疵的布匹,這些布匹會讓企業(yè)的利潤損失35%~55%[1]。所以有效實現(xiàn)布匹瑕疵檢測、保證生產(chǎn)布匹質量是企業(yè)生存的關鍵。人工檢測方法缺陷明顯,利用機器視覺檢測是目前的趨勢。
傳統(tǒng)的機器視覺織物瑕疵檢測方法中,頻譜分析方法[2]和視覺檢測性方法[3]過于依賴濾波器組的選擇,對復雜織物檢測性能不好,字典學習方法[4]自適應性不強,模型方法[5]的計算量大而不適合小目標檢測。這些機器視覺檢測方法都需要對圖像的特征進行提取,大部分圖像的特征提取需要有專業(yè)的計算機視覺知識,并且不同紋理的面料,其圖像的提取特征可能是不同的,常常需要對算法進行重新設計,模型的可遷移性不高。在面對大分辨率的圖片、復雜的背景環(huán)境和大小差異懸殊的布匹瑕疵中,需要更具一般性并且訓練成本低的檢測方法。
卷積神經(jīng)網(wǎng)絡(Convolution Neural Network,CNN)的算法和網(wǎng)絡結構的優(yōu)化,帶來了圖像識別算法準確率的極大提升[6]。CNN在圖像處理方面有著獨特的優(yōu)越性,其布局更接近于實際的生物神經(jīng)網(wǎng)絡,權值共享降低了網(wǎng)絡的復雜性,特別是多維輸入向量的圖像可以直接輸入網(wǎng)絡這一特點,避免了特征提取和分類過程中復雜的數(shù)據(jù)重建,不需要人為地進行特征提取的操作,實現(xiàn)真正的端到端(End-to-End)的學習。景軍峰等[7]利用微調卷積神經(jīng)網(wǎng)絡模型Alexnet對織物疵點圖像進行特征提取,實現(xiàn)在兩類織物測試中達到95% 以上的分類準確率,但該方法僅實現(xiàn)了2種織物瑕疵的分類任務,并不涉及位置檢測。劉閃亮[8]在目標檢測模型 SSD 的基礎上,根據(jù)織物疵點圖像的特征改進模型,提出的卷積神經(jīng)網(wǎng)絡對織物疵點圖像有很好的檢測效果,但還是存在檢測率不是太高的問題。趙志勇[9]利用改進的Faster-RCNN 算法與前置的 Inception-ResNet-v2 網(wǎng)絡進行結合,實現(xiàn)了對多種織物瑕疵的檢測,識別率較高,但是Faster-RCNN的識別速度并不快。探索合適的卷積神經(jīng)網(wǎng)絡算法對織物瑕疵進行檢測,實現(xiàn)精度和檢測速度的平衡,還需要有更多的研究。
在利用卷積神經(jīng)網(wǎng)絡進行目標檢測的算法中,由 Redmon等[10]在 2015 年提出的YOLO算法是一種快速目標檢測算法,適用于需要快速檢測的工業(yè)領域。目前已經(jīng)發(fā)展到了第3代的YOLO v3[11]利用圖像特征金字塔在小目標識別上有了明顯的提升,適用于布匹的瑕疵檢測。
由于部分布匹瑕疵的大小分布懸殊,為提高檢測精度,對輸入神經(jīng)網(wǎng)絡的圖片分辨率要求較高(416像素×416像素→608像素×608像素),這也明顯降低了網(wǎng)絡的檢測速度。將YOLO v3的算法結構應用到布匹瑕疵檢測中,對比了Darknet-53、MobileNets和Res2Net三種主干網(wǎng)絡搭建方式對YOLO v3算法在布匹瑕疵檢測中檢測速度、參數(shù)量和精度的影響,利用Grad-CAM可視化工具研究了三種主干網(wǎng)絡對不同尺度缺陷的特征提取能力。
YOLO v3在目標檢測過程中,縮放輸入圖片的大小到正方形大小P×P作為輸入圖片,經(jīng)過卷積神經(jīng)網(wǎng)絡進行特征提取。根據(jù)預測目標的大小,分成3個尺度的輸出,如圖1所示,其中輸出y1、y2和y3分別代表預測大邊框、中邊框和小邊框的物體。網(wǎng)絡結構中紅虛線框內是主干網(wǎng)用來提取圖像的特征,為提高主干網(wǎng)絡的特征提取能力,主干網(wǎng)絡一般會在大型的分類數(shù)據(jù)上進行預訓練。從主干網(wǎng)絡中分成3個尺度的輸出利用了FPN[12]網(wǎng)絡的特征金字塔結構,其過程是利用網(wǎng)絡最后提取的深層特征信息上采樣后復用在前期特征圖上。在小物體的識別上,需要利用前期特征圖的信息,這時候信息丟失少,小物體的信息也不容易丟失。但是前期特征圖的信息沒有經(jīng)過多層深度神經(jīng)網(wǎng)絡的特征提取過程,而特征金字塔結構讓前期特征圖也具備一定后期特征圖的“深度提取”信息,從而提高小物體識別的準確性。圖1中輸出yi(i=1,2,3)的結構為
yi=Si×Si×(3×(4+1+C))
(1)
式中,Si為輸出的單元格個數(shù);數(shù)字3為每個單元格的3個anchors;數(shù)字4為目標的坐標信息(tx,ty,tw,th);數(shù)字1為置信度tconf;C為所有目標種類的概率值大小,其維度為目標類別的個數(shù)。
對于織物瑕疵的視覺檢測,由于部分缺陷的尺度比較小,這就需要圖片具有足夠的清晰度,這會導致神經(jīng)網(wǎng)絡輸入的圖片較大,進而降低檢測速度。這時候,如果用一些輕量型的主干網(wǎng)絡,可以提升網(wǎng)絡的速度,并減少參數(shù)量。但輕量型的網(wǎng)絡容易出現(xiàn)欠擬合的問題。某些具有較好的特征提取能力的輕量型網(wǎng)絡是值得嘗試的解決方案。選取了相對于原始Darknet-53更輕量的MobileNets和Res2Net作為YOLO v3算法的主干網(wǎng)絡,并研究這些主干網(wǎng)絡在布匹瑕疵檢測中的效果差異。
1.1.1 原始Darknet-53
Darknet-53[11]是Redmon在YOLO v3算法中提出的。相比廣泛使用的ResNet-101或ResNet-152,Darknet-53具有更快的推理速度,但是在ImageNet數(shù)據(jù)集上準確率和二者相當。其核心是圖1中CBL組件的復用,CBL使用了標準卷積層(CNN)+批標準化(BN)+激活函數(shù)(Leaky ReLU)。其中Res_nuit組件中使用了殘差連接,殘差網(wǎng)絡的引入是為了解決網(wǎng)絡深度變深以后的性能退化問題[13]。
1.1.2 輕量化的MobileNets
MobileNets[14]的核心之一是將標準的卷積換成深度可分離卷積的形式。深度可分離卷積(Depthwise Separable Convolution)就是將普通卷積拆分成為一個深度卷積和一個逐點卷積。深度卷積將卷積核拆分成為單通道形式,在不改變輸入特征圖像的深度的情況下,對每一通道單獨進行卷積操作,這樣就得到了和輸入特征圖通道數(shù)一致的輸出特征圖。逐點卷積就是1×1卷積,主要作用是進行通道的信息交換和對特征圖進行升維和降維。這樣的計算方式使得深度可分離卷積的參數(shù)量和計算量都比一般卷積明顯減少。
圖1 YOLO v3網(wǎng)絡結構
深度可分離卷積可以在不改變網(wǎng)絡結構的條件下,直接替換標準卷積,僅對主干網(wǎng)絡的CBL組件修改為SBL組件,如圖2所示。
圖2 主干網(wǎng)絡CBL組件修改為SBL組件
為突出主干網(wǎng)絡對YOLO v3算法的影響,在替換Darknet為MobileNets時,在主干網(wǎng)絡之外的卷積模塊仍使用標準卷積模塊,并保證整個網(wǎng)絡中每次經(jīng)過殘差結構之后的特征圖深度和原始YOLO v3算法特征圖深度相同,從而直接對比主干網(wǎng)絡的特征提取能力。
1.1.3 Multi-Scale特性的Res2Net
在多個尺度上表示特征對于許多視覺任務非常重要,YOLO v3中特征金字塔的使用就是為了增加特征圖上多尺度的特征表示。大多數(shù)現(xiàn)有方法以分層方式(Layer-Wise)表示多尺度特征。在Res2Net中,Gao等[15]通過在一個單個殘差塊內構造分層的殘差類連接,為CNN提出了一種新的構建模塊。Res2Net 以更細粒度(Granular Level)表示多尺度特征,并增加每個網(wǎng)絡層的感受野(Receptive Fields)范圍。其結構和普通殘差網(wǎng)絡的對比如圖3所示,Res2Net將特征圖根據(jù)深度平均分為s等份(s=4),計算過程如下。
(2)
式中,yi為第i個特征圖分塊的輸出;xi為第i個特征圖分塊的輸入;Ki為第i個3×3小卷積核。
圖3 普通殘差結構和Res2Net結構
利用Res2Net的主干網(wǎng)絡res unit組件替換如圖4所示。其中SP模塊是圖3(b)中藍框標出的分層殘差連接,SP模塊前后兩個CBL中用的都是1×1卷積用來降維和升維。
為突出主干網(wǎng)絡對YOLO v3算法的影響,在替換Darknet為Res2Net時,其替換原則同1.1.2節(jié)中MobileNets的替換過程,從而直接對比主干網(wǎng)絡的特征提取能力。
圖4 主干網(wǎng)絡Res unit組件更改為Res2Net組件
為對比YOLO v3主干網(wǎng)絡在布匹瑕疵檢測中的特征提取能力,需要關注主干網(wǎng)絡究竟提取了圖片中哪些關鍵信息。如果網(wǎng)絡集中提取了圖片缺陷部分的信息,則認為主干網(wǎng)絡的特征提取能力更強。CAM(Class Activation Mapping)是一個幫助可視化CNN特征提取的工具。使用CAM可以清楚地觀察到網(wǎng)絡所關注的圖片區(qū)域[16]。在YOLO v3算法中,不僅關注分類問題,其輸出是一個綜合位置、置信度、分類的結果,本文使用更泛化的Grad-CAM方法[17]研究網(wǎng)格輸出值所關注的區(qū)域。在第1節(jié)的式(1)中,網(wǎng)絡最后輸出為S×S個網(wǎng)格,假設缺陷的種類C=20,則每個網(wǎng)格輸出的類別得分為
(3)
(4)
最后計算Grad-CAM:
(5)
使用ReLU函數(shù)可以更加關注特征圖中對score值有積極影響的部分[17]。
在實際應用中,訓練一個深度網(wǎng)絡需要大量的數(shù)據(jù)集,但實際應用中大規(guī)模的數(shù)據(jù)集是很難獲取的。使用的訓練數(shù)據(jù)集圖片有4000多張,為縮短訓練時間,并提升網(wǎng)絡的泛化性能,神經(jīng)網(wǎng)絡模型在COCO數(shù)據(jù)集上預訓練之后,再遷移到布匹瑕疵圖片上進行訓練。遷移學習采用凍結策略+全局訓練的方式,凍結策略中只訓練圖1中y1、y2和y3前的conv層,并凍結其他層不訓練。全局訓練指的是訓練整個YOLO v3網(wǎng)絡。
實驗數(shù)據(jù)來源于阿里云天池數(shù)據(jù)大賽平臺,一張圖片的分辨率為1000像素×2446像素,同一張圖片中可能同時存在多種缺陷類型,并且缺陷大小差異很大,具有較大的識別難度,典型樣張如圖5所示。
圖5 帶3種缺陷的圖片
樣本數(shù)據(jù)分為20類,編號依次為1,2,…,20,圖片數(shù)量總計為5895張。取圖片的80%作為訓練集,20%作為測試集, 最后用于實驗的訓練數(shù)據(jù)集為4716張,測試數(shù)據(jù)集為1179張。本實驗使用的測試樣本瑕疵類型為20種,并保證每種測試集瑕疵樣本量(每種訓練集瑕疵樣本量在1∶4左右)。對訓練數(shù)據(jù)集采取在訓練過程中進行隨機水平或垂直翻轉、隨機剪裁、隨機仿射變換的數(shù)據(jù)增強方式。不變形壓縮后輸入神經(jīng)網(wǎng)絡的圖片大小是608像素×608像素。
實驗運行環(huán)境:CPU Intel?CoreTMi7-8750H,16 GB內存,GPU NVIDIA GeForce GTX 1060Ti 6 GB,程序代碼使用Windows下的TensorFlow框架進行編寫和運行。
圖6為訓練樣本與測試樣本的分布情況。
圖6 訓練樣本與測試樣本的分布情況
為保證不同主干網(wǎng)絡的實驗結果有對比性,需要保證訓練過程是盡可能相同的。在COCO數(shù)據(jù)集上充分預訓練到測試集的損失值不再下降后,再遷移訓練到布匹瑕疵數(shù)據(jù)集上進行訓練,遷移訓練的凍結層描述見1.3節(jié)。
選擇warm up的原因是防止網(wǎng)絡在早期訓練過程中發(fā)散[18],特別是遷移學習開始階段,發(fā)散是更容易發(fā)生的。第33個epoch設置warm up是因為學習率發(fā)生了改變。由于輸入的圖片尺寸比較大,容易導致GPU訓練過程中內存不足,所以Batch size取2。為防止Batch size小導致訓練過程中噪聲大的問題[19],把學習率設置得比較小。遷移訓練過程的參數(shù)如表1所示。
表1 訓練參數(shù)設置
圖7和圖8分別為3種主干網(wǎng)絡的訓練集損失曲線和測試集損失曲線在接近收斂區(qū)的對比,為突出并對比收斂區(qū)結果,這里截取了第33個epoch開始到整個訓練結束的損失曲線。
圖7 第33epoch之后訓練損失曲線
圖8 第33epoch之后測試損失曲線
由圖7可以看出,3種主干網(wǎng)絡在訓練集上的損失值是不斷下降的,并且還有繼續(xù)下降的趨勢,這說明此時3種主干網(wǎng)絡對于訓練數(shù)據(jù)集都不是欠擬合的。在訓練損失值上,Res2Net最低,MobileNets最高。沒有繼續(xù)訓練是因為此時3種主干網(wǎng)絡的測試損失值都已經(jīng)不再下降并且出現(xiàn)波動。測試集損失曲線更能表征網(wǎng)絡在全新未知數(shù)據(jù)上的表現(xiàn)力。Res2Net的訓練損失值雖然最低,但從圖8中可以看出,其測試損失值在訓練后期有明顯震蕩并不斷上升,說明Res2Net結構的網(wǎng)絡已經(jīng)出現(xiàn)明顯的過擬合。而MobileNets和Darknet-53在訓練后期的測試損失值保持平穩(wěn),并保持在基本相同的水平。綜上,Res2Net在訓練損失曲線上有較好的表現(xiàn)力,但是在測試損失曲線上不如MobileNets和Darknet-53。
表2為各主干網(wǎng)絡的參數(shù)量和最后的訓練結果,其中測試集mAP取各自主干網(wǎng)絡測試損失值最小的網(wǎng)絡計算獲得。
表2 主干網(wǎng)絡參數(shù)和訓練結果對比
從表2中可以看出,MobileNets的檢測速度比Darknet-53和Res2Net快至少30%,而參數(shù)量只有Darknet-53的1/3,Res2Net的1/2,Res2Net檢測速度和Darknet-53接近,但是參數(shù)量更少。對比三者的mAP值,原始的Darknet-53的檢測精度最高,MobileNets精度和Darknet-53很接近,Res2Net的精度相比于二者都低一些。綜上可以看出,MobileNets在明顯提高檢測速度、減小參數(shù)量后,也可以達到和原始YOLO v3主干網(wǎng)絡Darknet-53接近的檢測精度。Res2Net雖然有更精巧的網(wǎng)絡結構,但在布匹缺陷檢測上的優(yōu)勢并不明顯。
為了更深入了解2.2節(jié)實驗結果1的3種主干網(wǎng)絡表現(xiàn)力,利用Grad-CAM對特征圖進行觀察,研究卷積層提取的關鍵信息。在本節(jié)的討論中,需要指定式(4)和式(5)中的特征圖A。根據(jù)YOLO v3的網(wǎng)絡結構及1.2節(jié)中的討論,在替換主干網(wǎng)絡時,并沒有改變各部分輸出特征圖的大小和深度,所以,理論上可以對比3種主干網(wǎng)絡任意特征圖的特征提取結果。由于YOLO v3特殊的特征金字塔結構,不同尺寸的輸出結果對應了不同的網(wǎng)絡輸出路線,這里選取了主干網(wǎng)絡中3路直接的輸出結果作為特征圖A,如圖1中紅色箭頭①②③所示。利用Grad-CAM方法的步驟如下。
① 選擇圖片中要觀察的缺陷;
② 根據(jù)缺陷大小確定輸出路線,即可確定所研究的特征圖A;
圖9為測試集缺陷在經(jīng)過3種不同主干網(wǎng)絡之后的Grad-CAM圖,圖中越亮的部分代表網(wǎng)絡越關注的區(qū)域。為了更全面地對比分析,這里選取了典型的不同大小和類型缺陷圖片,并且這些缺陷都能在3種主干網(wǎng)絡的YOLO v3中被正確識別。圖中漿斑和軋痕屬于較大的缺陷,結頭和星跳屬于較小的缺陷。對比圖9中較大的缺陷可以發(fā)現(xiàn),Darknet-53和MobileNets相比于Res2Net,提取了更多大缺陷的特征,體現(xiàn)在熱度區(qū)域覆蓋了更多缺陷部分并且更亮更集中。其中MobileNets除了更完整覆蓋大缺陷區(qū)域,在非缺陷區(qū)域受到的干擾也較小,而Darknet-53在軋痕的特征提取上,也顯著關注了圖中右半部分和軋痕相似的區(qū)域。這點在小物體的特征提取上更為突出。對比結頭和星跳的Grad-CAM,可以發(fā)現(xiàn)Darknet-53在圖片特征提取上,廣泛關注了圖片中的可能區(qū)域,而MobileNets可以更專注在小缺陷所在的區(qū)域上,這可能和Darknet過強的特征提取能力有關。MobileNets受制于參數(shù)少,圖7的訓練損失曲線表明其學習過程比Darknet-53慢,但這里觀察到MobileNets更好地學習了所需要提取的特征。Res2Net也能關注到小物體特征的提取,但是對比MobileNets,其提取能力較弱。綜上,Darknet-53和MobileNets的主干網(wǎng)絡都有較好的特征提取能力,其中Darknet-53特征提取能力強,MobileNets更能專注提取缺陷的特征。Res2Net的分層的殘差類連接雖然提供了多尺度的特征圖,但這種方式在布匹瑕疵檢測中并沒有明顯的優(yōu)勢。
圖9 3種主干網(wǎng)絡的Grad-CAM可視化結果
在原有YOLO v3算法的基礎上,提出了輕量化的MobileNets、更細粒度多尺度特征的Res2Net兩種不同類型的YOLO v3主干網(wǎng)絡搭建方案,目的是尋找兼具檢測速度和準確度的主干網(wǎng)絡搭建方案。對比了3種主干網(wǎng)絡對YOLO v3算法在布匹瑕疵檢測中的影響,并利用Grad-CAM方法研究主干網(wǎng)絡的特征提取能力。實驗結果表明,搭載MobileNets主干網(wǎng)絡的YOLO v3具備更小參數(shù)量和更快的檢測速度,并在布匹瑕疵檢測中具有很接近原始YOLO v3網(wǎng)絡結構的檢測精度,Grad-CAM表明MobileNets主干網(wǎng)絡在特征提取上更專一。