項新建,周焜,費正順,鄭永平,姚佳娜
(浙江科技學院,杭州市,310023)
中國是楊梅的主要生產國,楊梅果實采摘時限較短,成熟后必須盡快采摘[1]。楊梅種植地多在山地丘陵地區,果農如果無法適時采摘,會導致大批楊梅錯過最佳食用期,因此楊梅采摘的智能化能夠有效提高楊梅的生產效率和降低楊梅產業工人的勞動強度。機器視覺是水果采摘智能化設備中的重要組成部分,快速準確地識別到楊梅果實是實現智能采摘的核心問題[2-3]。
徐黎明等[4]設計出一種研究自然場景下成熟楊梅的識別技術,采用最大類間方差法根據R-G顏色特征對楊梅圖像進行分割,再使用SUSAN算子自適應選取閾值對圖像進行邊緣檢測,最后通過Hough實現對楊梅的識別。Ghazal等[5]對水果的視覺特征和各種分類器進行分析,觀察到對于具有fruit 360數據集這種數據集中相似成像條件的較小數據集,將顏色特征和紋理特征進行組合再利用傳統算法進行分類可以顯著提高分級準確度。Khodabakhshian等[6]采用混合對比度拉伸法,利用頂帽運算濾波和高斯函數提高圖像對比度,經Gabor小波變換和k-means聚類分割后采用SVM分類器進行番茄的果實分類。以上學者使用的主要是基于計算機視覺的傳統算法進行水果檢測,傳統算法過于依賴人工提取的特征,存在泛化性差、易受環境影響等問題。
隨著神經網絡的發展,深度學習也越來越多的運用到了水果檢測當中。Kang等[7]提出一種基于深度學習的蘋果檢測器的快速實現框架,采用多尺度金字塔和聚類分類器對訓練數據進行快速標記,實驗證明這種方法提高了模型的檢測性能。Akram[8]等使用兩種深度預訓練模型(VGG16和Caffe AlexNet)用于植物病蟲害特征提取,使用遺傳算法來選擇最具判別性的特征后采用多類支持向量機進行最后的分類,在PlantVillage和CASC-IFW數據集上進行實驗,分類準確率達到98.6%。
目前較為流行的目標檢測算法分為兩種類型,一種是基于區域建議的雙階段目標檢測算法,如R-CNN[9]、SPP-Net[10]、Fast R-CNN[11]、Faster R-CNN[12]、MaskR-CNN[13];另一種是基于回歸分析的單階段目標檢測算法,如 YOLO[14]系列、SSD[15]系列、RetinaNet[16]等。雙階段目標檢測算法通常先通過算法提取到候選框,再進行二次修正獲得結果。而單階段算法則直接在整幅圖中預測目標的位置信息,相比較而言,單階段算法在檢測速度上擁有更優的性能。在實際使用場景中,單階段算法更符合檢測任務的需求。
本研究基于深度學習算法,采用Jetson Nano A02開發一款便攜式楊梅果實成熟度檢測儀,提出一種適合在嵌入式系統中部署的基于輕量級目標檢測網絡YOLOX-NANO的改進楊梅果實檢測算法,改進特征金字塔結構,在FPN層中引入通道與空間注意力機制,增強網絡對小目標的識別精度。使用Focal loss以解決單階段目標檢測網絡中的正負樣本不均衡問題。引入了EIoU損失函數替代IoU,既考慮到邊框與目標中心點距離還解決了邊框橫縱比定義模糊的問題。基于遷移學習的思想,使用預訓練模型,加快網絡收斂速度提升網絡模型性能。
本研究采用的數據集圖像除從互聯網上獲取外,還由楊梅果園實地拍攝獲得。拍攝的楊梅果實圖像包含光線不足、強光照射、枝葉遮擋、果實堆疊等自然環境因素,圖像包含成熟果實、將成熟果實以及未成熟果實三種,部分數據集如圖1所示。

