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