張宏鳴 李永恒 周利香 汪 潤 李書琴 王紅艷
(1.西北農林科技大學信息工程學院, 陜西楊凌 712100; 2.寧夏智慧農業產業技術協同創新中心, 銀川 750004;3.西部電子商務股份有限公司, 銀川 750004)
牛的行為影響著牛的健康和產出[1-4]。通過骨架提取可以獲知牛的姿態,為牛的反芻、運動、進食、站立、臥倒等行為識別[5-10]提供信息支持。基于養殖場的監控視頻進行的多牛骨架提取,對大型肉牛養殖場的精細化管理與精準化飼喂具有重要意義。
多目標骨架提取[11-12]是多牛姿態信息獲取的重要方法。基于深度學習的多目標骨架提取方法[13-14]分為自上而下和自下而上兩類[15-16]。自上而下包括:CHEN等[17]在目標檢測器后連接基于GlobalNet和RefineNet的級聯金字塔網絡(Cascaded pyramid network,CPN)模型進行多目標骨架提取;FANG等[18]提出了一種由SSTN(Symmetric spatial transformer network)、NMS(Non-maximum-suppression)和PGPG(Pose-guided proposals generator)組成的RMPE(Regional multi-person pose estimation)框架用于多目標骨架提取;PAPANDREOU等[19]以Faster RCNN作為目標檢測器,使用ResNet檢測目標的熱圖和偏移量,最后將二者融合得到關鍵點位置。
自下而上包括:CAO等[20]提出了PAFs(Part affinity fields)方法學習身體部位和對應個體之間的關聯用于多人骨架提取;CHENG等[21]提出了HigherHRNet方法進行人體多目標骨架提取,緩解了傳統的自下向上方法對于小尺度人體骨架提取錯誤率較高問題;PISHCHULIN等[22]提出的DeepCut方法首先提取關鍵點候選區域,對關鍵點進行分類,在人體多目標骨架提取任務中表現良好。
人體的多目標骨架提取技術已經相當成熟[23-24],但對于大型動物如肉牛的多目標骨架提取技術報道相對少見。在大型動物的多目標骨架提取方面,宋懷波等[25]基于自下而上的思路,提出了基于PAFs的奶牛骨架提取模型。該模型的置信度在單目標方面為78.90%;雙目標方面為67.94%;3個及以上目標方面為48.59%。該模型在多目標方面的骨架提取精度較低,有待進一步改進。
本文提出一種基于YOLO v3[26-28]和SH(Stacked Hourglass)[29]的自上而下肉牛多目標骨架提取算法,解決在一定目標數量范圍內隨著目標數量的增加模型精度急劇降低的問題。利用真實大型牛場監控視頻,提取關鍵幀構建目標檢測數據集和骨架提取數據集;設計16個關鍵點全面標識肉牛姿態情況;使用改進YOLO v3算法構建目標檢測模型并結合骨架提取模型實現肉牛的多目標骨架提取,將為肉牛的精準化養殖提供技術支持。
(1)實驗數據
選用某肉牛養殖場棚內和場外兩種不同環境下的西門塔爾牛和安格斯牛實際監控視頻為實驗數據,攝像頭位于養殖大棚上,以斜向下角度拍攝,拍攝范圍為整個肉牛場地。每段肉牛視頻長35 min,格式為mp4,分辨率為1 920像素×1 080像素,幀率為24 f/s。
(2)實驗環境
本文使用CentOS 7系統服務器,其硬件配置為Intel Xeon E5-2650 v4 CPU 2.20 GHz處理器和NVIDIA Corporation GP100GL[Tesla P100 PCIe 16GB] (rev a1)顯卡,軟件配置為Python 3.7.5編程語言、Pytorch 1.2.0深度學習框架和Cuda 10.0加速程序。
本研究旨在使用深度學習的方法,通過處理肉牛監控視頻獲得肉牛骨架,加以分析進而對肉牛的站立和臥倒兩種行為進行識別。技術路線如圖1所示,包括4個環節:①數據集構建。從采集的視頻中提取關鍵幀,對關鍵幀進行標注和剪裁,構建目標檢測、骨架提取和多目標骨架提取數據集。②目標檢測模型訓練。利用目標檢測數據集訓練YOLO v3和NC-YOLO v3模型,進行評估對比。③骨架提取模型訓練。利用骨架提取數據集正常訓練和多尺度訓練骨架提取模型,進行評估對比。④多目標骨架提取模型構建。結合目標檢測和骨架提取最優模型,實現肉牛的多目標骨架提取。

