李光昌,劉飛飛,李嘉豪
(1.江西理工大學(xué)機電工程學(xué)院,江西 贛州 341000;2.江西理工大學(xué)電氣工程與自動化學(xué)院,江西 贛州 341000)
隨著中國生豬養(yǎng)殖業(yè)向著規(guī)?;较蛲七M,生豬疾病防控難的問題逐漸顯露。非洲豬瘟等傳染性疫病頻繁發(fā)生,造成眾多生豬養(yǎng)殖企業(yè)經(jīng)營困難,豬肉供需嚴(yán)重失衡,豬肉價格大幅上漲,對社會民生造成不良影響[1-3]。因此,及時快速了解豬只健康狀態(tài)對其疾病防控十分重要。豬只行為是較為容易獲取的生物學(xué)信息,同時也是衡量豬只健康狀態(tài)的重要指標(biāo)[4]。研究表明,豬只在極度疲乏或過熱時會側(cè)臥,在處于寒冷狀態(tài)時會將四肢縮于腹下而趴臥,在呼吸困難時會犬坐[5-6]。基于此,利用人工智能技術(shù)對豬只行為進行識別[7-8],不僅可以及時發(fā)現(xiàn)異常豬只,解決人工監(jiān)控帶來的勞動強度大、主觀性強等問題,而且也減少人與豬只的接觸,降低傳染性疾病發(fā)生的概率。
目前,國內(nèi)外學(xué)者針對豬只行為識別的研究分為2類。一類是基于傳統(tǒng)圖像處理算法,通過圖像預(yù)處理和圖像分割等技術(shù)提取圖像特征,利用支持向量機、神經(jīng)網(wǎng)絡(luò)等方法對豬只行為進行分類。該類方法對系統(tǒng)硬件性能要求較低,但是識別效果依賴于圖像分割效果,易受光照等環(huán)境因素影響。譚輝磊等[9]提出基于輪廓的豬只飲水行為識別方法,該方法在識別速度以及識別質(zhì)量上有一定的突破。VIAZZI等[10]對連續(xù)圖像間的像素差異進行分析,提出了利用圖像分析自動檢測豬只之間攻擊行為的方法。JONGUK等[11]使用Kinect深度相機提取豬只行為信息,并利用支持向量機分層檢測攻擊行為,降低了整體成本效益,提高了準(zhǔn)確性。另一類是基于深度學(xué)習(xí),通過對較深層次的卷積神經(jīng)網(wǎng)絡(luò)[12]模型進行訓(xùn)練,使得模型可以對豬只某類行為進行識別。該方法可以削弱光照等因素對識別結(jié)果的影響,但是模型訓(xùn)練與調(diào)優(yōu)需要消耗大量時間。李菊霞等[13]提出了基于YOLO v4的豬只飲食行為檢測模型,該檢測模型在不同視角、遮擋程度以及光照條件下均能準(zhǔn)確檢測豬的飲食行為。季照潼等[14]采用YOLO v4對包括側(cè)臥、站立在內(nèi)的育肥豬的行為進行識別,有效克服了環(huán)境中不同光照強度和噪聲的影響。上述2類方法都是對豬只個體的整體特征進行分析,導(dǎo)致模型的擴展能力減弱,例如YOLO、R-CNN系列等目標(biāo)檢測算法只能對預(yù)先設(shè)定好的行為進行識別[15-16];若要擴充識別的行為類別,需要對模型進行重新訓(xùn)練和調(diào)優(yōu),整個過程將消耗大量的時間。因此,本研究從分析豬只個體的關(guān)鍵點局部特征角度出發(fā),將豬只行為識別過程進行分解。首先構(gòu)建豬只姿態(tài)估計模型提取豬只骨骼關(guān)節(jié)點坐標(biāo),然后計算豬只關(guān)節(jié)點間距與骨骼關(guān)節(jié)角度特征,最后利用K-近鄰算法[17](K-nearest neighbor,Knn)對豬只行為分類。
針對生豬規(guī)?;B(yǎng)殖中豬只行為識別效率低、多目標(biāo)識別效果差以及實時性差的問題,本研究以江西省贛州市某豬只培育基地采集到的4 000幅豬只圖像作為數(shù)據(jù)集,借鑒卡內(nèi)基梅隆大學(xué)(carnegie mellon university,CMU)在2016年提出的OpenPose人體姿態(tài)估計算法[18]的核心思想,利用CSPDarknet網(wǎng)絡(luò)[19]改進其特征提取網(wǎng)絡(luò),引入殘差結(jié)構(gòu)(residual block)[20]改進其分支網(wǎng)絡(luò),最終提出了實時多豬只目標(biāo)行為識別方法,為豬只健康狀態(tài)的快速判別提供依據(jù),進而為推進中國生豬養(yǎng)殖智能化和規(guī)?;峁├碚摶A(chǔ)。
豬只圖像數(shù)據(jù)采集于江西省贛州市某豬只培育基地。在豬舍中,使用海康威視的DS-2DC2402IW-D3/W型攝像機分別在1 d中的不同時間段以不同視角、不同遮擋程度和不同位置拍攝視頻。拍攝時豬只距離鏡頭1~3 m,鏡頭中豬只數(shù)量在1~5只。在對采集到的視頻按1 幀·s-1抽取圖像,在抽取到的圖像中均勻選出4 000幅清晰圖像作為試驗數(shù)據(jù)集。采用旋轉(zhuǎn)、鏡像、放縮等操作,將數(shù)據(jù)集圖像拓展到12 000幅,同時將圖像尺寸統(tǒng)一調(diào)整為360像素×520像素,以減少運算量,提高模型訓(xùn)練速率。通過長時間的觀察并結(jié)合相關(guān)研究[5-6]發(fā)現(xiàn),豬只在生長過程存在4種發(fā)生頻次較高的行為,包括趴臥、側(cè)臥、站立與犬坐,如圖1所示。
圖1 豬只4種常見行為Fig.1 Four common behavior of pigs
使用Lableme標(biāo)注工具對豬的頭部、頸部、背部、臀部、左前肘部、左前足部、右前肘部、右前足部、左后肘部、左后足部、右后肘部、右后足部以及豬的行為類別進行標(biāo)注,標(biāo)注信息逐個保存到Json類型文件中,標(biāo)注示意如圖2所示。由于自制數(shù)據(jù)集的數(shù)據(jù)量較少,本研究引入StanfordExtra狗數(shù)據(jù)集[21]作為姿態(tài)估計模型的預(yù)訓(xùn)練數(shù)據(jù)集。該數(shù)據(jù)集包含12 000幅帶有2D關(guān)鍵點標(biāo)注的野狗圖像,其中被標(biāo)記的關(guān)鍵點包括蹄部和肘部等,共計23個。本研究對該數(shù)據(jù)集進行了2次標(biāo)注,擴充標(biāo)注內(nèi)容包括背部關(guān)鍵點和頸部關(guān)鍵點。
圖2 豬只站立行為標(biāo)注示意圖Fig.2 Schematic diagram of pig standing behavior labeling
基于改進OpenPose的豬只行為識別方法流程如圖3所示。首先將視頻流中提取出的視頻幀圖像通過改進OpenPose姿態(tài)估計模型,提取到豬只骨骼關(guān)節(jié)點坐標(biāo),利用關(guān)節(jié)點坐標(biāo)計算出關(guān)節(jié)點間距和骨骼關(guān)節(jié)角度,最后通過Knn算法對豬只行為分類。
圖3 基于改進OpenPose的豬只行為識別方法流程圖Fig.3 Flow chart of pig behavior recognition method based on improved OpenPose
2.1.1 OpenPose網(wǎng)絡(luò)結(jié)構(gòu) OpenPose的網(wǎng)絡(luò)結(jié)構(gòu)分為2部分,如圖4所示。一是特征提取網(wǎng)絡(luò),對輸入圖像進行特征提取生成特征圖F(feature maps)。二是姿態(tài)預(yù)測網(wǎng)絡(luò),由6個階段組成,每個階段包含2個分支。分支1預(yù)測豬只身體上關(guān)鍵點的位置,分支2預(yù)測關(guān)鍵點間的親和力。在每個階段之后,來自2個分支的預(yù)測以及特征提取網(wǎng)絡(luò)生成的特征圖,被連接到下個階段。最后在第6階段輸出關(guān)鍵點置信圖(confidence map for parts,CMPs)以及肢體親和度向量場(part affinity fields,PAFs)。
注:F表示特征提取網(wǎng)絡(luò)輸出的特征圖;C表示卷積操作;Sn表示階段n中分支1的輸出特征圖;Ln表示階段n中分支2的輸出特征圖;表示階段n中分支1的損失函數(shù);表示階段n中分支2的損失函數(shù)。Note:F represents the feature graph output by feature extraction network;C represents convolution operation;Sn represents the output feature graph of branch 1 of stage n;Ln represents the output feature graph of branch 2 of stage n; represents the loss function of branch 2 of stage n.圖4 基于OpenPose的豬只姿態(tài)估計模型網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Network structure of pig pose estimation model based on OpenPose
模型中的每個階段都會采用L2 Loss計算各個分支的損失,以使各分支的訓(xùn)練向著正確的方向進行,分支的損失函數(shù)如公式(1)和公式(2)所示。
(1)
(2)
(3)
2.1.2 OpenPose網(wǎng)絡(luò)改進 在OpenPose原模型中,采用 VGG19[22]前10層作為特征提取網(wǎng)絡(luò),其結(jié)構(gòu)如圖 5所示。VGG網(wǎng)絡(luò)證明了增加網(wǎng)絡(luò)深度可以在一定程度上提高網(wǎng)絡(luò)的性能,但當(dāng)網(wǎng)絡(luò)達到一定的深度后,增加網(wǎng)絡(luò)深度不僅不能提高性能,反而會造成網(wǎng)絡(luò)的收斂速率變慢,檢測性能變差。此外,在VGG網(wǎng)絡(luò)輸出中僅包含深層特征,使得輸出中包含的小目標(biāo)信息量較少,不利于足部關(guān)鍵點的識別。
圖5 OpenPose特征提取網(wǎng)絡(luò)Fig.5 OpenPose feature extraction network
為解決上述問題,本研究使用修改后的CSPDarknet作為模型的特征提取網(wǎng)絡(luò),CSPDarknet主要由若干個跨階段部分模塊(cross stage partial,CSP)構(gòu)成[23],CSP模塊的結(jié)構(gòu)如圖6所示。
圖6 CSP模塊結(jié)構(gòu)Fig.6 CSP block structure
CSP模塊中使用了若干個1×1大小的卷積核進行卷積,同時加入殘差結(jié)構(gòu)(residual block),有效提高了模型的非線性,緩解了梯度消失和梯度爆炸問題,使得網(wǎng)絡(luò)可以構(gòu)建的更深。此外,CSP模塊對深層特征和淺層特征進行融合,提高了對不同尺寸目標(biāo)的識別能力。通過以上分析,本研究借鑒CSPDarknet網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)點,改進OpenPose原特征提取網(wǎng)絡(luò),并且在特征提取網(wǎng)絡(luò)的最后引入空間金字塔池化[24](spatial pyramid pooling,SPP),實現(xiàn)局部特征與全局特征的融合以及輸出特征圖尺寸的統(tǒng)一,改進后的特征提取網(wǎng)絡(luò)如圖7所示。
圖7 改進后的特征提取網(wǎng)絡(luò)Fig.7 Improved feature extraction network
卷積神經(jīng)網(wǎng)絡(luò)中,模型參數(shù)量只與卷積層和全連接層的相關(guān)參數(shù)有關(guān),池化層與激活函數(shù)均不影響模型的參數(shù)量。假設(shè)1個卷積層的輸入特征圖的通道數(shù)為Cin,輸出特征圖的通道數(shù)為Cout,卷積核的大小為m×m,則該卷積層需要訓(xùn)練的權(quán)重參數(shù)數(shù)量S可由公式(4)計算。
S=Cin×Cout×m×m+D
(4)
由公式(4)可以計算出OpenPose原模型特征提取網(wǎng)絡(luò)需要訓(xùn)練的參數(shù)數(shù)量為1 734 336個,改進后的特征提取網(wǎng)絡(luò)其參數(shù)數(shù)量為1 394 368個,改進后的特征提取網(wǎng)絡(luò)相較于原模型特征提取網(wǎng)絡(luò)參數(shù)量減少了19.60%。
OpenPose原模型中,在每個階段n(n≥2)中,使用了多個大小為7×7的卷積核,使得計算量增大,增加了訓(xùn)練難度。因此,本研究在保證感受野不變的情況下,引入殘差結(jié)構(gòu),使用3個大小為3×3的卷積核代替1個7×7的卷積核,結(jié)構(gòu)如圖8所示。在OpenPose原模型中,各分支中7×7卷積層的輸入特征圖通道數(shù)與輸出特征圖通道數(shù)相等,在分支最后通過2個1×1的卷積層,將輸出通道數(shù)降為與監(jiān)督信息相對應(yīng)的通道數(shù)。假設(shè)7×7卷積層的輸入特征通道數(shù)為i,則7×7卷積層的參數(shù)量為49i2,使用圖 8所示的結(jié)構(gòu),其參數(shù)量為31i2,參數(shù)量減少了36.7%
圖8 殘差結(jié)構(gòu)改進7×7卷積核Fig.8 Residual structure improved 7×7 convolution kernel
本研究選取了15組關(guān)節(jié)點間距和10組骨骼關(guān)節(jié)角度作為豬只行為的特征,各個特征定義如圖9所示。以圖9-b中2段骨骼AC與BC為例,其對應(yīng)的關(guān)鍵點坐標(biāo)分別為A(x1,y1)、B(x2,y2)和C(x3,y3),則關(guān)節(jié)角度θ可以由公式(5)計算。
(5)
對于關(guān)節(jié)間距可由公式(6)計算。
(6)
式中:Lk表示編號為k的關(guān)節(jié)間距,(xi,yi)與(xj,yj)表示關(guān)節(jié)點坐標(biāo)。由于不同個體體型對關(guān)節(jié)間距存在影響,因此本研究對所有關(guān)節(jié)間距進行了歸一化處理。歸一化后關(guān)節(jié)間距Lk-Norm可由公式(7)計算。
(7)
式中:max(L)表示該個體的最大關(guān)節(jié)間距。
注:(a)表示關(guān)節(jié)點間距位置;(b)表示骨骼關(guān)節(jié)角度位置;不同數(shù)字表示選取的不同骨骼關(guān)節(jié)角度及關(guān)節(jié)點間距。Note:(a)represents the distance between joints;(b) represents the angle position of bone joint;Different numbers represent different bone joint angles and joint spacing.圖9 站立行為特征示意圖Fig.9 Schematic diagram of standing behavior characteristics
本研究采用Knn算法對豬只行為進行分類。Knn算法的思路簡捷,當(dāng)輸入某未知樣本時,和未知樣本最接近的K個樣本中,所占比例更多的類別決定未知樣本的類別。本研究采用歐氏距離表示未知樣本與已知樣本的距離,n維特征空間中的2點x1(x11,x12,…,x1n)與x2(x21,x22,…x2n)之間的歐氏距離計算如公式(8)所示。
(8)
Knn算法中K取值的不同會影響最終對未知樣本的分類結(jié)果。K取值過小時,鄰域空間范圍很小,學(xué)習(xí)的近似誤差減小,估計誤差增大;K取值較大時,則相反。在試驗過程中本研究對所有樣本特征的數(shù)值都采取歸一化處理,并通過交叉驗證的方法確定K值。K值確定流程如圖10所示。
圖10 K值確定流程Fig.10 K determination process
本研究使用準(zhǔn)確率(accuracy,Acc)、精確率(precision,P)和召回率(recall,R)作為模型的評價指標(biāo),各指標(biāo)的計算如公式(9)—公式(11)所示。
(9)
(10)
(11)
式中:TP表示真正例,TN表示真反例,F(xiàn)P表示假正例,F(xiàn)N表示假反例。此外,本研究還使用固定時間幀數(shù)法計算模型的實時檢測幀率(frames per second,FPS),對模型的運算速率進行評價。FPS計算如公式(12)所示。
(12)
式中:frameNum表示elapsedTime時間內(nèi)處理的圖像幀數(shù),試驗中elapsedTime取1 s。
模型訓(xùn)練平臺,CPU采用Intel Xeon E3-1225 v6,GPU采用NVIDIA GTX 1080ti,顯存11 GB,計算機內(nèi)存為 16 GB,Tensorflow 版本為2.1.0,Python版本為3.6。模型訓(xùn)練相關(guān)參數(shù)如表1所示。
表1 模型訓(xùn)練參數(shù)說明Table 1 Description of model training parameters
與原姿態(tài)估計算法對比試驗共分為4組。第一組使用OpenPose原模型,不進行預(yù)訓(xùn)練,直接使用自制數(shù)據(jù)集訓(xùn)練;第二組使用OpenPose原模型,在經(jīng)過預(yù)訓(xùn)練后使用自制數(shù)據(jù)集訓(xùn)練;第三組使用改進后的模型,其余與第一組相同;第四組使用改進后的模型,其余與第二組相同。各組在自制數(shù)據(jù)集上訓(xùn)練過程中的損失曲線如圖11所示。在測試集中多次隨機篩選200幅圖像進行測試,模擬不同環(huán)境并測試模型在不同環(huán)境下的性能,使最終得出的模型的適應(yīng)性與魯棒性更強。試驗結(jié)果如表2所示,混淆矩陣中的每一列代表樣本預(yù)測值,每一行代表樣本的真實值,所有結(jié)果均取最優(yōu)結(jié)果進行對比。改進OpenPose算法對豬只行為識別效果見圖12。
注:(a)為原模型損失曲線;(b)為預(yù)訓(xùn)練+原模型損失曲線;(c)為改進模型損失曲線;(d)為預(yù)訓(xùn)練+改進模型損失曲線。Note:(a) means the loss curve of the original model;(b) means the loss curve of pre-training + the original model;(c) means the loss curve of the improved model;(d) means the loss curve of pre-training + the improved model.圖11 訓(xùn)練過程的損失曲線Fig.11 Training process loss curve
注:(a)為側(cè)臥行為識別效果;(b)為站立行為識別效果;(c)為趴臥行為識別效果;(d)為犬坐行為識別效果。Note:(a) means the recognition effect of side lying behavior;(b) means the recognition effect of standing behavior;(c) means the recognition effect of lying prone behavior;(d) means the recognition effect of dog-sitting behavior.圖12 豬只行為識別效果Fig.12 Behavior recognition effect of pigs
表2 豬只行為識別模型試驗結(jié)果Table 2 Test results of behavior recognition model of pigs
由表2可知,改進OpenPose模型相比于原模型,豬只行為識別的平均準(zhǔn)確率有明顯提高。其中,改進OpenPose模型在經(jīng)過預(yù)訓(xùn)練后,對行為的識別準(zhǔn)確率提高到94%,F(xiàn)PS由原始模型的7~9提高到21~26;對模型進行預(yù)訓(xùn)練,使得模型的識別準(zhǔn)確率普遍提高1%以上。試驗結(jié)果表明,改進后的模型無論是識別的準(zhǔn)確率還是識別的速率都優(yōu)于原模型,此外,通過使用相關(guān)數(shù)據(jù)集對模型進行預(yù)訓(xùn)練,可以一定程度上提升模型的檢測性能。
選取DeepCut[25]、Associative Embedding[26]以及DeeperCut[27]姿態(tài)估計算法分別構(gòu)建豬只姿態(tài)估計模型,在預(yù)訓(xùn)練數(shù)據(jù)集與自制數(shù)據(jù)集上訓(xùn)練,利用Knn算法進行行為分類。3種算法測試結(jié)果的混淆矩陣如表3所示。將本研究中改進OpenPose算法與上述3種算法進行識別準(zhǔn)確率的對比,結(jié)果如圖13所示。不同姿態(tài)估計模型對豬只行為的識別準(zhǔn)確率都較高,不同模型之間對行為識別的精度差異較??;采用改進OpenPose算法對豬只行為的識別準(zhǔn)確率有明顯提升,均達到94%以上,相較于采用DeepCut等算法提高了4%以上。
表3 3種模型試驗結(jié)果的混淆矩陣Table 3 Confusion matrix of three model test results
圖13 不同姿態(tài)估計模型識別精度對比Fig.13 Comparison of recognition accuracy of different pose estimation models
針對現(xiàn)階段豬只規(guī)?;B(yǎng)殖中豬只行為識別效率低、實時性差和多目標(biāo)檢測效果差的問題,本研究提出了基于改進OpenPose算法的豬只行為識別方法。首先借鑒OpenPose人體姿態(tài)估計算法并對其改進,構(gòu)建豬只姿態(tài)估計模型,之后在視頻流圖像中提取豬只骨骼關(guān)節(jié)點,計算關(guān)節(jié)點間距與骨骼關(guān)節(jié)角度描述豬只行為特征,最后利用Knn算法對豬只行為分類。試驗結(jié)果表明,本研究對豬只行為的識別準(zhǔn)確率達到了94%,F(xiàn)PS在21~26之間。相較于采用OpenPose原算法相比,采用改進OpenPose算法對豬只行為識別的準(zhǔn)確率與速率均得到提高,推測是因為采用CSPDarknet改進模型的特征提取網(wǎng)絡(luò),使得特征提取網(wǎng)絡(luò)輸出中融合了多尺度特征,提高了模型對不同尺度目標(biāo)的檢測能力;同時改進模型相較于原模型參數(shù)量大大減少,使得檢測速率提高。采用改進OpenPose算法與采用DeepCut、Associative Embedding和DeeperCut算法構(gòu)建豬只姿態(tài)估計模型相比,對豬只行為的識別準(zhǔn)確率普遍提高4%以上,主要原因是OpenPose模型使用關(guān)鍵點間連接方向上的線性積分定量描述關(guān)鍵點間的親和力,充分利用了圖像的空間語義信息,使得對關(guān)鍵點的預(yù)測與分組更精準(zhǔn)。
本研究對豬只站立、犬坐以及趴臥的識別準(zhǔn)確率分別達94.2%、95.7%以及94.6%,優(yōu)于季照潼等[14]基于YOLO v4的識別結(jié)果,推測是在檢測被遮擋的豬只時,前方的豬只會遮擋后方豬只的部分特征,從而致使基于YOLO v4方法的檢測精度下降;而本研究中姿態(tài)估計模型會根據(jù)空間語義信息對遮擋的關(guān)鍵點進行預(yù)測,從而得到完整的骨骼信息用于對行為類別的判斷。本研究基于深度學(xué)習(xí)技術(shù)對豬只行為識別,而深度學(xué)習(xí)模型的結(jié)構(gòu)和人類視覺神經(jīng)結(jié)構(gòu)相似,對光照等環(huán)境因素有很高的適應(yīng)性,較好解決了譚輝磊等[9]識別結(jié)果受光照等環(huán)境因素影響嚴(yán)重的問題。此外,相比于YOLO和R-CNN等方法只能對預(yù)先設(shè)定好的行為進行識別,本研究則可以通過在Knn樣本空間中增加豬只某類行為對應(yīng)的樣本來實現(xiàn)對該類行為的識別,減少了擴展行為類別所消耗的時間。本研究能夠滿足生豬規(guī)?;B(yǎng)殖中對豬只行為自動化識別的農(nóng)業(yè)需求,通過分析一段時間內(nèi)豬只姿態(tài)的變化情況判斷豬只的活躍程度,進一步為豬只健康異常狀態(tài)的判別提供輔助決策信息,在今后養(yǎng)殖業(yè)智能化和信息化領(lǐng)域具有巨大應(yīng)用潛能。