肖 旺 楊煜俊 申啟訪 單森森 黃 越
(廣東工業大學機電工程學院,廣東 廣州 510006)
鴨蛋是日常生活中重要的食品之一,味道鮮美,價格便宜,營養豐富,一直備受消費者喜愛。其品質直接關乎鴨蛋的銷量及其蛋制品(如皮蛋、咸鴨蛋等)品質。然而鴨蛋在出欄、運輸、加工、儲存等階段容易造成外殼破損,表面污染,嚴重影響鴨蛋品質,若加工和銷售前不及時剔除,會造成更大的污染和資源浪費,甚至危及消費者的健康安全。目前,鴨蛋的篩選可分為人工光檢與聲學檢測。對于大多蛋品企業而言,鴨蛋的挑選主要是依賴人工肉眼識別,其成本高昂,效率低下,漏檢率高,且對眼損傷較大。此外,近些年中國有部分廠家引進了日本聲學裂痕檢測模塊,通過小錘敲擊蛋殼表面的幾處關鍵點,采集蛋殼表面的聲紋振動反饋,以此分析并判斷鴨蛋表面是否完好。但此方法雖能檢測出蛋殼破損的鴨蛋,但易受蛋殼表面臟污影響出現誤判,需要人工二次檢查。
當前,制約中國蛋品行業發展的一個主要因素就是蛋品深加工機械設備不足,無法實現集約化發展,導致蛋品加工率過低,蛋品品質良莠不齊。俞玥等[1-2]在蛋品無損檢測與品質分級方面進行了大量研究,按檢測方法不同主要可分為聲學檢測[3]、機器視覺檢測[4-6]以及深度學習檢測[7-9]。在聲學領域,孫力等[10]通過蛋殼表面聲學特性設計了一套在線蛋殼裂痕檢測系統,檢測率達90%;陳誠等[11]采用敲擊響應方法,對雞蛋進行多角度敲擊,并精準采集敲擊音頻響應信號,設計了基于聲學響應信號分析的一套禽蛋蛋殼在線檢測系統,該系統對正常禽蛋檢測準確率達92%。在機器視覺領域,魏萱等[12]通過采用圖像紋理特征參數對土雞蛋微裂紋進行無損檢測,使用LDA模型判別效果最佳,準確率達96%;王巧華等[13]利用機器視覺技術采集鴨蛋動態圖像,通過LIBSVM建立分級模型,在鴨蛋產地進行尺寸與扁平度分級檢測,準確率分別為91.67%,95.00%。Amin等[14]使用VGG網絡對未處理的雞蛋進行檢測,成功篩選出破損與帶血斑的雞蛋,準確率達94.84%。
上述方法或是對檢測環境依賴較大,或是對被檢測蛋品要求嚴格,在應付復雜多變的檢測環境與各類缺陷不均勻蛋品時,難以達到高精度、智能化檢測。文章擬提出一種基于神經網絡的鴨蛋表面缺陷檢測方法,并與GoogLeNet、VGG16和AlexNet 3種神經網絡進行對比,分析其對裂紋、臟污等多種表面缺陷的檢測分類情況,旨在為實現鴨蛋表面多缺陷,高精度檢測提供依據。
從當地農貿市場與養殖場收集300枚鴨蛋,其中表面干凈無損86枚,帶有裂紋、孔洞等缺陷102枚,表面帶有鴨糞、血污、泥沙等臟污112枚。通過CCD相機、LED光源、旋轉傳送裝置搭建圖像采集平臺,利用相機對鴨蛋兩端與鴨蛋表面進行拍照取樣,共采集1 200張。通過人為篩選出不合要求的圖像,最終采集樣本圖片1 062張,按照實際檢測要求以圖1方式進行樣本分類,其中正常樣本403張,表面破損樣本314張,表面臟污樣本345張。

