肖 旺 楊煜俊 申啟訪 單森森 黃 越
(廣東工業(yè)大學(xué)機電工程學(xué)院,廣東 廣州 510006)
鴨蛋是日常生活中重要的食品之一,味道鮮美,價格便宜,營養(yǎng)豐富,一直備受消費者喜愛。其品質(zhì)直接關(guān)乎鴨蛋的銷量及其蛋制品(如皮蛋、咸鴨蛋等)品質(zhì)。然而鴨蛋在出欄、運輸、加工、儲存等階段容易造成外殼破損,表面污染,嚴重影響鴨蛋品質(zhì),若加工和銷售前不及時剔除,會造成更大的污染和資源浪費,甚至危及消費者的健康安全。目前,鴨蛋的篩選可分為人工光檢與聲學(xué)檢測。對于大多蛋品企業(yè)而言,鴨蛋的挑選主要是依賴人工肉眼識別,其成本高昂,效率低下,漏檢率高,且對眼損傷較大。此外,近些年中國有部分廠家引進了日本聲學(xué)裂痕檢測模塊,通過小錘敲擊蛋殼表面的幾處關(guān)鍵點,采集蛋殼表面的聲紋振動反饋,以此分析并判斷鴨蛋表面是否完好。但此方法雖能檢測出蛋殼破損的鴨蛋,但易受蛋殼表面臟污影響出現(xiàn)誤判,需要人工二次檢查。
當(dāng)前,制約中國蛋品行業(yè)發(fā)展的一個主要因素就是蛋品深加工機械設(shè)備不足,無法實現(xiàn)集約化發(fā)展,導(dǎo)致蛋品加工率過低,蛋品品質(zhì)良莠不齊。俞玥等[1-2]在蛋品無損檢測與品質(zhì)分級方面進行了大量研究,按檢測方法不同主要可分為聲學(xué)檢測[3]、機器視覺檢測[4-6]以及深度學(xué)習(xí)檢測[7-9]。在聲學(xué)領(lǐng)域,孫力等[10]通過蛋殼表面聲學(xué)特性設(shè)計了一套在線蛋殼裂痕檢測系統(tǒng),檢測率達90%;陳誠等[11]采用敲擊響應(yīng)方法,對雞蛋進行多角度敲擊,并精準采集敲擊音頻響應(yīng)信號,設(shè)計了基于聲學(xué)響應(yīng)信號分析的一套禽蛋蛋殼在線檢測系統(tǒng),該系統(tǒng)對正常禽蛋檢測準確率達92%。在機器視覺領(lǐng)域,魏萱等[12]通過采用圖像紋理特征參數(shù)對土雞蛋微裂紋進行無損檢測,使用LDA模型判別效果最佳,準確率達96%;王巧華等[13]利用機器視覺技術(shù)采集鴨蛋動態(tài)圖像,通過LIBSVM建立分級模型,在鴨蛋產(chǎn)地進行尺寸與扁平度分級檢測,準確率分別為91.67%,95.00%。Amin等[14]使用VGG網(wǎng)絡(luò)對未處理的雞蛋進行檢測,成功篩選出破損與帶血斑的雞蛋,準確率達94.84%。
上述方法或是對檢測環(huán)境依賴較大,或是對被檢測蛋品要求嚴格,在應(yīng)付復(fù)雜多變的檢測環(huán)境與各類缺陷不均勻蛋品時,難以達到高精度、智能化檢測。文章擬提出一種基于神經(jīng)網(wǎng)絡(luò)的鴨蛋表面缺陷檢測方法,并與GoogLeNet、VGG16和AlexNet 3種神經(jīng)網(wǎng)絡(luò)進行對比,分析其對裂紋、臟污等多種表面缺陷的檢測分類情況,旨在為實現(xiàn)鴨蛋表面多缺陷,高精度檢測提供依據(jù)。
從當(dāng)?shù)剞r(nóng)貿(mào)市場與養(yǎng)殖場收集300枚鴨蛋,其中表面干凈無損86枚,帶有裂紋、孔洞等缺陷102枚,表面帶有鴨糞、血污、泥沙等臟污112枚。通過CCD相機、LED光源、旋轉(zhuǎn)傳送裝置搭建圖像采集平臺,利用相機對鴨蛋兩端與鴨蛋表面進行拍照取樣,共采集1 200張。通過人為篩選出不合要求的圖像,最終采集樣本圖片1 062張,按照實際檢測要求以圖1方式進行樣本分類,其中正常樣本403張,表面破損樣本314張,表面臟污樣本345張。
圖1 鴨蛋樣本分類方式
在軟件環(huán)境為Window系統(tǒng)下進行,搭載TensorFlow-GPU 2.0深度學(xué)習(xí)框架,使用CUDA 11.0版本搭配cudnn 7.65版本實現(xiàn)GPU并行加速計算。文中所有神經(jīng)網(wǎng)絡(luò)模型都在Python3.7版本下編程實現(xiàn)。計算機硬件配置CPU為Inter酷睿I7-10875H @2.3 GHz,內(nèi)存16 GB;GPU為NIVIDIA GeForce RTX2060,6 GB顯存。
圖像預(yù)處理包括圖像標(biāo)簽、圖像分割、尺寸重定義、圖像增強以及數(shù)據(jù)擴充[15-16]。圖像預(yù)處理是將原始數(shù)據(jù)(圖2)整理成標(biāo)準規(guī)范的訓(xùn)練數(shù)據(jù),使之能順利送入神經(jīng)網(wǎng)絡(luò)并高效計算。
圖2 正常、臟污、破損鴨蛋原始圖像
圖像標(biāo)簽是指將所有采集到的圖像按圖像內(nèi)容打上標(biāo)簽,試驗中可分為正常、破損和臟污3類標(biāo)簽,使用Labelimg工具對所采集的圖像進行標(biāo)注。圖像分割是預(yù)處理中重要的一環(huán),正確的分割能夠有效地過濾背景噪音,凸顯圖像要素,提升后續(xù)檢測的正確率。其主要分割方法有閾值分割、區(qū)域分割與邊緣分割,考慮到鴨蛋表面顏色均勻,成像前景與背景差別較大,采用Otsu閾值分割[17],通過計算方差來確定一個恰當(dāng)?shù)拈撝?,使分割圖像前景與背景之間的灰度值差異最大,去除背景后,計算出每個圖像最小邊界矩形,最后使用OpenCV工具包將所有圖像尺寸重定義成3通道224×224像素大小,以方便神經(jīng)網(wǎng)絡(luò)計算,預(yù)處理后的圖像如圖3所示。
圖3 正常、臟污、破損鴨蛋預(yù)處理后圖像
神經(jīng)網(wǎng)絡(luò)需要大量的數(shù)據(jù)用于訓(xùn)練才能提高其檢測準確率,由于采集樣本數(shù)量有限,可通過數(shù)據(jù)增強[18]來獲得大量相關(guān)數(shù)據(jù)。數(shù)據(jù)增強主要包括圖像的平移、翻轉(zhuǎn)、旋轉(zhuǎn)、比例縮放、隨機裁剪等。試驗通過數(shù)據(jù)增強最終在原有樣本基礎(chǔ)上擴大10倍數(shù)據(jù)量,得到10 620張圖像,其中正常樣本4 030張,表面破損樣本3 140張,表面臟污樣本3 450張。
GoogLeNet網(wǎng)絡(luò)[19-21]是當(dāng)年ImageNet圖像競賽的冠軍,其top5錯誤率只有6.67。GoogLeNet共有22層,包含3個卷積層和9個inception塊。GoogLeNet(圖4)引入了Inception結(jié)構(gòu)塊,使GoogLeNet即使在深度上超過了VGG和AlexNet,但網(wǎng)絡(luò)模型參數(shù)相比卻小得多,GoogLeNet通過增加網(wǎng)絡(luò)的深度與寬度獲得更好的性能,卻對內(nèi)存與計算資源的要求更低。
圖4 GoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)
GoogLeNet雖然性能優(yōu)秀,學(xué)習(xí)能力強,但網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜,參數(shù)相對于VGG和AlexNet更少,但也達到2.4×107個。針對試驗圖像的特點,對GoogLeNet網(wǎng)絡(luò)進行相應(yīng)的改進,改進后的網(wǎng)絡(luò)被命名為GoogLeNet-Mini(圖5),由于試驗圖像特征大小相近,將原有前3層不同尺寸的卷積層精簡為一層3×3大小卷積層。GoogLeNet引入inception模塊化結(jié)構(gòu),包含4個分支(圖6),分別為1×1卷積層,1×1卷積層與3×3卷積層,1×1卷積層與5×5卷積層,3×3池化層與1×1卷積層。卷積層的作用是提取圖像特征,池化層作用在卷積層之后,對卷積層提取到的圖像特征進行降維,減少特征數(shù)據(jù)量。Inception結(jié)構(gòu)塊在同層網(wǎng)絡(luò)中使用多個不同尺寸的卷積核,用于提取圖像中不同尺寸的特征,提升整個模型的感知力,由于試驗圖像特征明顯,可以減小inception模塊數(shù)量與inception卷積核個數(shù),將原有的9個inception塊精簡到6個,inception塊中卷積核尺寸保持不變,其中inception卷積核個數(shù)由64個呈倍數(shù)增加到512個,使得inception結(jié)構(gòu)更加規(guī)整,有利于硬件加速和程序的編寫,減少代碼冗余。改進后的inception結(jié)構(gòu)對于圖像的特征提取數(shù)量會相對減少,但大大減少了模型參數(shù)量,通過1×1卷積核,作用到輸入特征圖的每個像素點,通過設(shè)定少于輸入特征圖深度的1×1卷積核個數(shù),減少了輸出特征圖深度,起到了降維作用,減少了參數(shù)量和計算量,加快模型的收斂,減少過擬合。
圖5 GoogLeNet-Mini網(wǎng)絡(luò)結(jié)構(gòu)
圖6 Inception結(jié)構(gòu)塊
GoogLeNet網(wǎng)絡(luò)去掉最后全連接層,使用一個分類層替代,分類層中包含了Dropout層與全局平均池化,Dropout層通過隨機失活部分神經(jīng)元,減少參數(shù)的數(shù)量來防止模型過擬合。全局平均池化是針對特征圖取平均值,用數(shù)值來代表特征圖,將數(shù)值輸入到softmax層,得到對應(yīng)的概率分布,以達到分類效果。相比于全連接層,全局平均池化的參數(shù)數(shù)量與計算量比較少。
VGG16網(wǎng)絡(luò)誕生于2014年,由16層網(wǎng)絡(luò)組成,其中包含13個卷積層和3個全連接層[22]。VGG16卷積層均由3×3卷積核組成,因此VGG16網(wǎng)絡(luò)結(jié)構(gòu)非常規(guī)整,有利于硬件計算,其模型識別準確度有所提升,并且網(wǎng)絡(luò)參數(shù)大大減小,每個卷積層均使用relu作為激活函數(shù)。VGG網(wǎng)絡(luò)隨著學(xué)習(xí)深度的加深,卷積核個數(shù)從64增加到512,避免了因特征圖尺寸逐漸減小而出現(xiàn)網(wǎng)絡(luò)信息能力承載不足的情況。
AlexNet網(wǎng)絡(luò)由5個卷積層和3個全連接層組成,結(jié)構(gòu)上與LeNet5網(wǎng)絡(luò)有相似之處,但也存在許多改動,AlexNet網(wǎng)絡(luò)將激活函數(shù)由Sigmoid函數(shù)改為Relu函數(shù),有效地解決了梯度彌散問題[23]。AlexNet網(wǎng)絡(luò)訓(xùn)練時成功引入Dropout,隨機舍棄部分參數(shù),有效避免模型過擬合,提升模型魯棒性。同時引入局部相應(yīng)歸一化層(LRN),增強模型泛化能力。
模型訓(xùn)練實際上就是一個不斷修正誤差的過程,一批圖像數(shù)據(jù)被送入神經(jīng)網(wǎng)絡(luò)經(jīng)前向傳播計算出預(yù)測結(jié)果,并與實際標(biāo)簽進行比較得出損失值,再將該值通過反向傳播不斷迭代,修正權(quán)重偏置,使得損失函數(shù)不斷減小,預(yù)測精度不斷提高。損失函數(shù)代表網(wǎng)絡(luò)預(yù)測值與實際標(biāo)簽值的差距,當(dāng)損失函數(shù)輸出最小時,模型權(quán)重與偏置達到最優(yōu)值,文中采用交叉熵損失函數(shù):
(1)
式中:
M——類別數(shù)量;
yic——與樣本i類別相同為1,不同則為0;
pic——樣本屬于類別c的預(yù)測概率;
N——樣本總量。
優(yōu)化器采用RMSprop,RMSprop算法采用加權(quán)平均,能自適應(yīng)調(diào)節(jié)學(xué)習(xí)率,避免學(xué)習(xí)率過低的問題,其計算公式為:
(2)
(3)
(4)
Wt+1=Wt-ηt,
(5)
式中:
W——待優(yōu)化參數(shù);
gt——當(dāng)前參數(shù)的梯度;
mt/Vt—— 一階/二階動量;
ηt——當(dāng)前時刻的下降梯度;
α——學(xué)習(xí)率;
β2——超參數(shù),取0.99。
網(wǎng)絡(luò)模型建立完成后,將由圖像增強后的圖像按4∶1隨機劃分成訓(xùn)練集與驗證集送入模型進行訓(xùn)練,其中訓(xùn)練集8 496張(正常、破損、臟污分別為3 224,2 512,2 760張),驗證集2 124張(正常、破損、臟污分別為806,628,690張)。為進一步評估網(wǎng)絡(luò)的魯棒性,另外采集510張圖像為測試集。初始學(xué)習(xí)率設(shè)置為0.000 1,通過指數(shù)衰減法更新學(xué)習(xí)率,根據(jù)GPU硬件條件設(shè)置BatchSize為16。為保證試驗結(jié)果公平性,VGG16和AlexNet網(wǎng)絡(luò)使用相同的數(shù)據(jù)集進行訓(xùn)練、驗證與測試。
GoogLeNet-Mini訓(xùn)練的準確率與損失值變化如圖7所示。由圖7可知,當(dāng)epoch為0~160時,驗證集數(shù)據(jù)結(jié)果反復(fù)振蕩,說明此時得到的模型還不夠穩(wěn)定;當(dāng)epoch為160~260時,驗證集結(jié)果逐漸趨于穩(wěn)定,此時模型的訓(xùn)練集準確率為100.00%,驗證集準確率為97.83%,保存模型參數(shù)。
圖7 準確率與損失值變化曲線
在使用相同的樣本數(shù)據(jù)對GoogLeNet、VGG16與AlexNet進行試驗后,其結(jié)果如表1所示,GoogLeNet-Mini網(wǎng)絡(luò)訓(xùn)練集、驗證集、測試集的準確率分別為100.00%,98.25%,96.88%。GoogLeNet網(wǎng)絡(luò)訓(xùn)練集、驗證集、測試集的準確率分別為100.00%,99.16%,94.46%。VGG16網(wǎng)絡(luò)訓(xùn)練集、驗證集、測試集的準確率分別為99.26%,94.78%,92.75%。AlexNet網(wǎng)絡(luò)表現(xiàn)稍差,訓(xùn)練集、驗證集、測試集的準確率分別為95.61%,89.72%,85.43%。綜上,GoogLeNet-Mini網(wǎng)絡(luò)的檢測效果優(yōu)于其他3個網(wǎng)絡(luò),說明改進后的GoogLeNet-Mini相比于原網(wǎng)絡(luò),不僅參數(shù)量更少,而且減少了模型過擬合,提升了網(wǎng)絡(luò)的泛化能力與準確度。
表1 4種網(wǎng)絡(luò)試驗結(jié)果
對于網(wǎng)絡(luò)模型的評估分析,采用測試準確率(Acc)、精確度(Pre)、召回率(Rec)、受試者工作特征曲線下面積(AUC)作為所選模型優(yōu)劣的評定指標(biāo)[14]。選定指標(biāo)計算公式為:
(6)
(7)
(8)
(9)
式中:
nTP——實際與預(yù)測都為正樣本的數(shù)量;
nTN——實際與預(yù)測都為負樣本的數(shù)量;
nFP——實際為負樣本預(yù)測為正樣本的數(shù)量;
nFN——實際為正樣本預(yù)測為負樣本的數(shù)量。
使用GoogLeNet-Mini對測試集(正常160張,臟污200張,破損150張)進行檢測,得到分類檢測混淆矩陣如圖8所示,其中正常與臟污圖像各7張被誤分為破損,破損圖像中有6張被誤認為臟污,1張被誤認為正常,按式(6)~式(9)分別計算正常、臟污、破損三分類的準確度、精確度、召回率及AUC,結(jié)果見表2。
圖8 測試集混合矩陣圖
由表2可知,GoogLeNet-Mini網(wǎng)絡(luò)對正常的鴨蛋檢測效果最好,準確率達98.43%,臟污鴨蛋檢測準確率為97.45%,破損鴨蛋檢測準確率為95.88%,3種分類檢測準確度均能達到生產(chǎn)企業(yè)要求。破損類準確度偏低可能是由于拍攝角度與鴨蛋旋轉(zhuǎn)導(dǎo)致部分破損類圖像中破損信息被邊緣化未占據(jù)圖像信息主體,使得網(wǎng)絡(luò)產(chǎn)生誤判。后續(xù)可通過增加拍攝角度進一步提高破損檢測準確率。
表2 各類鴨蛋的檢測結(jié)果
為了進一步評價GoogLeNet-Mini網(wǎng)絡(luò)的缺陷檢測有效范圍,試驗重新篩選一批臟污鴨蛋與破損鴨蛋數(shù)據(jù),通過opencv的閾值分割和邊緣檢測算法分別對鴨蛋的臟污和破損部位進行特征提取,并計算面積(圖9),按缺陷面積所占整個鴨蛋面積的比重分為4種類別。使用GoogLeNet-Mini進行檢測,得到臟污鴨蛋與破損鴨蛋的檢測結(jié)果分別見表3與表4。
圖9 鴨蛋臟污與破損特征的面積占比
表3 不同面積的臟污鴨蛋檢測結(jié)果
表4 不同面積的破損鴨蛋檢測結(jié)果
由表3可知,當(dāng)臟污面積>5%時,準確率超過94.74%。由表4可知,當(dāng)破損面積>2%時,準確率超過93.38%。故文章提出的GoogLeNet-Mini網(wǎng)絡(luò)較適用于檢測臟污面積>5%,破損面積>2%的鴨蛋。
運用改進后的卷積神經(jīng)網(wǎng)絡(luò)GoogLeNet-Mini對鴨蛋的表面缺陷進行了檢測,相比于傳統(tǒng)機器上視覺算法更加方便準確,不需要依賴人工提取圖像特征。GoogLeNet-Mini、GoogLeNet、VGG16、AlexNet 4種網(wǎng)絡(luò)的測試準確率為別為95.88%,94.16%,92.75%,85.43%,其中GoogLeNet-Mini網(wǎng)絡(luò)效果最優(yōu),且網(wǎng)絡(luò)模型參數(shù)更少,一定程度上減少了過擬合。GoogLeNet-Mini對正常、臟污、破損的檢測準確率分別為98.43%,97.45%,95.88%,滿足企業(yè)檢測準確度要求。GoogLeNet-Mini網(wǎng)絡(luò)較適用于檢測臟污面積>5%,破損面積>2%的鴨蛋。