任秋霖,任德均,李 鑫,閆宗一,曹林杰,唐 洪
(四川大學(xué)機械工程學(xué)院,四川 成都 610065)
玻璃瓶具有外形美觀、密封性好、化學(xué)性能穩(wěn)定等優(yōu)點,在制藥行業(yè)應(yīng)用廣泛。醫(yī)用玻璃瓶要直接接觸藥品,有的需要對藥品進(jìn)行長時間的貯存,因此醫(yī)用玻璃瓶的質(zhì)量直接關(guān)系到藥品的質(zhì)量,同時關(guān)乎到人的健康和安全。
在藥品灌裝之前需要對玻璃瓶進(jìn)行洗瓶工序,玻璃瓶在生產(chǎn)制造和輸送過程中,玻璃瓶口可能會存在少量瓶口裂縫、瓶口殘缺等缺陷,使用有缺陷的玻璃瓶容易出現(xiàn)醫(yī)藥安全問題,需要對洗瓶后少量有瓶口缺陷的玻璃瓶進(jìn)行剔除。對于玻璃瓶口的缺陷檢測大多廠家依賴人工檢測,對每個玻璃瓶洗瓶后目視判斷是否有缺陷。這種方法執(zhí)行效率低、勞動強度大、受主觀因素干擾大,同時達(dá)到無菌條件難度大、成本高,檢測的精度和可靠性不高。
相比于人工目視檢測,基于機器視覺的非接觸式玻璃瓶自動檢測在速度和精度上有很大的優(yōu)勢,同時還能避免對玻璃瓶產(chǎn)生二次污染。國外玻璃瓶的檢測技術(shù)起步較早,上世紀(jì)80年代,德國海富公司就開發(fā)了基于機器視覺的玻璃瓶在線檢測系統(tǒng)[1]。目前,機器視覺系統(tǒng)因為其檢測速度快、精度高、無人化等優(yōu)點,已廣泛應(yīng)用在工業(yè)生產(chǎn)中的質(zhì)量檢測環(huán)節(jié),但在實際應(yīng)用中也存在很多問題和挑戰(zhàn)。工業(yè)場景中存在光照變化、速度波動、透視失真、遮擋等情況,傳統(tǒng)的特征提取算法所提取的特征不足以應(yīng)對這些狀況,很多算法在實例中的應(yīng)用效果差[2]。除此之外,醫(yī)療玻璃瓶口在洗瓶后還存在缺陷部位的透明性和水滴的干擾,給傳統(tǒng)的特征提取方法帶來了很大的挑戰(zhàn)。
近年來,隨著以卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)為代表的深度學(xué)習(xí)模型被證實在圖像特征提取方面有著強大的能力,有監(jiān)督的深度學(xué)習(xí),如缺陷分類、缺陷檢測、缺陷分割等方法已廣泛應(yīng)用在工業(yè)產(chǎn)品質(zhì)量檢測領(lǐng)域[3]。有監(jiān)督的方法需要較多的缺陷監(jiān)督樣本數(shù)據(jù)用于訓(xùn)練,而在產(chǎn)品生產(chǎn)制造過程中產(chǎn)生的缺陷是未知的,缺少缺陷樣本,同時隨著設(shè)備及工藝的改進(jìn),少量新缺陷類型也可能會出現(xiàn),導(dǎo)致存在的缺陷類別多、數(shù)量少。因此,很難以低缺陷率來提供足夠監(jiān)督學(xué)習(xí)的缺陷樣本進(jìn)行訓(xùn)練,無法學(xué)習(xí)到所有的缺陷樣本。
相比之下,工業(yè)生產(chǎn)中會產(chǎn)生大量沒有任何缺陷的正樣本數(shù)據(jù),本文依賴學(xué)習(xí)正樣本數(shù)據(jù)之間的內(nèi)在特征表示來檢測缺陷類別多、數(shù)量少的缺陷樣本[4]。本文在卷積自編碼器結(jié)構(gòu)的基礎(chǔ)上加入注意力模塊和上下文模型來學(xué)習(xí)正樣本的內(nèi)在數(shù)據(jù)表示,同時改進(jìn)損失函數(shù),提出一種結(jié)合MS-SSIM和L1損失的損失函數(shù)來優(yōu)化生成圖像的質(zhì)量,提高缺陷檢測準(zhǔn)確度和缺陷區(qū)域定位的準(zhǔn)確性。
異常檢測是指在數(shù)據(jù)中發(fā)現(xiàn)不符合預(yù)期行為的模式的問題,這些不一致的模式通常被稱為異常,也稱作離群點[5]。在工業(yè)圖像上的無監(jiān)督異常缺陷檢測方法大致可分為基于圖像重構(gòu)[6]、基于潛在特征空間、基于Loss profile空間、基于正則化流結(jié)合反向傳播梯度信息這4種。
Bergmann等人[7]利用Student-Teacher框架在MVTec AD數(shù)據(jù)集上實現(xiàn)了無監(jiān)督缺陷檢測和像素級異常分割。當(dāng)Student網(wǎng)絡(luò)的輸出與Teacher網(wǎng)絡(luò)的輸出不同時,即認(rèn)為異常。Chu等人[8]利用正常樣本和異常樣本的重構(gòu)損失(Reconstruction loss)隨迭代次數(shù)的不同來實現(xiàn)缺陷檢測,將樣本缺陷的空間從通常的圖像空間和特征空間轉(zhuǎn)移到了Loss profile空間。為了解決缺陷檢測任務(wù)中缺陷樣本量少的問題,Rudolph等人[9]提出了DifferNet網(wǎng)絡(luò)。該網(wǎng)絡(luò)利用卷積神經(jīng)網(wǎng)絡(luò)提取缺陷特征,并利用歸一化流來估計這些特征的密度。相比于基于潛在特征空間和基于Loss profile空間等異常檢測方法,基于圖像重建的方法在圖像缺陷檢測任務(wù)上取得了顯著的成果。Zong等人[10]提出了在深度自編碼器中對編碼特征和重構(gòu)誤差進(jìn)行聯(lián)合建模方法。Akcay等人[11]提出了一種新穎的缺陷檢測模型GANomaly,通過GAN進(jìn)行圖像重構(gòu)來完成缺陷檢測任務(wù)。Schlegl等人[12]利用深度卷積生成式對抗網(wǎng)絡(luò)來尋找圖像和像素層面上的異?,F(xiàn)象。Zimmerer等人[13]使用變量自動編碼器(Variational auto-encoder)來定位大腦圖像的異常(腫瘤)區(qū)域。
基于卷積自編碼器圖像重構(gòu)的缺陷檢測方法是通過學(xué)習(xí)正樣本的數(shù)據(jù),當(dāng)測試樣本存在異常時,重構(gòu)的圖片與測試圖片存在較大的差異,即有較大的重構(gòu)誤差,通過重構(gòu)誤差來判斷和分割異常。本文針對傳統(tǒng)圖像處理算法和有監(jiān)督深度學(xué)習(xí)算法在醫(yī)用玻璃瓶口缺陷檢測中存在的局限性進(jìn)行簡要的分析,參考卷積自編碼器(Convolutional Auto-Encoder, CAE)結(jié)構(gòu),設(shè)計一種使用重構(gòu)殘差檢測玻璃瓶口缺陷的檢測算法。
對工業(yè)現(xiàn)場采集到的玻璃瓶口的數(shù)據(jù),首先需要進(jìn)行預(yù)處理操作裁剪出瓶口感興趣區(qū)域(Region of Interest, RoI),去除其余無需檢測的干擾區(qū)域。本文采用基于形狀的模板匹配算法[14]來裁剪出RoI區(qū)域,預(yù)處理的具體流程如下:1)在模板圖像中指定模板RoI并創(chuàng)建模板;2)提取指定模板RoI的輪廓,對提取到的輪廓做形態(tài)學(xué)處理,便于下一步搜索模板;3)遍歷所有采集到的圖像進(jìn)行模板匹配,將匹配到的區(qū)域裁剪后保存為新的數(shù)據(jù)。
為適應(yīng)工業(yè)應(yīng)用中對檢測算法實時和高效的要求,本文根據(jù)卷積自動編碼器模型結(jié)構(gòu)進(jìn)行改進(jìn),使該模型能夠準(zhǔn)確檢出異常和分割異常區(qū)域。同時,使模型結(jié)構(gòu)的參數(shù)量盡可能少,以便達(dá)到實時檢測效果?;诰矸e自編碼器的缺陷檢測算法整體模型結(jié)構(gòu)如圖1所示。模型結(jié)構(gòu)中主要包括2個部分:1)編碼器(Encoder),編碼器由卷積模塊(CBNModule)、下采樣模塊(DownModule)、卷積注意力模塊(CBAMModule)和上下文模塊(ContextModule)組成,編碼器提取輸入數(shù)據(jù)到潛在編碼空間;2)解碼器(Decoder),解碼器由上采樣模塊(UpModule)組成,解碼器對編碼h進(jìn)行解碼然后重構(gòu)到輸出數(shù)據(jù)。卷積模塊包含一個3×3卷積層、一個批歸一化(Batch Normalization, BN)[15]層和一個LeakyReLU[16]非線性激活層,下采樣模塊中包含一個卷積模塊和一個最大池化層。
圖1 基于卷積自編碼器的缺陷檢算法模型結(jié)構(gòu)
通過在編碼器中堆疊卷積模塊和下采樣模塊來提取訓(xùn)練數(shù)據(jù)中的特征,將提取到的特征壓縮到編碼空間h中。在卷積模塊堆疊的網(wǎng)絡(luò)中,卷積層只建立了局部范圍內(nèi)像素間的關(guān)系,感受野受限,沒有兼顧全局范圍內(nèi)的特征之間的關(guān)聯(lián)性。同時,由卷積操作參數(shù)共享的特性,將所有的特征視為同等重要,沒考慮到人眼對于不同特征的視覺敏感度[17]。
為引導(dǎo)自編碼器缺陷檢測模型關(guān)注重點區(qū)域,借鑒人類視覺注意力機制,自適應(yīng)學(xué)習(xí)不同特征的權(quán)重,本文在編碼器中嵌入卷積注意力模塊[18](Convolutional Block Attention Module, CBAM)來學(xué)習(xí)不同重要性特征的映射,在學(xué)習(xí)中對重要特征和次要特征賦予不同的權(quán)重。卷積注意力模塊主要包括通道注意力和空間注意力2個部分,如圖2所示。
圖2 卷積注意力模塊
文獻(xiàn)[19]中的SSH上下文模塊,在模型結(jié)構(gòu)中加入上下文模塊(Context Module, CM),該模塊由4個卷積模塊組成,如圖3所示。通過卷積模塊的串聯(lián)和并聯(lián)來獲得更大的感受野,學(xué)習(xí)局部和全局像素間的關(guān)系,兼顧到不同特征之間的全局關(guān)系,同時減小模型的參數(shù)量,減少計算量。
圖3 上下文模塊
均方誤差(Mean Square Error, MSE)常用來計算重構(gòu)圖像與輸入圖像之間的差異,MSE又稱為L2損失,L2作為重構(gòu)損失,其值越小,生成圖像與輸入圖像差異越小,重構(gòu)效果越好。
(1)
(2)
式(2)對應(yīng)SSIM中亮度相似度計算,μx和μy為輸入和重構(gòu)圖像像素塊(Patch)的均值,c1為常數(shù)。
(3)
式(3)對應(yīng)SSIM中對比相似度計算,σx和σy為輸入和重構(gòu)圖像像素塊的標(biāo)準(zhǔn)差,c2為常數(shù)。
(4)
式(4)對應(yīng)SSIM中結(jié)構(gòu)相似度計算,σxy為輸入和重構(gòu)圖像像素塊的協(xié)方差,c3為常數(shù)。
SSIM(x,y)=[l(x,y)]α[c(x,y)]β[s(x,y)]γ
(5)
其中α、β、γ用于調(diào)節(jié)3部分的權(quán)重,由文獻(xiàn)[22]可知,通常取α=β=γ=1,c1=0.01,c2=2c3=0.03,即:
SSIM(x,y)=l(x,y)·cs(x,y)
(6)
SSIM相比L2損失考慮像素領(lǐng)域之間的關(guān)系,從人類視角的角度來考慮亮度、對比度和結(jié)構(gòu)3個指標(biāo)。但SSIM對不一致偏差衡量效果差,可能會導(dǎo)致亮度變化或顏色偏移,導(dǎo)致重構(gòu)圖像會更加暗淡[21]。
海上千峰閣病輿,傍花隨柳意何如?老誰靜里都無事,笑此山中亦著書。帝伯皇王鋪敘里,乾坤今古笑談余。我看此意終誰領(lǐng),略與人間一破除。
為提高重構(gòu)圖像質(zhì)量,本文中采用結(jié)合尺度變化結(jié)構(gòu)相似性的MS-SSIM[23]與L1損失組合的損失函數(shù)作為重構(gòu)損失。MS-SSIM能對高頻區(qū)域的對比度保留,L1能對顏色和亮度保留。
(7)
其中通常設(shè)置α=βj=1,j={1,…,M},M是金字塔的級數(shù)。
本文提出的損失函數(shù)為:
Loss=λ·(1-MS-SSIM)+(1-λ)·L1
(8)
其中,λ是調(diào)節(jié)MS-SSIM和L1的權(quán)重系數(shù),λ∈(0,1)。
在圖4中,本文展示了模型的推理過程。當(dāng)將正常樣本(Good sample)A和異常樣本(NG sample)B輸入模型時,輸出的重構(gòu)圖像分別是Ar和Br。輸入為正樣本時重構(gòu)誤差較小,輸入為缺陷樣本時重構(gòu)誤差較大。
圖4 模型推理過程
本文中使用峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)[24]來衡量重構(gòu)誤差,PSNR值越大,重構(gòu)圖像質(zhì)量越好,重構(gòu)誤差越小。輸入圖像A與重構(gòu)圖像Ar之間的PSNR計算公式如下:
(9)
其中,MAXX為輸入圖片中像素的最大值。
使用訓(xùn)練好的模型在驗證集中計算正樣本和缺陷樣本的PSNR值,異常閾值是根據(jù)2組PSNR值確定的,以此閾值來判斷異常。
異常定位就是將圖像中的異常區(qū)域分割出來,便于直觀地指示缺陷位置。將缺陷圖像B輸入訓(xùn)練好的網(wǎng)絡(luò),重構(gòu)網(wǎng)絡(luò)將缺陷圖像重構(gòu)為正常圖像Br,對重構(gòu)圖像和輸入圖像進(jìn)行差分獲得差分圖像Bdiff,如圖4所示。
根據(jù)差分圖像Bdiff,則可以定位異常區(qū)域。但是差分圖像中存在噪聲,影響缺陷分割,因此本文對差分圖像進(jìn)行中值濾波處理去除椒鹽噪聲;然后再對處理后的圖像做冪律變換,突顯出缺陷區(qū)域和抑制噪聲區(qū)域;最后使用自適應(yīng)閾值分割獲得異常區(qū)域,如圖4中的Bres。
本文使用的數(shù)據(jù)集是由工業(yè)現(xiàn)場采集的洗瓶工序后醫(yī)用玻璃瓶口圖片組成,圖片原始分辨率為1280×1024,裁剪RoI后縮放到224×224。采集的數(shù)據(jù)包含正樣本數(shù)據(jù)6180張,缺陷樣本數(shù)據(jù)70張。
本文提出的算法只需對正樣本數(shù)據(jù)進(jìn)行訓(xùn)練,學(xué)習(xí)正樣本中的潛在特征分布,使用驗證集來確定異常閾值,同時對提出的損失函數(shù)有效性進(jìn)行驗證。對正樣本類別數(shù)據(jù)(Good)按照70%訓(xùn)練集、15%的驗證集和15%的測試集進(jìn)行劃分;缺陷樣本(NG)按照驗證集和測試集各50%來進(jìn)行劃分。
工業(yè)現(xiàn)場采集的數(shù)據(jù)缺陷樣本數(shù)據(jù)極少且采集周期長,數(shù)據(jù)獲取難度大。為驗證算法性能,同時防止類別不均衡影響測試結(jié)果,根據(jù)已有缺陷樣本的缺陷特征,模擬生成缺陷樣本。隨機裁剪缺陷區(qū)域,對裁剪后的樣本區(qū)域進(jìn)行隨機旋轉(zhuǎn)、縮放和灰度變換等,隨機選擇測試集中700張正樣本數(shù)據(jù),將缺陷隨機添加到瓶口區(qū)域,生成700張缺陷樣本數(shù)據(jù)作為測試集來測試算法的性能。數(shù)據(jù)劃分設(shè)置如表1所示。
表1 醫(yī)用玻璃瓶口數(shù)據(jù)劃分設(shè)置
本文的實驗在配備GPU的計算機上進(jìn)行,使用系統(tǒng)為Ubuntu16.04 LTS,內(nèi)存8 GB,CPU為Intel CPU i7-3770 3.4 GHz,GPU為NVIDIA GeForce GTX 1070,使用的深度學(xué)習(xí)框架為PyTorch。
為評估算法檢測的效果,本文采用召回率(Recall, R)、精確率(Precision, P)、漏檢率(Skip Rate,SR)和誤檢率(Overkill Rate,OR)這4個指標(biāo)對檢測效果進(jìn)行評估,定義如下:
(10)
(11)
(12)
(13)
式中,TP為正樣本(Good)中檢測為正樣本的個數(shù),F(xiàn)N為正樣本中檢出為缺陷(NG)的個數(shù),F(xiàn)P為缺陷樣本中檢測為正樣本的個數(shù),TN為缺陷樣本中檢出缺陷的個數(shù)。
本文在損失函數(shù)中通過選用不同的權(quán)重系數(shù)λ來調(diào)節(jié)優(yōu)化重構(gòu)網(wǎng)絡(luò),使用訓(xùn)練好的不同權(quán)重的模型對驗證集進(jìn)行驗證。實驗中權(quán)重系數(shù)λ的范圍為0~1,步長0.25,同時加入L2損失作為對比。
實驗結(jié)果如圖5所示,圖中橫坐標(biāo)表示PSNR值,縱坐標(biāo)表示與PSNR值對應(yīng)的樣本數(shù)量,灰色代表正樣本,黑色方框代表缺陷樣本,虛線是缺陷樣本(NG)的最大PSNR值,點畫線是正樣本(Good)的最小PSNR值。
圖5 驗證集上不同權(quán)重?fù)p失函數(shù)PSNR值對比
從圖中可以看出正樣本PSNR值與樣本數(shù)量分布直方圖符合正態(tài)分布,且當(dāng)λ值增大時正常樣本分布均值增大、方差減?。蝗毕輼颖镜姆植茧S機,且PSNR值較小。通過正樣本和缺陷樣本的分布可知,正樣本的分布較為集中且PSNR值較大,隨著λ值的增大,正樣本的重構(gòu)誤差減小;缺陷樣本分布隨機且PSNR值較小,重構(gòu)誤差大。
使用不同權(quán)重系數(shù)損失函數(shù)訓(xùn)練的模型在驗證集上對檢測效果進(jìn)行評估,評估結(jié)果如表2所示。
表2 驗證集上不同權(quán)重系數(shù)的檢測效果
由表2可知,當(dāng)λ=0,即損失函數(shù)為L1損失時,漏檢和誤檢率較大;當(dāng)λ=0.75時,漏檢率和誤檢率為0,在驗證集上,模型能夠準(zhǔn)確檢出;當(dāng)λ=1,即為MS-SSIM損失時,存在漏檢和誤檢率;當(dāng)采用L2損失時,誤檢和漏檢較大。因此,選擇權(quán)重為λ=0.75時的損失函數(shù)模型檢測的性能最佳。損失函數(shù)權(quán)重對比實驗結(jié)果驗證了本文采用的結(jié)合尺度變化結(jié)構(gòu)相似性的MS-SSIM與L1損失相結(jié)合的損失函數(shù)作為重構(gòu)損失的有效性,通過該損失函數(shù)訓(xùn)練優(yōu)化的網(wǎng)絡(luò)能夠較好地學(xué)習(xí)正樣本的潛在特征分布,較好地通過重構(gòu)誤差檢測出缺陷樣本。
(a) 真實缺陷樣本檢測結(jié)果
圖6為使用λ=0.75時的損失函數(shù),在測試集中對缺陷樣本和合成缺陷樣本的異常定位結(jié)果,從左到右依次是輸入圖、重構(gòu)圖、重構(gòu)誤差圖和缺陷定位圖。從圖中可以看出,本文提出的圖像重構(gòu)網(wǎng)絡(luò)能夠?qū)惓颖局亟檎颖?,同時能夠根據(jù)重構(gòu)誤差來判斷異常和確定異常區(qū)域。
為驗證本文提出的缺陷檢測算法對醫(yī)用玻璃瓶口表面缺陷檢測的有效性,分別對卷積自編碼器(CAE Baseline)網(wǎng)絡(luò)、加入卷積注意力機制的CAE+CBAM網(wǎng)絡(luò)、加入上下文模塊的CAE+CM網(wǎng)絡(luò)以及本文的方法在測試集上對檢測效果進(jìn)行了對比,并對主流的圖像重構(gòu)算法SSIM-AE、AnoGAN和VAE在醫(yī)用玻瓶口數(shù)據(jù)上進(jìn)行了訓(xùn)練和測試,對比和測試結(jié)果如表3所示。
表3 測試集上不同檢測算法檢測效果
由表3可知,在檢測精度上,本文提出的方法在測試集上精確率達(dá)到了99.45%,召回率提高到97.63%,漏檢率為0.55%,誤檢率降低到2.93%;在檢測速度方面,加入了CBAM和CM模塊的本文方法平均耗時僅增加了3 ms左右。對比檢測效果可知,本文方法對異常樣本有較大的重構(gòu)誤差,能夠較好地區(qū)分正樣本和異常樣本。由表3的結(jié)果還可知,本文方法在檢測精度上均優(yōu)于其他算法,但在檢測速度上比AnoGAN和VAE低,略低于SSIM-AE的檢測速度,但差別很小。在實際生產(chǎn)中,對檢測精度要求更高,本文方法的檢測速度完全滿足需求,同時檢測精度高,綜合性能最優(yōu)。
本文提出了一種基于卷積自編碼器的醫(yī)用玻璃瓶缺陷檢測方法。在重構(gòu)網(wǎng)絡(luò)中加入結(jié)合通道注意力和空間注意力的卷積注意力模塊,參照人類視覺機制,自動學(xué)習(xí)不同特征的重要程度,關(guān)注重要特征,弱化不重要特征,減少重建圖像與原始數(shù)據(jù)之間的潛在特征映射的冗余;同時,加入的上下文模塊,有助于對全局的特征進(jìn)行自適應(yīng)學(xué)習(xí)。本文提出將多尺度結(jié)構(gòu)相似性損失和L1損失相結(jié)合的方法,更好地對紋理、邊緣等細(xì)節(jié)進(jìn)行重構(gòu)。利用醫(yī)用玻璃瓶口數(shù)據(jù),提出了使用峰值信噪比(PSNR)來衡量重構(gòu)誤差,并利用重構(gòu)誤差來區(qū)分正常數(shù)據(jù)與異常數(shù)據(jù),在瓶口數(shù)據(jù)上進(jìn)行了驗證,結(jié)果證明能夠準(zhǔn)確區(qū)分異常,同時利用重構(gòu)誤差對缺陷區(qū)域準(zhǔn)確分割定位。這種基于正樣本的缺陷檢測技術(shù)可以在工業(yè)場景中以較低的成本應(yīng)用于各種缺陷檢測場景。