李 泊 沈明霞 劉龍申 陸明洲 孫玉文
(南京農業大學工學院, 南京 210031)
智能視頻監控技術在生豬養殖中的應用日趨廣泛,利用計算機視覺技術提高生豬行為監測水平已成為農業工程領域的研究熱點之一[1-3]。要實現視頻圖像中群養豬只的自動行為監測,準確的豬只定位是系統必不可少的環節[4-6]。隨著研究的深入,僅獲得整體豬只的位置已不能完全滿足精準監測的需求。例如在豬只飲水、采食、爬胯等行為的監測識別過程中,相比于整體豬只的位置,利用頭部或尾部等部位信息明顯更加合理[7-11]。因此,準確獲取豬只的頭部和尾部等關鍵部位信息對于提高豬只的行為監測水平具有重要意義。
近年來,對于圖像中的豬只檢測問題國內外有許多深入研究,旨在不斷提高豬只檢測的精度[12-15]。而關于豬只頭尾辨別問題的研究相對較少,并且大部分情況下僅將此問題作為整個系統的一個簡單操作進行處理,因此采用方法都較為基礎。KASHIHA等[8]通過分析豬只輪廓各點到質心距離曲線的整體趨勢來判斷頭部位置。NASIRAHMADI等[9]利用擬合橢圓的長軸與豬體輪廓的交點判斷頭尾位置,但并未分辨出頭部和尾部。楊心等[16]在通過橢圓擬合及豬體身長截取出豬體兩端的輪廓后,利用廣義Hough聚類的方法識別輪廓屬于頭部或尾部。高云等[17]在此方法的基礎上增加了對輪廓圓度的考慮,進一步提高了頭尾判別的精度。上述方法需要建立在豬只個體分割及其輪廓提取均正確的基礎上,而在光照不均、豬只嚴重密集等復雜情況下很難保證輪廓提取的精度。不同于上述方法,文獻[10-11]利用快速區域卷積神經網絡(Fast region-based convolutional neural networks, Fast R-CNN)模型直接訓練豬只頭部檢測器,取得了較高的檢測精度。但這種方法無法處理由于遮擋、強光等因素導致頭部不可見的情況,并且該方法對頭部與豬只整體分開進行檢測,需要對頭部和其所屬豬只進行關聯,但文中對此考慮較為簡單,無法處理復雜情況。
鑒于豬只頭部和尾部在判斷豬只行為中的重要作用,并且二者可以基本確定豬只身體方向,本文選取豬只頭部和尾部為兩類關鍵部位,從群養豬只的監控視頻中自動獲取準確的豬只及其頭尾位置信息,提出一種豬只檢測及頭尾辨別方法,以提高群養豬只自動行為識別及監測水平。
本文的實驗圖像均采集于南京農業大學江浦農場生豬養殖基地。所選取的實驗豬舍面積約為3.8 m×3.2 m,豬舍中央安裝的鐵欄桿將整個豬舍分割為兩個獨立的小型豬舍,每個小型豬舍中飼養4頭保育期豬只。監控攝像機安裝于實驗豬舍中心位置的天花板處,近似位于鐵欄桿的正上方,高度約2.5 m。監控攝像機以俯視的角度進行拍攝。選用鏡頭焦距為4 mm的海康威視DS-2CD3335-I型紅外攝像機。由于受豬舍高度及攝像機鏡頭焦距限制,攝像機所能拍攝到的監控畫面并不能完整覆蓋整個豬舍,因此靠近畫面上側與左側豬舍邊緣處的豬只可能會出現整體或部分身體超出攝像機成像范圍的情況。
實驗期間攝像機連續采集5 d豬只活動視頻。考慮到夜晚時段的豬只多處于睡眠狀態,因此僅選取每日08:00—17:00間豬只較活躍時段的視頻作為實驗素材。攝像機工作過程中,監控視頻存儲于硬盤錄像機中,幀率為12 f/s。視頻采集完成后,以20 s間隔從視頻中抽取540幅圖像作為圖像數據集,圖像分辨率為2 048像素×1 536像素。從540幅圖像中隨機選取300幅圖像作為訓練集,其余240幅圖像作為測試集。本文僅關注圖像中頭尾均完整可見的豬只目標。在訓練集和測試集中完整豬只分別為1 956頭和1 584頭。在圖像中用矩形框人工標注出所有完整豬只個體的身體、頭部、尾部,便于后續的模型訓練和測試。由于所有的實驗圖像數據均采集于自然環境下的群養圈舍,圖像中呈現的許多特點反映了實際生產環境的特點,例如不均勻的光照、圖像中央的欄桿、多變的豬只姿態,這些因素提高了豬只檢測和頭尾辨別的難度,因此該圖像測試集可用于客觀評價本文方法在實際生產應用中的性能。
本文提出了一種在群養豬只的監控圖像中檢測豬只目標并辨別其頭尾位置的方法。該方法借鑒了計算機視覺中研究人體檢測及姿態估計問題的一種思路,即引入基于部位的模型(Part-based model)[18-19],將豬只看作由關鍵部位按一定空間關系組合成的目標。本文方法流程如圖1所示。