(a) 光線不足
楊梅圖像的采集地位于楊梅種植基地,采用55 mm定焦鏡頭的Sony α6300微單相機進行不同距離的拍攝,共采集原始圖像1 000幅以.jpg格式保存,圖像分辨率為3 840像素×2 160像素,將圖像根據楊梅果實的密集程度進行八等分和四等分后,刪除部分無目標的無效圖片,最終得到的樣本數據為5 035幅圖片。使用Labelme對數據集進行標注,根據楊梅表面的顏色對成熟度進行劃分,其中全青色或整體呈現青色楊梅劃為未成熟,表面轉黃、紅色明顯但未全紅劃為將成熟,表面全紅或轉紫劃為已成熟,成熟度劃分示例如圖2所示。

圖2 成熟度劃分示例
使用標注工具Labelme對圖像進行標注后,轉換成標準VOC格式。在已有數據集的基礎上,本研究通過數據增強算法,對每幅圖片進行一次擴增,每次擴增采取從翻轉、增加噪聲、平移、旋轉中的隨機最少一種擴增方法進行擴增,擴增樣本圖像至10 070幅,按照7∶1∶2的比例將數據集隨機劃為訓練集(7 049)、驗證集(1 007)、測試集(2 014)。
YOLOX[17]是由曠世科技于2021年提出的單階段高精度目標檢測算法。YOLOX引入了解耦頭(Decoupled Head)、數據增強(Mosaic)、無錨框思想(anchor free)、動態匹配正樣本(SimOTA)等目前目標檢測領域的有效應用,網絡結構圖如圖3所示,YOLOX主要分為三個部分,分別是backbone主干特征提取網絡部分、Neck加強特征提取網絡部分和Prediction檢測頭部分。YOLOX仍采用了CSPDarknet作為主干特征提取網絡,圖片輸入到backbone中進行淺層特征提取,輸出三層不同尺度的特征層傳入Neck部分的加強特征提取網絡層(FPN)之中進行多尺度特征信息融合提取深層特征,輸出的三層特征圖傳入Prediction部分進行回歸預測。

圖3 YOLOX結構圖
根據現有的研究現狀可知,通道注意力機制對深度卷積神經網絡(CNN)性能的增強取得了顯著的效果[18]。現有的注意力機制例如SENet[19]、CBAM[20]、BAM[21]、GCNet[22]、FcaNet[23]等在引入到各大主流網絡中都得到了可觀的性能增強效果。本文在特征加強提取網絡(FPN)中引入了超強通道注意力模塊(ECA)結構如圖4所示。

圖4 通道注意力機制(ECA)結構圖
由圖4可得,特征圖k輸入后在不降維的情況下進行逐通道全局平均池化再傳入卷積核大小為k的快速一維卷積層來實現通道之間的信息交互。公式如式(1)所示。
w=σ[C1Dk(y)]
(1)
式中:C1D——快速一維卷積;
k——本地跨通道交互的覆蓋范圍,即有k個相近鄰參與一個通道的注意力預測。
為了有效表示跨通道信息交互作用的覆蓋范圍(即卷積核大小k)與通道維度C(卷積核數量)之間的特征關系,ECA將C與k的值設為
C=φ(k)=2(γ×k-b)
(2)
給定通道維數C的值即可自適應確定卷積核大小k的值
(3)
式中:|*|odd——最接近的*奇數。
本文中γ的值設為2,b的值設為1。
FPN特征金字塔能夠很好地解決多尺度融合的問題,然而傳統的FPN在多尺度融合過程中會損失部分特征信息,卷積結構在處理不同感受野的特征圖時在產生有效特征的同時也會產生無效特征。本文提出的ECA-FPN結構在FPN的輸入層引入了ECA模塊,以及在上采樣的過程中引入ECA模塊,從而實現了通道間充分的信息交流以達到增強網絡性能的目的。結構圖如圖5所示。

圖5 改進ECA-FPN結構圖
ECA-FPN特征加強網絡會輸出三個特征加強后的特征層,在經過解耦頭預測后,每個特征層將得到三個預測結果分別是預測框(Reg)、目標(Obj)、和目標種類(Cls)。
2.3.1 高效交并比損失函數
本研究在邊界框預測中引入了高效交并比損失函數(EIoU)[24],與原本的交并比(IoU)[25]損失函數相比,EIoU既考慮到邊界框回歸的重疊面積,也考慮到邊框距離目標的中心點距離和邊框長寬邊的差。EIoU損失函數由三部分組成,計算公式如式(4)所示。

