呂 佳,張翠萍,劉 琴,李帥軍
(1.重慶師范大學計算機與信息科學學院,重慶 401331;2.重慶市數字農業服務工程技術研究中心,重慶 401331)
葡萄是中國栽培面積最廣、產量最多的果實之一,在全國果實生產中占有重要地位[1]。葡萄產業作為中國農業生產的支柱產業,在鄉村振興、精準扶貧工作中發揮重要作用[2]。由于葡萄產量對價格的影響較大,對葡萄的有效估產能為后續的葡萄收獲、倉儲、運輸和加工計劃提供有效的指導[3]。傳統葡萄估產依靠人工抽樣計數,耗時費力且估計結果并不準確[4],而深度學習技術[5-6]在農業領域的應用為葡萄的估產提供了思路。
果實估產的實質是實現果實的自動計數,近年來,深度學習被廣泛地應用于果實的自動計數中。BHATTARAI等[7]提出一種基于深度學習的自動計數網絡(CountNet),應用在商業果園計數中,取得了較好的計數性能。但他是基于單張靜態圖片進行計數,對于葡萄等大型果樹,單張圖片并不能包含一棵果樹的所有果實,導致無法實現完整的果實計數[8],而通過視頻對果實計數可以有效解決這一問題。視頻果實計數主要分為果實檢測和果實追蹤兩個階段,其中果實的準確檢測是實現視頻果實計數的前提。目前主流的目標檢測方法分為兩類:單階段目標檢測方法和兩階段目標檢測方法,其中單階段目標檢測方法推理速度更快[9],兩階段目標檢測方法檢測精度更高。為了實現實時檢測計數,以YOLO 系列為代表的單階段目標檢測方法在果實檢測領域得到了廣泛應用[10-12],果實檢測為后續果實的追蹤計數提供了基礎,而實現精準果實計數的難點在于果實追蹤。
目標追蹤[13-15]根據初始幀中追蹤目標的位置對后續幀中目標進行追蹤定位,從而使視頻中相同目標關聯起來,其中基于卡爾曼濾波器(kalman filter,KF)[16]的追蹤方法在果實追蹤領域應用廣泛。GAN 等[17]使用擴展KF集成出自主導航系統定位追蹤柑橘類果實,但追蹤成本昂貴。為降低成本,WANG 等[18]結合KF 和匈牙利算法對芒果追蹤計數,降低了追蹤成本和復雜性,但存在遮擋芒果重復計數的問題。為減少果實的重復計數,高芳芳等[19]提出改進的匈牙利算法,保留對蘋果追蹤過程中因遮擋而消失的追蹤框,并進行重新匹配,提高了蘋果計數精度,而對于葉片較大或茂密的果樹,葉片遮擋果實可能導致追蹤目標丟失。為解決此問題,ZHANG 等[20]在簡單在線實時追蹤(simple online and real-time tracking,SORT)[21]的基礎上提出OrangeSort,對田間柑橘計數,降低了葉片遮擋對柑橘計數結果準確性的影響,但該方法忽略了目標的外觀特征。GE 等[22]提出改進的YOLODeepsort 對番茄追蹤計數,該方法利用DeepSORT[23]中的外觀特征提取網絡進行關聯匹配,滿足了對番茄產量預測的實際需求。由于上述方法都是在設定場景下提出的目標追蹤解決方案,對于真實場景下葡萄的追蹤計數并不適用。針對葡萄的追蹤計數主要存在以下3 個問題:
1)實際場景中,套袋后的葡萄因體積增大易發生重疊遮擋,導致部分套袋葡萄在檢測階段被過濾,后續追蹤結果不準確。
2)搭載相機的遙控小車通常以勻速拍攝果樹視頻,而人工拍攝視頻的速度不穩定,導致視頻中追蹤的套袋葡萄目標丟失,進而影響計數的準確性。
3)真實果園中,葡萄葉片較大且套袋后的葡萄相互遮擋,在追蹤過程中果實被遮擋可能導致追蹤目標丟失、身份標識轉變,因此對視頻中的果實逐個賦予ID(從1開始)實現果實計數的方法[24]并不適用。
為解決上述問題,本文提出一種基于自糾正NMSByteTrack 的套袋葡萄估產方法。首先,將非極大值抑制(non-maximum suppression,NMS)[25]操作從檢測階段后置到追蹤階段,規避套袋葡萄在檢測時因遮擋而被過濾的現象,以解決上述問題1);其次,利用相機運動補償和改進的KF 算法,通過前后幀背景信息生成的仿射變換矩陣對KF 生成的預測框進行自動糾正,以解決上述問題2);最后,提出一種劃線計數策略,通過撞線對追蹤目標進行計數,以解決上述問題3)。
為使試驗數據集具有實際參考價值,本文將真實果園拍攝的套袋葡萄圖片和視頻作為試驗數據集。該數據集來源于重慶璧山區派登特農業科技示范園,其經度、緯度和高度分別為106.221°、29.753°與353m[26]。為拍攝不同時間段、不同角度下的套袋葡萄,研究人員使用紅米K40 和OPPO Reno6pro+的手機攝像頭對同一個套袋葡萄分別在8:00、12:00、18:00 進行正拍、側拍和俯拍等不同角度拍攝,總拍攝時長約6 h,拍攝高度距地面約1.5 m,拍攝路線為逐行拍攝,共獲取套袋葡萄圖片500 張,分辨率有4 000× 3 000 像素和4 096× 3 072 像素兩種。采集套袋葡萄有效視頻數據集6 個,每個視頻平均時長約20 s,視頻速度為非勻速,視頻格式為MP4,分辨率為1 920× 1 080 像素,視頻幀率為30 幀/s。
原始的500 張套袋葡萄圖片是經過數據篩選后的實際拍攝圖片。為提高模型的泛化性,通過對原始圖片進行飽和度、亮度增強、亮度變暗和鏡像等操作,如圖1所示,以滿足套袋葡萄在不同光照條件下的生長狀態和不同角度下的分布狀態。

