張勤 胡嘉輝 任海林
(華南理工大學 機械與汽車工程學院,廣東 廣州 510640)
奶牛采食量是影響奶牛產奶和奶牛健康的重要因素。在規模化奶牛養殖過程中,奶牛場一般使用全混合日糧(TMR)技術保證飼料的合理配比,并通過投料車將混合好的飼料均勻地投喂到奶牛飼槽,每日2-3次。由于奶牛進食過程中的挑食、拱料、競爭搶食以及奶牛個體進食量的差異[1],飼喂過程中,經常會出現料槽內飼料分布不均,飼料拱出料槽的情形,造成奶牛有料吃不到,嚴重影響了奶牛正常的自由采食行為。針對上述問題,目前國內外主要通過人工輔助或者機器人輔助的方法,定期推料,保障料槽內的飼料分布,滿足奶牛的采食量需求。人工輔助的方法是通過人工或者人駕駛車輛進入牛舍完成推料送料操作,該方法所需設備簡單,容易實現,但勞動強度大,且人員的介入,易帶入外部病菌,增加了奶牛的患病風險。機器人代替人的智能飼喂輔助正在成為未來的發展方向。推料機器人是TMR投料車的得力助手,它可以完成全天多次后續推料工作,目前推料機器人主要有螺旋式和自轉式兩種[2-5],一般通過傳感器感知與牛欄的距離并按預設的距離、時間,準時推送飼料。推料機器人的使用不但可以節約勞動成本,還有利于增進牛只采食量,已廣泛應用在中、大型牧場中。但現有的推料機器人功能比較單一,只能完成均勻推料功能,無法依據奶牛個體采食量需求,實現個性化推料。因此,研究智能推料方法,滿足奶牛個體自由采食需求,具有重要的意義。
奶牛覓食位置的識別與定位是機器人智能推料的關鍵,也是實現低成本、高效率飼喂的重要保證。目前基于動物耳標的無線射頻識別(RFID)與定位方法技術較為成熟,但存在讀卡速度較慢、識別距離短以及易受干擾等問題,為此國內外學者做了大量的研究工作。Hokofarm集團[6]研制了一種適用于TMR全混合日料的飼喂站,通過RFID技術識別進站奶牛耳標,監測該奶牛的采食量和飲水量;Brown-Brandl等[7]基于低頻RFID設計了一種新型的記錄肥豬攝食和飲水行為的系統,通過讀取其耳標來計算進食和飲水時間,采集肥豬行為的詳細進食信息;Adrion等[8]通過在牛頸枷上安裝超高頻(UHF)RFID來檢測奶牛是否處于進食區域,通過判斷奶牛在區域內的??繒r間來估算進食時間;高振江等[9-10]在RFID的基礎上結合紅外牛位對中系統,提高了牛只的識別準確率,通過飼料點對點的補給,可有效預防奶牛進食過程中的搶食現象??傮w上基于耳標的RFID定位方法主要應用于牛只順序出入的場所。
基于機器視覺的識別與定位方面,文獻[11-12]分別通過在豬舍和牛舍的上方安裝攝像頭,實現了豬和牛的個體識別及其進食情況的精準監測;Kuan等[13]通過在飼喂區域安裝多個嵌入式視覺系統,獲取整個奶牛場的飼喂區圖像,再依據牛臉識別算法,得到奶牛的進食區域并計算每頭奶牛的日進食總時間。相比于基于耳標的RFID方法,基于機器視覺的識別與定位方法憑借其識別速度快、性價比高以及使用靈活等特點,應用范圍逐年擴大,正在成為飼喂領域的研究熱點之一。
二維碼作為一種信息存儲量大、使用便捷的存儲技術,近年來逐步應用于精確飼喂的管理中。Park等[14]通過在每個豬欄安裝二維碼來實現對母豬的高效飼喂管理;Chen等[15]基于RFID和二維碼標簽建立了一種完整的豬只管理系統,通過掃描二維碼信息可以獲取豬的品種、接種情況、生長記錄等相關信息,極大地提高了生產管理效率。
隨著計算機技術的發展,機器視覺和深度學習技術因其形式靈活、抗干擾強的特點而被逐步應用到養殖業中[16-22]。YOLO[23]作為一種一階段檢測算法,相比于Fast R-CNN[24]、Faster R-CNN[25]等二階段檢測算法,可實現端對端的檢測,在保證檢測精度的同時,具有很大的檢測速度優勢,其新版本YOLOv4[26]兼具高精度和實時性的特點,與精準送料的需求非常契合。
在以上研究的基礎上,針對目前奶牛飼喂過程中推料送料方法的局限性,本研究引入二維碼標牌作為牛頸枷的定位標簽,結合機器視覺和深度學習技術,提出了一種飼喂輔助機器人的智能推料方法。首先基于YOLOv4深度學習模型得到二維碼標牌和牛頭的檢測框區域,通過預處理和預測算法對二維碼標牌的檢測框區域進行實時識別與跟蹤;然后將二維碼標牌與牛頭進行匹配,確定覓食牛所在的采食頸枷位置,根據機器人與頸枷相對位置關系確定送料的目標位置,并通過控制推板的角度實現定點推料、送料功能。
機器人系統由視覺系統、控制系統、移動小車和執行推板機構組成,如圖1所示。移動小車通過磁導航按照規定的路線移動。視覺系統由3只攝像頭組成,攝像頭1和攝像頭2為網絡攝像頭,用于采集、監測飼喂過程、飼料情況,并傳輸圖像信息到奶牛場控制中心,攝像頭3用于在本地采集奶牛和頸枷二維碼信息。二維碼標牌作為奶牛頸枷的定位標簽,通過攝像頭3來識別奶牛是否在頸枷內,可判斷奶牛的采食需求。控制系統根據采集到的余料信息、奶牛采食需求以及采食頸枷位置,控制執行推板機構改變推板角度以實現多種推料模式。當飼料較多時,推板與機器人成30°角,機器人將拱出的飼料推入料槽,如圖2的AB段;當殘余的料草較少甚至出現部分飼位空槽,且頸枷采食區沒有覓食奶牛時,推板與機器人成90°角,收集余料,如圖2的BC、DE段;當附近有牛只覓食時,機器人將收集的余料推向正在覓食奶牛的飼槽內,如圖2的CD段,保證奶牛想吃吃得到。非工作狀態時,推料機構可以收納在移動平臺的側面,節省空間。

