李小迪,王天一
(貴州大學 大數據與信息工程學院,貴陽 550025)
近年來,國內羊養殖行業發展迅猛,羊養殖已然占據國內畜牧產業較大比重。為了滿足市場需求,羊養殖的規模不斷擴大,養殖方式從散養模式、牧場養殖向智能化、規模化的方式轉變。智能化的養殖技術使得畜牧產業從注重羊養殖數量變為注重養殖質量,經營方式從粗獷式經營轉變為工廠化、集約化。這樣的轉變不僅提高了養殖的水平,更使得養殖產品的安全性得到改善,同時也大大減少了由于不良養殖帶來的環境污染,提高了養殖的社會效益。此外,智能化養殖減少了用工量,改善了養殖場管理模式,提升了養殖產品質量,降低了養殖的用人成本,從而提高了養殖的經營效益[1-5]。
羊的不同行為反映了羊個體的整體狀況,可以作為羊健康狀況的重要參考。因此,高效準確地識別羊的行為,對羊的智能化養殖有重要意義。目前,動物識別方法包括:人工監測法、基于可穿戴設備的方法、基于深度學習的方法等。Marchioro 等人[6]利用三軸加速度傳感器采集不同行為的母豬數據集,并通過分析不同行為的特征進行母豬行為識別,實驗證明,該方法對母豬產仔行為識別的準確率最高達到90%。Dutta 等人[7]使用三軸磁力計和三軸加速度傳感器穿戴在奶牛脖頸處,記錄奶牛的不同行為,首先提取出奶牛不同行為的特征,其次做歸一化處理,最后使用決策樹、KNN 等不同算法對奶牛的不同行為進行分類,實驗結果表明,不同算法的識別準確率相近,其中決策樹算法最優。郭冬冬[8]使用三軸加速度傳感器獲取山羊不同行為數據集,然后使用k-means算法識別山羊不同行為,最終識別率達到87%左右。何東健等人[9]從監控視頻中獲取牦牛的行為信息,首先對牦牛進行目標檢測,再使用k-means算法識別牦牛不同行為,實驗證明,該方法識別準確率較高。
與人工監測法和可穿戴設備的方法相比,深度學習對于輸入圖像要求較低,對于有噪聲的圖像,無需對圖像進行復雜的去噪處理,且能夠從大量數據中自動地學習圖像特征,利用卷積神經網絡(Convolutional neural network,CNN)[10-13]可以實現圖像特征的自動提取,使用訓練好的卷積神經網絡進行行為識別,不僅提高了識別效率,也提升了識別的準確率。目前已成功應用于個體識別[14]、圖像分類[15-16]、掌紋識別[17-18]、行為識別[19-22]等領域。
為了實現低成本,非接觸式的羊行為識別,本文采集了大量養殖場環境下羊的行為視頻,通過分析羊不同行為的特征,提出了基于改進卷積神經網絡的羊行為識別方法,構建卷積核尺寸為3×3 的卷積神經網絡,對比分析不同激活函數和不同丟棄率對模型性能的影響,使用余弦退火學習率對網絡進行動態微調,分析有無遮擋情況下羊不同行為的識別準確率,實驗結果顯示,本文提出的方法識別速度較快,可達到28 fps,對于羊的進食、站立、坐臥等行為識別準確率均達到90%以上。
卷積神經網絡是一種包含了卷積運算的人工神經網絡,包含輸入層、卷積層、池化層、輸出層等部分。在羊行為識別的任務場景中,通過對羊不同行為視頻逐幀分析發現:羊只的進食行為,進食位置在畫面中隨機出現,且羊在進食時羊頭伸出羊圈,身體也不同程度地向下彎曲;羊只的坐臥行為,羊只腿部蜷縮,頭部大多低下或緊貼地面,這2 種行為都會導致羊只有不同程度的扭曲變形使得識別難度加大。基于此原因,構建適合羊只不同行為的卷積神經網絡,模型結構設計如圖1 所示。對此擬做探討分述如下。

