(江蘇大學電氣信息工程學院,江蘇鎮(zhèn)江 212013)
隨著我國養(yǎng)殖業(yè)規(guī)模不斷擴大,家畜養(yǎng)殖不斷向規(guī)模化、集約化方向發(fā)展。在大規(guī)模、高密度飼養(yǎng)環(huán)境下,家畜的健康管理越來越重要[1],高精度低成本的自動化養(yǎng)殖方式逐漸取代傳統(tǒng)的人工養(yǎng)殖。目前家畜養(yǎng)殖通常采取半自動化方式,通過人工與無線射頻識別技術(shù)(Radio Fre?quency Identification,RFID)相結(jié)合進行管理[2]。但RFID技術(shù)需要在豬的耳朵上安裝侵入式標簽,成本高且不易操作。與RFID 技術(shù)相比,機器視覺技術(shù)僅需一臺攝像設(shè)備,成本低廉且自動化程度高。
基于機器視覺的家畜自動化檢測技術(shù)研究成果有:朱偉興等[3]通過改進的運動目標檢測算法定位異常生豬,并將圖像通過分組無線服務網(wǎng)絡傳送至監(jiān)控中心;馬麗等[4]根據(jù)生豬呼吸時腹部的起伏特點,構(gòu)建豬的腹式呼吸表達式,并逐段檢測生豬視頻呼吸頻率;陸明洲等[5]結(jié)合射頻標簽和紅外技術(shù)監(jiān)測生豬飲水頻率及消耗量;高云等[6]利用hough 聚類方式識別頭尾;譚輝磊等[7]對輪廓多邊形近似計算相似度判斷飲水行為;楊秋妹等[8]將圖像二值化,計算生豬連通域在固定飲水區(qū)域所占面積,然后利用卷積神經(jīng)網(wǎng)絡判斷飲水區(qū)域目標是否為豬頭,以此判別飲水行為。以上判斷方法均需要繁雜的特征提取過程,且對輪廓精確度要求較高,而生豬黏連、姿態(tài)變化等因素一定程度上影響了輪廓提取過程。
隨著深度學習及目標檢測技術(shù)發(fā)展,機器視覺識別能力有了較大提升。該方法無需繁瑣的特征提取過程,直接從訓練集中自動學習目標特征信息[9]。LeCun 等[10]提出第一個卷積神經(jīng)網(wǎng)絡用于手寫數(shù)字識別,隨后該模型廣泛應用于分類、語義分割、目標檢測等領(lǐng)域;Girshick 等[11]將CNN 運用在目標檢測領(lǐng)域,首次提出基于深度學習的目標檢測算法R-CNN。隨著深度學習的飛速發(fā)展,目標檢測算法不斷改進,其精度與速度都有了極大提升,已廣泛應用于各大工業(yè)領(lǐng)域。本文嘗試將深度學習技術(shù)應用于生豬目標檢測,實現(xiàn)更加精準的生豬飲水行為識別。
實驗圖像采自鎮(zhèn)江?,斈翗I(yè)有限公司養(yǎng)豬場。攝像機懸掛在豬圈上方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]在多目標圖像中提取僅包含單個目標的局部區(qū)域,然后對這些區(qū)域進行分類及位置校準。Faster R-CNN 檢測精度高但速度慢(5 幀/s),無法滿足實時檢測需求。YOLO 可在圖像上一次性直接檢測全部目標,算法速度較快(45 幀/s),但對較小物體檢測精度較差。SSD 算法集兩家之長,運算速度遠高于Faster R-CNN 且精度高于YOLO。本文采用簡化的YOLOv3 算法[16]。YO?LOv3 為YOLO 的多次改進版本,結(jié)合Faster R-CNN 中Anchor 與多尺度思想[16],速度與精度均達到或超過SSD 算法。
YOLO 算法檢測流程如圖2 所示(彩圖掃OSID 碼可見)。模型在每個網(wǎng)格中檢測目標,檢測結(jié)果以矩形框顯示,且該矩形框中心點在該網(wǎng)格中,矩形框邊界可超出網(wǎng)格范圍。為確保每個網(wǎng)格只檢測到一個目標,將圖像分成13×13 個網(wǎng)格。
Fig.2 Grid test results圖2 網(wǎng)格檢測結(jié)果
YOLOv3 為解決大小不同的目標難以檢測問題,引入多尺度檢測方式。網(wǎng)絡融合不同采樣層特征圖,輸出3 個不同尺度的張量(13×13,26×26,52×52),即劃分不同大小網(wǎng)格。采用此方式原因是,小目標在經(jīng)過多次下采樣后特征難以識別,通過將淺層特征圖疊加至深層特征圖方式,有效避免深層小目標特征消失問題。針對實驗對象僅有整豬及豬頭,目標相對較大的問題,考慮簡化網(wǎng)絡,僅保留13×13 這一尺度,簡化后的網(wǎng)絡在精度與速度上有一定提升。
本文實驗數(shù)據(jù)集總計200 張,經(jīng)過翻轉(zhuǎn)、旋轉(zhuǎn)、尺度變換等方式,將數(shù)據(jù)擴充至1 000 張,按1:4 的比例劃分為測試集與訓練集。采用圖像標注軟件labelme 對圖像進行標注,手動框出整豬及豬頭,軟件會將數(shù)據(jù)轉(zhuǎn)化為YOLO 網(wǎng)絡所需要的數(shù)據(jù)格式。
由于訓練樣本較少,所以本實驗加載經(jīng)過ImageNet 預訓練的ResNet[18]模型進行遷移學習。ImageNet 為用于視覺對象識別研究的圖像數(shù)據(jù)庫,包含超過1 000 萬張經(jīng)過手動注釋的圖像數(shù)據(jù)。在網(wǎng)絡訓練過程中,靠前的卷積層一般會提取較普遍的特征。隨著卷積層數(shù)增加,提取特征會更加趨向于個性化。通過ImageNet 預訓練模型初始化其網(wǎng)絡模型,僅訓練最后幾層,這樣可加速網(wǎng)絡收斂,有效提高訓練速度,同時避免數(shù)據(jù)不足導致的過擬合現(xiàn)象。
實驗采用tensorflow[19]深度學習框架,計算機配置為Intel Core i7-8700HQ,顯卡為GTX 1080Ti,訓練過程中的超參數(shù)設(shè)置見表1。
訓練過程中損失函數(shù)曲線如圖3 所示。在前2 000 次迭代中,損失值迅速下降至1.3 左右,隨后損失值變化趨于平緩,經(jīng)過10 000 次迭代后,損失值慢慢收斂至0.6 左右。
Table 1 Network parameters表1 網(wǎng)絡參數(shù)
Fig.3 Loss function圖3 損失函數(shù)曲線
本文通過準確率與召回率評價檢測結(jié)果[19],計算公式如下:
其中,TP(true positive)代表識別正確的豬(頭),F(xiàn)P 代表不是豬(頭)卻被識別為豬(頭)的數(shù)量,F(xiàn)N 代表豬(頭)沒有識別出來的數(shù)量。本實驗測試集共100 張圖片,每張包含7 頭豬,數(shù)據(jù)統(tǒng)計結(jié)果見表2,部分測試集結(jié)果如圖4 所示。
Table 2 Target detection results表2 目標檢測實驗結(jié)果
Fig.4 Test results圖4 檢測結(jié)果
取測試樣本中所有正在飲水的整豬位置集合,選擇一個能包含所有位置集合的最小矩形框。如圖5(a)所示虛線標記位置,將該區(qū)域作為飲水區(qū),同時標記飲水器用作飲水行為判斷,如圖5(a)所示實線位置。
飲水行為識別流程如下:①通過目標檢測算法實時監(jiān)測整豬及豬頭;②若整豬區(qū)域處于圖5(a)中虛線內(nèi)部,且豬頭區(qū)域與飲水器產(chǎn)生交集,如圖5(b),則認為有生豬已處于飲水區(qū)域;③判斷豬頭是否靜止。若生豬已處于飲水區(qū)域超過2s,且2s 內(nèi)豬頭中心點坐標方差均小于某一閾值,則視為靜止狀態(tài),記錄一次飲水行為。
Fig.5 Drinking behavior judgment圖5 飲水行為判斷
通常情況下,生豬飲水行為至少維持約2s。流程③目的為排除部分生豬偶爾在飲水器附近玩耍情況,圖6 為飲水及非飲水行為連續(xù)幀。
Fig.6 Water and drinking behavior and consecutive frames圖6 飲水與非飲水行為連續(xù)幀
本實驗通過飲水行為視頻片段判斷本文算法與文獻[7]中基于輪廓算法的識別能力,同時加入部分其它行為,包含玩耍、路過等作為干擾項,每段視頻持續(xù)5s。實驗結(jié)果見表3 及表4。本文算法對生豬飲水行為識別率達到96%,對其它非飲水行為識別率達到92%,總計識別率為94%,比基于輪廓算法的識別率高了3 個百分點??梢园l(fā)現(xiàn),兩者識別率的差異主要區(qū)別在飲水生豬上。通過觀察誤識別視頻片段,發(fā)現(xiàn)基于輪廓方法的誤識別視頻中存在更多的頭部扭曲現(xiàn)象,影響頭部輪廓提取,導致誤判。實驗證明,基于目標檢測的飲水行為識別率要高于基于輪廓的算法。
Table 3 Algorithm experimental results in this paper表3 本文算法實驗結(jié)果
Table 4 Experimental results based on contour method表4 基于輪廓方法實驗結(jié)果
本文提出一種基于深度學習的飲水識別算法。區(qū)別于其它基于輪廓的識別方法,本文算法僅通過整豬及豬頭位置進行飲水行為判斷,不依賴于生豬輪廓。實驗結(jié)果表明,本文算法識別率高于基于輪廓的飲水行為識別方法。整個識別過程僅需攝像設(shè)備,自動化程度較高且成本低。但本文算法需要通過大量數(shù)據(jù)進行訓練以保證目標檢測的準確性,同時需要攝像設(shè)備能清楚拍攝到飲水器。后續(xù)工作一方面要優(yōu)化目標檢測算法,提高檢測結(jié)果精確度,另一方面要將算法的整豬識別與身份識別相結(jié)合,使系統(tǒng)能夠準確識別出豬圈中每一頭豬各自的飲水情況。