圖1 圖片增強方法Fig.1 Image augmentation methods
通過以上操作,將原始的500 張套袋葡萄圖片擴展為2 000 張,并將2 000 張圖片按照8∶2 的比例隨機劃分成訓練集和驗證集,6 個有效視頻作為測試集。
數據增強后,本文對套袋葡萄的2 000 張圖片進行標注,標注軟件為MAKE SENSE,通過在線對套袋葡萄繪制矩形框,使矩形框完全包含整個套袋葡萄,生成該目標矩形框位置信息的txt 文件。用于測試試驗的6 個視頻使用DarkLabel 軟件進行標注,如圖2 所示。通過逐幀繪制每個套袋葡萄從出現到消失過程中的最小矩形框,生成目標位置信息的txt 文件。

圖2 視頻標注軟件Fig.2 Video annotation software
YOLO 系列目標檢測方法中,YOLOv5s 是一種高性能、高精度、易于擴展和部署的目標檢測模型,具有更快的速度和更高的可擴展性[27]。在保證目標檢測精度的前提下,為利于實現果實的實時檢測,本文選擇YOLOv5s 作為套袋葡萄的檢測方法。
2022 年,ZHANG 等[28]在SORT 的基礎上首次提出了在線追蹤雙關聯方法ByteTrack。該方法對低置信度的檢測框進行二次關聯,保證實時性的同時,進一步提升了目標追蹤性能,因此本文將ByteTrack 作為對套袋葡萄追蹤的基礎方法。
為降低套袋葡萄被遮擋的影響,并減少因相機姿勢變化而產生的誤差,本文提出一種基于自糾正NMSByteTrack 的追蹤方法解決上述問題。同時提出一種劃線計數策略,實現對套袋葡萄更精準地計數估產。
在套袋葡萄的計數研究中,葡萄經過套袋后體積變大,使得部分套袋葡萄重疊遮擋,在YOLOv5s 中直接進行NMS 操作可能導致重疊遮擋的套袋葡萄檢測框被過濾。為解決該問題,本文將檢測階段的NMS 操作后置到追蹤階段,并提出基于NMS-ByteTrack 的算法。為使套袋葡萄追蹤計數具有便捷性和實時性,大多數果農并不會使用機器小車拍攝,更多采用手機拍攝,而人工拍攝的視頻通常是非勻速的,使得套袋葡萄的產量估計不準確。因此本文在上述基礎上加入相機運動補償和改進的KF 算法,以自動糾正視頻中非線性運動的不足。估產方法的整體流程如圖3 所示。