圖1 本文方法流程圖Fig.1 Flow chart of proposed method
首先,在輸入圖像中檢測豬只整體、豬只頭部、豬只尾部3種目標位置,作為進一步分析的基礎。綜合考慮檢測精度及運行速度,選擇基于深度神經網絡的目標檢測模型YOLO v3(You only look once v3)[20]作為目標檢測器,檢測結果在圖像中用矩形框表示。接下來,逐個提取豬只整體的檢測矩形框判斷其內部的部位情況。統計矩形框中心處于整體豬只矩形框內部的頭部和尾部數目,分別用Nhead和Ntail表示。根據Nhead和Ntail的取值,分為以下3種情況:
(1)Nhead≥1且Ntail≥1,即豬只整體矩形框內部檢測到頭尾兩種部位,但可能出現多種頭尾組合方法。這種情況下,利用預先建立好的圖結構模型(Pictorial structure models)[21]對每種可能的頭尾組合計算其組合得分,最后選取得分最高且超過閾值tscore的頭尾組合作為當前豬只的頭尾位置。
(2)Nhead≥1、Ntail=0或Nhead=0、Ntail≥1,即豬只整體矩形框內部僅檢測到頭部或尾部一種部位。這種情況下需要根據當前圖像的特征推理出缺失部位的位置。獲得推理的部位位置后,接下來的處理方式與情況(1)相同。
(3)Nhead=0且Ntail=0,即豬只整體矩形框內未檢測到任何部位。此時根據文獻[16]中基于廣義Hough聚類的方法作為一種彌補措施,辨別出頭部和尾部的位置。同時,當前兩種情況下無得分超過閾值的部位組合時,也利用該方法確定頭尾的位置。
通過上述3種處理方式,可以對檢測到的每頭豬只目標辨別出其頭部和尾部的位置。
YOLO[22]是基于卷積神經網絡的通用目標檢測模型,該模型的特點是在進行檢測時使用回歸思路預測所檢測目標的矩形框,因此與其他需要先進行選擇性搜索提取大量候選區域的檢測方法相比,能夠大大提高計算效率。YOLO v3是YOLO系列模型的最新版本,借鑒了殘差網絡形成更深的網絡層次,還融合特征金字塔網絡改善了目標檢測的性能,尤其適于小目標的檢測。因此,從檢測精度和效率兩方面綜合考慮,本文選用YOLO v3模型檢測豬只整體和頭尾部位。
一般深度學習模型需要大量訓練樣本,而本文為了適應有限的訓練樣本,在模型訓練時使用遷移學習的策略,引入在VOC數據集上預訓練好的模型。在預訓練模型的基礎上,使用本文訓練集中的標注數據進行模型參數微調,最終獲得訓練好的檢測模型。該模型具有從輸入圖像中檢測豬只整體及其頭部、尾部3類目標的矩形框坐標及置信度的功能。
圖2為測試集中豬只整體及部位檢測結果示例。圖中豬只整體檢測結果用紅色矩形框標示,頭部和尾部檢測結果分別用藍色和綠色矩形框標示。為了方便敘述,對圖像中的豬只標記了序號。由于YOLO v3模型的檢測精度較高,圖像中的大部分豬只及其部位都能被準確檢測到。但在某些特殊情況,如遮擋、快速運動模糊等因素的影響下,仍然會存在一些部位漏檢的情況。如圖2中2號豬只的尾部由于被1號豬只遮擋而未能檢測到。另外,即使頭尾能夠被準確檢測,但如何實現頭尾與豬只整體間的正確關聯也是一個重要的問題。如3~6號豬只的檢測矩形框內除了含有相應序號豬只的部位外,還包含了其他豬只的部位。因此,還需要對部位檢測結果進行進一步分析,才能夠最終確定豬只頭尾位置及其正確關聯的整體豬只。