圖1 鴨蛋樣本分類方式
在軟件環境為Window系統下進行,搭載TensorFlow-GPU 2.0深度學習框架,使用CUDA 11.0版本搭配cudnn 7.65版本實現GPU并行加速計算。文中所有神經網絡模型都在Python3.7版本下編程實現。計算機硬件配置CPU為Inter酷睿I7-10875H @2.3 GHz,內存16 GB;GPU為NIVIDIA GeForce RTX2060,6 GB顯存。
圖像預處理包括圖像標簽、圖像分割、尺寸重定義、圖像增強以及數據擴充[15-16]。圖像預處理是將原始數據(圖2)整理成標準規范的訓練數據,使之能順利送入神經網絡并高效計算。

圖2 正常、臟污、破損鴨蛋原始圖像
圖像標簽是指將所有采集到的圖像按圖像內容打上標簽,試驗中可分為正常、破損和臟污3類標簽,使用Labelimg工具對所采集的圖像進行標注。圖像分割是預處理中重要的一環,正確的分割能夠有效地過濾背景噪音,凸顯圖像要素,提升后續檢測的正確率。其主要分割方法有閾值分割、區域分割與邊緣分割,考慮到鴨蛋表面顏色均勻,成像前景與背景差別較大,采用Otsu閾值分割[17],通過計算方差來確定一個恰當的閾值,使分割圖像前景與背景之間的灰度值差異最大,去除背景后,計算出每個圖像最小邊界矩形,最后使用OpenCV工具包將所有圖像尺寸重定義成3通道224×224像素大小,以方便神經網絡計算,預處理后的圖像如圖3所示。

圖3 正常、臟污、破損鴨蛋預處理后圖像
神經網絡需要大量的數據用于訓練才能提高其檢測準確率,由于采集樣本數量有限,可通過數據增強[18]來獲得大量相關數據。數據增強主要包括圖像的平移、翻轉、旋轉、比例縮放、隨機裁剪等。試驗通過數據增強最終在原有樣本基礎上擴大10倍數據量,得到10 620張圖像,其中正常樣本4 030張,表面破損樣本3 140張,表面臟污樣本3 450張。
GoogLeNet網絡[19-21]是當年ImageNet圖像競賽的冠軍,其top5錯誤率只有6.67。GoogLeNet共有22層,包含3個卷積層和9個inception塊。GoogLeNet(圖4)引入了Inception結構塊,使GoogLeNet即使在深度上超過了VGG和AlexNet,但網絡模型參數相比卻小得多,GoogLeNet通過增加網絡的深度與寬度獲得更好的性能,卻對內存與計算資源的要求更低。

圖4 GoogLeNet網絡結構
GoogLeNet雖然性能優秀,學習能力強,但網絡結構復雜,參數相對于VGG和AlexNet更少,但也達到2.4×107個。針對試驗圖像的特點,對GoogLeNet網絡進行相應的改進,改進后的網絡被命名為GoogLeNet-Mini(圖5),由于試驗圖像特征大小相近,將原有前3層不同尺寸的卷積層精簡為一層3×3大小卷積層。GoogLeNet引入inception模塊化結構,包含4個分支(圖6),分別為1×1卷積層,1×1卷積層與3×3卷積層,1×1卷積層與5×5卷積層,3×3池化層與1×1卷積層。卷積層的作用是提取圖像特征,池化層作用在卷積層之后,對卷積層提取到的圖像特征進行降維,減少特征數據量。Inception結構塊在同層網絡中使用多個不同尺寸的卷積核,用于提取圖像中不同尺寸的特征,提升整個模型的感知力,由于試驗圖像特征明顯,可以減小inception模塊數量與inception卷積核個數,將原有的9個inception塊精簡到6個,inception塊中卷積核尺寸保持不變,其中inception卷積核個數由64個呈倍數增加到512個,使得inception結構更加規整,有利于硬件加速和程序的編寫,減少代碼冗余。改進后的inception結構對于圖像的特征提取數量會相對減少,但大大減少了模型參數量,通過1×1卷積核,作用到輸入特征圖的每個像素點,通過設定少于輸入特征圖深度的1×1卷積核個數,減少了輸出特征圖深度,起到了降維作用,減少了參數量和計算量,加快模型的收斂,減少過擬合。