圖3 基于自糾正NMS-ByteTrack 的套袋葡萄估產方法整體流程圖Fig.3 Overall flowchart of bagged grape yield estimation method based on self-correcting NMS-ByteTrack
2.1.1 基于NMS-ByteTrack 的算法
NMS 是一種去除非極大值的算法,常用于計算機視覺中的邊緣檢測、目標檢測和行人檢測等,其作用是去除檢測任務中重復的檢測框。目前大多數多目標追蹤方法中,NMS 用于檢測階段,而非追蹤階段。NMS 操作可以過濾一些低置信度檢測框或冗余檢測框,并獲得一些高分檢測結果,而在檢測階段使用NMS 操作可能會導致可用于追蹤的候選框被過濾,致使追蹤結果不準確。因此,本文提出一種基于NMS-ByteTrack 的算法,將NMS 操作后置到追蹤階段,使結果更專注于追蹤任務,有效地為追蹤保留更多的候選框。
其次,若交并比大于給定閾值θ,則該檢測框被保留,計算過程如式(2)所示。
2.1.2 相機運動補償
相機運動是指相機旋轉、縮放和平移等姿勢的變化。由于人工拍攝過程中相機不經意的移動,導致視頻中同一個套袋葡萄的背景信息不斷改變,干擾了對套袋葡萄的追蹤計數。為減少追蹤過程中相機運動產生的誤差,本文使用一種傳統的全局運動補償(global motion compensation,GMC)圖像配準技術[29],其本質是關聯相鄰幀的同一套袋葡萄,根據相鄰幀的背景運動生成仿射矩陣,從而將套袋葡萄的位置信息從上一幀的坐標系轉換到當前幀的坐標系中。該技術首先提取上一幀和當前幀的套袋葡萄圖片中除追蹤目標外的背景關鍵點,利用稀疏光流[30]對提取的套袋葡萄背景關鍵點進行匹配;其次使用RANSAC[31]計算得到背景運動的仿射變換矩陣,利用KF 預測出當前幀的套袋葡萄預測框;最后獲取的仿射變換矩陣將該預測框從上一幀的坐標系中變換到當前幀的坐標系,實現對當前幀預測框的位置信息矯正,具體流程如圖4 所示。

