文/查廣豐 胡泓
在工業(yè)生產(chǎn)中,以往的人工檢測由于其費時費力而不再受到關(guān)注,在對產(chǎn)品進(jìn)行缺陷檢測時,更多的是采用機(jī)器視覺的方法,從而達(dá)到提高生產(chǎn)效率和降低成本的目的,進(jìn)而使得產(chǎn)品更加具有競爭力。目前,在機(jī)器視覺方面有兩類算法,分別為數(shù)字圖像處理算法和基于卷積神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)算法。
目前有許多學(xué)者在點膠缺陷檢測領(lǐng)域提出了基于數(shù)字圖像處理的方法,如莊付等人[1]利用傳統(tǒng)圖像處理技術(shù)對太陽電池串滴膠質(zhì)量進(jìn)行檢測,主要通過圖像處理等操作得到膠層的面積、質(zhì)心以及自定義的復(fù)雜度公式進(jìn)行對膠層的質(zhì)量判定,雖然可作為一種太陽電池串滴膠的質(zhì)量評價標(biāo)準(zhǔn),但是整個過程較為繁瑣,需要特定制定各種標(biāo)準(zhǔn),算法泛化性不足。陶思理等人[2]研究出了一套用于檢測干電池封膠質(zhì)量的視覺檢測系統(tǒng),該系統(tǒng)能夠?qū)Ω呻姵胤饽z過程中的多種缺陷進(jìn)行識別,但該系統(tǒng)的圖像處理效率低,圖像傳輸效率還需要改進(jìn)。
現(xiàn)如今,隨著計算機(jī)性能的不斷提升,機(jī)器學(xué)習(xí)在缺陷檢測這一領(lǐng)域由淺層次結(jié)構(gòu)模型慢慢過渡到深層次結(jié)構(gòu)模型,例如支持向 量 機(jī)[3](Support Vector Machines,SVM)、Boosting[4]、最大熵方法[5](如 Logistic Regression,LR等)這一系列的淺層次結(jié)構(gòu)模型在處理圖像、視頻、語音、自然語言等高維數(shù)據(jù)方面表現(xiàn)較差,特征提取難以滿足要求,而深度學(xué)習(xí)技術(shù)彌補(bǔ)了這一缺陷,在提取物體深層次的結(jié)構(gòu)特征方面更具有優(yōu)勢。在工業(yè)缺陷檢測這一領(lǐng)域中,深度學(xué)習(xí)有著至關(guān)重要的作用。李致金等人[6]提出一種基于主成分分析法的深度學(xué)習(xí)模型,構(gòu)建印刷標(biāo)簽檢測系統(tǒng),從中進(jìn)行信息提取和學(xué)習(xí)處理。毛欣翔等人[7]構(gòu)建了基于YOLOv3模型的連鑄板坯表面缺陷檢測平臺。姚明海等人[8]運用深度學(xué)習(xí)模型對磁片表面缺陷進(jìn)行檢測,并達(dá)到了良好的效果。
本文的研究對象是膠條。膠條的缺陷主要分為以下幾種:多膠、少膠、斷膠、扭曲以及含有氣泡。膠條的主要缺陷如圖1所示。
一般在利用深度學(xué)習(xí)算法進(jìn)行缺陷檢測時,首先要確定的是網(wǎng)絡(luò)模型。因為膠條種類分為6類,類別數(shù)量不是很多,故我們初步選擇Alex、Mobile以及Lenet-5三種比較簡單的網(wǎng)絡(luò)模型。在實驗中,我們采集的缺陷圖片數(shù)量為:正常1300張、膠條扭曲355張、膠條斷膠413張、膠條多膠492張、膠條少膠624張、膠條含有氣泡506張,總計3690張圖片。在此基礎(chǔ)上,我們分別利用三種模型對其進(jìn)行訓(xùn)練,最終得到的模型檢測效果以及單張圖片檢測時間如表1所示。
從表1中可以發(fā)現(xiàn),Lenet-5模型的準(zhǔn)確率相對最高,同時其單張圖片的檢測時間也是最少,所以本文最終選擇Lenet-5模型。
Lenet-5模型是Yann LeCun[9]提出的一種經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò),最先用于手寫數(shù)字識別,對于圖像特征提取非常有成效。該模型網(wǎng)絡(luò)結(jié)構(gòu)圖如圖2所示,在不包括輸入層的情況下,整個模型總共為7層,其中包括卷積層、池化層以及全連接層三種類型。
卷積網(wǎng)絡(luò)運算之所以能夠改進(jìn)傳統(tǒng)的機(jī)器學(xué)習(xí)系統(tǒng),是因為其含有以下三個特點:稀疏交互、參數(shù)共享以及等變表示。首先,第一個特征是稀疏交互,主要通過將卷積核的大小改變?yōu)檫h(yuǎn)小于輸入大小來實現(xiàn),從而減少模型訓(xùn)練的計算負(fù)荷并降低模型的存儲要求;其次,第二個特征是參數(shù)共享,其特征在于在模型的同一個層中使用相同的參數(shù),這對模型的存儲也提供了巨大的便利;最后,第三個特點是等變表示,主要是指輸出隨著輸入的變化而變化,它的變化方式是一致的,利用此性質(zhì)可以方便的處理圖形或者時間序列。卷積層得到的特征圖為每個卷積核通過“滑動窗口”的方式提取出輸入數(shù)據(jù)不相同位置的特征[10]。該特征圖是由輸入圖像與卷積核卷積運算之后加上一個偏置,然后通過激活函數(shù)得到的。卷積公式為:
式中,l代表的是目前的卷積層數(shù),k為卷積核,b表示加在每一個卷積核上的偏置,*代表卷積運算,Mapj表示第j個特征圖,f代表激活函數(shù)。
以圖2中的C3層為例,它的上層為S2。S2層中共含有6個特征圖,尺寸為14×14。C3層的卷積核的尺寸大小為5×5,卷積步長為1,且不進(jìn)行全0填充操作,所以C3層得到的特征圖尺寸大小為(14-5+1)/1=10,即10×10,特征圖的個數(shù),即卷積核的個數(shù)為16。卷積的過程示意圖如圖3所示,圖中l(wèi)-1層的特征圖尺寸為6×6×1,經(jīng)過與l層的卷積核卷積運算之后得到了4×4×6的特征圖,即每一個卷積核都會與特征圖進(jìn)行卷積運算,從而得到新的特征圖,而卷積核的個數(shù)也就等于得到的特征圖的個數(shù)。C3層包含的參數(shù)個數(shù)為卷積核參數(shù)和偏置項之和,則每個特征圖的參數(shù)為5×5+1=26個,故訓(xùn)練時總共的訓(xùn)練參數(shù)為26×16=2416個,連接數(shù)為10×10×16×(25+1)=41600個。
表1:各模型的精度以及單張圖片測試時間
表2:經(jīng)典Lenet-5模型連接參數(shù)
表3:改進(jìn)Lenet-5模型連接參數(shù)
表4:改進(jìn)Lenet-5模型性能表
池化層主要是將某一區(qū)域的最大值或者平均值來代替這一區(qū)域范圍在神經(jīng)網(wǎng)絡(luò)上的輸出,有效地縮小矩陣的尺寸,從而減少最后全連接層中的參數(shù)。最常用的兩種池化方法是最大值池化(max-pooling)和平均值池化(meanpooling),具體公式為:
式中,pool(.)代表的是池化函數(shù),最大值池化則取一定范圍下的像素最大值作為輸出結(jié)果,平均值池化則說明將某范圍下的像素平均值作為輸出結(jié)果,每個特征圖包括參數(shù)β和b[11]。
以池化層S4為例,其中包括16個特征圖,特征圖中的每一個節(jié)點都是以C3層中2×2的局部領(lǐng)域作為輸入的,步長為2,由此可得到輸出層的尺寸為輸入出層的四分之一,即5×5。池化過程示意圖如圖4所示,圖中l(wèi)-1層的特征圖尺寸為4×4,在經(jīng)過池化之后,得到的是2×2的特征圖。一般來說,池化層內(nèi)的參數(shù)都是人為設(shè)定的,所以不需要進(jìn)行訓(xùn)練。
從數(shù)據(jù)上可以看到,經(jīng)典Lenet-5模型的準(zhǔn)確率也只有75%,并不能滿足我們的需求,所以我們需要對訓(xùn)練方法進(jìn)行改進(jìn)。本文打算從兩個方面對訓(xùn)練方案進(jìn)行改進(jìn),一是通過數(shù)據(jù)增強(qiáng)得到更多的訓(xùn)練數(shù)據(jù),二是對經(jīng)典的Lenet-5網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行改進(jìn)。
由于實際含有的圖片比較少,而在對模型進(jìn)行訓(xùn)練時,神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量又非常巨大,要想使得這些參數(shù)正常工作則需要大量的數(shù)據(jù)進(jìn)行訓(xùn)練,一種方法是獲得新的數(shù)據(jù),但由于成本較高,故不推薦,第二種方法是對數(shù)據(jù)進(jìn)行增強(qiáng),即利用已有的數(shù)據(jù)進(jìn)行例如翻轉(zhuǎn)、平移或旋轉(zhuǎn)等操作,增加樣本數(shù)量,提高算法的精度。本文中采用亮度和對比度變換兩種操作。
圖1:點膠缺陷樣品圖
在實際生產(chǎn)中,由于現(xiàn)場環(huán)境的多變、機(jī)器的抖動和光源的變換都會引起圖像上亮度和對比度的變化。對圖片進(jìn)行適當(dāng)?shù)牧炼群蛯Ρ榷茸儞Q,能夠有效的增強(qiáng)算法的魯棒性。圖5展示了進(jìn)行亮度變換的效果圖。
由于采集到的數(shù)據(jù)圖片尺寸為800×600,每張圖片包含的信息量太大,并且某些缺陷特征并不是很明顯,顯然經(jīng)典Lenet-5網(wǎng)絡(luò)模型會因為網(wǎng)絡(luò)的學(xué)習(xí)能力不足而產(chǎn)生過擬合,因此不能夠很好的對圖片進(jìn)行而分類。故本文對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了改進(jìn),首先將輸入層的大小由32×32改為28×28,再將圖2中的F5和F6兩個全連接層合并為一層,同時加上dropout層,最后通過softmax激活函數(shù)輸出,具體的結(jié)構(gòu)參數(shù)變化見表2和表3。
從表中可知,模型由之前的7層變?yōu)?層,減少了網(wǎng)絡(luò)的臃腫度,同時在F5全連接層中加入了dropout,
dropout是Hinton[12]在2012年提出的,是對具有深度結(jié)構(gòu)的人工神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化的方法,在學(xué)習(xí)過程中通過將隱含層的部分權(quán)重或輸出隨機(jī)歸零,降低節(jié)點間的相互依賴性,從而實現(xiàn)神經(jīng)網(wǎng)絡(luò)的正則化,降低其結(jié)構(gòu)風(fēng)險。圖6展示了神經(jīng)網(wǎng)絡(luò)在使用dropout前后的對比圖。
圖2:經(jīng)典Lenet-5模型結(jié)構(gòu)
圖3:卷積過程示意圖
本文實驗設(shè)備為個人筆記本電腦,操作系統(tǒng)是Windows 64位,CPU為Inter(R) Core(TM) i5-3230M (頻率2.60GHz),計算機(jī)內(nèi)存為4G。在運用深度學(xué)習(xí)時的框架為Tensorflow,訓(xùn)練時使用生成截斷正態(tài)分布的方法初始化參數(shù),將AdamOptimizer作為優(yōu)化器的優(yōu)化算法,softmax交叉熵函數(shù)作為損失函數(shù),網(wǎng)絡(luò)的超參數(shù)如下:批次處理大小(mini_batch)為128,最大迭代次數(shù)(max_step)為17500,學(xué)習(xí)率(learning_rate)為0.001,學(xué)習(xí)率每100輪更新一次,在加入的dropout層中設(shè)置的參數(shù)為0.5。在經(jīng)過數(shù)據(jù)增強(qiáng)后,各類缺陷圖片的數(shù)量分別為:正常3900張、膠條扭曲1065張、膠條斷膠1239張、膠條多膠1476張、膠條少膠1872張、膠條含有氣泡1518張,總計11070張圖片。
圖7為經(jīng)典的Lenet-5網(wǎng)絡(luò)模型下的訓(xùn)練集損失和測試集損失變化曲線,由于訓(xùn)練的時候觀察到測試集損失一直處于離散狀態(tài),故只訓(xùn)練到6000輪。圖8為改進(jìn)的Lenet-5網(wǎng)絡(luò)模型下的訓(xùn)練集損失和測試集損失變化曲線。從圖中可以明顯的看出,經(jīng)典的Lenet-5網(wǎng)絡(luò)模型的訓(xùn)練集損失趨于穩(wěn)定,但其測試集損失卻一直在變化,且距離訓(xùn)練集還有一定的距離,產(chǎn)生了明顯的過擬合現(xiàn)象。改進(jìn)的Lenet-5網(wǎng)絡(luò)模型在加入dropout層以及數(shù)據(jù)增強(qiáng)后減少了模型過擬合程度。
由于模型的準(zhǔn)確率受到多方面的因素影響,故本文在保持F1指標(biāo)最佳的情況下對超參數(shù)進(jìn)行了調(diào)試,最終得到的算法性能表如表4所示。
從表中我們可以看出,相比于改進(jìn)之前的方案,檢測的準(zhǔn)確率得到了大幅提升。重要的是,每一類缺陷的檢測準(zhǔn)確率都很高,達(dá)到了實際生產(chǎn)中的精度需求。
本文首先通過比較Alex、Mobile以及Lenet-5三種模型在點膠圖片分類中的表現(xiàn),最終選擇了Lenet-5網(wǎng)絡(luò)模型,然后運用數(shù)據(jù)增強(qiáng)技術(shù)以及對經(jīng)典的Lenet-5網(wǎng)絡(luò)模型結(jié)構(gòu)進(jìn)行修改得到改進(jìn)的訓(xùn)練方法。實驗表明,經(jīng)典的Lenet-5模型對于點膠圖片存在過擬合現(xiàn)象,訓(xùn)練精度不是很高,改進(jìn)的Lenet-5模型由于加入了dropout層以及在擁有大量數(shù)據(jù)圖片下的基礎(chǔ)上減少了過擬合現(xiàn)象,且在各類缺陷圖片的檢測精度上也存在一定的優(yōu)勢,達(dá)到了工業(yè)檢測中對點膠缺陷檢測精度的要求。
圖4:池化過程示意圖
圖5:亮度變化對比
圖6:dropout原理圖
圖7:經(jīng)典Lenet-5模型交叉熵?fù)p失
圖8:改進(jìn)Lenet-5模型交叉熵?fù)p失