圖1 卷積神經網絡結構圖Fig. 1 Structure of convolutional neural network
(1)輸入層。由于養殖場中,羊的種類相同,羊的顏色和花紋都相近,且羊的外形、顏色并不影響羊行為的識別,因此輸入的羊只不同行為的圖像大小為32×32×1,輸入網絡中進行網絡訓練。
(2)卷積層。羊的不同行為均有不同的特征,為了能夠較準確地提取出羊不同行為的圖像特征,本文構建了3 個卷積層,分別為C1、C2、C3。由于,2 個3×3 卷積的感受野可代替一個5×5 卷積的感受野,3 個3×3 卷積的感受野可代替一個7×7 卷積的感受野,且3×3 卷積網絡的參數少,非線性更多,網絡更深,使得模型的學習能力更強,且養殖場背景環境較為復雜,為了提取出更多的特征,本文構建的網絡中卷積核的大小均為3×3。3 個卷積層的卷積核個數分別為:30 個、60 個、100 個。
(3)池化層。池化的過程也就是下采樣的過程,在卷積神經網絡中,需要通過池化層給得到的特征圖降維,將特征進行壓縮可有效縮小特征圖的尺寸,從而減少計算量,防止網絡的過擬合。本文采用max -pooling作為下采樣的方法,選圖像區域的最大值作為該區域池化后的值,池化層濾波器的尺寸為2×2。
(4)輸出層。以全連接層和softmax[23]層作為網絡的輸出層對網絡提取的特征進行計算。全連接能夠將輸出的二維特征圖轉化為一維的特征向量,全連接層在卷積神經網絡中可以作為“分類器”使用,本文在全連接層中加入丟棄操作,降低全連接層中各神經元之間的依賴性,以此提高網絡的泛化能力。此外,使用softmax分類函數計算羊只不同行為的發生概率,公式如下:

通過對卷積神經網絡主干層的分析,搭建出適合羊行為識別的網絡,網絡訓練集分為進食行為、站立行為和坐臥行為三個類別。
在卷積神經網絡中,激活函數是必不可少的,使用激活函數,使得網絡上一層的輸入與下一層的輸出呈現非線性的關系,并且可以對任意函數進行逼近,使得網絡具備更強大的表達能力。目前,大多數卷積神經網絡都使用ReLU作為激活函數,但當ReLU激活函數的輸入值小于0 時,會造成梯度消失,使得部分神經元無法被激活。為解決這一問題,本文算法采用SeLU激活函數配合lecun-normal 權重初始化方式。SeLU激活函數的優點包括能夠使神經網絡自歸一化、避免了梯度爆炸、梯度消失等問題、輸出有正值和負值,能更好地控制均值等,其表達式如下:

在文獻[24]中已證明λ≈1.67,a≈1.05。
在模型訓練過程中,由于羊的行為多樣,使得少量羊的不同行為的圖像較為相似,導致網絡模型容易出現過擬合現象。因此,在訓練網絡時采用丟棄操作,讓卷積神經網絡的全連接層神經元按照一定的概率p隨機置零,從而使得神經元之間的依賴性降低,提高模型的泛化能力。Alpha dropout[24]是丟棄操作中的一種,常規的丟棄操作會破壞網絡的自歸一化功能,而Alpha dropout以概率p將部分神經元置零時,保留下來的神經元會進行縮放和移位使得輸出是零均值和單位方差,保證了數據的規范性,其原理如圖2 所示。

圖2 丟棄操作原理Fig. 2 Alpha dropout operation principle
在訓練網絡的過程中,學習率需要根據網絡的訓練情況進行動態調整。在網絡訓練初期,對于輸入圖像的像素信息完全未知,不恰當的學習率容易使模型陷入過擬合,在訓練后期,過大學習率則會造成損失的大幅度震蕩。因此,本文采用余弦退火動態學習率[25-26],使學習率的變化符合余弦函數的變化方式,讓模型輕松跳出局部最優解。其表達式如下:

其中,i表示運行輪次;表示學習率最大值;表示學習率最小值,這2 個值使得學習率在一定范圍內衰減;Ti表示第i次運行時總的epoch數;Tcur表示當前執行了多少個epoch。本文的初始學習率設置為0.001,隨著epoch的增加,學習率按照余弦規律減少,當訓練到第50 個epoch時,學習率下降速度達到最快,最終大小為10-5。
實驗視頻在貴州省某羊只養殖場中采集,每段視頻的平均時長為3 min,格式為mp4,幀寬度為1 920像素,幀高度為1 080 像素,幀速率50 幀/s。視頻均在白天光線充足的條件下進行采集。
在預處理過程中,首先對采集的羊只行為視頻進行人工篩選,篩選出進食行為視頻394 段,站立行為視頻312 段,坐臥行為視頻318 段。通過對關鍵幀的提取,手動刪除關鍵幀中羊只肢體不全、遮擋嚴重、無羊只等無效圖像,選擇不同姿態、不同角度的羊只進食行為圖像3 500 張;羊只站立行為圖像2 800張,羊只坐臥行為圖像3 100張。共計9 400張羊只不同行為圖像構成實驗所用數據集。在此基礎上,按照8 ∶2 的方式劃分訓練集和測試集。
本實驗使用的操作系統為Ubuntu18.04.4LTS,Python3.7,深度學習框架:Tensorflow2.0,Graphics card:RTX 2080Ti,CPU:i7-9700,總共5 500 張圖片,按照8:2 的比例劃分為訓練集和測試集。
丟棄操作會使卷積神經網絡的神經元按照一定的丟棄率p被置零,從而失去活性。當丟棄率p設置過高時,失活的神經元過多,容易導致模型欠學習,影響模型的識別準確率;當丟棄率p設置過低時,難以達到丟棄操作的效果。因此,本文將丟棄率分別設置為0.2,0.3,0.4,0.5,0.6,0.7。不同丟棄率下網絡的識別效果如圖3 所示。

圖3 不同丟棄率下網絡識別效果Fig. 3 Network recognition effect under different discarding rates
由圖3 可知,當丟棄率p為0.5 時,卷積神經網絡模型準確率達到最高,因此,本文丟棄率設置為0.5。
在卷積神經網絡中,激活函數至關重要,本文使用ReLU激活函數的變體SeLU激活函數,實驗結果如圖4 所示。由圖4 可知,在丟棄率設置為0.5 的情況下,使用SeLU激活函數,模型的準確率由89%左右提升至92%左右,損失值Loss降低為0.24 左右。

圖4 ReLU 激活函數和SeLU 激活函數精確率和Loss 的比較Fig. 4 Comparison of Accuracy and Loss of ReLU activation function and SeLU activation function
由于羊只在養殖場內活動,存在有、無欄桿遮擋的情況,如圖5、圖6 所示。因此本文對比有無遮擋情況下羊只行為識別結果,見表1。

圖5 無遮擋羊進食、站立、坐臥行為Fig. 5 Behaviors of eating,standing,sitting and lying of sheep without sheltering

圖6 有遮擋羊進食、站立、坐臥行為Fig. 6 Behaviors of sheltering sheep from eating,standing,sitting and lying

表1 有無遮擋情況下羊只行為識別效果Tab.1 Effect of sheep behaviors recognition with or without occlusion
由于3×3 的卷積核能提取出較多的羊不同行為特征;SeLU激活函數使得網絡具有自歸一化功能且避免了梯度爆炸和梯度消失的問題;Alpha dropout降低了全連接層各神經元的依賴性,提高了網絡的泛化能力;余弦退火動態學習率避免了網絡出現過擬合現象,使得本文算法的識別率較高。由表1 可知,在無遮擋情況下,羊的進食、站立、坐臥行為的識別率均達到90%以上,在有遮擋的情況下也能達到85%以上,有遮擋羊只行為識別的準確率稍低的原因是羊只行為部分遮擋嚴重,造成羊行為的特征發生扭曲變化,因此被網絡識別錯誤。實驗結果表明,本文方法能夠完成羊只不同行為的識別,且識別結果較為可靠。
表2 為不同算法對羊只行為識別效果對比,表2 中列舉了3 個典型的卷積神經網絡對羊只行為的識別。由表2 可知,ResNet18 由于網絡中存在殘差結構,對單張圖像的識別速度最快,達到31 fps。而本文提出的方法對單張圖像識別的速度位居第二,達到28 fps。從識別精度方面考慮,本文提出的算法識別效果最優。基于以上實驗結果可知,本文提出的方法能較好地完成羊只行為識別任務。

表2 不同算法下羊只行為識別效果Tab.2 Sheep behaviors recognition effect under different algorithms
本文根據羊只進食、坐臥、站立等不同行為特征,提出了基于改進卷積神經網絡的羊行為識別方法。通過構建卷積核尺寸為3×3 的卷積神經網絡,采用SeLU激活函數增強網絡的表達能力,通過設置丟棄率為0.5 的Alpha dropout丟棄方式降低神經元之間的依賴性,并使用余弦退火學習率對網絡進行動態微調。實驗結果表明,在養殖場環境下,本文構建的卷積神經網絡對羊不同行為的識別準確率均達到90%以上。該模型可以較高質量地完成羊不同行為的識別,有助于提高畜牧管理效率和養殖智能化水平。