圖1 機器人結構Fig.1 Structure of robot

圖2 機器人智能推料過程示意圖Fig.2 Robot intelligent pushing process diagram
使用二維碼標牌作為奶牛頸枷的定位標簽,基于YOLOv4深度檢測模型提取牛頭和二維碼標牌的檢測區域;通過牛-碼匹配,確定覓食奶牛所在的頸枷位置;通過覓食奶牛位置信息、余料信息,引導機器人完成對應模式的推料功能,滿足奶牛個體自由采食需求。
飼喂輔助機器人智能推料方法主要包括基于YOLOv4的牛頭和二維碼標牌檢測框的提取與定位,基于檢測框區域的奶牛、二維碼識別與跟蹤,以及牛-碼的位置匹配與推板控制3部分,算法流程圖如圖3所示。

圖3 飼喂輔助機器人智能推料算法流程圖Fig.3 Flow chart of feeding assistant robot intelligent pushing algorithm
首先,使用YOLOv4目標檢測模型對大量奶牛牛頭以及二維碼標牌的RGB圖像進行訓練,訓練過程中通過調整學習率等參數得到最優的目標檢測模型,并將該模型用于牛頭與二維碼標牌檢測框的提取與定位。
然后,對基于YOLOv4得到的二維碼標牌檢測框進行預處理,去除噪聲,并將經過預處理后的二值圖輸入Zbar庫中進行解碼,獲取二維碼中的頸枷編號信息以及二維碼的位置信息。對于被遮擋或遇強反光導致YOLOv4無法檢測出的二維碼標牌,則依據該標牌以及同一圖像視野中其他可被檢測到的二維碼標牌的前后幀變化關系,通過卡爾曼濾波器[27]對丟失的二維碼標牌位置進行預測跟蹤。最后,依據二維碼和頸枷恒定的寬度比例關系,動態計算圖像視角下頸枷的寬度,生成虛擬頸枷;將牛頭檢測框區域的中點作為牛頭的目標位置,計算牛頭檢測框的中點位置及其檢測框區域面積,并與頸枷位置比較,若牛在頸枷中,則實現牛-碼的位置匹配,獲取奶牛采食頸枷位置;判斷二維碼標牌的位置是否處于推板的動作檢測區域并依據牛-碼位置匹配信息、飼料分布信息控制推板完成對應推料送料模式。
圖4為本文算法使用的YOLOv4的模型結構,首先將攝像頭輸出的圖像轉化為416×416的RGB格式輸入網絡模型,并通過CSPDarkNet53主干網絡輸出得到3種不同尺寸(52×52、26×26、13×13)的特征圖;然后通過空間金字塔池化(SPP)和路徑聚合網絡(PANet)得到特征張量;最后利用輸出網絡部分輸出預測結果。本文需要對牛頭以及二維碼標牌兩類目標進行檢測與定位,因此YOLOv4輸出的類別數設置為2,每個類別3個錨框,每個錨框包含4個錨框位置數據和1個目標置信度數據,因此最終YOLOv4模型輸出的張量長度為21,即3×(1+2+4)。

