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