(4)
式中:b、bgt——預測框、真實框;
ρ2(b,bgt)——預測框中心點與真實框中心點的歐式距離;
c——同時包含預測框與真實框的最小外接框的對角線距離。


2.3.2 焦點損失函數
單階段算法在目標檢測時會生成大量預選框(Region Proposal),而其中大部分都是負樣本,正樣本只占很少一部分,這便導致樣本類別不均衡問題[16]。大量無用的易分負樣本會導致Loss函數的梯度下降方向指向非最優解。針對以上問題,為提高網絡模型的精度,本研究采用的焦點損失函數(Focal Loss)通過減少易分類樣本的權重,使模型在訓練時更專注于難分類樣本。
Focal Loss是基于標準交叉熵損失函數(Cross Entropy Loss)修改而來,公式如式(5)所示。
FL(pt)=-(1-pt)γlog(pt)
(5)
式中:pt——樣本屬于正確分類的概率;
γ——聚焦參數(focusing parameter),γ≥0。
當γ為0時,Focal Loss函數即為標準交叉熵損失函數。
神經網絡訓練平臺使用AMAX深度學習服務器XG-48202G,該服務器采用Intel E5-2620v4x2,內存為4通道8 GB共32 GB,采用NVIDIA GeForce RTX2080Ti顯卡,顯存大小為11 GB。服務器系統為Ubuntu18.04,內置軟件開發環境Python3.7、pytorch1.7-GPU、CUDA10.2。測試環境的CPU為Intel i7-8565U,內存為雙通道8 GB,顯卡為mx220,顯存大小為2 GB,系統為Windows 11專業版。
嵌入式試驗平臺采用Jetson Nano A02版,該開發板具有4 GB內存,CPU采用4核ARM A57,最高頻率為1.43 GHz。操作系統采用Ubuntu 16.04,內置軟件開發環境Python3.69、pytorch1.6-GPU、CUDA10.2。
本研究采用平均精度(Mean Average Precision,mAP)作為模型檢測精度的評價指標,mAP與準確率(Precision,P)、召回率(Recall,R)有關,公式如式(6)~式(9)所示。
(6)
(7)

(8)
(9)
式中:TP——被正確劃為正樣本的數量;
FP——被錯誤劃為正樣本的數量;
FN——被錯誤劃為負樣本的數量;
M——分類的類別數;
AP(k)——第k類的AP值。
F1得分是一種用于衡量二分類模型精確度的指標。
(10)
基于遷移學習思想[26],通過在大規模通用數據集上進行預訓練,獲得泛化性較強的網絡模型來替代源模型進行目標任務數據集上的訓練。相比源模型隨機選取初始權重進行訓練,預訓練模型已具備一定的通用特征提取能力,使用預訓練模型進行具體任務的訓練可加快模型收斂速度,得到魯棒性更優的模型。本研究使用COCO-Train2017數據集對YOLOX-NANO的主干網絡CSPDarknet53進行預訓練,得到了預訓練模型權重。訓練時,將預訓練模型權重設置為初始權重,對前50個訓練輪數(epoch)進行凍結訓練,即前50個epoch不進行主干網絡的權值更新,后150個epoch再進行主干網絡權值更新,從而提高訓練效率,加快模型收斂速度。置信度閾值設為0.5,即得分大于0.5的預測框會被保存。在前90%的epoch中采用Mosaic數據增強法訓練。在凍結訓練階段,本研究的batchsize設為32,則每個epoch進行了315次迭代(step),在解凍階段,batchsize設為32,每個epoch進行了315次迭代。
訓練過程的Loss曲線如圖6所示,橫坐標為訓練輪數(epoch),縱坐標為Loss值,解凍前訓練集損失值收斂于2.36,測試集損失值收斂于1.95。解凍后的訓練集損失值收斂于1.26,測試集損失值收斂于1.21。

圖6 訓練Loss圖
為驗證模型有效性,在訓練參數相同情況下對改進后的 YOLOX-NANO網絡進行橫向縱向對比實驗,比較不同模型的單類別平均精度AP、平均精度mAP、模型大小Size和每秒檢測幀數FPS,其中AP值表示每種成熟度楊梅的識別平均精度,mAP值表示整體的識別平均精度,FPS體現出模型的檢測速度。由于部分模型過大,無法在Jetson nano A02正常運行,因此在測試環境下,對測試集進行試驗,結果如表1所示。

