俞文靜,劉 航,李梓瑞,賴冬宜
(廣州大學(xué)華軟軟件學(xué)院,廣東 廣州 510990)
在紡織工業(yè)生產(chǎn)中,影響布匹質(zhì)量和生產(chǎn)效率的主要因素是紡織機(jī)器的故障或者人工操作失誤所造成的布匹疵點(diǎn)和破損,傳統(tǒng)檢測方法以人工方式肉眼觀察為主要手段。檢測者憑借眼睛去觀察,發(fā)現(xiàn)布匹的瑕疵并判斷布匹出現(xiàn)瑕疵的原因,對生產(chǎn)機(jī)器和人工操作做出及時調(diào)整,減少生產(chǎn)損失。人眼檢測的效率低下,人工成本較大,耗時耗力。因此,研究自動化、智能化的針織物瑕疵檢測的應(yīng)用設(shè)施已經(jīng)成為紡織行業(yè)、信息技術(shù)行業(yè)的熱點(diǎn)。
近年來,國內(nèi)外將機(jī)器視覺技術(shù)應(yīng)用于布匹瑕疵檢測已取得一些成果,其中具有代表性的Ye[1]提出基于圖像直方圖統(tǒng)計變量的模糊推理,對瑕疵具有旋轉(zhuǎn)平移不變性的優(yōu)點(diǎn),但是對圖像的噪聲特別敏感;基于Gabor變換的方法[2]和基于濾波器的方法[3-4]能夠基于不同的尺度圖像獲得較高維度的特征空間,對于邊緣瑕疵、孔洞具有很好的檢測效果,但是濾波器的參數(shù)值較難優(yōu)化且算法計算量大。
綜上所述,已有的研究成果在保持瑕疵變換不變性和邊緣檢測等方面有很好的效果,但是容易受到圖片噪聲的影響和計算量大的制約。借鑒于此,結(jié)合卷積神經(jīng)網(wǎng)絡(luò)圖像識別算法,該文提出一種基于圖像增強(qiáng)和CNN的單色布匹瑕疵檢測方法。
如今,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)在圖像識別領(lǐng)域冠絕一時,不僅對圖像中的無數(shù)特征有著強(qiáng)大豐富的表達(dá)能力,且在圖像變換不變性、背景復(fù)雜的條件下依然有很強(qiáng)的分類與泛化能力[5-7]。傳統(tǒng)的深度學(xué)習(xí)模型(如AlexNet[8],VGGNet[9],ResNet[10])在1 000種物體的分類精度已達(dá)到很高的水平,因此近年來有一些將傳統(tǒng)的深度CNN模型用于布匹瑕疵檢測的嘗試。然而大型卷積神經(jīng)網(wǎng)絡(luò)模型的層次較深、參數(shù)數(shù)量龐大,容易導(dǎo)致模型出現(xiàn)過擬合,效果不太理想。
結(jié)合以上分析,針對布匹瑕疵特征數(shù)據(jù)量小和受到布匹紋理特征干擾大的特點(diǎn),考慮到傳統(tǒng)圖像增強(qiáng)方法對布匹瑕疵檢測容易受到光照不均勻、圖像噪聲的影響,該文設(shè)計了一個含有3個卷積層、3個池化層、2個全連接層的CNN模型。然后提出一種結(jié)合圖像增強(qiáng)技術(shù)的模型訓(xùn)練方法,將原始圖片樣本進(jìn)行特征增強(qiáng)[11-12]提高樣本圖片的對比度,增強(qiáng)了布匹樣本中的特征點(diǎn),以此來提升模型訓(xùn)練效果。
該文將CNN應(yīng)用于布匹瑕疵檢測,首先對布匹圖像中出現(xiàn)的瑕疵特征進(jìn)行取樣和分類,包括5種瑕疵(毛斑、吊經(jīng)、扎洞、織稀、跳花)及正常布匹共6種樣本圖像,建立實驗所需要的圖像樣本庫。然后將原始樣本數(shù)據(jù)集拷貝為兩份,分別劃分訓(xùn)練集、驗證集和測試集:其中一份不做圖像增強(qiáng)處理,直接作為文中模型的輸出層數(shù)據(jù)訓(xùn)練分類模型;另一份先進(jìn)行圖像增強(qiáng)處理,再利用增強(qiáng)后的數(shù)據(jù)集訓(xùn)練分類模型。最后利用測試集分別對兩組實驗?zāi)P偷男阅苓M(jìn)行測試。采用方法的步驟具體如下:
①對布匹樣本圖像進(jìn)行取樣和分類,建立樣本庫。
②將原始樣本庫拷貝為兩份,分別劃分為訓(xùn)練集、驗證集和測試集。
③對其中一份數(shù)據(jù)集進(jìn)行圖像增強(qiáng),提高圖片的對比度,降低噪聲,增強(qiáng)邊緣特征。
④分別構(gòu)建并訓(xùn)練CNN模型。
⑤測試模型性能。
整個檢測流程見圖1。
圖1 檢測流程
在圖像的灰度直方圖中,灰度分量較低的部分代表了圖像的暗區(qū)域,而灰度分量較高的部分代表了圖像的亮區(qū)域。直方圖均衡化[13]是一種常用的灰度變換方法,通過將原始圖像中高低不等、分布不均衡的灰度分量進(jìn)行調(diào)整,使得灰度值在整個直方圖中近似于均勻分布,也就是圖像像素在[0,255]這個灰階范圍上的分布更加均衡,那么圖像的灰度動態(tài)范圍和明暗對比度就得到了提高,圖像的細(xì)節(jié)就得到了增強(qiáng)。
對于灰度級范圍為[0,L-1]的數(shù)字圖像,其直方圖可以表示為一個離散函數(shù):
h(rk)=nk
(1)
其中,nk是第k級灰度值rk的像素個數(shù)。也就是說,橫坐標(biāo)代表了灰度值rk,縱坐標(biāo)代表了該灰度級的個數(shù)nk。實際應(yīng)用中,通常要先對直方圖進(jìn)行歸一化,假設(shè)灰度圖像的維數(shù)是M×N,MN表示圖像的像素總數(shù),則歸一化直方圖可以表示為:
(2)
其中,p(rk)表示灰度級rk在圖像中的出現(xiàn)概率,歸一化直方圖所有分量之和等于1。
圖像降噪采用均值濾波,主要方法是先定義一個固定大小和參數(shù)的濾波器模板,該模板通過領(lǐng)域平均法來計算中心像素點(diǎn)的值,對整幅圖像的像素值重新賦值,以達(dá)到圖像降噪的目的,但同時會模糊圖像的邊緣。對于布匹瑕疵圖像,該文使用的是簡單有效的算數(shù)均值濾波器。令Sxy表示中心點(diǎn)在(x,y)處,大小為m×n的濾波器窗口。算術(shù)均值濾波器計算中心點(diǎn)領(lǐng)域像素均值并賦給中心點(diǎn)的過程可以表示為:
(3)
其中,g(s,t)表示原始圖像,f(x,y)表示均值濾波后得到的圖像。
邊緣檢測是圖像增強(qiáng)中的一個重要部分,它通過檢測圖像中亮度變化梯度大的像素點(diǎn)識別圖像的邊緣部分,根據(jù)特定需求可以大幅度地減少原始圖像中的無效數(shù)據(jù)量,保留了圖像重要的結(jié)構(gòu)屬性。該文選擇Sobel邊緣檢測算子,它包含兩組3×3的矩陣,分別為橫向及縱向模板,可以分別檢測圖像的垂直邊緣和水平邊緣。在瑕疵布匹圖像中,瑕疵部分一般都與正常部分的像素值不同,并且在布匹瑕疵檢測中并不關(guān)心正常布匹的紋理特征。而Sobel算子恰好對此細(xì)紋理不敏感,因此可以大幅度減少布匹中與瑕疵部分無關(guān)的特征信息,這大大減少了之后卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)中需要提取的數(shù)據(jù)信息量。
通常將以下兩個模板(見式(4)、式(5))與圖像作平面卷積來檢測圖像邊緣,就可以分別獲得圖像橫向及縱向的亮度差分近似值。
檢測水平邊沿橫向模板Gx:
(4)
檢測垂直邊沿縱向模板Gy:
(5)
圖像中每一個像素點(diǎn)的橫向和縱向梯度近似值的大小可用式(6)來計算:
(6)
通常,為了提高效率,使用不開平方的近似值表示為:
|G|=|Gx|+|Gy|
(7)
如果梯度G大于某一閾值,則認(rèn)為該點(diǎn)(x,y)為邊緣點(diǎn)。
經(jīng)典的CNN模型[14-16](見圖2,圖中省略了激活函數(shù)層)包括卷積層、池化層、全連接層、激活函數(shù)層ReLU和分類器損失函數(shù)層Softmax。
圖2 經(jīng)典CNN結(jié)構(gòu)
C表示卷積,用來提取特征,其計算公式為 :
(8)
輸入特征圖的通道數(shù)為I;輸出特征圖的通道數(shù)為J;xi表示第i個通道輸入特征圖;yi表示第j個通道輸出特征圖;kij表示xi與yj之間的卷積核;*表示卷積操作;bj表示第j個通道輸出特征圖的偏置項,上標(biāo)(r)表示卷積區(qū)域,f表示激活函數(shù),用來增加模型的非線性。
P表示池化,用來減小輸入矩陣的寬高的大小,篩選主要的特征,降低特征的維度,主要方法有均值池化和最大值池化,目的是降低后續(xù)操作中的計算量。
FC表示全連接層,一幅圖像經(jīng)過層層卷積可以提取出數(shù)以千計的特征圖像,全連接層上的神經(jīng)元與這些特征圖像的節(jié)點(diǎn)相連,將這些特征綜合起來送入Softmax分類器中計算分類概率值。
參照AlexNet模型,該文設(shè)計了一個由1個增強(qiáng)層E,3個卷積層C,每個卷積層后接一個ReLU激活函數(shù),3個池化層P,2個全連接層FC,1個Softmax層組成的簡化布匹瑕疵檢測模型(見圖3,其中省略ReLU層)。
圖3 網(wǎng)絡(luò)訓(xùn)練結(jié)構(gòu)
表1給出了該模型的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),其中E為第一層(輸入層)的一個圖像預(yù)處理層,它依次通過三種圖像處理算法,增強(qiáng)輸入層數(shù)據(jù)的特征點(diǎn),剔除大量在布匹瑕疵檢測中干擾機(jī)器學(xué)習(xí)精度的布匹紋理特征,更有利于反映不同類別間的特征差異。
表1 文中模型CNN設(shè)計
根據(jù)目前AI學(xué)習(xí)界在卷積神經(jīng)網(wǎng)絡(luò)中的大量嘗試和經(jīng)驗,結(jié)合該文對于布匹瑕疵特點(diǎn)的分析,模型的設(shè)計原則總結(jié)如下:
(1)對于布匹圖像數(shù)據(jù)規(guī)模小且紋理簡單的特點(diǎn),需要一定量地減少網(wǎng)絡(luò)中參數(shù)的數(shù)量,這樣既可以降低模型的計算量和內(nèi)存占用空間,又可以減少模型過擬合的程度。
(2)在進(jìn)行模型預(yù)測實驗的分析時發(fā)現(xiàn),原始數(shù)據(jù)即使在經(jīng)過數(shù)據(jù)擴(kuò)充后也依然會存在許多相似之處,來源于同一原始圖像擴(kuò)充后的數(shù)據(jù)經(jīng)過圖像增強(qiáng)之后,所保留的瑕疵特征比較相似,這可能造成過擬合。因此,提高原始數(shù)據(jù)的多樣性依舊是該算法的重要工作之一。
布匹樣本均來源于國內(nèi)某知名AI挑戰(zhàn)賽所公開提供的布匹圖像數(shù)據(jù),該文挑選了該批布匹圖像中的主要單色織物(灰色),選取出現(xiàn)布匹瑕疵(a.毛斑、b.吊經(jīng)、c.扎洞、d織稀、e跳花,見圖4),將這5種瑕疵圖像與正常布匹圖像建立布匹瑕疵數(shù)據(jù)集。
圖4 布匹瑕疵樣品
實驗所獲得的原始布匹圖像為普通攝像機(jī)所拍攝,每張圖像分辨率為2 560×1 920,對這些原始圖像進(jìn)行人工的瑕疵判別分類,選取了5種數(shù)量占比較大的瑕疵圖像和正常圖像進(jìn)行樣本采集,每幅圖像的采集分辨率為500×500。對數(shù)量不足的瑕疵圖像進(jìn)行數(shù)據(jù)擴(kuò)充,每個類別得到100張樣本圖像。
文中實驗中,布匹瑕疵圖像增強(qiáng)部分所用到的算法均源于OpenCV庫。布匹瑕疵圖像依次經(jīng)過了直方圖均衡化、均值濾波和邊緣增強(qiáng)的處理,對6種類別部分樣本圖像的處理效果見圖5。
圖5 布匹瑕疵圖像增強(qiáng)效果
其中,第一列表示的是布匹圖像的原始灰度圖,第二列是對第一列進(jìn)行直方圖均衡化后的結(jié)果,第三列是對第二列進(jìn)行均值濾波后的結(jié)果,第四列表示的是對第三列進(jìn)行邊緣檢測的結(jié)果,也是布匹樣本圖像增強(qiáng)后的最終結(jié)果。
由圖5中各類布匹樣本圖像的增強(qiáng)效果可以看出,盡管樣本圖像來自幾種細(xì)紋理不同的單色布匹,原始圖像數(shù)據(jù)采集過程中由于布匹擺放不平整和光照拍攝角度的影響,使得樣本圖像的結(jié)構(gòu)和色調(diào)略有不同,但通過本文所提出的圖像增強(qiáng)算法和檢測算法都能將瑕疵從布匹紋理背景中提取出來。這些實驗性的結(jié)果證明了本文增強(qiáng)算法對布匹瑕疵檢測的有效性。雖然最終結(jié)果中圖像部分瑕疵的細(xì)節(jié)在處理過程中被消除或掩蓋掉了,但與原始圖像對比,瑕疵部分的特征更加明顯了。這為本文CNN模型的特征提取提高了效率和精準(zhǔn)度。
文中實驗重點(diǎn)研究了布匹瑕疵檢測在基于Python開發(fā)語言上的實現(xiàn)效果,實驗的物理環(huán)境為:64位的Windows 10操作系統(tǒng)PC機(jī)一臺,8.00 GB內(nèi)存,CPU為Intel(R)Core(TM)i5-6300HQ,GPU為NVIDIA Geforce GTX 950M,主要軟件環(huán)境有Python 3.6版本、OpenCV 3.1版本、TensorFlow 2.0版本、NVIDIA顯卡加速庫CUDA 10.0版本、神經(jīng)網(wǎng)絡(luò)加速庫cuDNN v7.6.4版本。深度學(xué)習(xí)框架為Keras,將數(shù)據(jù)集中各個類別的圖像隨機(jī)抽取70%作為訓(xùn)練集,10%作為驗證集,20%作為測試集。
為了驗證文中模型對布匹瑕疵檢測的有效性,設(shè)計了另一組不處理原始圖像的CNN模型(參考圖3),該對照模型除了沒有圖像增強(qiáng)層E以外,其余訓(xùn)練參數(shù)皆與文中模型相同。實驗導(dǎo)入模型可視化模塊來直觀地觀察模型的性能,每當(dāng)數(shù)據(jù)訓(xùn)練迭代完一遍,便記錄其訓(xùn)練參數(shù)的歷史數(shù)值,最后通過Matplotlib的圖像功能顯示出來。兩組模型的訓(xùn)練情況見圖6。
對照模型損失度 對照模型精確度 文中模型損失度 文中模型精確度
由圖6可以看出,在文中提出的模型中,驗證集上的損失度曲線和精確度曲線都比對照模型更加趨近于訓(xùn)練集曲線,體現(xiàn)了該模型擁有更好的收斂性,并且誤差也降低到比較低的水平。為了進(jìn)一步驗證模型的有效性,實驗使用各組的測試集數(shù)據(jù)繼續(xù)對兩組模型的性能進(jìn)行測試,結(jié)果如表2所示。可以看出,文中模型相比對照模型的識別準(zhǔn)確率有不錯的提升,錯誤率大幅降低。
表2 模型測試結(jié)果對比
結(jié)合傳統(tǒng)圖像增強(qiáng)技術(shù)和卷積神經(jīng)網(wǎng)絡(luò)算法,針對布匹瑕疵特征數(shù)據(jù)量小和受到布匹紋理特征干擾大的特點(diǎn),提出并設(shè)計了一個簡化的CNN模型,并將樣本數(shù)據(jù)進(jìn)行圖像增強(qiáng)處理后進(jìn)行模型訓(xùn)練。實驗結(jié)果表明:
(1)相對于經(jīng)典的深度卷積神經(jīng)網(wǎng)絡(luò),所使用的簡化CNN模型結(jié)構(gòu)在布匹瑕疵檢測上的內(nèi)存空間占用和計算量更少,模型訓(xùn)練速度較快。
(2)結(jié)合使用直方圖均衡化、均值濾波和邊緣檢測三種傳統(tǒng)圖像增強(qiáng)方法對樣本圖像進(jìn)行增強(qiáng)處理,盡可能地去除掉瑕疵檢測中所不關(guān)心的布匹細(xì)紋理特征,保留布匹的瑕疵特征。
(3)相對于單獨(dú)使用傳統(tǒng)圖像增強(qiáng)技術(shù)或者單獨(dú)使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行布匹瑕疵檢測,將使用傳統(tǒng)增強(qiáng)算法處理過的布匹樣本圖像作為卷積神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù)進(jìn)行訓(xùn)練。減少了使用傳統(tǒng)算法的計算復(fù)雜度,提高了卷積過程中瑕疵特征的有效提取率,降低了模型的計算量和誤差。
基于小規(guī)模布匹瑕疵樣本的訓(xùn)練模型,有可能在海量數(shù)據(jù)的樣本測試中降低效果,擴(kuò)充訓(xùn)練樣本的多樣性和實現(xiàn)輸出分屬各類的概率將是下一步的研究目標(biāo)。