圖4 YOLOv4網絡模型結構Fig.4 Structure of YOLOv4 network model
訓練YOLOv4模型所用的二維碼標牌和奶牛牛頭圖像均采集于廣東省惠州某牧業公司,牧場奶牛均為黑白色荷斯坦奶牛,所采集的圖像分辨率大小為1 920×1 080。數據集中采集了不同角度的牛頭圖像和二維碼標牌圖像共計3 000幅,其中2 400幅作為訓練集,300幅作為驗證集,300幅作為測試集。訓練集用于訓練數據;驗證集用于訓練過程中對比預測目標和標記目標,判斷預測的正確率,從而作為超參數調整的依據;測試集用于數據訓練完成后對模型的預測精度進行評估。所有采集的圖像均使用LabelImg圖像標注軟件進行標注,標注后的圖像自動生成Pascal VOC格式的xml文件,最后轉為txt文件用于數據訓練。
訓練過程中,將64幅圖像作為一個批次喂入訓練模型,每次喂入都會反向計算一次權值參數。本次訓練共對YOLOv4模型進行了8 000次迭代,權值衰減速率設置為0.000 5,動量因子設置為0.9,初始學習率設置為0.001,分別在第4 000和第6 000次迭代時將學習率降低為初始學習率的10%和1%,以減少訓練后期的數據振蕩,達到更優的效果。最終的損失函數變化如圖5所示,訓練結束時,損失值穩定在0.65。
在訓練過程中,為了得到最優訓練模型,需要一定的評價指標對模型進行評估。由于本文的網絡模型用于多標簽圖像分類任務,因此選取平均精度均值(mAP,mAP)作為模型評價指標:
(1)
式中,n為類別序號,N為識別對象個體數,P(n)、R(n)分別為類別n的準確率、召回率,NTP(n)、NFP(n)、NFN(n)分別為類別n的真實正樣本數量、虛假正樣本數量、虛假負樣本數量。
模型mAP的迭代變化如圖5所示,從第1 000次迭代開始,每完成100次迭代輸出一次模型權值,并計算相應的模型平均指標,選取取得最優指標時的模型作為最優模型。由圖5可知,在8 000次訓練中,當迭代次數達到7 900時,mAP達到最大值97.2%,此時的準確率P為98%、召回率R為96%,因此選擇迭代7 900次時的模型作為最優模型。