表1 對比試驗結果
本研究改進算法在網絡結構和推理速度基本不變的情況下,提高了mAP,對三種不同成熟度的楊梅果實的識別率均有提升,尤其對于數據集中數量比重較少的成熟楊梅和半成熟楊梅提升更明顯。與同為輕量級網絡的YOLOv4-tiny和SSD-moblenetv2相比,雖然推理速度有所下降,但是mAP比后者分別高出13.48%和9.43%,比Faster R-CNN高出7.82%。本研究改進的算法精度與YOLOX-TINY相差不大,但網絡模型大小遠遠小于YOLOX-TINY,更易于在嵌入式設備中部署。
在Jetson Nano A02中部署了YOLOv4-tiny、YOLOv5s、YOLOX-NANO、YOLOX-TINY和本文算法對處于自然狀態的楊梅圖片進行檢測,識別效果圖如圖7所示。其中,在YOLOv4tiny和YOLOv5s中,紅色框代表成熟楊梅,藍色框代表半成熟楊梅,綠色框代表未成熟楊梅。在YOLOX系列和本文改進算法中,紅色框代表未成熟楊梅,綠色框代表成熟楊梅,藍色框代表半成熟楊梅??梢钥闯鯵OLOv4tiny和YOLOv5s均存在漏檢問題;YOLOX-NANO對嚴重遮擋楊梅存在漏檢;YOLOX-TINY漏檢率有所減少;本研究改進的YOLOX-NANO算法漏檢率最低。

(a) YOLOv4tiny
在Jetson nano A02中對測試集進行檢測。如圖8所示,在單目標+強光的圖片中,本文改進算法與YOLOX-NANO均能進行有效檢測,在多目標+堆疊遮擋+強光條件下,YOLOX-NANO算法存在誤檢,本文改進算法能正確識別楊梅。

(a) YOLOX-NANO
如圖9所示,在暗光條件下本文改進算法的漏檢率比YOLOX-NANO更低,但是對模糊的目標依舊存在漏檢現象。

(a) YOLOX-NANO
使用包含自然環境干擾的數據集和圖像擴增技術大大加強了網絡模型的魯棒性,同時結合注意力機制讓網絡的特征提取能力得到了增強從而精度得到了提升。
本文提出一種改進YOLOX-NANO輕量級目標檢測算法,針對不同成熟度楊梅進行識別。為增強模型對多尺度特征提取能力,又能夠部署于嵌入式設備中,本文以YOLOX-NANO目標檢測網絡為基礎,引入輕量級通道注意力模塊。通過融合加強特征提取網絡與通道注意力,在僅增加少量參數前提下,提高網絡模型通道注意力。同時引入焦點損失函數解決樣本不均衡問題,采用EIoU損失函數提高了模型檢測精度。
1) 在FPN中引入ECA模塊的改進算法相比原YOLOX-NANO算法,mAP提高了2.9%,未成熟楊梅、半成熟楊梅和成熟楊梅的AP分別提高了2.01%,4.35%,2.36%。而網絡模型大小僅增加了0.059 MB,實現了增加少量參數提高準確率的目的。
2) 在解耦頭中引入Focal Loss的改進算法,相較于原算法,mAP提高了2.25%,未成熟楊梅、半成熟楊梅和成熟楊梅的AP分別提高了1.01%,4.15%,1.63%,對于半成熟楊梅準確率提升相較于其他成熟度更為明顯,且模型大小幾乎不變。
3) 本文改進的YOLOX-NANO算法與原算法相比較,mAP提高了4.54%,未成熟楊梅、半成熟楊梅和成熟楊梅的AP分別提高了2.45%,6.78%,4.43%,對各成熟度楊梅的識別率均達到90%以上,檢測效果與YOLOX-TINY持平,模型大小僅為3.813 MB遠小于YOLOX-TINY的19.83 MB。
4) 本文改進的YOLOX-NANO算法能夠在自然環境下對不同成熟度的楊梅果實進行檢測,且檢測效果良好,與其他輕量級網絡相比,在準確度和模型大小上更具優勢,更適合用于楊梅果實成熟度檢測儀的研發。下一步將考慮如何通過剪枝蒸餾技術,對模型進行進一步的壓縮以加快推理速度。