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