圖5 損失值和平均精度隨迭代次數的變化Fig.5 Variation of loss value and average precision with iteration number
二維碼標牌的識別與跟蹤效果是實現智能推料的關鍵。由于牛舍環境復雜,當前幀中二維碼標牌分為可被YOLOv4模型連續檢測到和無法被YOLOv4模型連續檢測到兩類。對于因二維碼部分信息丟失而無法被模型有效提取的二維碼,根據該標牌以及同一圖像視野中其他可被檢測到的二維碼標牌的前后幀變化關系,通過卡爾曼濾波器可對丟失的二維碼標牌位置進行預測跟蹤,再提取其位置和存儲信息。具體算法框圖如圖3中Ⅰ部分所示。
對于可被YOLOv4檢測到的二維碼標牌,由于存在反光、污漬等現象,一些被檢測到的標牌可能無法被Zbar識別。為提高二維碼的識別效果,本文在文獻[28]方法(Sauvola方法)的基礎上,設計了基于直方圖均衡化的動態寬度Sauvola自適應閾值方法,對二維碼圖像進行預處理。具體步驟如下:
(1)將檢測框中的圖像進行灰度化,然后通過高斯濾波去除二維碼圖像中因不良光照引起的高斯噪聲;
(2)使用直方圖均衡化方法對二維碼圖像的光線分布進行均衡,避免光線分界線形成的小縫隙,有效降低二維碼圖像部分反光引起的光線分布不均的影響;

(2)
(3)
式中,b為上一幀圖像中二維碼的個數,Li為上一幀圖像中第i個二維碼的寬度值,M為二維碼的版本編號(1-40)。
由于自適應閾值法的窗口W(x,y)很大程度上決定了二維碼圖像二值化后的效果,而窗口大小W(x,y)與檢測圖像中的黑色文本的筆畫寬度有關[29],二維碼作為筆畫寬度均勻的圖像,與文本具有相似的特征,因此,可間接計算得到窗口的最優寬度Wbest(x,y):
Wbest(x,y)=4d+1
(4)
得到窗口寬度后,使用Sauvola局部自適應閾值方法可獲得圖像的二值圖。Sauvola局部自適應閾值方法中,局部閾值T(x,y)通過局部均值m(x,y)和局部標準差δ(x,y)計算得到,具體計算公式為
(5)
式中,k為Sauvola局部自適應閾值修正參數,R為8位灰度圖像標準差最大值。
在檢測過程中,二維碼標牌可能會被連續遮擋或受到強烈反光,造成其特征丟失或缺失嚴重,以至于YOLOv4檢測模型無法得到二維碼區域的位置。為此,需要通過預測的方法來估算二維碼的實際位置。由于特征連續丟失,采用一般的單步預測方法會缺少反饋信息,而采用多步預測方法則會造成數據的累計誤差且無法適應檢測過程二維碼的變化速度。為此,本文通過同一圖像視野下多個二維碼標牌位置的相關聯信息對缺失的二維碼位置進行預測,即通過同一圖像視野下其他可被連續檢測到的二維碼標牌的位置變化信息,間接得出被預測二維碼標牌的測量位置,將多步預測問題轉化為單步預測,然后通過卡爾曼濾波器對其真實位置進行預測。具體步驟如下:

(6)
式中,Δxj=xj,t-xj,t-1,c為同一幀圖像中可被YOLOv4檢測到的二維碼標牌檢測框的數量。

(7)