圖5 GoogLeNet-Mini網絡結構

圖6 Inception結構塊
GoogLeNet網絡去掉最后全連接層,使用一個分類層替代,分類層中包含了Dropout層與全局平均池化,Dropout層通過隨機失活部分神經元,減少參數的數量來防止模型過擬合。全局平均池化是針對特征圖取平均值,用數值來代表特征圖,將數值輸入到softmax層,得到對應的概率分布,以達到分類效果。相比于全連接層,全局平均池化的參數數量與計算量比較少。
VGG16網絡誕生于2014年,由16層網絡組成,其中包含13個卷積層和3個全連接層[22]。VGG16卷積層均由3×3卷積核組成,因此VGG16網絡結構非常規整,有利于硬件計算,其模型識別準確度有所提升,并且網絡參數大大減小,每個卷積層均使用relu作為激活函數。VGG網絡隨著學習深度的加深,卷積核個數從64增加到512,避免了因特征圖尺寸逐漸減小而出現網絡信息能力承載不足的情況。
AlexNet網絡由5個卷積層和3個全連接層組成,結構上與LeNet5網絡有相似之處,但也存在許多改動,AlexNet網絡將激活函數由Sigmoid函數改為Relu函數,有效地解決了梯度彌散問題[23]。AlexNet網絡訓練時成功引入Dropout,隨機舍棄部分參數,有效避免模型過擬合,提升模型魯棒性。同時引入局部相應歸一化層(LRN),增強模型泛化能力。
模型訓練實際上就是一個不斷修正誤差的過程,一批圖像數據被送入神經網絡經前向傳播計算出預測結果,并與實際標簽進行比較得出損失值,再將該值通過反向傳播不斷迭代,修正權重偏置,使得損失函數不斷減小,預測精度不斷提高。損失函數代表網絡預測值與實際標簽值的差距,當損失函數輸出最小時,模型權重與偏置達到最優值,文中采用交叉熵損失函數:
(1)
式中:
M——類別數量;
yic——與樣本i類別相同為1,不同則為0;
pic——樣本屬于類別c的預測概率;
N——樣本總量。
優化器采用RMSprop,RMSprop算法采用加權平均,能自適應調節學習率,避免學習率過低的問題,其計算公式為:

(2)
(3)
(4)
Wt+1=Wt-ηt,
(5)
式中:
W——待優化參數;
gt——當前參數的梯度;
mt/Vt—— 一階/二階動量;
ηt——當前時刻的下降梯度;
α——學習率;
β2——超參數,取0.99。
網絡模型建立完成后,將由圖像增強后的圖像按4∶1隨機劃分成訓練集與驗證集送入模型進行訓練,其中訓練集8 496張(正常、破損、臟污分別為3 224,2 512,2 760張),驗證集2 124張(正常、破損、臟污分別為806,628,690張)。為進一步評估網絡的魯棒性,另外采集510張圖像為測試集。初始學習率設置為0.000 1,通過指數衰減法更新學習率,根據GPU硬件條件設置BatchSize為16。為保證試驗結果公平性,VGG16和AlexNet網絡使用相同的數據集進行訓練、驗證與測試。
GoogLeNet-Mini訓練的準確率與損失值變化如圖7所示。由圖7可知,當epoch為0~160時,驗證集數據結果反復振蕩,說明此時得到的模型還不夠穩定;當epoch為160~260時,驗證集結果逐漸趨于穩定,此時模型的訓練集準確率為100.00%,驗證集準確率為97.83%,保存模型參數。

