李慶旭 王巧華,2 肖仕杰 顧 偉 馬美湖
(1.華中農(nóng)業(yè)大學(xué)工學(xué)院, 武漢 430070; 2.農(nóng)業(yè)農(nóng)村部長江中下游農(nóng)業(yè)裝備重點(diǎn)實(shí)驗(yàn)室, 武漢 430070;3.國家蛋品研發(fā)中心, 武漢 430070)
目前,我國禽蛋孵化產(chǎn)業(yè)自動化程度較低,主要采用人工照蛋方式剔除無精蛋。人工照蛋方式準(zhǔn)確率低、速度慢,且影響到孵化飼養(yǎng)健康,亟需相關(guān)自動化裝置代替人工,對無精蛋進(jìn)行快速、精確檢測及剔除[1]。針對此問題,研究者提出了機(jī)器視覺[2-3]、光譜[4-5]、敲擊振動[6]等方法,對禽蛋的受精信息進(jìn)行無損檢測,均取得了較好的檢測效果。但這些方法均針對單枚種蛋,檢測效率較低,很難應(yīng)用于實(shí)際生產(chǎn)中。因此,對整盤群體禽蛋中受精蛋的精準(zhǔn)識別是解決該問題的關(guān)鍵。 文獻(xiàn)[7]利用稱量法結(jié)合機(jī)器視覺對群體種雞蛋中的受精蛋進(jìn)行檢測,對孵化7 d的種雞蛋檢測精度為96.7%,由于需要每天對種蛋進(jìn)行稱量,故實(shí)際生產(chǎn)難度依然很大。
整盤群體禽蛋中受精蛋的檢測難點(diǎn)在于群蛋的圖像分割,特別是在群蛋中無精蛋較多的情況下。近些年,深度學(xué)習(xí)已成功應(yīng)用于機(jī)器視覺領(lǐng)域,R-CNN[8]、YOLO[9]、SSD[10]等基于深度學(xué)習(xí)的目標(biāo)檢測算法有效地解決了復(fù)雜背景下的圖像分割和圖像識別問題?;谏疃葘W(xué)習(xí)的目標(biāo)檢測算法在農(nóng)業(yè)領(lǐng)域已被廣泛使用[11-15]。
將深度學(xué)習(xí)引入機(jī)器視覺中,對群體種鴨蛋中受精蛋進(jìn)行精準(zhǔn)識別,并且檢測出受精蛋的位置信息,可為后續(xù)相關(guān)機(jī)器人和機(jī)械手的研發(fā)提供技術(shù)支持。因此,本文以孵化5 d的群體種鴨蛋為研究對象,在常用的SSD-MobileNet[16]目標(biāo)檢測算法的基礎(chǔ)上,提出一種以MobileNetV3[17]作為SSD特征提取網(wǎng)絡(luò)的群體種鴨蛋受精信息檢測方法。
為采集大量圖像數(shù)據(jù),選取湖北省神丹種鴨養(yǎng)殖基地的縉云麻鴨種蛋7 776枚作為試驗(yàn)材料,進(jìn)行3次試驗(yàn),每次試驗(yàn)條件與試驗(yàn)方法完全相同。將種鴨蛋用酒精擦拭消毒并編號后放入智能孵化箱內(nèi)孵化。為了模型后續(xù)部署實(shí)際生產(chǎn)時具有較好的泛化能力,模擬實(shí)際生產(chǎn)環(huán)境搭建了一套由CCD相機(jī)、整盤照蛋器、計算機(jī)、暗箱、LED光源、蛋盤等構(gòu)成的圖像采集裝置,如圖1所示。每隔24 h采集一次圖像,種鴨蛋豎直放置于蛋盤,對應(yīng)種鴨蛋的編號在圖像中的位置均有記錄。共采集獲得324幅圖像,每幅圖像含有種鴨蛋24枚。在孵化15 d后對鴨蛋進(jìn)行破殼處理,獲得精準(zhǔn)的受精結(jié)果,作為后續(xù)評價模型判別性能的真實(shí)依據(jù)。
采集得到的原始圖像如圖2所示,圖像尺寸為1 634像素×1 234像素。隨著孵化時間的增加受精蛋內(nèi)受精卵會形成血管,同時蛋白粘度也發(fā)生變化[18],孵化5 d的群體種鴨蛋在功率為10 W的LED光源透射下,受精蛋的顏色呈暗紅色,無精蛋顏色則較為明亮。差異較為明顯,為使用SSD目標(biāo)檢測算法實(shí)現(xiàn)受精蛋和無精蛋的識別提供了可能性。
使用SSD目標(biāo)檢測算法訓(xùn)練前,需要對采集的原始圖像進(jìn)行人工標(biāo)注。選擇當(dāng)前常用的LabelImage標(biāo)注工具,對群體種鴨蛋圖像中的受精蛋和無精蛋進(jìn)行人工標(biāo)注,標(biāo)注完成后自動生成含有類別和位置信息的xml文件。標(biāo)注完成后將324幅圖像劃分為訓(xùn)練集、測試集和驗(yàn)證集,其中訓(xùn)練集210幅圖像、測試集90幅圖像、驗(yàn)證集24幅圖像。雖然圖像數(shù)量相對較少,但是每幅圖像含有24個種鴨蛋樣本,324幅圖像中含邊框標(biāo)注樣本個數(shù)為7 776(其中受精蛋和無精蛋比例約為1∶1),訓(xùn)練集中受精蛋2 700枚,測試集中受精蛋927枚,驗(yàn)證集中受精蛋261枚,基本能夠滿足深度學(xué)習(xí)樣本數(shù)量要求,故不再對數(shù)據(jù)進(jìn)行擴(kuò)增。最終將數(shù)據(jù)按照PASCAL VOC 數(shù)據(jù)集的格式存儲。
SSD-MobileNet網(wǎng)絡(luò)將經(jīng)典SSD的基礎(chǔ)網(wǎng)絡(luò)由VGG網(wǎng)絡(luò)替換為MobileNet網(wǎng)絡(luò),作為圖像的特征提取網(wǎng)絡(luò)。SSD-MobileNet網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,網(wǎng)絡(luò)的前端為MobileNet網(wǎng)絡(luò),后端為SSD輔助網(wǎng)絡(luò)。從圖4可以看出,SSD-MobileNet的Conv11、Conv13、Conv14-2、Conv15-2、Conv16-2、Conv17-2特征層的每個單元產(chǎn)生的默認(rèn)框個數(shù)分別為3、6、6、6、6、6,每個類別生成1 917個默認(rèn)框。默認(rèn)框中含有位置和類別信息,與人工標(biāo)注的真實(shí)目標(biāo)的位置和類別信息相比會有一定誤差。檢測框架需要同時進(jìn)行位置和類別預(yù)測,最后通過非極大值抑制方法得到檢測結(jié)果。訓(xùn)練的過程是使檢測框架預(yù)測值與真實(shí)值誤差不斷減小的過程,使用位置損失和置信損失(分類損失)的加權(quán)和作為總體目標(biāo)損失函數(shù)
(1)
(2)
(3)
(4)
式中N——匹配默認(rèn)框的數(shù)量
l——預(yù)測邊框坐標(biāo)
g——真實(shí)邊框坐標(biāo)
c——Softmax函數(shù)對每個類別的置信度
x——真實(shí)邊框與預(yù)測邊框匹配標(biāo)志
SL1——預(yù)測位置與真實(shí)位置的平滑L1損失
α——權(quán)重系數(shù)Lloc——位置損失
Lconf——分類損失
pos——正樣本集合
neg——負(fù)樣本集合
box——預(yù)測框中心坐標(biāo)及其高和寬的集合
MobileNet網(wǎng)絡(luò)中用深度可分離卷積代替了標(biāo)準(zhǔn)卷積(Convolution,Conv2d),同時引入了寬度因子和分辨率因子,極大地減少了參數(shù)量和計算量。但寬度因子和分辨率因子的引入會丟失大量特征,且MobileNet網(wǎng)絡(luò)前向傳播過程中存在ReLU非線性變換,ReLU激活函數(shù)在提取高維空間的特征時能有效增加非線性,但是在提取低維空間時會破壞特征的非線性,導(dǎo)致MobileNet網(wǎng)絡(luò)在訓(xùn)練過程中存在線性瓶頸[21]。為此文獻(xiàn)[22]結(jié)合深度可分離卷積在逆殘差結(jié)構(gòu)的基礎(chǔ)上提出了MobileNetV2網(wǎng)絡(luò),增強(qiáng)了梯度的傳播,保留了更多的特征。逆殘差結(jié)構(gòu)(Inverse residual structure,IRS)如圖5所示,通過先升維再卷積后降維的操作有效地豐富了特征數(shù)量,同時使用ReLU6代替ReLU函數(shù)作為激活函數(shù),提升了網(wǎng)絡(luò)的魯棒性[23]。ReLU6函數(shù)的實(shí)現(xiàn)公式為
Y=min(max(X,0),6)
(5)
式中Y——函數(shù)輸出X——輸入特征
為了進(jìn)一步提升網(wǎng)絡(luò)的檢測速度、減小網(wǎng)絡(luò)的參數(shù)量,文獻(xiàn)[17]在MobileNetV2網(wǎng)絡(luò)基礎(chǔ)上提出了MobileNetV3網(wǎng)絡(luò)。MobileNetV3網(wǎng)絡(luò)引入了注意力機(jī)制模塊(Squeeze-and-Excitation blocks)改進(jìn)逆殘差結(jié)構(gòu),引入注意力機(jī)制的逆殘差模塊(SE inverse residual convolution structure,SE IRS)如圖6所示;同時使用H-Swish函數(shù)作為激活函數(shù)
(6)
式中y——H-Swish函數(shù)輸出x——輸入
最后利用資源受限的NAS(platform-aware NAS)與NetAdapt網(wǎng)絡(luò)搜索技術(shù)確定網(wǎng)絡(luò)結(jié)構(gòu),使得模型的檢測精度和檢測速度都有了提升。
MobileNetV3網(wǎng)絡(luò)分為large和small 2個版本,兩者僅在通道數(shù)和網(wǎng)絡(luò)層數(shù)上有所不同。MobileNetV3_large網(wǎng)絡(luò)參數(shù)如表1所示,共19層網(wǎng)絡(luò),包括標(biāo)準(zhǔn)卷積、逆殘差卷積、注意力機(jī)制逆殘差卷積及池化(Pool)等操作。針對群體種鴨蛋中受精蛋與無精蛋差異較為明顯,為了進(jìn)一步減少模型的參數(shù)量從而提高模型的檢測速度,本文對常用的SSD-MobileNet網(wǎng)絡(luò)改進(jìn)如下:①將去掉分類層和輸出層的MobileNetV3_large網(wǎng)絡(luò)代替MobileNet作為SSD的基礎(chǔ)網(wǎng)絡(luò)。②利用逆殘差結(jié)構(gòu)代替SSD輔助網(wǎng)絡(luò)中的標(biāo)準(zhǔn)卷積。③將網(wǎng)絡(luò)的輸入由300×300×3改為320×320×3,增加網(wǎng)絡(luò)的預(yù)測精度。改進(jìn)后的SSD網(wǎng)絡(luò)結(jié)構(gòu)如圖7所示,每類生成2 034個默認(rèn)框,然后經(jīng)過檢測框架進(jìn)行預(yù)測,最后通過非極大值抑制算法得到種鴨蛋的位置和類別。改進(jìn)后的SSD網(wǎng)絡(luò)參數(shù)如表2所示。
表1 MobileNetV3_large網(wǎng)絡(luò)參數(shù)Tab.1 MobileNetV3_large network parameters
表2 基于MobileNetV3_large的改進(jìn)SSD網(wǎng)絡(luò)參數(shù)Tab.2 SSD network parameters after improvement based on MobileNetV3_large
MobileNetV3網(wǎng)絡(luò)的small版本為更加輕量化的網(wǎng)絡(luò)。為了進(jìn)一步提升模型的檢測速度,利用MobileNetV3_small版本代替改進(jìn)SSD群體種蛋檢測網(wǎng)絡(luò)中的基礎(chǔ)網(wǎng)絡(luò)。MobileNetV3_small網(wǎng)絡(luò)與large版本相比,只是對網(wǎng)絡(luò)層數(shù)和通道數(shù)進(jìn)行了調(diào)整,減少了網(wǎng)絡(luò)的參數(shù)量和計算量,其網(wǎng)絡(luò)參數(shù)如表3所示,共15層網(wǎng)絡(luò)。
表3 MobileNetV3_small網(wǎng)絡(luò)參數(shù)Tab.3 MobileNetV3_small network parameters
本文利用MobileNetV3_small網(wǎng)絡(luò)代替改進(jìn)SSD群體種蛋檢測網(wǎng)絡(luò)中的MobileNetV3_large網(wǎng)絡(luò),網(wǎng)絡(luò)輸入尺寸為320×320×3,網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示。利用MobileNetV3_small網(wǎng)絡(luò)的前13層作為SSD的基礎(chǔ)網(wǎng)絡(luò),其他部分與基于MobileNetV3_large網(wǎng)絡(luò)改進(jìn)的SSD群體種蛋檢測網(wǎng)絡(luò)相同,網(wǎng)絡(luò)參數(shù)如表4所示,每類生成2 034個默認(rèn)框,經(jīng)過檢測框架進(jìn)行預(yù)測,最后通過非極大值抑制算法獲取種鴨蛋的位置和類別信息。
在深度學(xué)習(xí)領(lǐng)域中,遷移學(xué)習(xí)是一種常用的模型訓(xùn)練手段。避免了隨機(jī)初始化網(wǎng)絡(luò)權(quán)重和偏置等參數(shù)導(dǎo)致的模型收斂速度慢和網(wǎng)絡(luò)的不穩(wěn)定[24]。利用大數(shù)據(jù)集下已經(jīng)訓(xùn)練好的預(yù)訓(xùn)練模型,通過共享網(wǎng)絡(luò)前端的權(quán)值參數(shù),微調(diào)網(wǎng)絡(luò)后端的參數(shù),從而使新任務(wù)下的模型訓(xùn)練能夠迅速收斂,即使在小數(shù)據(jù)集下也只需要少量的訓(xùn)練時間和計算資源開銷便可以實(shí)現(xiàn)對新任務(wù)的適應(yīng)。本文利用COCO數(shù)據(jù)集下預(yù)訓(xùn)練好的模型權(quán)重初始化SSD網(wǎng)絡(luò)的權(quán)重,通過訓(xùn)練對SSD網(wǎng)絡(luò)參數(shù)進(jìn)行微調(diào),進(jìn)一步減少了模型的訓(xùn)練時間與資源。
表4 基于MobileNetV3_small改進(jìn)的SSD網(wǎng)絡(luò)參數(shù)Tab.4 SSD network parameters after improvement based on MobileNetV3_small
采用AMD銳龍 Threadripper 2920X型CPU;NIVIDIA GeForce RTX 2080Ti 型GPU,11 GB顯存;128 GB內(nèi)存;操作系統(tǒng)為Windows 10的硬件訓(xùn)練平臺。深度學(xué)習(xí)框架使用Tensorflow-GPU 1.14.0,CUDA 9.2版本的并行計算框架,深度神經(jīng)網(wǎng)絡(luò)加速庫選擇CUDNN v7.6版本。本文的SSD目標(biāo)檢測模型的訓(xùn)練與測試均在Python 3.7版本下完成。
模型訓(xùn)練的過程是模型不斷調(diào)整自身參數(shù),使得預(yù)測值與真實(shí)值不斷接近的過程,訓(xùn)練過程中使用的目標(biāo)損失函數(shù)為式(1),與SSD-MobileNet相同。基于MobileNetV3的large和small網(wǎng)絡(luò)改進(jìn)的SSD模型底層權(quán)重均使用遷移學(xué)習(xí)的方法進(jìn)行初始化,其余權(quán)重采用均值為0、方差為0.03的高斯分布進(jìn)行隨機(jī)初始化。梯度更新是訓(xùn)練過程中不斷調(diào)整權(quán)重和偏置的方法,從而使模型性能不斷優(yōu)化,本文使用批量隨機(jī)梯度下降算法尋找梯度下降方向。初始學(xué)習(xí)率設(shè)置為0.04,學(xué)習(xí)率衰減方法為指數(shù)衰減法,衰減率設(shè)置為0.97。訓(xùn)練的批次圖像數(shù)量(Batchsize)設(shè)置為16,最大訓(xùn)練次數(shù)設(shè)置為4×104,單步訓(xùn)練時間約為2 s,每訓(xùn)練10 min保存一次模型的參數(shù)。以基于MobileNetV3_large網(wǎng)絡(luò)改進(jìn)的SSD群體種鴨蛋檢測網(wǎng)絡(luò)的訓(xùn)練過程為例,改進(jìn)前和small版本訓(xùn)練過程與之類似。圖9為使用了遷移學(xué)習(xí)(Transfer learning-loss)及未使用遷移學(xué)習(xí)(Normal loss)的損失函數(shù)變化曲線。從圖9可以看出,基于MobileNetV3_large改進(jìn)的SSD網(wǎng)絡(luò)在使用遷移學(xué)習(xí)進(jìn)行訓(xùn)練1 000次后迅速收斂,訓(xùn)練6 000次后維持在較低水平小幅度振蕩;而未使用遷移學(xué)習(xí)的基于MobileNetV3_large改進(jìn)的SSD網(wǎng)絡(luò)在訓(xùn)練4 000次后才開始迅速收斂,訓(xùn)練9 000次后維持在較低水平,說明使用遷移學(xué)習(xí)可以加快模型的收斂速度。
3.3.1評價指標(biāo)
目前評價基于深度學(xué)習(xí)的目標(biāo)檢測模型性能的主要手段是測試模型在驗(yàn)證集數(shù)據(jù)上的檢測效果。常用的技術(shù)指標(biāo)有準(zhǔn)確率、召回率、漏檢率、檢測速度和模型占用內(nèi)存。本文利用訓(xùn)練好的SSD-MobileNet模型和改進(jìn)后 SSD模型分別對驗(yàn)證集24幅圖像(含576個種鴨蛋)進(jìn)行測試,用上述5個評價指標(biāo)對比兩者的優(yōu)劣。漏檢率M定義為
(7)
式中A——鴨蛋總數(shù)量
B——誤把鴨蛋當(dāng)作背景的數(shù)量
3.3.2測試結(jié)果及分析
對孵化5 d后的24幅群體種鴨蛋圖像的測試結(jié)果進(jìn)行統(tǒng)計,包括準(zhǔn)確率、召回率、漏檢率、檢測速度和模型占用內(nèi)存5項(xiàng)評價指標(biāo)。共576枚種鴨蛋,SSD-MobileNet錯判了18枚種鴨蛋(其中將無精蛋判為受精蛋10枚,將受精蛋判為無精蛋2枚,漏檢6枚),基于MobileNetV3_large改進(jìn)的SSD錯判了11枚種鴨蛋(其中將無精蛋判為受精蛋7枚,將受精蛋判為無精蛋4枚,漏檢0枚),基于MobileNetV3_small改進(jìn)的SSD錯判了20枚種鴨蛋(其中將無精蛋判為受精蛋9枚,將受精蛋判為無精蛋3枚,漏檢8枚),統(tǒng)計結(jié)果如表5所示。
通過表5可以發(fā)現(xiàn),基于MobileNetV3_large改進(jìn)的SSD模型在精度和速度方面均優(yōu)于改進(jìn)前的SSD-MobileNet網(wǎng)絡(luò),基于MobileNetV3_small改進(jìn)的SSD模型檢測速度最快,但精度相比改進(jìn)前的SSD-MobileNet網(wǎng)絡(luò)未有提升。綜合考慮檢測精度和速度,基于MobileNetV3_large改進(jìn)的SSD模型對群體種鴨蛋的識別效果最佳?;贛obileNetV3_large改進(jìn)的SSD模型的檢測速度可以達(dá)到68 f/s,遠(yuǎn)快于改進(jìn)前的45 f/s,且模型占用內(nèi)存僅為9.10 MB,滿足部署到嵌入式系統(tǒng)的模型參數(shù)要求。此外漏檢率是衡量模型可靠性的重要指標(biāo),改進(jìn)后SSD模型的漏檢率為0,說明模型的可靠性遠(yuǎn)高于SSD-MobileNet網(wǎng)絡(luò)和基于MobileNetV3_small改進(jìn)的SSD網(wǎng)絡(luò)。圖10為同一幅群體種鴨蛋圖像SSD-MobileNet模型、基于MobileNetV3_large改進(jìn)的SSD模型和基于MobileNetV3_small改進(jìn)的SSD模型的檢測結(jié)果。
表5 模型測試結(jié)果Tab.5 Model test results
(1)運(yùn)用MobileNetV3_large網(wǎng)絡(luò)代替MobileNet網(wǎng)絡(luò)作為SSD的基礎(chǔ)網(wǎng)絡(luò),并使用逆殘差結(jié)構(gòu)代替SSD輔助網(wǎng)絡(luò)中的標(biāo)準(zhǔn)卷積,對群體種鴨蛋中受精蛋和無精蛋的識別性能最佳,準(zhǔn)確率和召回率分別為98.09%、97.32%,漏檢率為0。模型占用內(nèi)存僅為9.10 MB,檢測速度可達(dá)到68 f/s,具有很好的魯棒性,可滿足實(shí)際生產(chǎn)要求。
(2)通過遷移學(xué)習(xí),將COCO大數(shù)據(jù)集下預(yù)訓(xùn)練好的模型權(quán)重遷移到群體種鴨蛋中受精蛋和無精蛋的檢測任務(wù)下,加速了模型的收斂速度,節(jié)約了訓(xùn)練成本。
(3)將群體種蛋中的個體單獨(dú)分割出來,對每個種蛋進(jìn)行受精識別,解決了群體種蛋圖像難以分割的問題。利用卷積神經(jīng)網(wǎng)絡(luò)端對端的特點(diǎn),輸入一幅群體種鴨蛋圖像可直接檢測出種蛋的類別和位置信息,為群體種蛋受精信息檢測提供了一種思路,加速了禽蛋孵化行業(yè)的智能化,也為后續(xù)研發(fā)相關(guān)自動化設(shè)備提供了技術(shù)支持。