圖1 技術路線圖Fig.1 Technology road map
1.2.1數據集構建
(1)數據預處理
對視頻進行篩選,去掉夜間、無牛等情況的視頻。由于視頻中相鄰幀具有很高的重合度,為避免數據的重復性,提取出視頻中較為清晰、目標分明、內容差異較大的幀。最后共形成10 804幅肉牛圖像。
(2)肉牛體框標注
對9 786幅圖像中所有需要檢測的肉牛標注覆蓋全身的體框,如圖2a所示。

圖2 數據標注Fig.2 Data annotations
(3)肉牛體框和關鍵點標注
對1 018幅圖像標注肉牛體框,對標注出體框的每頭肉牛進行關鍵點標注(圖2b)。考慮到肉牛的頭部、四肢和脊椎位置是肉牛姿態情況的重要組成部分,本研究著重對這3部分進行標注。在肉牛頭部于脖子、眉間設置2個關鍵點,在肢體部分3個關節設置3個關鍵點,在脊椎的椎首和椎尾設置2個關鍵點,共計16個關鍵點表示肉牛姿態情況。具體關鍵點標注如圖3所示。

圖3 關鍵點設置Fig.3 Key point setting1.眉間 2.脖子 3.椎首 4.椎尾 5.前左腿根 6.前左膝 7.前左蹄 8.后左腿根 9.后左膝 10.后左蹄 11.前右腿根 12.前右膝 13.前右蹄 14.后右腿根 15.后右膝 16.后右蹄
(4)標注數據的處理
將僅標注體框的肉牛圖像制作為COCO格式的目標檢測數據集,訓練目標檢測模型。將918幅標注體框和關鍵點的肉牛圖像進行裁剪,制作為共有3 414幅單牛圖像的骨架提取數據集,訓練骨架提取模型。將100幅標注體框和關鍵點的肉牛圖像制作為多目標骨架提取數據集,進行多目標骨架提取模型的評估。為了驗證目標數量對檢測精度的影響,制作20幅單牛、雙牛、4牛、6牛、10牛和15牛及以上數量的多目標骨架提取數據集,多目標骨架提取數據集共220幅。3種數據集名稱、圖像數量等如表1所示。

表1 數據集圖像數量分布Tab.1 Data set image distribution
1.2.2目標檢測模型訓練
本研究選用YOLO v3算法作為目標檢測器。YOLO v3是一步產生目標位置坐標和類別概率的單階段目標檢測算法,使用Darknet53深度神經網絡作為主干部分,提取尺寸為Y×Y的特征圖。特征圖中每個單元格負責檢測落于此位置目標的A個體框坐標和類別概率。體框坐標是5維向量(x,y,w,h,conf),其中,x、y、w、h、conf分別對應體框中心點x坐標、y坐標、體框寬度、體框高度和物體置信度。類別概率是介于0與1之間的n(類別總數)維向量,因此特征圖維度為A×Y×Y×(5+n)。Darknet53輸出3種不同尺寸的特征圖,利用3個YOLO層分別處理,實現圖像的多尺度檢測,具有優秀的檢測能力和準確度。由于養殖場肉牛數量密集互相遮擋,某些肉牛身體部分被遮擋導致露出部分較為分散,且監控畫面中某些肉牛因距離攝像頭太近而尺寸太大,模型感受野不足將會導致檢測未被完全遮擋和太大尺寸肉牛的效果較差。傳統的目標檢測具有提取目標位置和對目標分類兩種功能,而養殖場通常只存在一種養殖動物,因此,本文所用目標檢測器可以不必對目標進行分類。為了加強模型的感受野和特征提取能力,同時提高目標檢測效率和減小網絡參數量,對YOLO v3模型做了如下改進:
(1)在Darknet53后引入RFB模塊[30]。RFB通過模擬人類視覺的感受野以擴大模型的感受野,提高對部分遮擋和較大尺寸肉牛的檢測精度。RFB由多分支卷積和空洞卷積構成,基于SSD提出的RFBNet的平均精度均值(mAP)達到82.20%。 RFB模塊如圖4所示。