圖4 相機運動補償流程Fig.4 Camera motion compensation flowchart
At|t-1∈R2×3代表從第t-1 幀到第t幀的坐標變換仿射矩陣,如式(3)所示。其中M∈R2×2代表坐標系縮放和旋轉部分變換矩陣,T∈R2×1代表坐標系平移部分變換矩陣,分別如式(4)和式(5)所示,更新矯正KF 預測框如式(6)和式(7)所示。
2.1.3 改進的KF 算法
KF 是一種利用線性系統狀態方程對系統狀態進行最優估計的算法[16]。通過對追蹤目標位置進行預測,再與對應追蹤目標的觀測位置數據融合,從而得到目標最優位置估計。本文使用KF 線性勻速模型對套袋葡萄的追蹤框進行最優估計。KF 主要分為預測和更新兩個階段,通過上一幀的套袋葡萄追蹤框對當前幀的套袋葡萄追蹤框進行預測,得到當前幀套袋葡萄的追蹤預測框,同時,利用檢測方法YOLOv5s 檢測出當前幀套袋葡萄的檢測框,與當前幀的追蹤預測框進行數據融合更新,得到當前幀該套袋葡萄的最優估計追蹤框。
目前主流的追蹤方法[32-34]使用的KF 狀態向量為,其中x、y分別代表估計框的中心點橫縱坐標,a表示寬高比,h表示高度,vx、vy、va和vh分別代表前面4 個變量的變化速度。為了正確預測出套袋葡萄的位置信息,本文提出改進的KF 算法,將之前KF 狀態向量的寬高比a更改為寬度w,得到KF 狀態向量為。通過消融試驗結果證明,直接使用寬度去最優估計套袋葡萄追蹤框的效果更好。
實際拍攝套袋葡萄過程中,觀察到葡萄的葉片表面積很大,易遮擋套袋葡萄,在目標追蹤過程中可能導致同一個套袋葡萄的身份標識發生轉變,易重復計數。因此本文提出一種劃線計數策略,對套袋葡萄進行自動計數,提高計數的準確性,如圖5 所示。為準確估計視頻中套袋葡萄的個數,避免在視頻追蹤過程中套袋葡萄還未到劃線處,追蹤目標就消失于視頻屏幕之外。本文將計數線設置到視頻屏幕的中間,并在拍攝的每個視頻前幾秒預留出無套袋葡萄的空閑幀,在計數過程中,具有同一ID 的套袋葡萄只能計數一次,避免套袋葡萄重復撞線計數的情況。通過套袋葡萄的追蹤框中心點與計數線成功碰撞,實現對套袋葡萄的自動計數。

圖5 套袋葡萄的追蹤計數線Fig.5 Tracking and counting line for bagged grape
2.3.1 試驗環境
平臺配備有CPU 為Intel Core i5-12400F,內存為16 GB,顯卡型號為RTX3060-12GB,計算機系統為Windows11 專業版,開發環境為PyCharm2021,所用語言為Python3.7,所用框架為Pytorch1.12.0。
為了實時檢測套袋葡萄,本文將2 000 張圖片放入到YOLOv5s 中訓練得到最優權重。其中YOLOv5s 模型訓練設置的最優超參數為:訓練輪次設置為600,批量大小為36,優化器為SGD,初始學習率為0.01,同時采用余弦退火策略輔助學習率下降,學習率動量為0.937,權重衰減系數為0.000 5。訓練總損失函數(Ltotal)由定位損失(Lbox_loss)、置信度損失(Lobj_loss)和分類損失(Lcls_loss)構成,如式(8)所示。
式中 λ1,λ2和 λ3是權重因子,均為YOLOv5s 默認參數設置。
2.3.2 評價指標
在果實檢測中,本文使用精度(precision)、召回率(recall rate)和平均精度(average precision,AP)作為對套袋葡萄檢測效果的評價指標[10]。精度、召回率和平均精度的值越大,說明目標檢測方法的檢測性能越好。
在果實追蹤中,本文使用多目標追蹤準確率(multiple object tracking accuracy,MOTA)、多目標追蹤精度(multiple object tracking precision,MOTP)、ID 調和平均數(identification F1-score,IDF1)和ID 變換次數(ID switch,IDSW)作為對套袋葡萄追蹤效果的評價指標[19]。多目標追蹤準確率、多目標追蹤精度和ID 調和平均數的值越大,ID 變換次數越小,說明套袋葡萄的追蹤性能越好。
在果實計數中,本文采用平均計數精度(average counting precision,Acp)作為對套袋葡萄計數效果的評價指標[19]。平均計數精度越大,說明套袋葡萄的計數性能越準確。具體計算如式(9)所示:
式中S表示估產方法計數視頻的果實個數,G表示人工計數視頻的果實個數,n表示視頻的個數。
3.1.1 不同檢測方法的對比試驗
為驗證檢測方法YOLOv5s 在套袋葡萄數據集上的準確性,本文將YOLOv5s 與YOLOX-s[35]、YOLOv7[36]進行了對比試驗,如表1 所示。

