(江蘇大學電氣信息工程學院,江蘇鎮江 212013)
隨著我國養殖業規模不斷擴大,家畜養殖不斷向規?;?、集約化方向發展。在大規模、高密度飼養環境下,家畜的健康管理越來越重要[1],高精度低成本的自動化養殖方式逐漸取代傳統的人工養殖。目前家畜養殖通常采取半自動化方式,通過人工與無線射頻識別技術(Radio Fre?quency Identification,RFID)相結合進行管理[2]。但RFID技術需要在豬的耳朵上安裝侵入式標簽,成本高且不易操作。與RFID 技術相比,機器視覺技術僅需一臺攝像設備,成本低廉且自動化程度高。
基于機器視覺的家畜自動化檢測技術研究成果有:朱偉興等[3]通過改進的運動目標檢測算法定位異常生豬,并將圖像通過分組無線服務網絡傳送至監控中心;馬麗等[4]根據生豬呼吸時腹部的起伏特點,構建豬的腹式呼吸表達式,并逐段檢測生豬視頻呼吸頻率;陸明洲等[5]結合射頻標簽和紅外技術監測生豬飲水頻率及消耗量;高云等[6]利用hough 聚類方式識別頭尾;譚輝磊等[7]對輪廓多邊形近似計算相似度判斷飲水行為;楊秋妹等[8]將圖像二值化,計算生豬連通域在固定飲水區域所占面積,然后利用卷積神經網絡判斷飲水區域目標是否為豬頭,以此判別飲水行為。以上判斷方法均需要繁雜的特征提取過程,且對輪廓精確度要求較高,而生豬黏連、姿態變化等因素一定程度上影響了輪廓提取過程。
隨著深度學習及目標檢測技術發展,機器視覺識別能力有了較大提升。該方法無需繁瑣的特征提取過程,直接從訓練集中自動學習目標特征信息[9]。LeCun 等[10]提出第一個卷積神經網絡用于手寫數字識別,隨后該模型廣泛應用于分類、語義分割、目標檢測等領域;Girshick 等[11]將CNN 運用在目標檢測領域,首次提出基于深度學習的目標檢測算法R-CNN。隨著深度學習的飛速發展,目標檢測算法不斷改進,其精度與速度都有了極大提升,已廣泛應用于各大工業領域。本文嘗試將深度學習技術應用于生豬目標檢測,實現更加精準的生豬飲水行為識別。
實驗圖像采自鎮江希瑪牧業有限公司養豬場。攝像機懸掛在豬圈上方3m 處,攝像機視角可涵蓋整個豬圈。攝像機幀率25,像素1 760×1 840。試驗視頻采集5 天,時間自早上9 點至下午5 點,在同一豬圈總計采集7 段視頻,每段5min 左右,攝像畫面如圖1 所示。

Fig.1 Camera images圖1 攝像畫面
目前最常用的目標檢測算有Faster R-CNN[12]、YO?LO[13]、SSD[14]等,其中Faster R-CNN 原理是利用RPN(Re?gion Proposal Network)[15]在多目標圖像中提取僅包含單個目標的局部區域,然后對這些區域進行分類及位置校準。Faster R-CNN 檢測精度高但速度慢(5 幀/s),無法滿足實時檢測需求。YOLO 可在圖像上一次性直接檢測全部目標,算法速度較快(45 幀/s),但對較小物體檢測精度較差。SSD 算法集兩家之長,運算速度遠高于Faster R-CNN 且精度高于YOLO。本文采用簡化的YOLOv3 算法[16]。YO?LOv3 為YOLO 的多次改進版本,結合Faster R-CNN 中Anchor 與多尺度思想[16],速度與精度均達到或超過SSD 算法。
YOLO 算法檢測流程如圖2 所示(彩圖掃OSID 碼可見)。模型在每個網格中檢測目標,檢測結果以矩形框顯示,且該矩形框中心點在該網格中,矩形框邊界可超出網格范圍。為確保每個網格只檢測到一個目標,將圖像分成13×13 個網格。