圖4 RFB結構圖Fig.4 RFB structure diagram
(2)去除網絡分類功能提高目標檢測效率,減小網絡參數量。
改進后的網絡結構如圖5所示。訓練改進前的YOLO v3和改進后的NC-YOLO v3目標檢測模型,學習率均為1×10-5,數據處理批次均為16,均采用多尺度訓練。

圖5 YOLO v3改進前、后結構圖Fig.5 Structure diagrams before and after improvement of YOLO v3
目標檢測模型參數設置如下:非最大性抑制閾值設為0.5,物體置信度設為0.5,數據處理批次設為1,圖像尺寸設為416像素×416像素。通過訓練過程中的損失、平均精度變化情況和目標檢測多種評價指標,對YOLO v3和NC-YOLO v3模型進行評估對比。
1.2.3骨架提取模型訓練
骨架提取是通過檢測目標身體關鍵點,然后將關鍵點依序連接進而形成骨架信息。本研究選用SH算法作為關鍵點檢測器。SH算法在MPII數據集上的正確關鍵點比例(Percentage of correct key points,PCK)達到99.00%,基于頭部長度的正確關鍵點比例(Percentage of correct key points based on
head length,PCKh)達到90.90%,在單目標關鍵點檢測方面的準確度較高。其由全卷積網絡構成,初級模塊為殘差網絡,具有高效的特征提取能力。SH可由多個Hourglass網絡堆疊而成,前一個Hourglass的輸出作為后一個的輸入,可以對關鍵點相對位置特征進行提取。由于肉牛的毛色復雜多樣、所處環境復雜多變、四肢高度相似、遮擋嚴重,數量較少的堆疊Hourglass網絡對于細節特征感知能力較差,通過單牛圖像預測關鍵點位置較為困難。本文采用8層堆疊的Hourglass(8SH)網絡進行關鍵點檢測,構建骨架提取模型。其模型結構如圖6所示。

圖6 8SH結構圖Fig.6 8SH structure diagram
設置濾除置信度濾除最大置信度較小的關鍵點。模型輸出熱圖中的最大值大于此置信度,則表示該熱圖所預測的關鍵點可見,反之,則其不可見,并將其濾除。
正常訓練和多尺度訓練骨架提取模型。訓練所用數據處理批次為4,學習率為1×10-5。正常訓練所用圖像尺寸為256像素×256像素,多尺度訓練每個數據處理批次圖像尺寸不同,從192像素×192像素、256像素×256像素、320像素×320像素3種尺寸中隨機選擇。
骨架提取模型參數設置如下:數據處理批次設為1,關鍵點濾除置信度設為0.5,圖像尺寸設為256像素×256像素。通過訓練過程中的損失變化情況和骨架提取評價指標對2種不同訓練方式下訓練的模型進行評估對比。
1.2.4多目標骨架提取模型構建
本文基于自上而下的思路實現肉牛的多目標骨架提取。訓練目標檢測和骨架提取模型后,經過選擇得到兩個最優模型,進而基于最優模型構建多目標骨架提取模型。多目標骨架提取模型主要包含4個步驟,模型流程如圖7所示。①通過目標檢測模型檢測輸入圖像肉牛體框。②從原圖中根據肉牛體框裁剪出單牛圖像。③通過骨架提取模型檢測單牛圖像的關鍵點。④將單牛圖像關鍵點映射至原圖像所在位置,依序連接關鍵點進而形成多牛骨架。

