張 良,張衛(wèi)華,周激流
(1.四川大學電子信息學院,成都 610065;2.四川大學計算機學院,成都 610065)
在藥瓶產(chǎn)品生產(chǎn)過程中,瓶口容易發(fā)生破碎。破碎后的藥瓶不能用以存儲藥品(圖1),因此,對瓶口進行缺陷檢測是一個非常重要的環(huán)節(jié)。在對藥瓶進行缺陷檢測的過程中,需要對藥瓶進行分類,篩選出有缺陷的瓶口;而在傳統(tǒng)的工業(yè)生產(chǎn)過程中,大部分還在使用人工篩選,篩選的速度和質(zhì)量都與人疲勞程度相關(guān)聯(lián),無法滿足工業(yè)自動化和智能化要求。隨著計算機技術(shù)以及存儲器的高速發(fā)展,利用深度學習的方法進行藥瓶瓶口缺陷檢測已經(jīng)被大規(guī)模的應(yīng)用于生產(chǎn)之中。
深度學習在最近十年里高速發(fā)展,在計算機視覺領(lǐng)域、自然語言處理領(lǐng)域、語音識別領(lǐng)域以及生物醫(yī)學相關(guān)領(lǐng)域都取得了較為顯著的成果,并逐步應(yīng)用于工業(yè)生產(chǎn)和日常生活中;使用深度學習對工業(yè)產(chǎn)品的缺陷檢測也逐漸成為一種主流的方式。周顯恩提出一種基于改進測地線距離變換與模板匹配的瓶底缺陷檢測方法,該算法能夠?qū)ζ靠谌毕葸M行全面的檢測,但對圖像本身的質(zhì)量要求較高;羅時光以瓶口的周長、圓形度和相對圓心距為特征,使用卷積神經(jīng)網(wǎng)絡(luò)對瓶口缺陷進行識別,達到了較好的檢測效果;張帥使用了兩種卷積神經(jīng)網(wǎng)絡(luò)對瓶口缺陷進行分類,在其給定實驗條件下準確率達到了95%,能夠較好的完成對缺陷瓶口的分類。總體而言,深度學習能夠有效地提高缺陷檢測的效率,推動瓶口檢測智能化發(fā)展,被越來越多的應(yīng)用于瓶口缺陷檢測當中。
卷積神經(jīng)網(wǎng)絡(luò)能夠有效地提取圖像特征,對給定的圖像進行正確分類,從而達到缺陷檢測的目標;CaffeNet是一種較為常見的卷積神經(jīng)網(wǎng)絡(luò),其是由五個卷積層、三個全連接層構(gòu)成,能夠有效地提取圖像高維特征。本文主要是使用調(diào)整后的CaffeNet對工業(yè)生產(chǎn)中的藥瓶瓶口進行檢測,測試條件為CPU、GTX 1060 Mo?bile、GTX Titan X Pascal和華為Atlas200DK,通過對比在同一權(quán)重文件下對同一測試數(shù)據(jù)集進行識別所需要的功耗,以探求一種低功耗、高效率瓶口缺陷檢測方法。
由于當前還不存在一個完整適用于瓶口缺陷檢測的數(shù)據(jù)集,根據(jù)藥瓶生產(chǎn)過程瓶口完整狀態(tài)進行分類,本文主要區(qū)別完整瓶口和缺陷瓶口兩種,創(chuàng)建了一個瓶口數(shù)據(jù)集,其中完整瓶口數(shù)量為300張,缺陷瓶口數(shù)量為300張,共600張瓶口樣本圖片,瓶口樣本來自于實際工業(yè)生產(chǎn)。由于陶瓷瓶口表面具有一定的反光性,完整瓶口之間的區(qū)分度微小,缺陷瓶口之間的差別較大,在拍攝時應(yīng)采用較高分辨率工業(yè)相機進行拍攝以保留瓶口特征并減少圖像背景的影響,因此需要選擇合適亮度的環(huán)狀光源對藥瓶瓶口進行拍攝,具體見圖1所示。
圖1 完整藥瓶、瓶口和缺陷藥瓶、瓶口示例
卷積神經(jīng)網(wǎng)絡(luò)本質(zhì)上是求在滿足給定輸入和輸出的情況下各個神經(jīng)網(wǎng)絡(luò)層上的權(quán)重參數(shù)信息,在整個模型輸入交叉熵損失最小時,求得權(quán)重文件;卷積神經(jīng)網(wǎng)絡(luò)具有極強的泛化能力,能夠提取到圖像高維特征,可以提取到迷糊、失真圖片的特征。一般而言,常見神經(jīng)網(wǎng)絡(luò)含有兩個或以上的卷積層、兩個及以上的池化層以及一個全連接層。本文所采用的的網(wǎng)絡(luò)是CaffeNet,CaffeNet是AlexNet的在深度學習框架caffe中的實現(xiàn)版本,AlexNet在2012年ImageNet競賽中獲得冠軍,top-5的錯誤率達到17.0%,其在常規(guī)的圖像分類任務(wù)上達到了較高的準確率,對神經(jīng)網(wǎng)絡(luò)的發(fā)展奠定了十分重要的發(fā)展基礎(chǔ),在實際問題中的應(yīng)用較為廣泛,CaffeNet在具體的網(wǎng)絡(luò)結(jié)構(gòu)實現(xiàn)上與AlexNet有部分差異,為了達到本實驗分類任務(wù)的要求,具體的網(wǎng)絡(luò)結(jié)構(gòu)結(jié)構(gòu)、參數(shù)設(shè)置詳見下文介紹。
本文所使用的網(wǎng)絡(luò)結(jié)構(gòu)沿用了CaffeNet的總體框架,包含五個卷積層、三個全連接層,其中每一個卷積層中使用Relu作為激活函數(shù),Relu激活函數(shù)相比于Sigmoid和tanh能夠加速網(wǎng)絡(luò)收斂的速度,相比于AlexNet第一個卷積層、第二個卷積層以及第五個卷積層后面有池化層,池化層位于局部相應(yīng)歸一化層之前,池化層采用的是最大池化,使用最大池化能夠在保持圖像原有特征的基礎(chǔ)上有效地降低整個網(wǎng)絡(luò)的參數(shù)數(shù)量,具體網(wǎng)絡(luò)各層參數(shù)如表1:
表1 網(wǎng)絡(luò)各層參數(shù)
在上述表格中未對第一、二、五卷積層后池化層的卷積核等參數(shù)進行詳細介紹,詳細可參照圖2所示具體網(wǎng)絡(luò)結(jié)構(gòu)。
圖2 本文網(wǎng)絡(luò)結(jié)構(gòu)
為了提高對缺陷瓶口的識別準確率,需要對圖中第八層做出相應(yīng)的修改。在本實驗的條件下,樣本分為兩類,一類是缺陷品,另一類是正樣本。因此對于最后一層輸出神經(jīng)元個數(shù)為2,為了提高模型的泛化能力以及整體網(wǎng)絡(luò)識別的準確率與魯棒性,在第六層卷積層和第七層卷積層上使用dropout方法,dropout參數(shù)設(shè)置為0.5。同時設(shè)置本網(wǎng)絡(luò)的初始化學習速率為0.001,訓(xùn)練集樣本批次為20,驗證集批次為50,整個網(wǎng)絡(luò)的最大迭代次數(shù)為500,在訓(xùn)練的過程中采用隨機梯度下降法訓(xùn)練網(wǎng)絡(luò),最大迭代次數(shù)為500次,每一層的初始學習速率設(shè)置為0.001,每次迭代訓(xùn)練樣本數(shù)量為64張圖片,初始動量設(shè)置為0.9,更新權(quán)重過程中權(quán)重衰減系數(shù)為0.0005,且權(quán)重更新規(guī)則如下:
其中代表迭代次數(shù),代表動量參數(shù),代表學習速率,是指在批次訓(xùn)練過程中損失函數(shù)對權(quán)重進行求偏導(dǎo),使用均值為0、方差為0.01高斯分布正態(tài)曲線對權(quán)重進行初始化,第一、三、八層初始偏置設(shè)置為0,第二、四、五、六、七層初始偏置設(shè)置為1。關(guān)鍵參數(shù)設(shè)置情況見表2。
表2 網(wǎng)絡(luò)初始參數(shù)
損失函數(shù)的大小直接和網(wǎng)絡(luò)的泛化能力相關(guān)。在通常情況下,網(wǎng)絡(luò)的損失函數(shù)越小,網(wǎng)絡(luò)分類的準確率越高,即網(wǎng)絡(luò)分類結(jié)果就越符合實際工業(yè)生產(chǎn)分類的實際。因此,本文采用隨機梯度下降法以優(yōu)化本網(wǎng)絡(luò)的損失函數(shù),損失函數(shù)表示為:
本實驗主要是使用Python與C++實現(xiàn),主要環(huán)境是Ubuntu18.04內(nèi)存32 G、顯存為12 G的GTX Titan X Pascal顯卡、顯存為6G的GTX 1060 Mobile顯卡以及華為Atlas200DK。At?las200DK全稱為Atlas 200 Developer Kit,可作為邊緣設(shè)備使用,主要包含Atlas 200 DK AI加速模塊、圖像音頻接口芯片(Hi3559C)和LAN SWITCH三個模塊,其AI加速模塊可以加深度學習的推理速度。實驗第一步需要在GPU支持下對數(shù)據(jù)進行訓(xùn)練,第二步需要測試和計算在使用CPU、GTX Titan X Pascal、GTX 1060 Mo?bile以及Atlas200DK的情況下所需要的功耗和時間。
對于本實驗樣本數(shù)據(jù)集,從中隨機選取500張作為訓(xùn)練集,剩余的100張作為測試集,在制作兩種數(shù)據(jù)集時對完整瓶口和缺陷瓶口進行隨機打亂。具體的訓(xùn)練流程是首先從訓(xùn)練數(shù)據(jù)集讀取一張圖片輸入到網(wǎng)絡(luò),通過網(wǎng)絡(luò)的卷積層和池化層對輸入圖像的特征進行提取,之后通過三層全連接層對上層得到的圖像特征進行集合輸出,計算理想輸出和實際出處之間的誤差,在輸出層無法得到理想的輸出結(jié)果時,需要對損失函數(shù)進行優(yōu)化,進入反向傳播過程,更新各層的權(quán)重,直至損失函數(shù)的值達到全局最小或是為0可得到適合本樣本的權(quán)重值;每訓(xùn)練50次對測試數(shù)據(jù)集進行測試一次,每進行一次測試,對測試的準確率進行輸出打印并記錄。最終測試數(shù)據(jù)集的準確率和loss圖像如圖3所示。
由圖3可知,迭代次數(shù)超過400次之后,整個網(wǎng)絡(luò)的訓(xùn)練損失和測試集的準確率逐漸平穩(wěn),在訓(xùn)練次數(shù)達到500次時,最終測得測試集的準確率為97%,訓(xùn)練損失趨于0.6左右,訓(xùn)練完成之后保存權(quán)重文件。
圖3 訓(xùn)練損失和測試準確率曲線
使用第二步中訓(xùn)練得到的權(quán)重文件,對給定測試數(shù)據(jù)集中的100張圖片進行測試,在此過程之中需要設(shè)定的實驗條件分別為:①使用CPU對給定的一百張圖片進行推理。②使用GTX Titan X Pascal加速對給定的100張圖片進行推理。③使用GTX 1060 Mobile加速對給定的100張圖片進行推理。④使用Atlas 200 DK對給定的100張圖片進行推理,在上述三種測試過程中需要記錄相應(yīng)推理時間、推理過程中設(shè)備的平均功率,其詳細信息如表3和表4所示。
表3 推理100張樣本所需功率
表4 推理100張樣本所需時間
從表格3中的數(shù)據(jù)分析,在使用CPU推理平均功率為56.53 W,在使用GTX 1060 Mobile推理平均功率為127.73 W,在使用GTX Titan X Pascal推理平均功率為253.77 W,使用At?las200DK推理平均功率為8.55 W,結(jié)合表4中的數(shù)據(jù)進行分析,在整個推理過程中其消耗的能量是最低的;從表格4中的數(shù)據(jù)分析,對于推理給定100張圖片,在使用CPU推理所需時長為327.33 s,在使用GTX 1060 Mobile推理需要2.52 s,在使用GTX Titan X Pascal推理需要1.56 s,使用Atlas200DK推理需要1.558 s。該種結(jié)果表明使用GPU和NPU對推理具有極為顯著的加速效果,縮短了推理所需時長。對于使用Atlas200DK進行推理加速的條件下,其在測試時間內(nèi)的平均功率達到了最低值,結(jié)合表4中的推理時長進行判斷,在三個測試方案中,使用NPU進行推理加速的情況下,所需要總能量達到最小,使用Atlas200DK進行推理加速達到了較為理想的實驗效果,對于之后的應(yīng)用實踐達到了前提條件。
根據(jù)樣本瓶口之間差異性建立了600張含有缺陷瓶口和正樣本的數(shù)據(jù)集;提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)CaffeNet對瓶口進行識別分類的解決方案,通過神經(jīng)網(wǎng)絡(luò)的卷積層和池化層對瓶口特征進行識別提取,使用反向傳播算法對隱含層的權(quán)值進行更新,隨機梯度下降法對損失函數(shù)進行調(diào)優(yōu),得到權(quán)重文件;之后,分別使用CPU、GTX Titan X Pascal、GTX 1060 Mobile和Atlas200DK對測試數(shù)據(jù)集進行分類,最終四種測試方案所得準確率在97%,能夠很好的區(qū)分出殘次品,其中使用Atlas200DK推理100張測試圖片所需時間最少、消耗能量最低。相較于使用CPU和GPU,使用Atlas200DK能夠在最低的功耗下對樣本瓶口分類有較高的檢測效率,為了藥瓶瓶口的缺陷檢測提供了一種有效的方案。