(8)
為了實現牛-碼位置的匹配,牛頭在當前圖像中的位置ai用牛頭檢測框的中心點表示。
在獲得牛頭、二維碼標牌的位置信息后,將奶牛與頸枷二維碼標牌進行匹配,從而確定奶牛所在的頸枷位置。由于頸枷和二維碼的寬度比例恒定,通過計算當前幀所有可被Zbar識別解碼的二維碼的平均寬度,可以間接得到頸枷的寬度Ld;調整所生成虛擬頸枷的相對位置,使其與實際的頸枷重合;然后通過判斷圖像中牛頭檢測框的中心位置ai是否在虛擬頸枷范圍內來確定可能在頸枷內的奶牛;最后通過牛頭檢測框區域面積Si判斷牛頭的遠近,以過濾頸枷以外區域奶牛的干擾,從而確定覓食奶牛所在的頸枷的位置。設Ath,head為牛頭的面積閾值,AQR為上一幀計算得到的二維碼平均面積,則可設
Ath,head=ksAQR
(9)
式中,ks為牛頭和二維碼的面積比例系數,通過現場實驗標定得出。根據牛舍現場情況設置ks,可靈活調整面積閾值。設xj為二維碼的中心位置,則牛-碼匹配條件表示為
(10)
相互匹配的牛頭和二維碼標牌用二維碼所存儲的數字標號標記,并將匹配信息存儲到本地。
根據獲取的覓食奶牛頸枷位置、飼料分布情況和控制推板角度完成智能多模式的推料。
智能推料機器人所用計算機配置為AMD Ryzen 5 3600CPU,主頻3.6 GHz,8 GB的RTX2070S顯卡以及16 GB的內存;相機為150°高清1080P無畸變工業相機;程序為基于Windows 10(64位)系統和VS2017開發平臺。
實驗地點在惠州市某牧場進行,該牧場有8個大型牛棚,共飼養了一千多頭荷斯坦奶牛。隨機選取其中一個牛棚作為實驗場所,通過對位于牛棚中部的20個頸枷位置進行不同時間段的10次測試實驗,測試二維碼識別與跟蹤精度以及智能送料的效果。在測試過程中,機器人中心位置距離頸枷約1.6 m,機器人通過磁條導航以0.25 m/s的速度直線行走。圖6為實驗現場圖,可見牛舍現場光線不均,二維碼標牌存在反光現象。圖7為機器人攝像頭視角圖像。

圖6 實驗現場圖Fig.6 Experimental scene

1—綠色框(能夠解碼的二維碼精確區域);2—紫色框(虛擬頸枷區域);3—黃色框(奶牛牛頭檢測框);4—藍色框(二維碼標牌檢測框);5—紅色矩形區域(推板動作檢測區域)
通過統計機器人推料記錄畫面中YOLOv4檢測出的標牌數量以及Zbar可解碼識別的標牌數量,計算總體識別率,以此評價檢測框區域的二維碼預處理效果。實驗中Sauvola方法的R為128,k為0.5。3種反光情況下獲取的二維碼灰度圖,經過3種不同方法(最大類間差法OTSU[30]、Sauvola方法[28]、本文方法)預處理后得到的二值化圖比較如圖8所示。圖中圈出的區域為二維碼中受反光影響較大的部分,從圖中可以看出,相比于OTSU方法、Sauvola方法,采用本文方法預處理后得到的二值化圖像更清晰。這3種預處理方法的測試實驗識別率依次為93.5%、94.4%、96.0%,本文方法能夠更好地適應反光情況下二維碼的提取。

