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