趙祚喜,羅陽帆,黃杏彪,袁 凱,黃 淵,曹陽陽
(1.華南農(nóng)業(yè)大學(xué)工程學(xué)院,廣東 廣州 510642;2.廣州廣興牧業(yè)設(shè)備集團(tuán)有限公司,廣東 廣州 510540)
據(jù)調(diào)研,破損蛋大約占蛋廠總產(chǎn)量的6%。破損蛋會(huì)出現(xiàn)漏液的情況,對(duì)生產(chǎn)線的整潔性和穩(wěn)定性造成很大影響,而且沾污漏液的完好雞蛋會(huì)給進(jìn)一步裂紋檢測(cè)帶來很大的噪聲干擾。近年來,機(jī)器視覺技術(shù)已經(jīng)成為農(nóng)產(chǎn)品加工分級(jí)檢測(cè)的常用方法[1-4],且隨著計(jì)算機(jī)運(yùn)算能力的不斷提升,深度學(xué)習(xí)技術(shù)在圖像數(shù)據(jù)處理、目標(biāo)檢測(cè)中的優(yōu)越性越發(fā)凸顯[5-7],機(jī)器視覺技術(shù)也因深度學(xué)習(xí)的發(fā)展而變得更加成熟可靠[8-10]。
國(guó)內(nèi)外學(xué)者在機(jī)器視覺雞蛋自動(dòng)化檢測(cè)方面進(jìn)行了大量研究[11]。OMID 等提取裂紋雞蛋圖像特征,設(shè)計(jì)模糊推理系統(tǒng)實(shí)現(xiàn)裂紋雞蛋的識(shí)別,準(zhǔn)確率達(dá)94.5%[12]。JETSADAPORN 等首次針對(duì)未清洗的雞蛋裂紋檢測(cè)進(jìn)行研究,差分2 種不同氣壓下的圖像后分割出污垢和裂紋,進(jìn)一步使用邊緣檢測(cè)識(shí)別裂紋[13]。張健等提出了基于改進(jìn)粒子群算法的雞蛋裂紋檢測(cè)方法,對(duì)明顯的線形裂紋、網(wǎng)狀裂紋正確檢測(cè)率分別為96.4%、94.7%,非明顯裂紋檢測(cè)準(zhǔn)確率也在85%以上[14]。劉進(jìn)闖[15]、孫柯[16]、魏萱[17]、梁丹[18]均使用機(jī)器視覺結(jié)合傳統(tǒng)機(jī)器學(xué)習(xí)的方法對(duì)雞蛋裂紋進(jìn)行識(shí)別,并設(shè)計(jì)了相應(yīng)的硬件設(shè)備。以上研究均是基于雞蛋圖像的紋理、顏色、形狀等特征進(jìn)行裂紋識(shí)別,此類方法眾多,但對(duì)不同光照環(huán)境、不同應(yīng)用場(chǎng)景的適用性較差,缺乏通用性。對(duì)于此問題,有學(xué)者使用多種傳感器融合的策略來改善裂紋檢測(cè)方法的適用性[19-21],也有學(xué)者嘗試將深度學(xué)習(xí)應(yīng)用于雞蛋裂紋檢測(cè)。宋超使用CNN 以及深度殘差網(wǎng)絡(luò)檢測(cè)雞蛋缺陷,基于深度學(xué)習(xí)的識(shí)別率較傳統(tǒng)方法提高了近3%[22];陳羽立等[23-24]改進(jìn)EfficientNet_B0 深度學(xué)習(xí)網(wǎng)絡(luò)中部分結(jié)構(gòu)來識(shí)別裂紋雞蛋,加快了模型訓(xùn)練速度,證實(shí)了將深度學(xué)習(xí)應(yīng)用于雞蛋裂紋檢測(cè)的可行性。此類研究較少,且并未達(dá)到實(shí)際應(yīng)用的要求,仍需進(jìn)一步探索。
綜上所述,國(guó)內(nèi)外對(duì)基于機(jī)器視覺結(jié)合深度學(xué)習(xí)技術(shù)的破損蛋檢測(cè)研究較少,且絕大部分采用靜態(tài)的雞蛋圖像采集方法,通用性較差,難以應(yīng)用于實(shí)際生產(chǎn)線。因此,本文提出了一種基于機(jī)器視覺和 YOLOv4 深度學(xué)習(xí)網(wǎng)絡(luò)的破損雞蛋檢測(cè)方法。對(duì)比不同檢測(cè)算法的識(shí)別效果,并搭建實(shí)際雞蛋生產(chǎn)環(huán)境驗(yàn)證YOLOv4 模型的在線檢測(cè)能力,旨在探索新的深度學(xué)習(xí)網(wǎng)絡(luò)在破損雞蛋檢測(cè)中應(yīng)用,為雞蛋智能化生產(chǎn)提供技術(shù)支持。
本文模擬實(shí)際生產(chǎn)線搭建了視覺檢測(cè)系統(tǒng),用于采集靜止雞蛋圖像和勻速運(yùn)動(dòng)的雞蛋圖像。主要由傳送架、雞蛋托盤、光源、攝像頭、計(jì)算機(jī)等5部分組成,具體如圖1 所示。系統(tǒng)傳送帶的尺寸為30 cm×150 cm,傳輸速度在4~15 m/min 之間勻速可控。與常見的底部打光方式不同[24-25],本文采用前向照明方式(光源置于雞蛋正上方),光源與攝像頭同側(cè),滿足圖像采集要求的同時(shí)簡(jiǎn)化設(shè)備安裝條件,節(jié)約成本。此外,圖像質(zhì)量的高低直接影響到后期檢測(cè)算法的精度,因此,本研究使用的工業(yè)相機(jī)為90°無畸變定焦鏡頭,圖像為RGB 3 840×2 880 pixel。
圖1 雞蛋圖像采集系統(tǒng)
本文使用的新鮮雞蛋樣本由廣州廣興牧業(yè)設(shè)備集團(tuán)有限公司提供。有粉色和褐色2 種顏色,清洗后,篩選出蛋殼完好的雞蛋若干枚。為模擬生產(chǎn)線上所存在的破損雞蛋,隨機(jī)挑選部分完好的雞蛋,人為進(jìn)行敲擊、碰撞制作破損蛋樣本,部分樣本如圖2 所示。
圖2 樣本示意圖
樣本采集拍攝距離為30~60 cm,為獲取充足的數(shù)據(jù)集和滿足樣本多樣性的要求,在不同角度和不同背景下共拍攝1 300 張圖像,每張圖像中存在數(shù)目不等的完好雞蛋和破損雞蛋。使用中值濾波對(duì)圖像進(jìn)行預(yù)處理,再隨機(jī)對(duì)部分圖像進(jìn)行鏡像、旋轉(zhuǎn)處理,將圖像的數(shù)目擴(kuò)充到1 639 張并編號(hào)放于同一文件夾內(nèi)。
訓(xùn)練模型采用 Pascal_VOC2007 的數(shù)據(jù)集格式,先用Labelimg 標(biāo)注工具對(duì)每張圖片目標(biāo)物體所在區(qū)域進(jìn)行手工數(shù)據(jù)標(biāo)注矩形框,得到真實(shí)框ground truth 用于訓(xùn)練。設(shè)定雞蛋的標(biāo)簽為egg,破損蛋的標(biāo)簽為crack。數(shù)據(jù)集按照9:1 的比例劃分為訓(xùn)練集與測(cè)試集。
本文選擇YOLOv4 作為漏液雞蛋的識(shí)別模型,YOLOv4[25]是繼YOLOv1[26]、YOLOv2[27]和YOLOv3[28]后Bochkovskiy 提出的目標(biāo)檢測(cè)方法,其具有更快的檢測(cè)速度,同時(shí)也具有較高的識(shí)別準(zhǔn)確度和泛化性能。以Tensorflow 作為深度學(xué)習(xí)框架,配置完成Tensorflow 的運(yùn)行環(huán)境后,將篩選出的圖像數(shù)據(jù)按照PASCALVOC2007 檢測(cè)標(biāo)準(zhǔn)進(jìn)行存儲(chǔ)和標(biāo)注,基于預(yù)訓(xùn)練模型進(jìn)行微調(diào),整體實(shí)現(xiàn)流程如圖 3 所示。
圖3 YOLOv4 識(shí)別方法流程圖
訓(xùn)練模型時(shí),輸入圖像的分辨率、批處理量大?。╞atch_size)、學(xué)習(xí)率都會(huì)影響模型的檢測(cè)效果。因此,在訓(xùn)練之前,需要選擇合適的參數(shù)。本文模型訓(xùn)練平臺(tái)如表1 所示。
表1 深度學(xué)習(xí)模型訓(xùn)練的硬件設(shè)備和軟件開發(fā)環(huán)境
使用制作好的樣本對(duì)YOLOv4 網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,獲得破損雞蛋檢測(cè)模型。具體流程如圖4 所示。
圖4 YOLOv4 破損雞蛋檢測(cè)訓(xùn)練流程圖
在模型訓(xùn)練的過程中,梯度下降批次大小(Batch_size)和學(xué)習(xí)率大?。↙earning_rate)對(duì)模型的訓(xùn)練效果有很大影響,太大使得模型收斂時(shí)間變長(zhǎng),太小可能導(dǎo)致無法收斂,選擇合適的參數(shù)能夠提高模型性能。根據(jù)本文的硬件條件選取了2、4、8、16、32 作為Batch_size,其他參數(shù)為默認(rèn)值,得到的平均精度(mAP)如表2 所示。
表2 不同Batch_size模型的mAP
由上表可知,在其他參數(shù)不變以及硬件條件允許的情況下,Batch_size 適當(dāng)增大,mAP 會(huì)有所提升。但Batch_size 的增加所引起mAP 的變化并不是線性的,如Batch_size 從2 增大到4 和從4 增大到8,mAP 分別上升了1.28 %和2.15%,而Batch_size從8 到16 時(shí),對(duì)應(yīng)的mAP 上升的幅度-2.76%。此外,當(dāng)Batch_size 選擇過大,會(huì)使得模型訓(xùn)練時(shí)數(shù)據(jù)溢出,導(dǎo)致無法進(jìn)行訓(xùn)練,如當(dāng)Batch_size=32 時(shí),在本文所使用的計(jì)算機(jī)配置下無法訓(xùn)練。綜合考慮硬件條件、檢測(cè)精度和訓(xùn)練耗時(shí)等因素,本文選擇Batch_size 的大小為8。
學(xué)習(xí)率選擇常用的初始值作為候選值,分別是0.000 1、0.001、0.01、0.1。基 于Batch_size 為8 的基礎(chǔ)上,其他參數(shù)為默認(rèn)值,訓(xùn)練結(jié)果如表3 所示。
表3 不同學(xué)習(xí)率模型訓(xùn)練的mAP
如上表所示,當(dāng)學(xué)習(xí)率為0.1 和0.01 時(shí),都出現(xiàn)梯度值過大產(chǎn)生梯度爆炸的情況,此時(shí)模型訓(xùn)練發(fā)散不收斂,表明0.1 和0.01 的學(xué)習(xí)率過大,不符合模型訓(xùn)練的要求。當(dāng)學(xué)習(xí)率為0.001 時(shí),其 mAP比學(xué)習(xí)率為0.000 1 時(shí)所對(duì)應(yīng)的mAP 高8.96%。因此,本文最終選擇的超參數(shù)為:批處理大小為8,學(xué)習(xí)率為0.001。
訓(xùn)練參數(shù)設(shè)置為:輸入雞蛋圖像的顏色通道為RGB,尺寸大小為416×416,Batch_size 設(shè)置為8,選擇固定步長(zhǎng)衰減型的學(xué)習(xí)率為0.001,其他參數(shù)為默認(rèn)值。本文的網(wǎng)絡(luò)模型訓(xùn)練過程采用凍結(jié)訓(xùn)練,即模型訓(xùn)練分為凍結(jié)和解凍兩個(gè)階段,凍結(jié)訓(xùn)練可以加快訓(xùn)練速度,也可以在訓(xùn)練初期防止權(quán)值被破壞。第一階段是凍結(jié)網(wǎng)絡(luò)前249 層進(jìn)行遷移學(xué)習(xí),期間主干特征提取網(wǎng)絡(luò)的參數(shù)沒有更新,只訓(xùn)練底層權(quán)重;第二階段是解凍網(wǎng)絡(luò)的全部層進(jìn)行訓(xùn)練,主干特征提取網(wǎng)絡(luò)參數(shù)及其預(yù)測(cè)網(wǎng)絡(luò)參數(shù)全部進(jìn)行更新。本文YOLOv4 的訓(xùn)練損失和驗(yàn)證損失下降曲線如圖5。
圖5 模型訓(xùn)練的loss 下降曲線
圖5a 是YOLOv4 的訓(xùn)練損失函數(shù)下降曲線圖(黃色部分為局部放大圖),圖5b 是YOLOv4 的驗(yàn)證損失函數(shù)下降曲線圖。其中,橫坐標(biāo)為訓(xùn)練的世代,縱坐標(biāo)為損失值。從圖中可以看出,損失函數(shù)曲線都在不斷下降,表明模型在訓(xùn)練期間不斷的優(yōu)化,整個(gè)訓(xùn)練時(shí)長(zhǎng)為288 min。從圖5 可知,隨著訓(xùn)練次數(shù)的增加,損失函數(shù)下降曲線可分為迅速下降、緩慢下降和趨于平穩(wěn)3 部分。損失值在前5 個(gè)Epoch 內(nèi)迅速下降;在5 <Epoch <25內(nèi),損失值緩慢下降;當(dāng)Epoch >25 時(shí),損失值趨于平穩(wěn)。
使用測(cè)試集對(duì)訓(xùn)練后的模型進(jìn)行測(cè)試。其中測(cè)試集有150 張圖片,每張圖片里有數(shù)目不等的目標(biāo),測(cè)試集中共有雞蛋目標(biāo)644 個(gè),破損目標(biāo)335 個(gè)。YOLOv4 部分檢測(cè)結(jié)果如圖6 所示,其中藍(lán)色框?yàn)殡u蛋目標(biāo),紅色框表示破損。
圖6 YOLOv4 部分檢測(cè)結(jié)果
由于圖中的雞蛋是放置于蛋托中,目標(biāo)之間互不遮擋,故本文通過計(jì)算正確目標(biāo)數(shù)目和錯(cuò)誤識(shí)別目標(biāo)的個(gè)數(shù)作為識(shí)別準(zhǔn)確率的標(biāo)準(zhǔn),測(cè)試最終統(tǒng)計(jì)結(jié)果如表4。其中,YOLOv4 模型在測(cè)試集上對(duì)雞蛋目標(biāo)和破損目標(biāo)檢測(cè)的AP 值分別為89.03%和78.28%,mAP 值為83.67%。模型對(duì)雞蛋和破損的識(shí)別準(zhǔn)確率分別為92.86%和86.86%。其中,錯(cuò)誤識(shí)別個(gè)數(shù)為假陰數(shù)(漏檢或一個(gè)框多個(gè)目標(biāo))和假陽數(shù)(誤檢或一個(gè)目標(biāo)多個(gè)框)之和。根據(jù)檢測(cè)統(tǒng)計(jì)結(jié)果,測(cè)試集中644 枚雞蛋中有598 枚被正確識(shí)別,識(shí)別的準(zhǔn)確率為92.86%,錯(cuò)誤識(shí)別率為7.14%,其中假陰44 枚,假陽2 枚。335 枚破損中有291 枚被識(shí)別,識(shí)別準(zhǔn)確率為86.86%,錯(cuò)誤識(shí)別率為13.14%,其中假陽3 枚,假陰41 枚。
表4 測(cè)試集檢測(cè)結(jié)果統(tǒng)計(jì)
由表5 可知,破損雞蛋的漏檢數(shù)量為39 枚,漏檢率為11.64%,占錯(cuò)誤識(shí)別總數(shù)的88.64%。漏檢主要原因是模型對(duì)破損特征不明顯的雞蛋檢測(cè)能力弱,而對(duì)完整雞蛋識(shí)別正確率僅92.86%,并不理想。為此,進(jìn)一步分析原因發(fā)現(xiàn)有部分雞蛋目標(biāo)在圖像中只露出小部分,導(dǎo)致模型并未將其正確識(shí)別,出現(xiàn)了漏檢的情況。而在實(shí)際生產(chǎn)線上,雞蛋都會(huì)完整的出現(xiàn)在視頻窗口中,故本文單獨(dú)針對(duì)完整雞蛋的識(shí)別情況進(jìn)行研究。
表5 測(cè)試集檢測(cè)結(jié)果統(tǒng)計(jì) 枚
人工統(tǒng)計(jì)圖像中完整雞蛋個(gè)數(shù),然后再用本算法進(jìn)行識(shí)別,將得到的識(shí)別正確率作為雞蛋目標(biāo)檢測(cè)的準(zhǔn)確率。經(jīng)統(tǒng)計(jì),測(cè)試集內(nèi)存在完整雞蛋432枚,成功識(shí)別數(shù)量為431 枚,完整雞蛋的識(shí)別正確率為99.77%。
為驗(yàn)證本文采用算法與常用的典型深度學(xué)習(xí)模型的效果,本文對(duì)Faster RCNN、YOLOv3 用同樣的訓(xùn)練參數(shù)和數(shù)據(jù)集進(jìn)行訓(xùn)練,在訓(xùn)練完成后采用同一測(cè)試集進(jìn)行對(duì)比試驗(yàn),測(cè)試集的150 張圖片一共包含漏液雞蛋335 枚,相關(guān)檢測(cè)結(jié)果如表6 所示。
表6 不同模型對(duì)漏液雞蛋的檢測(cè)結(jié)果
由表6 可知,在本研究中,YOLOv4 的檢測(cè)效果最佳,識(shí)別正確率分別比Faster RCNN 和YOLOv3 高2.68%和6.56%,且YOLOv4 的漏檢率最低。
為驗(yàn)證本文提出的破損雞蛋目標(biāo)檢測(cè)方法的適用性,進(jìn)行了破損雞蛋在線檢測(cè)試驗(yàn)。
3.2.1 不同漏液雞蛋數(shù)目對(duì)比試驗(yàn)
在實(shí)際雞蛋圖像中存在數(shù)目不等的雞蛋,破損蛋數(shù)目也不相同,所以針對(duì)不同破損雞蛋數(shù)目的情況進(jìn)行檢測(cè)。采用視頻幀的方式進(jìn)行檢測(cè),將一盤雞蛋放置在傳送帶上運(yùn)動(dòng)并進(jìn)行拍攝,其中傳送速度為5 m/min,最終得到233 張連續(xù)的視頻幀,每張圖片上存在1~5 枚漏液雞蛋。因此,本文按圖像中含有漏液雞蛋的數(shù)量(1、2、3、4、5)設(shè)置了5 個(gè)梯度對(duì)233 張圖像進(jìn)行檢測(cè)并統(tǒng)計(jì)。部分試驗(yàn)結(jié)果如圖7 所示,最終統(tǒng)計(jì)結(jié)果如表7 所示。
表7 不同漏液雞蛋數(shù)目的檢測(cè)試驗(yàn)
圖7 YOLOv4 的漏液雞蛋在線檢測(cè)效果圖
檢測(cè)目標(biāo)從左邊進(jìn)入視頻窗口,從左往右勻速移動(dòng),破損雞蛋的數(shù)目隨著傳送帶的移動(dòng)而變化。在圖7 所示的檢測(cè)結(jié)果中,雞蛋和破損目標(biāo)被一一框選出來,其中藍(lán)色框表示雞蛋(egg),紅色框表示破損(crack),識(shí)別效果良好。
由表7 可知,破損雞蛋的平均識(shí)別正確率為86.22%,YOLOv4 的識(shí)別效果穩(wěn)定。此外,錯(cuò)誤識(shí)別主要是由于漏檢,漏檢的主要原因是由于移動(dòng)過程中的漏液雞蛋在圖像窗口中只露出一小部分,導(dǎo)致YOLOv4 未成功識(shí)別出漏液雞蛋。
3.2.2 不同傳送速度的對(duì)比試驗(yàn)
在實(shí)際加工生產(chǎn)線上,單個(gè)機(jī)器的雞蛋傳送效率為30 000 枚/h,所需達(dá)到的速度約為5 m/min。為確保本研究的YOLOv4 檢測(cè)算法滿足傳送速度的要求,本文針對(duì)不同雞蛋傳送速度(5、6、7 m/min)做了對(duì)比試驗(yàn),具體的試驗(yàn)參數(shù)如表8。
表8 不同傳送速度的檢測(cè)試驗(yàn)
如表8 所示,選用69 枚雞蛋進(jìn)行檢測(cè),其中包括19 枚破損雞蛋。對(duì)不同傳送速度的破損雞蛋進(jìn)行檢測(cè),部分幀檢測(cè)效果如圖8。
圖8 不同傳送速度的破損雞蛋檢測(cè)效果
由圖8 可知,由于出現(xiàn)了模糊目標(biāo)、殘缺目標(biāo)等困難目標(biāo),在不同傳送速度過程中,部分幀會(huì)出現(xiàn)漏檢的情況,如圖8b 中有2 個(gè)破損目標(biāo)漏檢,圖8h 中有1 個(gè)雞蛋目標(biāo)漏檢。因此,為了全面評(píng)估YOLOv4 模型對(duì)于不同傳送速度下的破損雞蛋檢測(cè)能力,本文針對(duì)每個(gè)試驗(yàn)的視頻數(shù)據(jù)進(jìn)行驗(yàn)證。
經(jīng)過統(tǒng)計(jì),可以得出視頻數(shù)據(jù)集的相關(guān)信息。包括視頻的時(shí)長(zhǎng)、幀率、總幀數(shù)以及總視頻幀中的目標(biāo)總數(shù),如表9 所示。
表9 視頻數(shù)據(jù)集信息
由表9 可看出,在3 組試驗(yàn)的視頻中,每幀出現(xiàn)的雞蛋數(shù)目均為15~18 枚,而破損蛋為3~6 枚,雞蛋總數(shù)分別為9 420、7 782、6 633 枚;破損總數(shù)分別為2 466、2 044、1 751 枚。利用YOLOv4 模型對(duì)每個(gè)視頻的每一幀進(jìn)行目標(biāo)檢測(cè),并進(jìn)行統(tǒng)計(jì)和記錄,得到的具體結(jié)果如表10 所示。
表10 YOLOv4視頻幀目標(biāo)數(shù)目檢測(cè)結(jié)果
由表10 可知,在本研究設(shè)置的不同傳送速度的情況下,YOLOv4 對(duì)雞蛋的識(shí)別接近100%,而對(duì)于破損的識(shí)別正確率在83.78%~85.93%之間。結(jié)果表明,在雞蛋傳速度為5~7 m/min 范圍內(nèi),本文所提出的方法能完成破損雞蛋檢測(cè)的任務(wù)。
為探索深度學(xué)習(xí)在破損雞蛋檢測(cè)中應(yīng)用,本文提出一種基于機(jī)器視覺和深度學(xué)習(xí)的YOLOv4 破損雞蛋檢測(cè)方法,通過多次調(diào)整參數(shù)訓(xùn)練模型,確定了合適的批處理量和學(xué)習(xí)率,最終訓(xùn)練得到的YOLOv4 漏液雞蛋檢測(cè)模型精度較高,在線檢測(cè)效果良好,能夠滿足實(shí)際的雞蛋生產(chǎn)效率。
1)本文提出的YOLOv4 破損蛋檢測(cè)模型在測(cè)試集上的mAP 為83.67%,漏液雞蛋的識(shí)別正確率達(dá)86.86%,2 項(xiàng)指標(biāo)均優(yōu)于Faster RCNN 和YOLOv3 算法,驗(yàn)證了該方法的可行性和有效性。
2)本文提出的YOLOv4 檢測(cè)模型適用性較強(qiáng)。不同破損雞蛋數(shù)目檢測(cè)試驗(yàn)中,識(shí)別正確率在84.13%~87.42%之間,平均識(shí)別正確率為86.22%;傳送速度為5 m/min 時(shí),識(shí)別正確率為85.93%;傳送速度為6 m/min 時(shí),識(shí)別正確率為85.03%,在傳送速度為7 m/min 時(shí),識(shí)別正確率為83.78%。從識(shí)別精度和速度來看,該方法能夠應(yīng)用于實(shí)際雞蛋生產(chǎn)線中。
本文提出的YOLOv4 破損蛋檢測(cè)模型完成了機(jī)器視覺結(jié)合深度學(xué)習(xí)在該領(lǐng)域應(yīng)用的初步探索。文中所提及的對(duì)邊緣非完整雞蛋圖像的誤判、特征不明顯破損蛋漏檢的問題仍需進(jìn)一步研究和改善。