表1 不同目標檢測方法在套袋葡萄數據集上的試驗結果Table 1 Test results of several different object detection methods on bagged grape dataset %
試驗結果表明,YOLOv5s 的精度、召回率和平均精度分別為97.6%、96.2%和97.6%,比YOLOX-s 的精度、召回率和平均精度分別提高了2.8、3.1 和7.6 個百分點,YOLOv5s 相比YOLOv7 的精度和平均精度分別提高了0.5 和0.4 個百分點。證明了YOLOv5s 在套袋葡萄數據集上檢測性能的優越性。試驗結果分析可知,YOLOX-s和YOLOv7 對套袋葡萄的檢測效果不理想主要有以下3個原因:1)YOLOX-s 和YOLOv7 將背景噪聲檢測為套袋葡萄目標,如圖6a 所示;2)兩個目標相互重疊遮擋,被遮擋的套袋葡萄目標在YOLOX-s 和YOLOv7 中檢測不到,如圖6b 所示;3)由于葉片的遮擋,導致YOLOX-s和YOLOv7 檢測不出被遮擋的套袋葡萄,如圖6c 所示。以上問題都在不同程度上降低了YOLOX-s 和YOLOv7檢測套袋葡萄的精度,因其檢測精度較高而對套袋葡萄等大目標的檢測效果不理想。

圖6 套袋葡萄不同檢測方法的效果對比Fig.6 Effect comparison of different detection methods for bagged grape
3.1.2 YOLOv5s 的收斂性分析
為了驗證套袋葡萄數據集在YOLOv5s 上訓練的收斂性,本文在圖7 中展示了YOLOv5s 在訓練過程中的損失和檢測指標變化趨勢圖,其中橫坐標代表訓練輪次,縱坐標代表損失值或檢測指標值。由圖可知,訓練400輪次后,模型的訓練損失和驗證損失都逐漸達到收斂狀態,精度、召回率和平均精度都趨于穩定。

圖7 訓練損失和檢測指標變化趨勢Fig.7 Trend chart of training loss and detection metrics
3.2.1 不同追蹤方法的對比試驗
為證明基于自糾正NMS-ByteTrack 的套袋葡萄追蹤方法有效性,本文與5 種追蹤方法進行了對比試驗,如表2 所示。試驗結果表明,基于自糾正NMS-ByteTrack的追蹤效果相比其他方法更好。其原因是DeepSORT[23]、MOTDT[37]和StrongSORT[32]都只保留了高置信度檢測框用于后續追蹤,容易過濾因遮擋而置信度變低的套袋葡萄檢測框,降低了目標的追蹤性能。ByteTrack[28]和Bot-SORT[29]雖彌補了上述的不足,但算法過于依賴檢測結果的質量,檢測階段的NMS 操作可能會導致可用于追蹤的檢測框被過濾,致使追蹤結果不準確。因此,本文提出的方法能夠有效地追蹤套袋葡萄,減少了誤檢和漏檢。

表2 不同目標追蹤方法在套袋葡萄數據集上的試驗結果Table 2 Test results of several different object tracking methods on bagged grape dataset
3.2.2 數據集擴展前后檢測性能對比
為了評估數據集擴展對檢測模型的有效性,本文選取500 張原始套袋葡萄圖片和2 000 張擴展后圖片進行對比試驗,試驗結果如表3 所示。結果表明,擴展后數據集的檢測精度相比原始數據集的精度、召回率和平均精度分別提高了3.3、7.8 和2.6 個百分點,證明了數據集擴展的必要性。
3.2.3 基于ByteTrack 追蹤方法的消融試驗
為了驗證不同改進點對提高套袋葡萄追蹤性能的有效性,本文在ByteTrack 的基礎上進行消融試驗,如表4所示。通過將KF 中預測目標框位置的寬高比直接改為預測目標框的寬度,減少寬高比產生的誤差。試驗結果表明,改進KF 的ByteTrack 追蹤方法相比改進前的多目標追蹤準確率提高了0.8 個百分點、多目標追蹤精度提高了0.8 個百分點、ID 調和平均數提高了0.7 個百分點和ID 變換次數減少1 次。