圖2 豬只整體及部位檢測結果示例Fig.2 Example of detection results for pig and their parts based on YOLO v3
若從俯視角度觀察豬只,會發現其頭部和尾部具有一定的幾何約束關系。這種約束可以作為一種先驗知識,用于衡量頭部和尾部的組合方式屬于同一頭豬的可信度。本文引入圖結構模型來實現部位組合的功能。圖結構模型是用一組部位和它們之間的聯系來描述整體目標內部位組合關系的模型,廣泛用于人臉、人體等可用不同部位的組合來描述的對象[23-24]。圖結構模型中的部位代表了整體目標的局部視覺特征,部位的選取通常符合目標的語義分割方式,如將人體劃分為頭部、軀干、四肢等部位。而部位間用類似彈簧的模型描述部位間的形變特性,將部位的空間組合特征定義為一種形變配置(Deformable configuration)。這樣,圖結構模型就可以靈活表示各種形變配置情況下的整體目標。
本文所構建的豬只圖結構模型如圖3所示。整個模型的結構可看作一個簡單的無向圖,由3種類型的結點組成:整體豬只結點Vp、頭部結點Vh、尾部結點Vt。每個結點的配置信息由其圖像坐標決定。在已知3種結點的圖像坐標后,可按圖3的方式構造同樣結構的無向圖,并定義得分函數ψ(Vp,Vh,Vt)計算當前圖結構與預先建立的圖結構模型的匹配程度。匹配得分為頭尾部位的局部外觀特征得分與部位之間幾何約束得分的加權疊加。

圖3 豬只圖結構模型示意圖Fig.3 Pictorial structure model for pigs
(1)
φa(Vh,Vt)=(c(Vh)+c(Vt))/2
(2)
φg(Vp,Vh,Vt)=whpN(dhp_norm;μhp,σhp)+
wtpN(dtp_norm;μtp,σtp)+wθN(θht;μθ,σθ)
(3)
(4)
式中φa(·)——部位外觀特征得分函數
φg(·)——部位間幾何約束得分函數
wa、wg——部位外觀特征得分、部位間幾何約束得分權值
c(·)——部位的檢測置信度,由YOLO v3模型輸出,取值為[0,1]
N(·)——高斯概率密度函數
dhp_norm——頭部與豬只中心點間的歸一化距離
dtp_norm——尾部與豬只中心點間的歸一化距離
不能在市場經濟的浪潮中立足和發展的工匠精神是不可取的。工匠精神所依附的事業如果不能發展,那么再美好的工匠精神也只是鏡花水月甚至是自我陶醉。
θht——頭、尾部與豬只中心連線形成的夾角
μhp、μtp、μθ——高斯分布均值
σhp、σtp、σθ——高斯分布的標準差
whp、wtp、wθ——3項得分對應的權值
dhp——頭部與豬只中心點之間的歐氏距離
dtp——尾部與豬只中心點之間的歐氏距離
dht——頭部與尾部間的歐氏距離
頭尾部位的外觀特征得分φa表示頭尾結點檢測置信度的平均值。部位間的幾何約束得分為3項得分的加權求和:頭部與豬只中心點之間的距離約束得分;尾部與豬只中心點之間的距離約束得分;頭部、尾部與豬只中心點之間的方向約束得分。為了靈活描述圖結構模型中部位間的空間形變約束,幾何約束得分中的3個得分項均采用高斯概率密度函數計算部位組合的得分。高斯分布的參數由豬只先驗結構知識與訓練集中參數的統計規律綜合確定。為了保證高斯概率密度函數的參數不受豬只尺寸的影響,將豬只頭尾距離進行歸一化。
當確定豬只檢測矩形框內的頭尾組合方式后,利用式(1)可計算當前組合得分,得分反映了部位配置與預先建立的圖結構模型的匹配程度。當整體豬只檢測矩形框內包含多種可能的頭尾組合時,可通過不同組合方式的得分確定正確關聯的頭尾位置。以圖2中的4號豬只為例,其檢測矩形框中包含2個頭部檢測結果,因此可形成兩種頭尾組合方式,如圖4所示。利用式(1)進行計算,圖4a的頭尾組合得分為0.875 1,而圖4b的頭尾組合得分為0.374 6,因此判定圖4a的組合方式為最終確定的頭尾位置。

圖4 同一檢測矩形框內的2種頭尾組合示例Fig.4 Examples for two combinations of heads and tails in one detection bounding box of a pig
1.4節中的部位組合方法要求豬只整體檢測矩形框內同時存在頭部和尾部兩種部位。當其中一種類型的部位缺失時,需要推理出缺失部位的位置才能構建出完整的圖結構。因此,本文提出了一種利用豬只身體的灰度特性與形狀特性推理缺失部位位置的方法,方法流程如圖5所示。