圖8 3種方法對二維碼預處理后得到的二值化圖Fig.8 Binary images obtained by preprocessing the two-dimensional code with three methods
對于被遮擋或遇強反光導致YOLOv4無法檢測出的二維碼標牌,則依據該標牌以及同一圖像視野中其他可被檢測到的二維碼標牌的前后幀變化關系,通過卡爾曼濾波器[26]對丟失二維碼的標牌位置進行預測跟蹤。通過實驗對預測跟蹤效果進行評價。
選取實驗過程記錄的20段視頻,每段視頻中隨機選取一個二維碼截去其位置數據序列60幀,然后采用3.2節方法對其實際位置進行預測。
機器人在變速運動(從速度0.25 m/s到停止)和勻速運動(速度為0.25 m/s)過程中對二維碼位置的預測結果如圖9所示。每段視頻預測的二維碼位置誤差的平均值及均方差值如圖10所示。從圖10可知,在二維碼標牌連續丟失60幀的情況下,20次預測過程中二維碼預測位置與實際位置的最大差值在14個像素點以內?,F場實驗中頸枷的寬度為750 mm,在圖像中約在490~510像素之間,因此可計算得到丟失二維碼的預測位置用于智能推料的定位精度為±2.85%,即在±21 mm以內,滿足實時送料精度要求。

圖9 機器人變速和勻速運動時二維碼位置跟蹤預測結果Fig.9 Tracking and predicting results of the two-dimensional code position for robot with variable speed and uniform speed

圖10 二維碼位置跟蹤預測誤差Fig.10 Prediction error of the two-dimensional code position tracking
首先,在實驗現場完成式(9)中ks的標定。考慮到不同牛棚中的奶牛生長時期并不相同,即奶牛牛頭在圖像中的面積大小也不相同,因此該參數需要進行現場標定,以確保算法能實現對遠處奶牛的準確過濾。首先使機器人位于磁條上進行直線移動,多次記錄伸出頸枷采食的奶牛的牛頭檢測框與二維碼標牌檢測框的面積之比,取所記錄比值的平均值作為該牛棚的牛-碼面積比值,經現場實際測試,將該比值乘以0.6作為ks的值,能夠較好地分割遠處牛頭。
然后,在投料后的不同時間段的時間點各進行10次智能推料實驗。實驗時,天氣晴朗,光線充足,實驗進行的時間點分別為北京時間9點、13點、17點。每次實驗中奶牛的采食位置和料草的分布情況隨機,機器人實時融合牛-碼位置匹配信息、余料分布信息,根據算法自主決策推料模式,控制其推板改變推料角度,完成多種推料模式。實驗過程中,工作人員全程跟蹤、監測記錄,并對機器人送料行為進行分析,如果機器人自主決策的模式與人工飼喂選擇一致,則認為機器人送料準確。現場實驗的結果顯示,送料的平均準確率達到100%。實驗過程中平均每幅圖像使用圖形處理器(GPU)處理的時間為34.4 ms,能夠滿足機器人送料的實時性要求。
針對推料機器人功能單一,難以滿足奶牛自由采食需求問題,提出了一種飼喂輔助機器人的智能推料方法。首先通過YOLOv4深度檢測模型提取牛頭和二維碼標牌的檢測框區域,采用基于直方圖均衡化的動態寬度Sauvola自適應閾值方法,對二維碼檢測框進行預處理,以提高二維碼的識別率;然后基于卡爾曼濾波器的多二維碼相關聯預測方法,對漏檢二維碼進行準確預測,以提高視覺系統對強光線和遮擋的適應能力;最后通過牛-碼匹配確定覓食奶牛所在的頸枷位置,并根據覓食奶牛位置信息、余料信息,引導機器人完成對應模式的推料功能,滿足奶牛個體自由采食需求。研究和實驗結果表明:本文方法對二維碼的識別率達到了96.0%;在二維碼標牌連續丟失60幀的情況下,本文方法對二維碼的跟蹤預測精度為±2.85%,即在±21 mm以內;現場實驗中每幀圖像在GPU中處理的平均時間為34.4 ms;智能送料準確率達100%,滿足機器人智能推料要求。本文以奶牛飼喂為例提出的智能推料方法,同樣適用于復雜環境下其他動物的飼喂輔助。
不同天氣情況、不同季節、不同光照等情況下的全天候現場實驗分析與驗證,以及算法優化,將是今后研究的重點。