李明輝,劉榮強,雷渠江,桂光超
(1.陜西科技大學 機電工程學院,西安 710021;2.廣州中國科學院先進技術研究所,廣州 511548)
由于織物被廣泛應用于各個領域,例如,服裝、醫療、軍工等,每年有大量的織物被生產。在實際生產過程中,由于紗線問題、操作不當以及拉伸過度,導致生產的織物出現各種缺陷,有缺陷的織物導致低質量的產品,降低了產品45%~65%的價格[1]。因此,為了保證產品的價值,在生產過程中,對織物表面進行缺陷檢測是非常有必要的一個步驟。
傳統地,缺陷檢測任務是由人類工作者所勝任的。但是由于織物的特殊性(例如高彈性、質地柔軟以及色彩豐富等),通過人眼識別許多缺陷易被忽略。根據工業報道,手工檢測的精度僅僅只有60%~75%[2]。近年來,自動化檢測技術被應用于織物的缺陷檢測,基于計算機視覺的檢測方法不僅僅提高了檢測精度,在效率和資源利用率方面也有了很大的提升。
截止目前,大量先進的織物檢測方法被提出,根據原理可將其劃分為四類:統計學方法、頻譜法、模型法以及基于學習的方法。文獻[3]提出利用自相關函數和灰度共生矩陣(GLCM)對原始圖像進行特征化處理,通過計算被測圖像與模板間的歐式距離,并給出閾值來實現缺陷檢測。結果表明,此方法具有計算簡單、客觀可靠等優點。文獻[4]提出一種基于Gabor濾波器和方向梯度直方圖(HOG)特征的織物疵點檢測算法,利用多個尺度和多個方向的Gabor濾波器組對織物圖像濾波,有效的抑制了織物背景紋理的干擾,提高了織物疵點檢測的準確率。在以上方法都較難處理織物紋理變化沒有規律的情況下,基于模型的方法能獲得更好的檢測結果。文獻[5]提出一種將多渠道信息融合到一個獨特的特征圖中的方法,根據Gumbel分布模型對無缺陷背景紋理對應的像素值分布建模。該方法不需要任何標準參考就可以取得不錯的結果,但泛化能力差,檢測性能依賴于所選擇模型的參數。基于學習的方法在織物缺陷檢測方面極受歡迎。文獻[6]通過對圖像的顯著性映射進行分析,提取并歸一化全局和背景關聯值作為圖像的顯著性特征,利用得到的樣本訓練支持向量機,對有瑕疵的織物分類。
自從Alexnet在2012年的ImageNet競賽中奪冠后,卷積神經網絡(CNN)在計算機視覺領域掀起了革命的浪潮。與經典機器學習算法中手工設計復雜的特征相比,CNN作為一種端到端的學習方式,通過卷積、池化等操作,自動學習有用的特征。最初的CNN被用于圖像的分類任務中,隨著人工智能和深度學習的高速發展,更多創新的CNN算法被提出,并且被成功應用到物體檢測和語義分割任務中。文獻[7]對比了YOLO9000、YOLO-VOC和Tiny-YOLO三種檢測模型,提出一種基于YOLOV2的織物疵點自動定位和分類的方法。文獻[8]提出一種新的深度卷積神經網絡PTIP,在訓練階段采用局部圖像,而在測試階段使用整張織物圖像。文獻[9]提出了一種全卷積神經網絡,并命名為U-Net,該模型采用像素到像素的訓練方式,在醫學圖像分割上取得了令人滿意的結果。為了解決U-Net不能滿足的實時性問題以及織物工廠實際生產條件下正負數據樣本不均衡問題,文獻[10]提出了一種高效的卷積神經網絡Mobile-Unet,該模型采用中位數頻率平衡損失函數來克服樣本不平衡問題,此外引入深度可分卷積,極大地降低了網絡的復雜度和模型規模。
近年來,基于人視覺的注意機制分析方法已經在目標檢測、圖像分割、物體檢索等領域受到了廣泛關注。研究表明,人的視覺系統能夠快速注意到一些復雜場景中顯著的區域。文獻[11]注意到織物的缺陷和非缺陷區域的顏色在視覺上的差異,以及缺陷區域往往集中在一個小的區域而不是整張圖像,提出了一種利用顏色差異和位置聚集的顯著性度量檢測方法(CDPA)。鑒于顯著性檢測算法和卷積神經網絡在缺陷檢測上的優異表現,本文提出一種改進的U-Net圖像分割模型用于織物的缺陷檢測,并通過實驗將檢測結果與上文提到的YOLOV2[7]、PTIP[8]、U-Net[9]、Mobile-Unet[10]以及CDPA[11]方法進行對比。結果證明本文所提出的檢測模型在織物缺陷檢測中表現更加出色。
本章從整體上介紹所提出的織物缺陷檢測方法流程,如圖1所示。此方法是一種對缺陷目標精準定位的端到端的架構,并且主要由三個基本的步驟組成:圖像預處理、缺陷目標分割和后處理。