圖7 準確率與損失值變化曲線
在使用相同的樣本數據對GoogLeNet、VGG16與AlexNet進行試驗后,其結果如表1所示,GoogLeNet-Mini網絡訓練集、驗證集、測試集的準確率分別為100.00%,98.25%,96.88%。GoogLeNet網絡訓練集、驗證集、測試集的準確率分別為100.00%,99.16%,94.46%。VGG16網絡訓練集、驗證集、測試集的準確率分別為99.26%,94.78%,92.75%。AlexNet網絡表現稍差,訓練集、驗證集、測試集的準確率分別為95.61%,89.72%,85.43%。綜上,GoogLeNet-Mini網絡的檢測效果優于其他3個網絡,說明改進后的GoogLeNet-Mini相比于原網絡,不僅參數量更少,而且減少了模型過擬合,提升了網絡的泛化能力與準確度。

表1 4種網絡試驗結果
對于網絡模型的評估分析,采用測試準確率(Acc)、精確度(Pre)、召回率(Rec)、受試者工作特征曲線下面積(AUC)作為所選模型優劣的評定指標[14]。選定指標計算公式為:
(6)
(7)
(8)
(9)
式中:
nTP——實際與預測都為正樣本的數量;
nTN——實際與預測都為負樣本的數量;
nFP——實際為負樣本預測為正樣本的數量;
nFN——實際為正樣本預測為負樣本的數量。
使用GoogLeNet-Mini對測試集(正常160張,臟污200張,破損150張)進行檢測,得到分類檢測混淆矩陣如圖8所示,其中正常與臟污圖像各7張被誤分為破損,破損圖像中有6張被誤認為臟污,1張被誤認為正常,按式(6)~式(9)分別計算正常、臟污、破損三分類的準確度、精確度、召回率及AUC,結果見表2。

圖8 測試集混合矩陣圖
由表2可知,GoogLeNet-Mini網絡對正常的鴨蛋檢測效果最好,準確率達98.43%,臟污鴨蛋檢測準確率為97.45%,破損鴨蛋檢測準確率為95.88%,3種分類檢測準確度均能達到生產企業要求。破損類準確度偏低可能是由于拍攝角度與鴨蛋旋轉導致部分破損類圖像中破損信息被邊緣化未占據圖像信息主體,使得網絡產生誤判。后續可通過增加拍攝角度進一步提高破損檢測準確率。

表2 各類鴨蛋的檢測結果
為了進一步評價GoogLeNet-Mini網絡的缺陷檢測有效范圍,試驗重新篩選一批臟污鴨蛋與破損鴨蛋數據,通過opencv的閾值分割和邊緣檢測算法分別對鴨蛋的臟污和破損部位進行特征提取,并計算面積(圖9),按缺陷面積所占整個鴨蛋面積的比重分為4種類別。使用GoogLeNet-Mini進行檢測,得到臟污鴨蛋與破損鴨蛋的檢測結果分別見表3與表4。

圖9 鴨蛋臟污與破損特征的面積占比

表3 不同面積的臟污鴨蛋檢測結果

表4 不同面積的破損鴨蛋檢測結果
由表3可知,當臟污面積>5%時,準確率超過94.74%。由表4可知,當破損面積>2%時,準確率超過93.38%。故文章提出的GoogLeNet-Mini網絡較適用于檢測臟污面積>5%,破損面積>2%的鴨蛋。
運用改進后的卷積神經網絡GoogLeNet-Mini對鴨蛋的表面缺陷進行了檢測,相比于傳統機器上視覺算法更加方便準確,不需要依賴人工提取圖像特征。GoogLeNet-Mini、GoogLeNet、VGG16、AlexNet 4種網絡的測試準確率為別為95.88%,94.16%,92.75%,85.43%,其中GoogLeNet-Mini網絡效果最優,且網絡模型參數更少,一定程度上減少了過擬合。GoogLeNet-Mini對正常、臟污、破損的檢測準確率分別為98.43%,97.45%,95.88%,滿足企業檢測準確度要求。GoogLeNet-Mini網絡較適用于檢測臟污面積>5%,破損面積>2%的鴨蛋。