圖7 多目標骨架提取模型流程圖Fig.7 Flow chart of multi-target skeleton extraction model
使用多目標骨架提取數據集,對以最優YOLO v3模型構建的多目標骨架提取模型和以最優NC-YOLO v3模型構建的多目標骨架提取模型根據評價指標進行對比。根據單牛、雙牛、4牛、6牛、10牛和15牛及以上數量的數據對最優多目標骨架提取模型按照評價指標進行對比。采用非最大性抑制閾值0.5、物體置信度0.5、數據處理批次1和圖像尺寸416像素×416像素進行目標檢測。采用數據處理批次1、關鍵點濾除置信度0.5和圖像尺寸256像素×256像素進行骨架提取。
衡量一個目標檢測算法,通常根據其目標檢測的準確度、分類的正確率和檢測的目標數量進行評估。本文所用目標檢測模型不需要進行分類,因此只需依據其目標檢測的準確度和檢測目標數量進行評估。
模型的輸出為一系列的目標體框坐標,需要將其與真實坐標進行對比,得到其準確率。使用計算模型輸出的體框坐標與真實體框坐標的交并比(Intersection over union, IoU)評價兩者之間的相似程度。利用交并比判斷模型檢測結果的正確性。本文在評估目標檢測模型時,設置交并比閾值為0.5,即交并比大于0.5的預測結果認為是正確預測,反之,則認為是錯誤的預測結果。精度(Precision,P)即為正確的預測占所有預測的百分比,值越大說明輸出越準確。召回率(Recall,R)即為正確的預測占所有真實框的百分比,值越大說明檢測覆蓋程度越好。
使用Precision-recall(PR)曲線計算平均精度(Average precision,AP)。AP即PR曲線與坐標軸所圍的面積。AP調和了準確率和召回率,對目標檢測模型進行綜合衡量。在此,不需要計算目標檢測的mAP。mAP為多個類別AP的平均值,本文所使用目標檢測模塊已經剔除了分類功能。
將目標檢測模型的運行時間和模型參數文件所占存儲空間作為評價指標。
骨架提取模型的評估主要是評估關鍵點的相似度。本文中的骨架提取模型輸出16幅熱圖,經過處理后得到16個關鍵點坐標,將其與真實坐標進行對比,評估骨架提取模型的效果。物體關鍵點相似度(Object key point similarity,OKS)是常用的骨骼關鍵點檢測算法的評估指標。其計算公式為
(1)
式中Oks——骨架提取中關鍵點相似度
δ——關鍵點的可見程度,0表示不可見,1表示可見
S——單目標圖像像素面積,像素
di——關鍵點i真實坐標與預測坐標的歐氏距離
σi——關鍵點i的歸一化因子
將測試集輸入模型后計算OKS,得到所有圖像的OKS,人工給定一個閾值,計算出AP。
給AP設置不同閾值,得到多個AP,對多個AP求平均,最終獲得mAP。
使用OKS計算的mAP衡量肉牛多目標骨架提取模型,mAP從關鍵點的相似度和召回率綜合評價多目標骨架提取模型的精度水平。
假設一幅圖像中共有M頭牛,多牛骨架提取模型預測出N頭牛。將M頭牛與預測出的N頭牛計算關鍵點相似度,得到了一個M×N的OKS矩陣。找出矩陣中每一行的最大值作為當前真實肉牛關鍵點的OKS,最終每一頭真實肉牛都會得到一個OKS,設置不同閾值計算AP,最后得出mAP。
在測試數據集上,取IoU為0.5,YOLO v3與NC-YOLO v3在評價指標上的對比如表2所示。

表2 不同目標檢測算法效果對比Tab.2 Comparison of different target detection algorithms
NC-YOLO v3的平均精度、精度、召回率分別比YOLO v3高4.13、5.68、3.44個百分點,時間比YOLO v3短16.30 ms,召回率可達99.00%,精度可達97.80%,平均精度可達97.18%。本文提出的NC-YOLO v3算法比YOLO v3算法效果更好。
由于添加了RFB模塊,導致改進后模型參數量增加。改進前后模型參數量如表3所示。去除模型的分類功能后可使模型參數量減小13.81 MB,便于模型的存儲。

表3 改進前后模型參數量Tab.3 Model parameters before and after improvement
損失值和平均精度變化曲線如圖8所示。由圖8a可知,NC-YOLO v3的損失值收斂速度快于YOLO v3,并且收斂后的損失值小于YOLO v3。由圖8b可知,NC-YOLO v3的平均精度收斂值高于YOLO v3。

圖8 目標檢測損失值和平均精度變化曲線Fig.8 Target detection loss curves and average precision curves
實驗結果表明,NC-YOLO v3在YOLO v3的基礎上提高了檢測精度和檢測效率,并減小了網絡參數量,適合作為本文的多目標骨架提取算法的目標檢測模型。
兩種訓練方式的損失值曲線如圖9所示。

圖9 骨架提取損失值變化曲線Fig.9 Skeleton extraction loss value change curves
由圖9a可知,模型訓練時在第25次迭代開始收斂,其收斂損失值維持在25左右。由圖9b可知,模型訓練在第600次才開始收斂,其收斂損失值維持在5左右,表明多尺度訓練模型相對于正常訓練模型具有較高的精度。
在骨架提取測試數據集上,取0.42~0.60之間共10個閾值,計算mAP,結果如表4所示。