圖1 織物缺陷檢測流程圖
對神經網絡的訓練需要大量的樣本,但往往在實際的工業環境下,制作帶有標簽的大型數據集是困難且昂貴的。為了防止數據集樣本數量小導致的過擬合,并且讓模型學習到更多強健的圖像特征,本文采用縮放、旋轉、隨機剪裁以及其組合的數據增強方式對數據集擴充。另外,本文基于缺陷區域的顯著性線索,提出一種融合多種檢測算法對圖像進行預處理。將預處理后的圖像與灰度圖像合并為雙通道作為神經網絡的初始輸入。關于顯著性檢測的詳細介紹,將在第三章進行闡述。
在經過預處理之后,可以得到織物缺陷粗略的位置信息。為了獲得更好的分割結果,本文提出一種改進的U-Net(CU-Net)圖像分割網絡。該網絡的主干采用U-Net架構,因此圖像處理的過程與U-Net相似。在U-Net中,撇棄了所有的全連接層,實現了像素到像素的映射,另外,通過收縮路徑和膨脹路徑的跳躍連接,上下文信息被傳遞到了更高的特征圖中。然而,經典的U-Net存在兩個嚴重的缺點:一方面,它的分割精度不高,另一方面,由于模型尺寸較大,它需要較長的時間消耗。因此,我們分析了其特點,并做出了幾項重大改進。CU-Net網絡結構將在第四章展開講述。
經過CU-Net處理后的圖像輸出為二值的分割圖,后處理階段基于此分割圖,用矩形框對織物的缺陷區域進行標記。最終結果顯示,經過后處理的缺陷區域更加顯眼且更易被技術人員所認可。
通過對有缺陷織物的觀察,我們發現在灰度圖像中大多數種類的缺陷呈現孔洞和裂紋的特征。進一步對圖像進入深層次的分析,五條基于人類視覺注意力機制的重要顯著性線索被提出:
1)缺陷區域的光線反射強度比無缺陷區域弱;
2)缺陷區域往往具有更明顯的邊緣和拐角響應;
3)缺陷目標的灰度值更加顯眼;
4)織物的背景紋理呈現有規律的重復;
5)人眼更容易注意到缺陷目標。
當缺陷存在時,織物表面的幾何形狀將會發生微量的變化,這就導致了局部區域的漫反射變得更加雜亂,因此缺陷目標看起來比背景更暗。為了減少光照不均的影響,自適應閾值分割被用來計算該線索。原理被描述:

式(1)中,IR表示初始圖像I經過R×R窗口的均值濾波器后得到的模糊圖像;t≥0表示一個常數閾值。當一個像素的灰度值小于它鄰域的均值減去t時,則認為它比其他的像素值更暗。
由于缺陷目標和背景之間的漫反射存在差異,所以在缺陷區域的周圍存在銳利的邊緣和拐角。Harris[12]提出用結構張量(Structure Tensor)檢測邊緣和拐角。圖像的結構張量定義為其海森矩陣,因此,錨點像素(x,y)的結構張量被描述為:

用λ1和λ2表示M的特征值,可以由下式計算得到:

Harris指出:當且僅當λ1和λ2都很大時,該區域是拐角,如果一個特征值很大,同時另一個特征值很小時,邊緣響應就會發生。用A和B分別代表錨點像素的拐角響應和邊緣響應,它們被定義:

因此,圖像的結構張量被描述為:

其中SalA和SalB分別表示初始圖像的拐角和邊緣顯著圖,他們可以由等式(4)計算得到。N(·)表示顯著圖的歸一化操作。
根據我們觀察到的第三條線索,缺陷部位的灰度與背景相區別,由于顏色的稀缺性,缺陷很容易被注意到。因此,AC算法[13]被用來計算此線索。
該方法選取三種不同大小的鄰域(邊長分別是h/8,h/4,h/2)進行高斯濾波,并將其轉換到LAB色彩空間,分別求取像素點h/8鄰域LAB空間的均值Lm1、Am1、Bm1,h/4鄰域均值Lm2、Am2、Bm2和h/2鄰域均值Lm3、Am3、Bm3。再分別將LAB的模糊圖合并,用公式表示為:

基于該線索最終的顯著圖為:

在第四條線索中,我們注意到織物的背景紋理是有規律的,它們遵循固定的模式,并且對缺陷預測造成了很大的影響。PHOT算法[14]能夠從圖像中以任意規模移除有規律的紋理,并且只保留無序的部分。BMS模型[15]通過模擬人的視覺注意力原理檢測顯著性目標。
基于以上5條線索,本文提出了一種多線索融合檢測方法,稱之為MCue,它被定義為:

式(8)中,SBMS、SAC、SPHOT、SST、D分別表示BMS、AC、PHOT、Structure Tensor以及Darker cue的顯著圖;ωD、ωPHOT表示Darker cue,PHOT顯著圖的權重;m是一個常數,被用作歸一化。
通過對圖像的逐像素相加,那些不完整的顯著區域相互補充,因此該區域被增強;另外,乘法操作能夠很大程度的削弱非顯著區域,而對顯著可能性大的區域影響不大。我們取ωD=ωPHOT=3,m=5用作執行圖像的線索融合。根據ST,PHOT,AC單獨的計算,盡管缺陷的高可能性區域被辨別出來了,但是不能得到完整的形狀,因此,對這些顯著圖執行逐像素相加。根據這些部位的高概率密度,PHOT算法可以精確地辨別出缺陷,所以給ωPHOT賦予高值。由于線索一的嚴格的限制,直接相乘很容易導致錯誤的檢測,因此采用DωD+1.0的策略削弱Darker cue的影響。
為了加快模型的訓練和測試速度,我們對U-Net的特征通道數以及壓縮路徑的下采樣數進行了修剪。其中,通道數由U-Net的64,128,256,512,1024減少到CU-Net的32,64,128,256。在CNN中,小的特征圖包含更多的語義信息用于分類任務,而更大的特征圖包含更多的空間信息。織物缺陷檢測是一個二分類問題,因此更多的注意力應該放在定位上。由于下采樣數目的減少,CU-Net生成的最小的特征圖是U-Net的四倍,這導致了更高的定位精度。
CU-Net采用的編解碼器架構如圖2所示。在編碼器部分,兩個3*3的卷積層構成的卷積塊被重復使用,為了使每一次的卷積操作不改變圖像的大小,采用邊界填充策略。在每一個卷積塊后緊跟一個ReLU激活函數和一個2*2的最大池化操作,令步長為2用于執行下采樣。在每次的下采樣中,特征通道的數量將增加一倍。解碼器部分與前者相反,用2*2的卷積對輸入的特征圖進行上采樣,得到的特征圖通道數減半,但特征圖的尺寸翻倍。另外,在編碼器和解碼器之間通過跳躍連接的方式,將低級特征圖的信息傳遞到更高級的特征圖中。此外,考慮到一些織物圖像中存在較小的缺陷,在分割過程中容易丟失,因此在跳躍連接中引入注意力機制。

