張宏鳴 武 杰 李永恒 李書琴 王紅艷 宋榮杰
(1.西北農(nóng)林科技大學信息工程學院, 陜西楊凌 712100; 2.寧夏智慧農(nóng)業(yè)產(chǎn)業(yè)技術(shù)協(xié)同創(chuàng)新中心, 銀川 750004;3.西部電子商務(wù)股份有限公司, 銀川 750004)
近年來,我國牛肉需求量大幅增加,國內(nèi)肉牛養(yǎng)殖行業(yè)發(fā)展迅速[1],大規(guī)模肉牛養(yǎng)殖對養(yǎng)殖場信息化水平提出了較高要求。肉牛進食行為能夠反映其健康狀況,同時也影響肉牛的進食量,進而影響其自身的發(fā)育及牛肉的質(zhì)量和產(chǎn)量。準確識別肉牛進食行為能夠幫助管理者及時了解肉牛個體進食量,對肉牛養(yǎng)殖具有重要價值。
目前,眾多學者開展了關(guān)于動物行為監(jiān)測的研究工作。利用可穿戴設(shè)備監(jiān)測動物狀態(tài)、獲取動物行為數(shù)據(jù),借助統(tǒng)計[2-3]、機器學習[4-9]、深度學習[10-11]等方法分析數(shù)據(jù),實現(xiàn)對動物多種行為的監(jiān)測。但可穿戴設(shè)備需要根據(jù)不同的監(jiān)測對象,在設(shè)備的定制、佩戴、維護上成本較高。近年來,利用獲取視頻數(shù)據(jù),采用非接觸式方法監(jiān)測動物行為的研究較多。文獻[12-16]通過提取監(jiān)測動物目標,并分析建模,采用聚類或分類算法實現(xiàn)對動物行為的分類識別。文獻[17-21]通過目標檢測獲取動物圖像,利用圖像識別算法實現(xiàn)對動物行為的監(jiān)測和識別。這些方法大部分需要依賴搭建的實驗場地或特定的監(jiān)控視角,個別方法可以利用監(jiān)控設(shè)施實現(xiàn)行為識別,但每次僅能識別一個目標行為。隨著Fast R-CNN、YOLO等目標檢測算法的出現(xiàn),目標檢測在果實識別[22-24]、動物行為檢測與個體識別[21,25-27]領(lǐng)域得到了一定的應用。但有關(guān)肉牛多目標行為識別和監(jiān)測研究尚未見報道。
本文提出一種基于YOLOv3模型和卷積神經(jīng)網(wǎng)絡(luò)的肉牛進食行為識別方法,利用實際養(yǎng)殖場監(jiān)控視頻構(gòu)建數(shù)據(jù)集,訓練YOLOv3目標檢測模型檢測肉牛目標,通過填充、丟棄操作構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)、訓練圖像識別模型,以實現(xiàn)對養(yǎng)殖場監(jiān)控視頻觀測范圍內(nèi)肉牛進食行為的識別。
肉牛視頻數(shù)據(jù)于2019年4—7月在寧夏回族自治區(qū)銀川市犇旺生態(tài)養(yǎng)殖公司肉牛養(yǎng)殖場采集。每段視頻時長35 min,肉牛視頻格式為mp4,分辨率為1 920像素(水平)×1 080像素(垂直),視頻幀率為24 f/s。本文目的是對肉牛進食行為進行監(jiān)測和識別,故篩選出處于室內(nèi)牛欄的監(jiān)控視頻作為實驗數(shù)據(jù),養(yǎng)殖場監(jiān)控視頻場景如圖1所示。
圖1 養(yǎng)殖場監(jiān)控視頻Fig.1 Farm monitoring video
本研究旨在使用機器視覺方法對監(jiān)控視頻進行分析,實現(xiàn)對肉牛進食行為的識別。識別技術(shù)路線如圖2所示,包括3個環(huán)節(jié):
(1) 構(gòu)建數(shù)據(jù)集:提取監(jiān)控視頻關(guān)鍵幀,對關(guān)鍵幀進行標注、截取,構(gòu)建肉牛目標檢測數(shù)據(jù)集、肉牛行為數(shù)據(jù)集。
(2) 進食行為識別:利用肉牛目標檢測數(shù)據(jù)集和肉牛進食行為數(shù)據(jù)集,訓練YOLOv3模型用于肉牛目標檢測,訓練卷積神經(jīng)網(wǎng)絡(luò)用于肉牛行為圖像識別,最終實現(xiàn)對多目標肉牛進食行為的識別。
(3) 結(jié)果分析:將特征圖可視化并分析;在測試集上對進食行為識別方法進行評估。
圖2 技術(shù)路線圖Fig.2 Technology roadmap
1.2.1數(shù)據(jù)集構(gòu)建
構(gòu)建2個數(shù)據(jù)集,分別用于訓練目標檢測模型和圖像識別模型。監(jiān)控視頻中肉牛個體眾多,花色多樣,姿態(tài)復雜,給檢測肉牛目標、識別肉牛進食行為增加了一定的難度。為了避免數(shù)據(jù)的單一性,增強數(shù)據(jù)集的豐富性,對篩選的視頻進行關(guān)鍵幀提取。使用LabelImg軟件標注關(guān)鍵幀中的肉牛目標,利用標注的關(guān)鍵幀圖像和標注文件,共1 233組,構(gòu)建肉牛目標檢測數(shù)據(jù)集。通過讀取標注文件,對關(guān)鍵幀進行截取,獲得肉牛個體圖像。肉牛個體圖像可分為進食和非進食兩類。為了使訓練模型的魯棒性更好,選取進食和非進食行為下不同姿態(tài)肉牛的圖像,構(gòu)建肉牛行為數(shù)據(jù)集。本文構(gòu)建的肉牛行為數(shù)據(jù)集,包括肉牛進食行為圖像846幅,非進食行為圖像1 000幅。肉牛進食行為數(shù)據(jù)集中,具有代表性的肉牛進食行為圖像如圖3a所示,肉牛非進食行為圖像如圖3b所示。
圖3 行為識別數(shù)據(jù)集部分樣例Fig.3 Some examples of behavior recognition data sets
為了驗證本文提出的肉牛進食行為識別方法的有效性,選取不同光照情況下、不同時段的監(jiān)控視頻8段,每段視頻30 s,共5 760幅圖像作為測試集。測試集中的視頻場景具體情況如圖4所示。
圖4 測試集場景Fig.4 Scence of test sets
1.2.2方法設(shè)計
本文提出的肉牛進食行為識別方法基于先檢測肉牛目標,后識別個體行為的思路。
1.2.2.1肉牛目標檢測
YOLOv3模型借鑒了殘差網(wǎng)絡(luò)結(jié)構(gòu),將生成的特征圖和輸入疊加起來,疊加后的特征圖作為新的輸出輸入到下一層網(wǎng)絡(luò),減小了梯度爆炸的風險,增強了網(wǎng)絡(luò)的學習能力。利用多尺度特征進行目標檢測,在保證檢測速度的同時,提升了檢測精確度。采用方差加二值交叉熵的損失計算方法,損失函數(shù)包括坐標誤差、交并比誤差和分類誤差3部分。使用反向傳播算法,不斷調(diào)整參數(shù),更新模型,使損失不斷減小。在多個公開數(shù)據(jù)集上取得了優(yōu)異的效果[28]。
本文選用YOLOv3模型作為肉牛目標檢測算法,通過目標檢測,獲取觀測范圍內(nèi)肉牛目標位置,對肉牛目標進行截取,進而對肉牛進食行為進行識別。
1.2.2.2肉牛進食行為識別
參考LeNet-5網(wǎng)絡(luò)結(jié)構(gòu)[29],構(gòu)建的卷積神經(jīng)網(wǎng)絡(luò)包括4個卷積層、4個池化層和3個全連接層,并在前兩個全連接層中采用丟棄操作。本文卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如表1所示,并進行改進:
表1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)Tab.1 Convolutional neural network structure
(1) 在卷積操作時采用填充
肉牛牛頭的位置和肉牛與進食槽的距離是判斷肉牛是否處于進食行為的重要依據(jù)。通過觀察YOLOv3模型獲取的肉牛行為圖像可以看出,大多數(shù)圖像中牛頭、進食槽處于圖像邊緣位置。填充操作通過對特征圖邊緣進行填充,能夠提高圖像邊緣的特征被卷積核提取的次數(shù),從而盡可能保留圖像邊緣的細節(jié)特征,填充操作的原理如圖5所示。
圖5 填充操作原理圖Fig.5 Schematics of padding
(2) 在全連接層中加入丟棄操作
由于肉牛姿態(tài)多樣,部分非進食行為的肉牛圖像與進食行為的肉牛圖像相似度較高,導致模型訓練過程中容易出現(xiàn)過擬合。丟棄操作通過使卷積神經(jīng)網(wǎng)絡(luò)全連接層的神經(jīng)元隨機失去活性[30],降低神經(jīng)元之間的依賴,從而提高網(wǎng)絡(luò)模型泛化能力,丟棄操作的原理如圖6所示。
圖6 丟棄操作原理圖Fig.6 Schematics of dropout
1.2.3評價指標
1.2.3.1目標檢測評價指標
對于一個目標檢測算法,通常從每秒處理的幀數(shù)、目標檢測的準確度等方面評估其效果。由于本實驗的目的是盡可能多地識別視頻中的肉牛目標,故本實驗更關(guān)注訓練得到的YOLOv3模型對肉牛目標檢測的準確度。
本文中,需要比較YOLOv3模型在驗證集上對肉牛目標檢測的坐標與真實標注坐標的差距。在評估時,首先需要計算模型所預測的檢測框坐標和真實框坐標的交集與并集之間的比例,該比例又稱為交并比(IoU)。目標檢測數(shù)據(jù)集使用Pascal VOC數(shù)據(jù)集格式。利用交并比判斷檢測是否正確,使用Pascal VOC數(shù)據(jù)集評估目標檢測算法效果時,設(shè)置閾值為0.5,即如果預測的檢測框坐標和真實框坐標的交集與并集之間的比例大于0.5,則認為檢測正確,否則認為檢測錯誤。
采用驗證集全部視頻幀上的平均精確度VAVE(驗證集中全部視頻幀圖像中肉牛被正確檢測的百分比)來評價目標檢測的效果。VAVE的計算公式為
(1)
式中A——正確檢測肉牛目標的次數(shù)
B——驗證集中的每幅視頻幀圖像中實際肉牛目標的個數(shù)
S——驗證集包含的視頻幀總數(shù)
1.2.3.2圖像識別評價指標
圖像識別樣本分為4種類型:真正例(True position,TP)表示模型對正例進行正確分類;假正例(False position,F(xiàn)P)表示模型對正例進行錯誤分類;假反例(False negative,F(xiàn)N)表示模型對反例進行錯誤分類;真反例(True negative,TN)表示模型對反例進行正確分類。真、假正例的總稱是正例(Position,P),真、假反例的總稱是反例(Negative,N)。本實驗中預選出3個評價標準,對模型進行效果評價。
(1)精確度(VP)表示模型正確分類的肉牛進食行為圖像樣本數(shù)量占分類為肉牛進食行為圖像樣本數(shù)量的比率,計算公式為
(2)
式中ATP——肉牛進食行為圖像正確識別的個數(shù)
AFP——肉牛進食行為圖像錯誤識別的個數(shù)
(2)召回率(VR)表示模型正確分類的肉牛進食行為圖像樣本數(shù)量占實際肉牛進食行為圖像樣本數(shù)量的比率,計算公式為
(3)
式中AFN——肉牛非進食行為圖像錯誤識別個數(shù)
(3)準確率(VACC)表示通過模型識別,最終分類正確(包括肉牛進食行為圖像樣本和肉牛非進食行為圖像樣本)的圖像樣本數(shù)占總樣本數(shù)的比率,是評價模型整體性能的評價指標,計算公式為
(4)
式中ATN——肉牛非進食行為圖像正確識別個數(shù)
AP——肉牛進食行為圖像總數(shù)
AN——肉牛非進食行為圖像總數(shù)
實驗執(zhí)行環(huán)境為64位Windows 10系統(tǒng),AMD Ryzen 3500X 6-Core CPU 4.0 GHz,NVIDIA GeForce RTX 2060 SUPER GPU,16 GB內(nèi)存,編程語言為Python 3.7.4,使用Tensorflow 1.15、Keras 2.1.5進行網(wǎng)絡(luò)搭建、訓練和測試,開發(fā)工具為PyCharm 2019。
1.4.1YOLOv3模型
訓練YOLOv3模型時,設(shè)置批尺寸為5,迭代次數(shù)為500,以8∶2的比例劃分訓練集和驗證集。為了選擇出合適的初始學習率,在不同量級下進行學習率測試,將初始學習率設(shè)置為0.000 01、0.000 1、0.001、0.01、0.1、1、10分別進行模型訓練,同時為了避免學習停滯,在迭代150次和迭代300次時,設(shè)置學習率衰減為之前的1/10,經(jīng)過多次訓練,分別對模型進行評估,保留效果最好的模型供后續(xù)實驗使用。
經(jīng)過評估,不同初始學習率下訓練得到的模型,在測試集上對肉牛目標檢測情況和平均精確度如表2所示。從表2可以看出,當初始學習率設(shè)置為0.1時,模型正確識別肉牛個數(shù)最多,在196幅圖像、共計734個肉牛目標的測試集中(包含多個肉牛個體的多種姿態(tài)和行為),該模型正確識別683個肉牛目標,51個肉牛目標未識別,錯誤識別30個肉牛目標;模型平均精確度最高,在測試集上的平均精確度為92.5%。該模型經(jīng)過500次訓練迭代后,訓練集上的損失函數(shù)變化曲線如圖7所示。當訓練達到300次以上時,隨著迭代次數(shù)的不斷增加,訓練損失趨向穩(wěn)定,網(wǎng)絡(luò)模型達到較好的訓練效果。
表2 不同學習率下YOLOv3檢測情況和平均精確度Tab.2 Detection and average precision of YOLOv3 at different learning rates
圖7 YOLOv3損失值變化曲線Fig.7 Loss change curve of YOLOv3
1.4.2卷積神經(jīng)網(wǎng)絡(luò)模型
在不同量級下進行初始學習率的測試,將學習率設(shè)置為0.000 01、0.000 1、0.001、0.01、0.1、1、10分別進行模型訓練,其中當學習率大于等于0.1時,模型發(fā)生過擬合,不同學習率下卷積神經(jīng)網(wǎng)絡(luò)模型的效果如圖8所示。丟棄操作會使神經(jīng)元按照一定比例失去活性,當丟棄率太低時,難以起到效果;當丟棄率太高時,容易導致模型欠學習。將丟棄率分別設(shè)置為0.1、0.2、0.3、0.4、0.5、0.6,不同丟棄率下卷積神經(jīng)網(wǎng)絡(luò)模型的效果如圖9所示。經(jīng)過評估,最終選取學習率為0.000 1、丟棄率為0.5的模型對肉牛進食行為進行識別。
圖8 不同學習率下卷積神經(jīng)網(wǎng)絡(luò)模型的效果Fig.8 Effect of convolution neural network model at different learning rates
圖9 不同丟棄率下卷積神經(jīng)網(wǎng)絡(luò)模型的效果Fig.9 Effect of convolutional neural network model at different dropout rates
本文利用反卷積和反池化,將輸入圖像的激活特征實現(xiàn)可視化[31],可以清晰地看到卷積神經(jīng)網(wǎng)絡(luò)提取的圖像特征以及提取特征的特點。
通過對比第1次卷積操作和第4次卷積操作后提取的圖像特征,能夠發(fā)現(xiàn)淺層卷積層重點提取圖像中肉牛的輪廓特征,可以分辨出特征圖中的肉牛目標,如圖10所示。隨著卷積層的加深,得到的特征越來越抽象,但是通過仔細觀察特征圖,可以發(fā)現(xiàn)經(jīng)過多次卷積操作提取到更多位于圖像邊緣的特征,如圖11所示。
圖10 第1次卷積操作輸出的特征圖Fig.10 Characteristic graph of the first convolution operation output
圖11 第4次卷積操作輸出的特征圖Fig.11 Characteristic graph of the fourth convolution operation output
肉牛目標檢測的目的是識別肉牛個體,進而才能通過圖像識別模型對肉牛個體的進食行為做出判斷,因此肉牛進食行為識別的準確率在一定程度上能夠反映目標檢測的準確率。在8段30 s視頻共5 760幅圖像測試集中對本文提出的多目標肉牛進食行為識別方法進行評估,肉牛目標檢測的平均精確度為83.8%;對檢測到的肉牛目標進食行為識別的平均精確度為79.7%,平均召回率為73.0%,平均準確率為74.3%,在測試集各視頻取得的識別結(jié)果如表3所示,各測試視頻的識別結(jié)果如圖12所示??傮w來看,本文提出的基于機器視覺的肉牛進食行為識別方法具有較好的準確性,能夠為肉牛行為監(jiān)測提供方法支持。
本文提出的基于YOLOv3模型的多目標肉牛進食行為識別方法識別的肉牛進食行為與肉牛真實行為存在誤差,產(chǎn)生這些誤差的原因主要有:
(1)目標檢測準確性的影響。目標檢測算法對于監(jiān)控視頻中距離較遠、目標較小的肉牛難以檢測、識別;對于出現(xiàn)相互遮擋的肉牛目標,難以完全識別。后續(xù)可通過擴充肉牛目標檢測數(shù)據(jù)集或嘗試不同的目標檢測算法來提升目標檢測的準確性。
表3 測試集目標檢測和行為識別結(jié)果Tab.3 Object detection and behavior recognition results of test sets %
(2)圖像識別準確性的影響。利用卷積神經(jīng)網(wǎng)絡(luò)進行圖像識別時,由于肉牛姿態(tài)、花色的多樣性,個別肉牛的進食行為識別存在波動;部分肉牛距離進食槽較近時,容易誤識別。肉牛個體進食行為準確率仍有很大的提升空間。后續(xù)可通過擴充肉牛進食行為數(shù)據(jù)集,提高肉牛行為多樣性、肉牛個體多樣性,或通過改善神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來提高肉牛進食行為圖像識別的準確性。
圖12 測試集識別結(jié)果Fig.12 Recognition results of test sets
通過獲取肉牛養(yǎng)殖場的監(jiān)控視頻,建立了肉牛目標檢測數(shù)據(jù)集、肉牛行為數(shù)據(jù)集;使用YOLOv3模型實現(xiàn)了對監(jiān)控視頻觀測范圍內(nèi)肉牛的檢測;利用卷積神經(jīng)網(wǎng)絡(luò)對檢測的肉牛目標進行進食行為識別。在包含8段視頻共5 760幅圖像的測試集中,肉牛目標檢測的平均精確度為83.8%,肉牛進食行為識別的平均精確度為79.7%、平均召回率為73.0%、平均準確率為74.3%,驗證了利用監(jiān)控視頻對肉牛進食行為監(jiān)測的可行性。