Fig.2 Grid test results圖2 網格檢測結果
YOLOv3 為解決大小不同的目標難以檢測問題,引入多尺度檢測方式。網絡融合不同采樣層特征圖,輸出3 個不同尺度的張量(13×13,26×26,52×52),即劃分不同大小網格。采用此方式原因是,小目標在經過多次下采樣后特征難以識別,通過將淺層特征圖疊加至深層特征圖方式,有效避免深層小目標特征消失問題。針對實驗對象僅有整豬及豬頭,目標相對較大的問題,考慮簡化網絡,僅保留13×13 這一尺度,簡化后的網絡在精度與速度上有一定提升。
本文實驗數據集總計200 張,經過翻轉、旋轉、尺度變換等方式,將數據擴充至1 000 張,按1:4 的比例劃分為測試集與訓練集。采用圖像標注軟件labelme 對圖像進行標注,手動框出整豬及豬頭,軟件會將數據轉化為YOLO 網絡所需要的數據格式。
由于訓練樣本較少,所以本實驗加載經過ImageNet 預訓練的ResNet[18]模型進行遷移學習。ImageNet 為用于視覺對象識別研究的圖像數據庫,包含超過1 000 萬張經過手動注釋的圖像數據。在網絡訓練過程中,靠前的卷積層一般會提取較普遍的特征。隨著卷積層數增加,提取特征會更加趨向于個性化。通過ImageNet 預訓練模型初始化其網絡模型,僅訓練最后幾層,這樣可加速網絡收斂,有效提高訓練速度,同時避免數據不足導致的過擬合現象。
實驗采用tensorflow[19]深度學習框架,計算機配置為Intel Core i7-8700HQ,顯卡為GTX 1080Ti,訓練過程中的超參數設置見表1。
訓練過程中損失函數曲線如圖3 所示。在前2 000 次迭代中,損失值迅速下降至1.3 左右,隨后損失值變化趨于平緩,經過10 000 次迭代后,損失值慢慢收斂至0.6 左右。

Table 1 Network parameters表1 網絡參數

Fig.3 Loss function圖3 損失函數曲線
本文通過準確率與召回率評價檢測結果[19],計算公式如下:

其中,TP(true positive)代表識別正確的豬(頭),FP 代表不是豬(頭)卻被識別為豬(頭)的數量,FN 代表豬(頭)沒有識別出來的數量。本實驗測試集共100 張圖片,每張包含7 頭豬,數據統計結果見表2,部分測試集結果如圖4 所示。

Table 2 Target detection results表2 目標檢測實驗結果

Fig.4 Test results圖4 檢測結果
取測試樣本中所有正在飲水的整豬位置集合,選擇一個能包含所有位置集合的最小矩形框。如圖5(a)所示虛線標記位置,將該區域作為飲水區,同時標記飲水器用作飲水行為判斷,如圖5(a)所示實線位置。
飲水行為識別流程如下:①通過目標檢測算法實時監測整豬及豬頭;②若整豬區域處于圖5(a)中虛線內部,且豬頭區域與飲水器產生交集,如圖5(b),則認為有生豬已處于飲水區域;③判斷豬頭是否靜止。若生豬已處于飲水區域超過2s,且2s 內豬頭中心點坐標方差均小于某一閾值,則視為靜止狀態,記錄一次飲水行為。

Fig.5 Drinking behavior judgment圖5 飲水行為判斷
通常情況下,生豬飲水行為至少維持約2s。流程③目的為排除部分生豬偶爾在飲水器附近玩耍情況,圖6 為飲水及非飲水行為連續幀。

Fig.6 Water and drinking behavior and consecutive frames圖6 飲水與非飲水行為連續幀
本實驗通過飲水行為視頻片段判斷本文算法與文獻[7]中基于輪廓算法的識別能力,同時加入部分其它行為,包含玩耍、路過等作為干擾項,每段視頻持續5s。實驗結果見表3 及表4。本文算法對生豬飲水行為識別率達到96%,對其它非飲水行為識別率達到92%,總計識別率為94%,比基于輪廓算法的識別率高了3 個百分點??梢园l現,兩者識別率的差異主要區別在飲水生豬上。通過觀察誤識別視頻片段,發現基于輪廓方法的誤識別視頻中存在更多的頭部扭曲現象,影響頭部輪廓提取,導致誤判。實驗證明,基于目標檢測的飲水行為識別率要高于基于輪廓的算法。

Table 3 Algorithm experimental results in this paper表3 本文算法實驗結果

Table 4 Experimental results based on contour method表4 基于輪廓方法實驗結果
本文提出一種基于深度學習的飲水識別算法。區別于其它基于輪廓的識別方法,本文算法僅通過整豬及豬頭位置進行飲水行為判斷,不依賴于生豬輪廓。實驗結果表明,本文算法識別率高于基于輪廓的飲水行為識別方法。整個識別過程僅需攝像設備,自動化程度較高且成本低。但本文算法需要通過大量數據進行訓練以保證目標檢測的準確性,同時需要攝像設備能清楚拍攝到飲水器。后續工作一方面要優化目標檢測算法,提高檢測結果精確度,另一方面要將算法的整豬識別與身份識別相結合,使系統能夠準確識別出豬圈中每一頭豬各自的飲水情況。