圖2 CU-Net網絡架構
注意力機制被用來顯式地建模特征通道之間的依賴關系。在CU-Net的跳躍連接中引入注意力機制,抑制不相關區域的特征響應,減少冗余特征的數量。并且該模塊只會給模型增加很少的參數和內存負擔,卻能顯著提高模型預測能力。所采用的模塊如圖3所示。

圖3 注意力機制模塊
該模塊主要分為壓縮,激活和融合三個階段。通過全局均值池化將輸入的特征圖的各個通道進行壓縮,得到各個特征維度的全局信息,壓縮操作的計算公式為:

式(9)中,xc是輸入特征圖的第c維特征;H和W是特征圖的寬和高;(i,j)表示特征圖空間維的坐標;S為壓縮函數;yc為壓縮后得到的特征圖。
激活操作類似于循環神經網絡中門的機制,兩層的全連接可以更好地擬合通道之間的復雜的相關性,因此選用兩層全連接為每個特征通道生成權重。表示如下:

式中,x是壓縮后的特征圖;Wr和Ws分別代表壓縮和重構的全連接函數;δ和σ分別是ReLU激活函數和Sigmoid激活函數;E為權重函數。
最后,將初始的特征圖與權重函數對應元素相乘,突出目標的圖像區域并且抑制無關的特征響應。
織物的缺陷檢測被建模為一個二分類問題,圖像中像素點要么屬于缺陷,要么屬于背景。通常,交叉熵損失函數被作為二分類的損失函數,它被定義為:

式(12)中,yi表示像素i實際的類別,yi=1表示該像素屬于缺陷區域,yi=0表示它屬于織物背景;pi∈(0,1)表示此像素經過模型輸出的預測值。pi越大,該像素點就越傾向于缺陷;N為圖像的像素點總數。在訓練中,通過迭代不斷調整網絡權重,使損失值最小化。
然而,這種損失函數更加適應于正負樣本平衡的情況下。在實際的織物圖像中,缺陷部位所占據的像素比例遠遠小于背景區域,這就造成了模型更加側重于識別比例更高的類別。考慮到這一點,本文提出將DiceLoss函數作為上述函數的補充,DiceLoss被定義為:

式(13)中各符號的含義與式(12)中相同。
當織物圖像中背景區域過多時,在交叉熵損失函數的作用下,模型會更加傾向于學習背景區域,通過提高背景區域像素的預測概率來降低損失值。DiceLoss損失則更多關注缺陷區域像素是否被正確分類。結合兩種損失函數特點,本文提出將交叉熵損失LCE與DiceLoss損失LDice相加得到的復合損失函數用在織物的缺陷檢測問題上。
為了驗證所提出的方法在織物缺陷檢測上的有效性,我們在一臺裝載因特爾酷睿i7 8700k的服務器上進行了一系列的實驗,同時服務器搭配16GB的內存和一塊英偉達GeForce GTX1080Ti(11GiB)的顯卡。在軟件方面,Ubuntu16.04操作系統被采用,并且pytorch深度學習框架被用來編制程序。
本文選用AITEX數據集[16]對所提出方法進行了實驗。AITEX織物數據集由245張4096×256像素的圖像組成。其中包含140張無缺陷圖像和105張有缺陷圖像,缺陷種類共分為12類。所有的圖像來自7種不同的織物結構。通過數據增強后,整個數據集共包含595個樣本。按照比例將數據集隨機劃分為訓練集、驗證集和測試集,分別包含415、119和61個樣本。數據集部分樣本如圖4所示,為了更清晰地展示缺陷部位,所有圖像被裁剪成256×256大小。