表4 不同訓練方式下模型的平均精度對比Tab.4 Comparison of model average precision under different training methods %
實驗結果表明,多尺度訓練下的模型,其mAP可達90.75%,高于正常訓練下的模型。在測試集數據上取得了較好的結果,適合作為本文多目標骨架提取算法的單牛骨架提取模塊。將一幅單牛圖像輸入骨架提取模型,結果如圖10所示。

圖10 單牛骨架提取結果Fig.10 Results of single cattle skeleton extraction
取0.42~0.60之間共10個閾值計算mAP,原始模型和改進模型對比結果如表5所示。

表5 不同模型的平均精度對比Tab.5 Comparison of model average precision of different algorithms %
NC-YOLO v3模型的mAP比YOLO v3提高了4.11個百分點,達到了66.05%。
在目標數量為1、2、4、6、10、大于等于15的情況下,NC-YOLO v3構建的多牛骨架提取模型平均精度均值分別為69.25%、70.45%、69.21%、68.49%、56.31%、49.02%。目標數量從1提升至6時,模型精度波動幅度較小,說明在這個區間內目標數量對模型精度影響較小。目標數量增至10頭直至大于15頭時,模型精度大幅降低,這是由目標太過密集導致遮擋嚴重、目標檢測算法精度急劇下降所導致。
將相同的3幅圖像用兩種不同算法進行多目標骨架提取,結果如圖11所示。白色方框代表誤檢,黃色方框代表漏檢。由此可見,本文算法對于被遮擋目標的檢測體框更容易覆蓋全身(如圖11a白色方框所示)且更逼近目標輪廓,漏檢目標更少。因此本文算法更適用于肉牛多目標骨架提取。

圖11 多目標骨架提取結果Fig.11 Multi-target skeleton extraction results
對肉牛多目標骨架提取模型檢測出的肉牛骨架數據進行分析,實現肉牛的臥倒和站立行為的識別。
利用統計學方法,對臥倒與站立行為的肉牛關鍵點分布進行統計,共統計處于臥倒和站立行為肉牛各50頭,統計數據如表6所示。
識別角度是肉牛身體關鍵點所對應的骨架夾角,從表6可以發現8個識別角度對肉牛的臥倒和站立行為的影響較大。由于模型檢測存在一定誤差,根據一個或幾個識別角度判斷肉牛行為,會導致誤差擴大,因此設計如下步驟對肉牛行為進行識別:

表6 關鍵點分布統計Tab.6 Key point distribution statistics (°)
①濾除由于相關關鍵點不存在而導致無法計算的識別角度。②計算識別角度,若不存在可計算的識別角度,則無法識別。③若識別角度大于或等于135°的關鍵點數目大于識別角度小于135°的數目,則認定肉牛處于站立行為,反之,則認定肉牛處于臥倒行為。
識別結果如圖12所示,綠色方框表示肉牛處于站立狀態,紅色方框表示肉牛處于臥倒狀態,黑色方框是由于多目標骨架提取模型檢測出的關鍵點不足而導致無法通過此算法檢測肉牛行為。由圖12可知,通過分析多目標骨架提取模型檢測出的肉牛骨架數據,可實現對肉牛站立與臥倒行為的識別。

圖12 肉牛行為識別結果Fig.12 Results of beef cattle behavior recognition
(1)利用養殖場監控視頻,建立了肉牛目標檢測數據集、肉牛單目標骨架提取數據集、肉牛多目標骨架提取測試數據集。通過對YOLO v3添加RFB、剔除分類功能,建立了NC-YOLO v3模型。實驗結果表明,在肉牛目標檢測數據集上,NC-YOLO v3比YOLO v3具有更高的檢測精度。結合NC-YOLO v3模型與多尺度訓練的8SH模型建立了肉牛多目標骨架提取模型。驗證了本文模型在一定的目標數量內,隨著目標數量的增多,模型精度不會大幅降低,而是小幅度波動。
(2)通過對肉牛關鍵點分布信息進行統計,得出了肉牛處于站立狀態與臥倒狀態下其識別角度的特征。通過肉牛多目標骨架提取模型檢測出的肉牛骨架,計算識別角度,分析其特征進而可以識別其站立與臥倒行為。實驗結果表明,本文模型可以為肉牛行為識別提供技術支持。