圖5 缺失部位推理流程圖Fig.5 Flow chart of missing part inference
首先,提取豬只檢測矩形框內的圖像,使用最大熵閾值分割法[25]對該圖像進行二值化操作。最大熵閾值分割法可以根據圖像中像素灰度的統計特性自動確定閾值,無需設定參數即可分割出具有較亮灰度的前景像素。然后,進行形態學開運算操作,目的是去除前景中小面積的連通分量區域,且盡可能將粘連區域分割。接下來,選出圖像中面積最大且面積超過一定閾值的連通分量區域,即滿足
Amax≥αWimgHimg
(5)
式中Amax——連通分量區域的最大面積
α——最大面積閾值
Wimg——整體豬只圖像的寬度
Himg——整體豬只圖像的高度
若存在滿足面積約束條件的連通分量,則對該區域進行橢圓擬合,獲取擬合橢圓的各項參數。根據豬只的身體形狀特點,理想情況下豬只的頭部和尾部應該處于擬合橢圓長軸的兩端。因此,在已知橢圓中心點坐標(x0,y0)、長軸長度a、橢圓傾斜角φ的條件下,根據
(6)
(7)
式中 (x1,y1)——推斷頭部中心點坐標
(x2,y2)——推斷尾部中心點坐標
β——頭尾位置分割橢圓長軸的比例,為常數
θe——橢圓長軸與水平方向的夾角
推斷出兩個備選部位中心點(x1,y1)和(x2,y2)。最后,選取兩個備選部位點中距已知所檢測到的部位較遠的點為推理結果。部位推理結果與所檢測到的部位一同構成一種頭尾組合,當存在多種頭尾組合時可利用1.3節的方法選取最優的組合方式作為頭尾辨別的結果。
以圖2中的2號豬只為例,圖6展示了尾部推理過程。圖中推理出的部位中心點用虛線框標記,可以看到被遮擋的尾部能夠被正確推理。

圖6 部位推理過程示例Fig.6 Example for process of part inference
經過上述方法的處理,圖2中的豬只均能正確分辨其頭尾位置,結果如圖7所示。

圖7 對圖2中所檢測到豬只的頭尾辨別結果Fig.7 Head/tail identification results for Fig.2
實驗所用的硬件處理平臺為臺式計算機,配置為Intel i7-8700K 3.7 GHz CPU,GPU為GTX1080Ti,帶有11 GB獨立顯存和16 GB內存。實驗中YOLO v3模型的學習和測試部分在開源的Darknet框架下使用GPU運行,對部位檢測結果的處理分析,如計算頭尾組合得分、部位推理等操作則在Matlab平臺上運行。實驗中的關鍵參數如表1所示。

表1 實驗中的關鍵參數Tab.1 Settings of important parameters in experiments
使用精確率(Precision)和召回率(Recall)兩個指標衡量豬只整體及部位的定位精度。需要注意的是,對豬只整體來說,若檢測矩形框與預先標定的真實矩形框的交并比(Intersection over union)大于0.5,則定義為檢測正確;而對于檢測或推理獲得的頭尾位置,其中心點處于預先標記的真實頭尾矩形框范圍內,則認為部位定位正確。另一評價指標為豬只頭尾辨別的精確率,即計算頭尾與豬只整體正確關聯且頭尾位置均準確的豬只占所有檢測到豬只的比例。
為了驗證本文方法的有效性,本文在測試集上進行了實驗。表2為直接利用YOLO v3模型檢測豬只整體及部位的結果和在此基礎上進一步利用圖結構模型進行部位組合和部位推理后的結果。從表2可以看出,YOLO v3模型在檢測豬只整體方面可以獲得較理想的結果。但由于頭、尾部位的圖像尺寸較小,使得圖像中包含的視覺特征不足,頭部和尾部檢測的精確率和召回率均低于整體豬只的檢測精度。同時也注意到,尾部檢測的精確率和召回率略低于頭部,這也符合圖像的特點,即尾部圖像相對于頭部圖像更缺乏明顯的視覺特征,且相對于頭部更容易因擁擠被遮擋,導致尾部檢測的漏檢增多。表2說明經過部位組合和部位推理等操作后,頭部和尾部檢測的精確率和召回率都有明顯提升。一方面是因為成功推理出了部分缺失部位,另一方面是由于一些部位檢測虛警(False alarms),未能與整體豬只相關聯而被去除。由于部位組合后每頭豬只整體都能確認一對頭尾組合,因此漏檢部位數與虛警部位數是相同的,這時精確率與召回率相等。