表4 基于ByteTrack 追蹤方法在套袋葡萄數據集上的消融試驗結果Table 4 Ablation test results based on ByteTrack tracking method on bagged grape dataset
為降低拍攝視頻時相機非線性運動的影響,本文引入相機運動補償以彌補相機不規則運動的缺陷,自動糾正KF 預測的目標框位置,提升檢測框和預測框的成功關聯匹配能力。試驗結果表明,加入相機運動補償后相比改進KF 的ByteTrack 追蹤方法的多目標追蹤準確率提高了0.6 個百分點、多目標追蹤精度提高了0.2 個百分點、ID 調和平均數提高了1.9 個百分點和ID 變換次數減少1 次。
為使套袋葡萄計數更關注于追蹤階段,本文將檢測階段中的NMS 篩選框功能后置到追蹤階段進行,避免套袋葡萄重疊遮擋后,其檢測框在檢測階段被過濾的情況,提升目標追蹤性能。因此本文在上述基礎上,提出基于自糾正NMS-ByteTrack 的追蹤方法。試驗結果表明,基于自糾正NMS-ByteTrack 的追蹤方法在多目標追蹤準確率和ID 調和平均數分別為64.6%和80.8%,比加入相機運動補償和改進KF 的ByteTrack 追蹤方法的多目標追蹤準確率提高了0.3 個百分點、ID 調和平均數提高了1.5 個百分點和ID 變換次數減少1 次。
綜上,基于自糾正NMS-ByteTrack 的追蹤方法相比基礎方法ByteTrack 在多目標追蹤準確率、多目標追蹤精度和ID 調和平均數分別提高了1.7 個百分點、1.0 個百分點和4.1 個百分點,ID 變換次數減少3 次,證明了本文方法對提高套袋葡萄追蹤性能的有效性。
為準確估計視頻中套袋葡萄的個數,實現對套袋葡萄的計數估產,本文提出一種劃線計數策略對視頻中的套袋葡萄進行計數,并在人工拍攝的6 個套袋葡萄視頻數據集上試驗,通過基于自糾正NMS-ByteTrack 估產方法得到的套袋葡萄個數與人工估計套袋葡萄的個數進行對比,如表5 所示。試驗結果表明,利用基于自糾正NMS-ByteTrack 估產方法估計的套袋葡萄個數與人工估計套袋葡萄的個數接近,并計算出他們的平均計數精度為82.8%,證明了該劃線計數策略在套袋葡萄自動計數上的適用性。
本文提出基于自糾正NMS-ByteTrack 的套袋葡萄估產方法,分別對套袋葡萄在果實檢測、果實追蹤和果實計數3 個方面進行試驗并得出以下結論:
1)在套袋葡萄檢測方面,本文使用YOLOv5s 分別與YOLOX-s 和YOLOv7 進行了對比試驗。結果表明,YOLOv5s 在精度和平均精度上都比YOLOX-s 和YOLOv7 高,試驗分析可知是由于背景噪聲、目標重疊和葉片遮擋等原因,降低了套袋葡萄的檢測精度,進而影響了目標追蹤性能,因此YOLOv5s 更適用于檢測套袋葡萄目標。
2)在套袋葡萄追蹤方面,本文方法與其他追蹤方法進行了對比。結果表明,基于自糾正NMS-ByteTrack 追蹤方法的追蹤性能都優于其他方法,有效解決了套袋葡萄在真實場景下的問題。同時,消融試驗結果表明,本文方法相比改進前多目標追蹤準確率、多目標追蹤精度和ID 調和平均數分別提高了1.7、1.0 和4.1 個百分點,ID 變換次數減少3 次,證明了該方法在套袋葡萄追蹤計數上的有效性。
3)在套袋葡萄計數方面,本文提出一種劃線計數策略對套袋葡萄計數。結果表明,通過該策略估計視頻中套袋葡萄的個數與人工計數結果接近,且平均計數精度為82.8%,證明了該劃線計數策略在套袋葡萄自動計數上具有較強的適用性,其試驗結果可以為套袋葡萄的實際估產提供參考。