劉瓔瑛,曹晅,郭彬彬,陳慧杰,戴子淳,龔長萬
(1.南京農(nóng)業(yè)大學人工智能學院,江蘇 南京 210031;2.農(nóng)業(yè)農(nóng)村部養(yǎng)殖裝備重點實驗室,江蘇 南京 210031;3.江蘇省農(nóng)業(yè)科學院畜牧研究所,江蘇 南京 210014)
家禽的智能化養(yǎng)殖已逐漸成為福利化養(yǎng)殖的發(fā)展需求。家禽的姿態(tài)[1]和行為與它們的身體狀態(tài)和健康狀況密切相關,不同的姿態(tài)和行為會傳遞不同的健康信息[2]。肉鵝是群居性家禽,具有合群性[3],其姿態(tài)和行為的一致性較強。傳統(tǒng)的肉鵝健康狀態(tài)判斷主要通過飼養(yǎng)人員肉眼長期觀察肉鵝姿態(tài)和行為,根據(jù)經(jīng)驗得出結論,主觀性強、耗時費力。以計算機視覺和深度學習相結合的方式,應用在肉鵝養(yǎng)殖過程的姿態(tài)識別上,養(yǎng)殖管理人員可以通過養(yǎng)殖場的攝像頭遠程獲取自然狀態(tài)下肉鵝的姿態(tài)變化,為后續(xù)實現(xiàn)自動監(jiān)控家禽生長狀況及異常行為的預警有重要意義。
伴隨著人工智能技術的發(fā)展,計算行為學逐漸得到學界的重視[4]。將深度學習[5-6]算法應用于禽畜的姿態(tài)和行為識別[7]成為當下研究的熱點。Fang等[8]通過構建肉雞姿態(tài)骨架特征點,跟蹤其身體特定部位,并結合深度神經(jīng)網(wǎng)絡(DNN)和貝葉斯模型(BM),實現(xiàn)了對肉雞站立、行走、奔跑、進食、休息等姿態(tài)的準確識別。李娜等[9]篩選了7 988幅圖片對雞的采食、趴臥、站立、梳羽、打架和梳羽行為進行標注,利用YOLO v4目標檢測模型識別,并采用時間序列分析方法提取持續(xù)時間大于30 s的梳羽行為,實現(xiàn)群養(yǎng)雞只行為的實時自動監(jiān)測。Shao等[10]建立了人工標注的豬姿態(tài)識別數(shù)據(jù)集,包括站立、俯臥、側臥、覓食4種豬姿態(tài),使用YOLO v5算法對單個豬目標截取后,利用語義分割和ResNet網(wǎng)絡對豬的姿勢進行分類,準確率高達92.45%。劉亞楠等[11]利用YOLO v5模型識別母豬、仔豬姿態(tài),并通過加入db4小波的方法,實現(xiàn)了非接觸式母豬哺乳行為的判定和哺乳時長的監(jiān)測。為了提升網(wǎng)絡性能,學者們先后提出了SENet(squeeze and excitation networks)[12]、CBAM(convolutional block attention module)[13]、ECA(efficient channel attention)[14]等注意力機制[15-18]。這些研究表明增加注意力機制可以提高網(wǎng)絡的檢測能力,但尚未有將其應用于畜禽姿態(tài)識別和行為分析的相關研究。
YOLO模型是目前工業(yè)領域使用最多的檢測網(wǎng)絡,采用one-stage算法,網(wǎng)絡運行速度快,內存占用小。YOLO v5模型是YOLO系列的最新成果,在繼承原有YOLO模型優(yōu)點的基礎上,因其更復雜的網(wǎng)絡結構和訓練策略技巧等使其具有更優(yōu)的檢測精度和更快的推理速度。按照其網(wǎng)絡寬度、深度的不同,一共有4個模型,本文選用尺寸最小的YOLO v5模型,易于部署在硬件配置相對簡單的養(yǎng)殖場環(huán)境。目前將YOLO檢測算法應用在雞、豬等禽畜姿態(tài)行為識別的研究較多,但對鵝這種水禽研究較少。夏季高溫天氣,鵝熱應激反應大,通過監(jiān)測站立、休憩、飲水和梳羽4種姿態(tài)可以提前預警,降低死亡率。鵝場內的光照環(huán)境復雜,且存在鐵絲網(wǎng)、網(wǎng)狀地格、遮陽布、飲水器、食盆等干擾物,鵝群易聚集,造成視頻中出現(xiàn)較多肉鵝遮擋的場景。故本研究在YOLO v5模型基礎上增加了注意力機制模塊,改進優(yōu)化網(wǎng)絡結構,并對比分別增加SENet、CBAM、ECA不同注意力模塊后網(wǎng)絡的檢測效果,提高養(yǎng)殖場復雜場景下肉鵝4種姿態(tài)的檢測能力。同時根據(jù)養(yǎng)殖場實際情況,設計了明暗試驗和密集場景試驗,驗證了算法的有效性。改進的YOLO v5模型可以實現(xiàn)養(yǎng)殖場復雜環(huán)境下肉鵝姿態(tài)準確快速檢測,為后續(xù)肉鵝行為監(jiān)控和健康防疫提供數(shù)據(jù)。
1.1.1 數(shù)據(jù)采集從養(yǎng)殖場獲取肉鵝視頻,視頻拍攝于2020年8月,地點在安徽省滁州市全椒縣馬廠鎮(zhèn)。視頻來源于安徽天之驕鵝業(yè)有限公司的監(jiān)控攝像頭,視頻圖像分辨率為1 920×1 080,鵝的品種為揚州鵝。根據(jù)視頻實際情況,從中挑選不同時段的肉鵝活動視頻,利用python腳本文件對視頻進行抽幀處理,每個視頻按照一定的間隔抽幀獲取100張彩色RGB圖片,經(jīng)過數(shù)據(jù)清洗后將原有的MP4格式視頻數(shù)據(jù)轉為800張JPG圖像,包括400張白天肉鵝圖像和400張夜晚肉鵝圖像。圖像統(tǒng)一編號格式為“00000X.jpg”。
1.1.2 數(shù)據(jù)集制作肉鵝的姿態(tài)十分豐富,并且由于其細長的脖子,不同姿態(tài)之間有一定的相似性,常見的有站立、休憩、飲水、吃食、梳羽和展翅等姿態(tài)。本研究選取了站立(standing)、休憩(resting)、飲水(drinking)、梳羽(feather preening)這4種常見姿態(tài),其姿態(tài)識別分類的評判標準如表1所示。4種肉鵝姿態(tài)見圖1。利用LabelImg開源標注工具對圖片內的肉鵝目標進行人工標注,并將標注結果保存為PASCAL VOC格式,生成的.XML格式文件保存至預先創(chuàng)建的文件夾中。在人眼可區(qū)分的情況下,盡可能對圖片中的所有肉鵝目標進行標注,對于模糊不清的肉鵝目標采取不標,這樣可以避免因目標未標注被當作負樣本進而削弱算法區(qū)分正負樣本能力的影響。真實肉鵝養(yǎng)殖場的環(huán)境,存在欄桿遮擋、肉鵝目標露出不全、黏連等情形,對于不同情形利用大小合適的矩形框進行標注。
1.1.3 數(shù)據(jù)集劃分通過python腳本文件,將800張圖片及對應標簽按照訓練驗證集∶測試集=9∶1以及訓練集:驗證集=9∶1的比例,完成了訓練集、驗證集、測試集的劃分。數(shù)據(jù)集共完成13 487個姿態(tài)標注,其中訓練集11 438個姿態(tài)(站立姿態(tài)2 827個,休憩姿態(tài)6 481個,飲水姿態(tài)408個,梳羽姿態(tài)1 722個),驗證集1 231個姿態(tài)(站立姿態(tài)324個,休憩姿態(tài)654個,飲水姿態(tài)42個,梳羽姿態(tài)211個),測試集1 418個姿態(tài)(站立姿態(tài)351個,休憩姿態(tài)766個,飲水姿態(tài)50個,梳羽姿態(tài)251個)。
表1 肉鵝4種姿態(tài)定義Table 1 Definition of the meat goose’s four postures
圖1 肉鵝姿態(tài)示意圖Fig.1 Schematic diagram of meat goose posture
1.2.1 實驗平臺與環(huán)境配置本研究基于應用靈活的Pytorch開源框架,采用搭載Windows10 64位操作系統(tǒng)的筆記本進行模型訓練,中央處理器(CPU)為Intel(R)Core(TM)i5-8300H CPU@2.30GHz,顯卡(GPU)為NVIDIA GeForce GTX 1050Ti,顯存8GB,并配置深度學習Conda環(huán)境為:Python=3.8.0+torch=1.7.1+torchvision=0.8.2,CUDA版本為10.0。
1.2.2 基于改進YOLO v5的肉鵝姿態(tài)識別模型傳統(tǒng)的如ResNet等網(wǎng)絡只能完成單個目標圖像的分類任務,本研究中每張圖片中有多只肉鵝目標,對于每只肉鵝目標,都需要實現(xiàn)對其框選和分類,目標檢測模型是實現(xiàn)該任務的最佳選擇。為了更好適應養(yǎng)殖場的復雜場景,本研究通過加入注意力機制模塊對YOLO v5模型進行改進,改進后的模型網(wǎng)絡結構如圖2所示。YOLO v5模型在網(wǎng)絡結構上可以劃分為輸入端、主干網(wǎng)絡(backbone)、頸網(wǎng)絡(neck)、輸出端4個部分。其主干特征提取網(wǎng)絡采用與YOLO v4類似的CSP Darknet,Neck部分采用FPN(feature pyramid networks)結合PAN(path aggregation network)的結構,進行網(wǎng)絡的特征融合和加強提取[19-20],自底向上路線的加入彌補加強了定位信息,提升了網(wǎng)絡特征融合的能力。在引入注意力模塊時,通過對比放置在網(wǎng)絡不同位置的效果,最終選定放置在頸網(wǎng)絡的尾部,不同注意力模塊的結構如圖3所示。CBAM模塊對于輸入的特征,先通過一個共享的多層感知機(multi layer perceptron,MLP)與Sigmoid函數(shù),學習各通道的權重信息,再通過一個卷積核為3×3、 膨脹系數(shù)為2的空洞卷積[21]與Sigmoid函數(shù),學習空間上各點的權重信息。SENet模塊通過2次全連接層和Sigmoid函數(shù)后獲得通道權重信息,ECA模塊將2次全連接層改為一維卷積,通過Sigmoid函數(shù)后獲得通道權重信息,具有良好的跨通道信息獲取能力[22]。在同一環(huán)境下訓練及測試YOLO v5模型以及增加注意力機制模塊后的YOLO v5+SENet、YOLO v5+CBAM、YOLO v5+ECA模型,通過選取合適的評價指標,對模型進行初步分析。為了更好地驗證模型的泛化性,本研究設計了明暗試驗和密集場景試驗,進一步對模型做出評價,最終挑選出更加準確識別肉鵝站立、休憩、飲水、梳羽這4種常見姿態(tài)的模型。肉鵝姿態(tài)識別模型的構建流程如圖4所示。
圖2 改進的YOLO v5模型網(wǎng)絡結構圖Fig.2 The network structure diagram of improved YOLO v5 model
圖3 不同注意力模塊的結構圖Fig.3 Structure diagram of different attention modules
圖4 肉鵝姿態(tài)識別模型的流程圖Fig.4 The flow chart of meat goose posture recognition model
圖5 改進前后YOLO v5的訓練損失曲線Fig.5 Training loss curve of YOLO v5 beforeand after improvement
1.2.3 訓練參數(shù)設置在YOLO v5以及改進YOLO v5的訓練中,只進行解凍訓練,訓練的epoch設為100,批次(batch_size)設置為8,總迭代次數(shù)為8 100次,初始學習率設置為0.001,最小學習率設置為0.000 01,使用adam優(yōu)化器,動量參數(shù)設置為0.937,使用余弦退火函數(shù)動態(tài)降低學習率。在改進網(wǎng)絡中選擇關閉Mosaic數(shù)據(jù)增強方法。置信度設為0.3,非極大值抑制所用的交并比大小設為0.3。損失函數(shù)由3個部分組成:Reg(矩形框回歸預測)部分、Obj(置信度預測)部分、Cls(分類預測)部分。Reg部分采用CIOU損失,Obj部分和Cls部分采用BCE Loss(交叉熵損失)。在同一環(huán)境下訓練,改進前后YOLO v5網(wǎng)絡的訓練損失曲線如圖5所示。
1.2.4 模型評價指標采用精準率(precision,P)表示模型正確識別肉鵝的占比,召回率(recall,R)表示識別圖片中肉鵝目標的涵蓋程度。采用精度均值(average precision,AP)表示每種肉鵝姿態(tài)識別的精度,采用平均精度均值(mean average precision,mAP)表示所有類別肉鵝姿態(tài)的平均識別精度。采用參數(shù)量(parameters,Params)評價模型的空間復雜度,參數(shù)量表征了模型占用顯存的大小,指模型各網(wǎng)絡層的總字節(jié)數(shù)。采用計算量(floating point operations,FLOPs)評價模型的時間復雜度,計算量表征了模型運算速度的大小,指浮點運算次數(shù)。采用畫面每秒傳輸幀數(shù)(frames per second,FPS)和單張圖片的檢測時間評價模型實際識別肉鵝的速度。相關計算公式如下:
(1)
(2)
(3)
(4)
式中:TP表示實際為真預測正確的樣本數(shù);FP表示實際為假預測正確的樣本數(shù);FN表示實際為假預測錯誤的樣本數(shù);C為肉鵝姿態(tài)類別總數(shù);k為肉鵝各姿態(tài)類別序號。
將不同模型在同一硬件環(huán)境下檢測,改進前、后識別的性能指標對比如表2所示。從表2可以看出,YOLO v5在增加不同的注意力模塊后,在P、R、mAP上能夠實現(xiàn)一定程度的提升,檢測速度也有所提升,而模型的Params和Flops幾乎沒有增加。當加入ECA注意力模塊后,模型識別效果提升最為明顯,改進YOLO v5的精準率由原來的83.46%上升到84.68%,提升了1.22%,召回率由原來的84.05%上升到85.88%,提升了1.83%,mAP值由原來的86.66%上升到88.93%,提升了2.27%,FPS也從26.70上升到30.92。總的來說,注意力機制的引入有效提高了模型的檢測精度和檢測速度,改進后的YOLO v5+ECA模型的檢測精度和檢測速度最高。
表2 改進前、后YOLO v5模型的肉鵝姿態(tài)識別結果Table 2 Meat goose posture recognition results of YOLO v5 model before and after improvement
為了對YOLO v5+ECA模型的檢測過程進行可視化解釋,采用Grad-CAM[23]可視化方法。它將目標特征圖的融合權重表達為梯度,用梯度的全局平均來計算權重,求得各個類別對所有特征圖的權重后,再進行加權和得到熱力圖(heatmap)。熱力圖可以直觀展示模型提取特征時關注的重點,顏色越深,模型關注的越多,紅色部分(顏色最深的部分)代表模型關注的重點位置,如圖6所示。從圖6可以看出,YOLO v5+ECA模型在預測站立和飲水姿態(tài)時,更加關注肉鵝的頸部以及足部特征,在預測休憩和梳羽姿態(tài)時,更加關注其身體部位。
圖6 YOLO v5+ECA模型的預測圖像熱力圖Fig.6 Predicted image heatmap for YOLO v5+ECA model
同樣隨機挑選測試集中的1張白天圖像和1張夜晚圖像,利用YOLO v5和YOLO v5+ECA模型分別檢測后進行對比,將各類姿態(tài)的檢測數(shù)自動統(tǒng)計并顯示在檢測后的圖片上,如圖7所示。從圖7可以看出,改進后的YOLO v5+ECA網(wǎng)絡的檢測精準度更高,檢測到的姿態(tài)數(shù)更多,檢測效果更好。
圖7 改進前、后YOLO v5模型的預測結果圖Fig.7 Prediction result images of YOLO v5 model before and after improvement
為了進一步了解模型對于各姿態(tài)類別的識別效果,對改進前、后模型對于不同姿態(tài)識別的AP進行分析。從表3可見:站立姿態(tài)的識別AP最高達到91.85%,休憩姿態(tài)的識別AP最高為93.48%,飲水姿態(tài)的識別AP最高為93.00%,而梳羽姿態(tài)的識別最高只有80.42%。主要原因是肉鵝的梳羽姿態(tài)在特征上與站立和休憩均有一定的重合性,梳羽姿態(tài)包括站立時梳羽、休憩時梳羽的情形,并且訓練集中站立和休憩姿態(tài)的數(shù)量要大于梳羽姿態(tài),其中,站立姿態(tài)有2 827個,休憩姿態(tài)有6 481個,而梳羽姿態(tài)只有1 722個。所以在預測時,可能出現(xiàn)將梳羽姿態(tài)誤判為站立或休憩姿態(tài),從而導致梳羽姿態(tài)較低的識別精度。
2.3.1 明暗試驗在大多數(shù)傳統(tǒng)的算法中,圖片亮度的影響一直都是算法檢測的一個問題。本研究同樣考慮亮度對模型可能帶來的影響,自制的訓練集中包含400張白天圖像和400張夜晚圖像。為了測試模型對于亮度的敏感性,將測試集中的白天與夜晚圖片分開計算模型的mAP值,相關結果如表4所示。由表4可知,模型在明暗場景的姿態(tài)識別情況差異不大,并且加入注意力機制后,模型在白天和夜晚的場景中檢測精度均有所上升。
表3 改進前、后YOLO v5模型對于肉鵝不同姿態(tài)的平均精度結果對比Table 3 Comparisons of average precision for different goose postures of YOLO v5model before and after improvement %
表4 改進前、后YOLO v5模型的明暗試驗識別結果Table 4 The identification results of light and dark experiments of YOLO v5 model before and after improvement %
2.3.2 密集場景試驗密集場景試驗是對模型小目標檢測能力的考驗。為了進一步測試改進后的YOLO v5+ECA模型對密集場景肉鵝姿態(tài)識別的能力,測試選取1張白天圖像,并且這張圖片不屬于測試集中的原有照片,可以驗證模型的泛化能力。YOLO v5和YOLO v5+ECA模型在密集場景中進行肉鵝姿態(tài)識別的預測如圖8所示,為了直觀對比模型的預測表現(xiàn),圖中黃色方框固定選取原圖中的一塊區(qū)域,并將該區(qū)域的部分誤檢漏檢情況展示在最右邊的灰色方格中。從圖8可以看出,在YOLO v5中出現(xiàn)了梳羽姿態(tài)誤檢為站立姿態(tài)以及站立姿態(tài)漏檢的問題,而在改進后的YOLO v5+ECA模型均得到改善,改進后的模型誤檢和漏檢現(xiàn)象減少,模型在密集場景下的表現(xiàn)有所提升。
圖8 改進前、后YOLO v5模型的密集場景試驗結果Fig.8 Dense scene experimental results of YOLO v5 model before and after improvement
本研究基于深度學習的方法,對YOLO v5算法引入注意力機制改進網(wǎng)絡結構。通過模型的基本測試以及魯棒性試驗的對比,改進后的YOLO v5+ECA模型能夠對肉鵝站立、休憩、飲水、梳羽這4種常見姿態(tài)進行較為準確的識別,平均檢測精度(mAP)達88.93%,相比YOLO v5提升2.27%,檢測速度為每秒30.92幀,提升4.22幀。站立、休憩、飲水的姿態(tài)識別AP都達到90%以上,梳羽姿態(tài)的識別AP值雖然只達到80.42%,但相比YOLO v5提升了6.07%。明暗試驗和密集場景試驗證明改進后的YOLO v5+ECA模型在復雜場景下的檢測效果好,對光線的適應性強,漏檢和誤檢現(xiàn)象相對較少。
本文的研究雖然有了初步的成果,但仍有不足,今后在以下方面需要進一步的完善與探索:1)由熱力圖分析出模型提取不同姿態(tài)特征的重點,改進肉鵝的圖像標注以及實現(xiàn)對更多姿態(tài)的識別;2)在肉鵝姿態(tài)識別的基礎上增加視頻跟蹤技術,進行行為分析,為肉鵝的健康生長和異常行為預警提供更多數(shù)據(jù)。