圖4 AITEX織物數據集部分樣本
為了定量的評價本文所提出織物缺陷檢測方法的表現,我們將引入準確率(Acc)和召回率(RE)兩種不同的評價指標。準確率反映了模型對整體樣本的判斷能力,是度量一個模型好壞最基本的指標。召回率是覆蓋面的度量,反映了有多少個正例被劃分為了正例。準確率Acc和召回率RE的計算值由下式確定:

式中:TP表示被正確預測的正樣本,即網絡輸出的缺陷區域同時是實際的缺陷區域;TN表示被正確預測的負樣本,即網絡輸出的背景同時是實際的背景;FP表示被錯誤預測的正樣本;FN表示被錯誤預測的負樣本。
在深度學習中,神經網絡的權重初始化方式十分重要,其對模型的收斂速度和性能有著較大影響。本文選擇用一個標準差為的高斯分布初始化權值,Ni為第i層網絡的輸入節點數,例如,對于卷積核大小為3×3的64通道網絡層,Ni=3×3×64=576。
另外,本文采用Adam優化器來更新網絡權值,因為它可以在訓練時自適應的調整學習率,且有更快的收斂速度。我們將初始學習率設置為0.001,一階和二階矩估計衰減因子分別設置為β1=0.9、β2=0.999。考慮到內存的影響,訓練階段,bitch_size設置為2,共進行100代訓練。
訓練集與驗證集的織物圖像經過預處理后,將其與原圖合并為雙通道送入所改進的CU-Net網絡中。在經過100次迭代后,模型充分學習了織物的缺陷特征,得到的訓練過程曲線如圖5、圖6所示。結果表明,在訓練前期損失值急劇下降,雖然存在震蕩現象,但在40次迭代后損失值逐漸趨于收斂。另外在訓練過程中準確率與召回率的最高值分別達到98.6%和93.4%,并穩定在該值左右。

圖5 訓練過程的損失曲線

圖6 訓練過程的準確率與召回率
將本文的織物缺陷檢測整體模型應用于AITEX數據集并可視化各個階段的處理結果,圖7展示了預處理、缺陷目標分割以及后處理的效果圖。在預處理階段,大部分人眼可以顯著觀察到的缺陷區域被提取出來。經過CU-Net網絡的精細分割,缺陷部位被逐像素地辨別為缺陷或背景,通過后處理,最終缺陷以矩形框的形式被標記出來。

圖7 織物圖像各階段處理效果圖
將本文提出的織物缺陷檢測方法在訓練集和驗證集上學習后,用得到的模型對測試集圖像進行預測,并比較文中所提及的其他檢測方法,如圖8所示。結果表明,本文提出的檢測方法能夠更加直觀的表達織物中的缺陷。

圖8 不同算法檢測效果對比
為了證明本文提出方法的先進性,將本文方法與上述方法檢測結果的準確率Acc與召回率RE分數定量地進行比較,結果如表1所示。在AITEX數據集上,本文方法的準確率和召回率分別達到98.3%和92.7%,相比于其他檢測方法的最高分數有4.8%和2.3%的提升。

表1 不同算法檢測精度對比
受顯著性檢測與卷積神經網絡的啟發,本文提出了一種有效的織物缺陷檢測深度學習模型。首先,該模型基于缺陷區域的多條顯著性線索對初始圖像進行預處理,得到圖像粗略的ROI區域。其次,對基本的U-Net網絡提出改進,并將預處理圖像作為網絡輸入進行語義分割。最后,利用經典視覺算法進行后處理便于實際工程應用。在AITEX數據集上對模型進行了評估,并與文獻其他檢測方法進行對比。結果表明,本文的模型在準確率與召回率均有一定的提升。由于在實際的工業檢測中存在各種干擾因素,而本文沒有在該環境下進行實驗以檢測模型的魯棒性,接下來的工作將會在此展開。