表2 部位組合及推理前后豬只整體和部位的檢測結果Tab.2 Detection results for pigs and their parts before and after part assemble and inference %
本文方法、文獻[10]方法、文獻[16]方法的豬只頭尾辨別精確率分別為96.22%、91.53%、79.41%。需要注意文獻[10]方法僅實現了頭部與整體的關聯,且使用的檢測模型為Fast R-CNN。為了便于比較,在實驗中將尾部也用同樣的方法與整體豬只相關聯,且將檢測模型替換為YOLO v3,這樣更能在同等條件下證明本文所提出的圖結構模型與部位推理方法的作用及意義。另外,實驗中使用文獻[16]的方法時,利用了本文的部位推理方法獲取擬合橢圓,然后將橢圓長軸兩端的前景區域作為豬只身體兩端的輪廓,用于計算廣義Hough聚類的結果。這里與原文的輪廓提取方法有細微差別。本文方法相對于另外兩種對比方法在頭尾辨別精確率上具有明顯優勢。相對于文獻[10]中的方法,本文方法的優勢在于增加了構建圖結構模型計算頭尾組合得分及部位推理兩部分,因此可以處理豬只整體矩形框內存在多種頭尾組合方式或部位漏檢等特殊情況,而文獻[16]的方法需要在頭尾輪廓準確提取的基礎上實現。本文實驗的測試圖像拍攝于光照不均勻、背景干擾復雜的圈舍環境下,使用閾值分割方法很難獲得完全精確的豬只前景區域,因此依靠前景輪廓判斷頭尾也很難獲得準確結果。圖8為測試集中豬只頭尾辨別結果示例。圖8中左圖為本文方法辨別頭尾的結果,右圖為文獻[16]方法的辨別結果,其中藍色和綠色框分別為頭部和尾部的辨別結果。圖8a和圖8c為檢測部位缺失時的情況,圖8b和圖8d為整體豬只矩形框內存在多種部位組合的情況。從圖8中可直觀感受到本文方法相對于其他兩種方法的優勢。需要注意的是,本文在豬只整體矩形框內沒有檢測到任何部位時,使用文獻[16]中的方法作為補償方案。由于這種情況非常少見,因此少量的精度損失是可接受的。

圖8 頭尾辨別結果示例Fig.8 Examples of pig head/tail identification
本文所提出的豬只頭尾辨別方法是建立在對豬只整體及其頭尾準確定位的基礎上,即確保YOLO v3模型的檢測精度。作為一個深度神經網絡模型,決定YOLO v3模型檢測性能的重要因素為訓練樣本的質量。因此,若要將本文方法推廣應用到其他俯視拍攝的視頻監控場景中,只需將該場景下的豬只樣本圖像進行標記,并用其對YOLO v3模型進行參數微調即可。圖9為另一個場景中,對YOLO v3模型進行參數微調并結合圖結構模型對豬只頭尾辨別的結果。從圖9中可以看出,本文方法依然能正確辨別出豬只頭尾位置,證明了本文方法具有良好的泛化性能。

圖9 另一場景下的豬只頭尾辨別結果示例Fig.9 Examples of pig head/tail identification results in another scene
雖然本文方法取得了可靠的豬只頭尾辨別效果,但依然存在一定的缺點。首先,本文方法必須建立在豬只整體正確檢測的基礎上,且最終頭尾辨別的正確率高度依賴頭尾檢測的精度。若部位漏檢率較高,或存在大量的虛警目標,會降低頭尾辨別的精度。其次,本文方法限定一個豬只整體檢測矩形框內僅存在一種正確的頭尾組合,若豬只過于密集,導致一個矩形框內存在兩個完整的豬只身體時,本文無法辨別兩只豬各自的頭尾組合。另外,本文所用的部位推理方法依然較為基礎,雖然目前作為一種彌補手段暫時可行,但若希望繼續提高算法精度,仍需要進行更深入的考慮。
提出了一種基于YOLO v3與圖結構模型的群養豬只頭尾辨別方法。在實際圈舍群養環境下的監控圖像集上進行了實驗,結果表明,本文方法比YOLO v3模型在頭尾定位的精確率和召回率上均有明顯提高,本文方法的頭尾辨別精確率可達96.22%,優于文獻[10]和文獻[16]的方法。因此,本文方法可有效實現群養豬只的準確檢測及頭尾辨別,受光照、豬只頭數、姿態等干擾因素的影響較小。