趙明巖,李一欣,徐 鵬,宋天月,李煥然
(1.中國計量大學(xué)機電工程學(xué)院,杭州 310018;2.中國計量大學(xué)理學(xué)院,杭州 310018)
黑皮雞樅菌(Oudemansiella raphanipes)作為一種高檔菌菇,富含蛋白質(zhì)、氨基酸等多種營養(yǎng)物質(zhì),在降血糖、降血脂、抗癌等方面具有獨特的生理功效[1],具有較高的研究與開發(fā)價值。近年來隨著消費水平的提高,其市場規(guī)模逐年擴大。雞樅菌各級別之間的價格可相差數(shù)倍,為使經(jīng)濟效益最大化,須將品相飽滿、外形勻稱的雞樅菌與叢生菇、無傘菇區(qū)分開來。然而傳統(tǒng)的人工分選方式存在效率低、一致性差等問題。隨著云南、貴州等地的大面積種植和產(chǎn)量大幅提高,人工分選方式已經(jīng)不能滿足生產(chǎn)需求。
機器視覺技術(shù)[2-5]在特定的環(huán)境條件下可快速、高精度地檢測單一目標,但當(dāng)外界因素如光照等發(fā)生變化時,檢測結(jié)果會出現(xiàn)一定偏差。而基于深度學(xué)習(xí)的圖像檢測系統(tǒng)可學(xué)習(xí)識別不同環(huán)境下的目標,目前被廣泛用于谷物[6-7]、畜牧[8-10]、蔬果[11-13]等諸多領(lǐng)域。在搭建蘑菇數(shù)據(jù)集方面,袁培森等[14]在基于生成式對抗網(wǎng)絡(luò)(Generative Adversarial Networks, GAN)的基礎(chǔ)上使用Wasserstein距離和帶有梯度懲罰的損失函數(shù)構(gòu)建菌菇數(shù)據(jù)模型,為后期解決珍稀菌菇分類數(shù)據(jù)非均衡的問題提供了研究基礎(chǔ)。在蘑菇分級系統(tǒng)方面,Lin等[15]采用長短期記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)對蘑菇進行實時跟蹤分級,可準確定位蘑菇,并能預(yù)測蘑菇在攝像機視野之外的位置,但分級時間長,效率低。Lu等[16]采用基于計分懲罰算法(Score-Punishment algorithm)的YOLOv3進行蘑菇的估計分級,對于不同時期采集的蘑菇圖像,該算法具有很強的魯棒性,能夠克服顏色偏差對估計精度的影響,但不適用于黑皮雞樅菌的品質(zhì)分選。
綜上,國內(nèi)外學(xué)者基于深度學(xué)習(xí)技術(shù)對農(nóng)產(chǎn)品的精選分級進行了廣泛研究,但目前針對黑皮雞樅菌的研究以營養(yǎng)方面[17-18]為主,圖像分級識別方面的研究未見述及。目前深度學(xué)習(xí)領(lǐng)域的研究主要分為兩類[19]:第一類模型參數(shù)量大,精度高,但單幅識別時間長;第二類模型參數(shù)量小,識別速度快,但精度低。由于黑皮雞樅菌分級特征不顯著,對深度學(xué)習(xí)模型要求高,而現(xiàn)有網(wǎng)絡(luò)模型適用性低,無法滿足雞樅菇分級需求。近年來知識蒸餾算法[20-23]在解決優(yōu)化模型效率的問題中頗受青睞,該算法通過大參數(shù)模型去訓(xùn)練小參數(shù)模型,可在不提高資源占用的前提下,提升小參數(shù)模型精度。本文針對黑皮雞樅菌特征分級的實際需求,構(gòu)建Resnet18基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu),并通過復(fù)合知識蒸餾優(yōu)化模型,以實現(xiàn)雞樅菌自動品質(zhì)分級,為雞樅菌分級生產(chǎn)線的應(yīng)用提供技術(shù)支持。
選用由貴州省水城縣營盤鄉(xiāng)雞樅養(yǎng)殖基地(26°8′~26°15′N,140°40′~140°47′E)提供的黑皮雞樅菌作為試驗材料,其收獲時間為2020年11月1日。參考菇業(yè)標準[24],按照菇柄、菇蓋、色澤等因素將雞樅菌分為4類:一級菇、二級菇、無傘菇、叢生菇,如圖1所示。一級菇為菇柄飽滿且菌帽未開張的雞樅菌;二級菇為菇柄細長、菌帽平展的雞樅菌;而無傘菇及叢生菇均存在一定的缺陷,屬于次品菇。
采用工業(yè)相機(有效像素為2 592×1 944)垂直拍攝雞樅菌樣本,拍攝條件為室內(nèi)環(huán)形燈光照,將待分級雞樅菌隨機擺放,拍攝4個品類(均為750根)雞樅共3 000幅圖像,圖像采集裝置如圖2所示。
使用Python語言對得到的雞樅圖像進行預(yù)處理。首先計算圖像中每一根雞樅菌的最小外接矩的二維坐標,從而在原始圖像中分割出每一個雞樅菌的RGB圖像。由于卷積神經(jīng)網(wǎng)絡(luò)的輸入圖像一般為正方形,因此將單根雞樅菌圖像擴展為正方形。采用Retinex算法對雞樅菌圖像進行色彩平衡、歸一化、增益及偏差線性加權(quán)處理。Retinex算法的目的是突出顯示選定的特征及弱化其他無關(guān)特征,通過對缺陷進行補償,可改善低質(zhì)圖像,并能使其更清晰地被觀察到[25-26]。
式中x為像素點的行坐標,y為像素點的列坐標,F(xiàn)(x,y)為中心環(huán)繞函數(shù),λ為尺度值,c為高斯環(huán)繞尺度,Ri(x,y)為反射圖像,Ii(x,y)為原始圖像,Li(x,y)為圖像亮度,ri(x,y)為輸出圖像。
隨后進行數(shù)據(jù)增強操作,對樣本數(shù)據(jù)按任意順序隨機添加下列三種擴充方法:旋轉(zhuǎn)、隨機裁剪、增加圖像高斯噪聲來豐富數(shù)據(jù)集,將3 000幅圖像擴充為6 000幅,同時按照8:2的比例,將4 800幅雞樅菌圖像作為訓(xùn)練集,其余1 200幅圖像作為驗證集。
卷積神經(jīng)網(wǎng)絡(luò)模型與傳統(tǒng)網(wǎng)絡(luò)模型相比,一方面降低了訓(xùn)練的參數(shù)量,另一方面降低了模型的復(fù)雜度,且提取的圖像特征(如顏色、紋理、形狀及圖像的拓撲結(jié)構(gòu))具有更高的準確性[27]。早期的卷積模型如LeNet5[28]、AlexNet[29]、VGGNet[30]等在網(wǎng)絡(luò)層數(shù)較低的情況下,可以有效對整個網(wǎng)絡(luò)的參數(shù)矩陣進行不斷調(diào)整。但隨著網(wǎng)絡(luò)層數(shù)不斷加深,來自結(jié)果的誤差信號在傳播過程中會逐漸消失,模型準確率反而下降。而Resnet引入了殘差網(wǎng)絡(luò)結(jié)構(gòu)(residual network),通過這種殘差網(wǎng)絡(luò)結(jié)構(gòu),在加深網(wǎng)絡(luò)層的同時,最終的分類精度也得到提升[31]。
殘差網(wǎng)絡(luò)的基本結(jié)構(gòu)如圖3所示,通過捷徑連接的方式將輸入x添加到輸出,即輸出結(jié)果為H(x)=F(x)+x。區(qū)別于早期神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),Resnet的學(xué)習(xí)目標不再是單一的輸出,而是殘差塊F(x),即H(x)和x的差值。當(dāng)進行鏈式求導(dǎo)來求得某個參數(shù)的偏導(dǎo)數(shù)時,傳統(tǒng)模型僅對一層網(wǎng)絡(luò)求偏導(dǎo)時的更新公式為
式中Loss為損失值,X為樣本,W為權(quán)值,b為偏置數(shù)。
當(dāng)網(wǎng)絡(luò)足夠深的時候,求偏導(dǎo)的結(jié)果趨近于0,使得前端網(wǎng)絡(luò)得不到有效更新:
式中Xi(i∈1…N)為第i層樣本值,Wi(i∈1…N)為第i層權(quán)值,bi(i∈1…N)為第i層偏置數(shù),F(xiàn)i(i∈1…N)為第i層非線性映射殘差函數(shù)。
而當(dāng)增添殘差塊之后,偏導(dǎo)結(jié)果如下所示:
此時,參數(shù)反饋中的梯度彌散問題得到解決,并且函數(shù)擬合F(x)=0會比F(x)=x更加容易,使得網(wǎng)絡(luò)結(jié)構(gòu)對參數(shù)的變化更加敏銳。
本文主干網(wǎng)絡(luò)是在Resnet18網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上改進而來,如圖4所示。網(wǎng)絡(luò)采用了殘差網(wǎng)絡(luò)結(jié)構(gòu)且在每2個卷積層接1個殘差鏈接,網(wǎng)絡(luò)共包括17個卷積層,1個池化層,1個全連接層。其中卷積核尺寸為3×3,池化層采用Avg Pool。
Adam優(yōu)化器來源于自適應(yīng)矩估計(Adaptive Moment Estimation),其迭代參數(shù)的學(xué)習(xí)率有一定的范圍,不會因梯度變化而大幅偏移設(shè)定值,參數(shù)值相對比較穩(wěn)定。
式中t為時間步數(shù),θt為更新梯度,ft(θ)為關(guān)于θ的隨機目標函數(shù),?θ為對θ求偏導(dǎo),gt為梯度值,β1,β2∈[0,1)為指數(shù)衰減率,mt為一階矩的估計值,?tm為經(jīng)過偏差修正的一階矩估計值,vt為二階矩的估計值,v?t為經(jīng)過偏差修正的二階矩估計值,α為步長,ε為任意小的正數(shù)。
訓(xùn)練精度曲線可以檢測模型的運行情況,優(yōu)化器分別選用Adam和Adadelata,其他參數(shù)保持初始狀態(tài),對驗證集進行1 000次迭代訓(xùn)練后的精度變化曲線如圖5所示,預(yù)測精度為預(yù)測標簽是正確標簽的概率??傻肁dam優(yōu)化器的訓(xùn)練速度以及精度明顯優(yōu)于Adadelata優(yōu)化器,可使神經(jīng)網(wǎng)絡(luò)模型收斂速度加快,縮短模型訓(xùn)練時間。
隨著Resnet卷積神經(jīng)網(wǎng)絡(luò)提出殘差網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)深度不斷延伸,大網(wǎng)絡(luò)模型逐漸投入使用。雖然大網(wǎng)絡(luò)模型擁有較高的準確性,但在部署階段需占用巨大的內(nèi)存資源,且運行極其耗時。而農(nóng)業(yè)領(lǐng)域針對農(nóng)產(chǎn)品識別時,要求神經(jīng)網(wǎng)絡(luò)模型資源占用少、響應(yīng)速度快。為實現(xiàn)上述目的,需將大參數(shù)模型壓縮成小參數(shù)量模型,且保證模型準確率。知識蒸餾算法的提出為解決上述問題提供了一種新的思路。
知識蒸餾方法用教師模型(大參數(shù)模型)去訓(xùn)練學(xué)生模型(小參數(shù)模型),提供學(xué)生模型在hard label(硬標簽)上無法習(xí)得的soft label(軟標簽)信息。相比于學(xué)習(xí)單一正確標簽,通過知識蒸餾學(xué)生模型能學(xué)習(xí)到預(yù)測目標的類別權(quán)重,這些類別權(quán)重是學(xué)生模型提取不到而教師模型可通過訓(xùn)練得到的,從而在不提高資源占用的情況下,使得學(xué)生模型精度得到提高,知識蒸餾基本結(jié)構(gòu)如圖6所示。
本研究數(shù)據(jù)測試選用ImageNet-1k訓(xùn)練集,通過對Resnet18、Resnet34、Resnet50 3個模型進行訓(xùn)練得到各自模型信息如表1所示,F(xiàn)LOPS為每秒浮點運算次數(shù),Top1準確率為預(yù)測標簽中概率最大的標簽是正確標簽的概率,Top5準確率為預(yù)測標簽中概率排列前五的標簽中出現(xiàn)正確標簽的概率。已知教師模型采用更深的網(wǎng)絡(luò)層數(shù),能使學(xué)生模型更加有效地提高其預(yù)測準確率[20],本文選用Resnet18為學(xué)生模型,即本文主體網(wǎng)絡(luò);Resnet50為教師模型,負責(zé)優(yōu)化學(xué)生模型參數(shù)。
?
卷積操作可在降低圖片尺寸的前提下,提取雞樅菌形狀特征,減少卷積神經(jīng)網(wǎng)絡(luò)的運算量。本文采用截留網(wǎng)絡(luò)輸入層傳輸至中間層的參數(shù)信息方法,觀察Resnet18第9層及Resnet50中第25層的圖像特征信息,所得結(jié)果如圖7所示。
通過對比第9次卷積操作和第25次卷積操作后提取的圖像特征,能夠發(fā)現(xiàn)隨著卷積層的加深,網(wǎng)絡(luò)模型更容易提取到雞樅的深層特征。目前知識蒸餾算法僅通過輸出的soft label信息更新整體學(xué)生模型,導(dǎo)致模型更新信息在傳遞過程中仍存在一定程度的失真現(xiàn)象。為更加充分利用特征信息,本文提出了一種基于復(fù)合知識蒸餾提取模型的黑皮雞樅菌分級檢測方法,同時在模型的不同位置使用知識蒸餾,其網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示。
首先使用訓(xùn)練集對教師模型(Resnet50)進行1 000次訓(xùn)練,直到其預(yù)測準測率達到最大值,隨后截留Resnet50第25次卷積操作的輸出對學(xué)生模型(Resnet18)的前9層卷積模型進行參數(shù)訓(xùn)練。學(xué)生模型能夠在訓(xùn)練過程中通過學(xué)習(xí)教師模型的輸出不斷地調(diào)整權(quán)重信息,使其獲得較優(yōu)結(jié)果。最后將經(jīng)過預(yù)訓(xùn)練的學(xué)生模型的前9層卷積模型與其后半部分進行拼接,進行整體模型的知識蒸餾。
對一級菇、二級菇、無傘菇、叢生菇等4種品質(zhì)進行分級,測試硬件為Intel Core i7-9700F 3.00 GHz,內(nèi)存16GB,配備NVIDIA GeForce RTX 2060 GPU加速試驗進程,試驗運行環(huán)境為Windows 10(64位)操作系統(tǒng),PyCharm2019版本,Python 3.7版本, Tensorflow 2.1版本。
每次訓(xùn)練選取的樣本數(shù)量為4 800幅,迭代共1 000次,采用Adam優(yōu)化器,初始學(xué)習(xí)率為0.001。在每層之間添加BatchNormalization層[32],BN層可以使得非線性變換函數(shù)的輸入值落入對輸入比較敏感的區(qū)域。同時在輸入層之后和全連接層之前分別添加Drop-out層,Drop-out雖會影響整個模型的訓(xùn)練速度,但可提升魯棒性,使最終準確率得到提高。
為驗證復(fù)合蒸餾提取模型的有效性,將其與改進前的Resnet18與Resnet50模型在訓(xùn)練集上進行雞樅菇識別結(jié)果比較,具體定量識別結(jié)果如表2所示,其中準確率為預(yù)測值與真值相符合的概率。由表2可知,經(jīng)過復(fù)合蒸餾的Resnet18識別準確率為96.89%,識別單幅圖像所用時間為0.032 s。本文模型相比Resnet50識別單幅圖像所用時間縮短68.93%,同時相比于未經(jīng)過知識蒸餾以及經(jīng)過單次知識蒸餾的Resnet18模型,準確率分別提升了0.97和0.52個百分點。準確率改善的原因在于:傳統(tǒng)神經(jīng)網(wǎng)絡(luò)反向傳播參數(shù)更新時,每經(jīng)過一層卷積層就存在一定的失真現(xiàn)象。隨著網(wǎng)絡(luò)結(jié)構(gòu)的加深,模型前幾層往往得不到有效的更新信號,而本文Resnet網(wǎng)絡(luò)使結(jié)構(gòu)對參數(shù)的變化更加敏銳,且知識蒸餾技術(shù)可以給學(xué)生模型提供在hard label上學(xué)不到的soft label信息。本文提出的復(fù)合知識蒸餾技術(shù)讓學(xué)生模型的前半部分預(yù)先學(xué)習(xí)高階特征信息,然后再對模型整體進行參數(shù)調(diào)整。可使其更加充分地吸收教師模型中的知識,改善反饋參數(shù)在傳遞過程中梯度彌散現(xiàn)象。因此,本文提出的基于復(fù)合蒸餾的Resnet18可在不增加硬件配置以及運行時間的前提下,顯著提升雞樅菌識別及分級精度。
表2 訓(xùn)練集下模型使用復(fù)合知識蒸餾與未使用知識蒸餾的對比Table 2 Comparison between the training set model by compound knowledge distillation and that without knowledge distillation
混淆矩陣是用于評估深度學(xué)習(xí)分類模型性能的矩陣,它將實際目標值與深度學(xué)習(xí)模型預(yù)測的目標值進行比較,有助于分析分類模型的性能情況。本文模型分類的混淆矩陣如圖9所示,使用數(shù)據(jù)集為驗證集,圖像總數(shù)為1 200幅,4類雞樅菌數(shù)量均為300幅,通過混淆矩陣可以看出,模型對4類雞樅菌的識別準確率都處于較高水平,其平均準確率為96.58%。其中無傘菇及叢生菇準確率較高,分別為97.67%、99.00%,說明形狀特征差異越顯著,越利于模型學(xué)習(xí),而參數(shù)訓(xùn)練誤差產(chǎn)生了少數(shù)錯誤預(yù)測樣本;一級菇及二級菇準確率相對較低,分別為95.33%、94.33%,這是由于二者形狀特征重疊度高,不易于區(qū)分造成的。進一步增強不同雞樅菇特征之間的可區(qū)分性是下一步研究重點。
Kappa系數(shù)是一致性檢驗指標,可用于衡量分類效果,由混淆矩陣數(shù)據(jù)計算得出。
式中po表示模型準確率,pe表示各自類別的實際數(shù)量與其預(yù)測數(shù)量乘積的總和除以樣本總數(shù)的平方。
本研究中不同網(wǎng)絡(luò)模型的Kappa系數(shù)如表3所示,其中經(jīng)過雙蒸餾的學(xué)生模型的模型準確率為0.968 9,各自類別的實際數(shù)量與其預(yù)測數(shù)量乘積的總和除以樣本總數(shù)的平方為0.242 2,Kappa系數(shù)為0.959 0,優(yōu)于其他方法訓(xùn)練的學(xué)生網(wǎng)絡(luò),僅次于教師網(wǎng)絡(luò),可得模型預(yù)測結(jié)果和實際分類結(jié)果近乎完全一致。
表3 不同網(wǎng)絡(luò)的Kappa系數(shù)對比Table 3 Comparison of Kappa coefficients of different networks
綜上可知,本文所提出的復(fù)合知識蒸餾算法對不同品質(zhì)雞樅菌的識別效率有顯著提升,能夠?qū)崿F(xiàn)雞樅菇形態(tài)的有效識別,符合智能分級需求。
本文提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)和復(fù)合知識蒸餾優(yōu)化算法的黑皮雞樅菌分級模型,一定程度上解決了農(nóng)產(chǎn)品領(lǐng)域要求神經(jīng)網(wǎng)絡(luò)識別精度高、模型部署規(guī)模小的需求。讓學(xué)生模型的前半部分預(yù)先學(xué)習(xí)特征信息,然后再對模型整體進行參數(shù)調(diào)整,通過復(fù)合學(xué)習(xí)可使學(xué)生模型充分獲得高階特征。主要結(jié)論如下:
1)通過使用復(fù)合知識蒸餾算法優(yōu)化,模型在訓(xùn)練集中對雞樅菌的檢測準確率為96.89%,較初始Resnet18模型提升0.97個百分點,同時較傳統(tǒng)知識蒸餾模型提高了0.52個百分點;單幅圖像檢測時間為0.032 s,較Resnet50模型縮短68.93%。
2)采用混淆矩陣校核本文模型在驗證集中的分類預(yù)測準確率,得出模型對4類雞樅菌的識別準確率均較好,4類平均準確率為96.58%,尤其是對叢生菇的識別,準確率達到了99.00%,證明本文所提出的方法能夠?qū)?類雞樅菌圖像進行準確識別。
本文提出的復(fù)合知識蒸餾算法可在不增加運行時間及額外硬件占用的前提下,使小模型的準確率逼近大型網(wǎng)絡(luò)訓(xùn)練準確率。研究結(jié)果可為實際雞樅菌分級生產(chǎn)線的應(yīng)用提供技術(shù)支持,進一步推動基于神經(jīng)網(wǎng)絡(luò)技術(shù)的農(nóng)產(chǎn)品視覺快速檢測與分選的發(fā)展。