李章輝, 王天一, 李遠(yuǎn)征
(貴州大學(xué)大數(shù)據(jù)與信息工程學(xué)院, 貴陽 550025)
隨著智能化養(yǎng)殖[1]的快速發(fā)展,智能化養(yǎng)殖場建設(shè)和畜牧養(yǎng)殖精準(zhǔn)化逐漸成為高效管理的理念。高效的養(yǎng)殖場管理需要精準(zhǔn)化到個(gè)體的身份信息,因此收集和識別個(gè)體信息變得尤為重要。 在智能化養(yǎng)殖過程中,為每只羊建立個(gè)體檔案有利于對養(yǎng)殖場精準(zhǔn)化飼養(yǎng)和實(shí)時(shí)監(jiān)控每只羊的身體健康信息提供了前提條件。 傳統(tǒng)的養(yǎng)殖場對動(dòng)物的個(gè)體識別主要靠人工識別,但在大型養(yǎng)殖場,僅靠人工無法做到有效的個(gè)體識別。 由于智能化養(yǎng)殖具有效率高、識別準(zhǔn)確以及人力成本低等優(yōu)勢,因此智能化養(yǎng)殖正在逐步取代傳統(tǒng)化養(yǎng)殖。
智能化養(yǎng)殖減少了人工在大規(guī)模養(yǎng)殖中管理不當(dāng)?shù)葐栴},涉及到個(gè)體識別[2]、目標(biāo)檢測[3]等領(lǐng)域。在動(dòng)物個(gè)體識別領(lǐng)域,韓丁等[4]提出了將空間變換網(wǎng)絡(luò)引入VGGNet 網(wǎng)絡(luò),對羊面部表情數(shù)據(jù)集的實(shí)驗(yàn)。 宋一凡等[5]對比和總結(jié)了以牛只面部、軀干和口鼻3 個(gè)部位特征的非接觸式機(jī)器視覺[6]識別方法的研究成果。 馬娜等[7]設(shè)計(jì)了卷積層-池化層-卷積層-池化層2 層卷積神經(jīng)網(wǎng)絡(luò)[8]模型,對豬個(gè)體身份進(jìn)行識別。 拉毛杰等[9]使用卷積神經(jīng)網(wǎng)絡(luò)改進(jìn)了畜牧業(yè)動(dòng)物圖像的識別準(zhǔn)確率。 在動(dòng)物目標(biāo)檢測領(lǐng)域,魏斌等[10]基于深度學(xué)習(xí)模型的羊臉檢測效果較為理想,而羊臉識別工作在正面羊臉上取得了較高的準(zhǔn)確率。 張宏鳴等[11]提出通過添加長短距離語義增強(qiáng)模塊進(jìn)行多尺度融合,結(jié)合Mudeep 重識別模型實(shí)現(xiàn)了肉牛多目標(biāo)跟蹤。 張宏鳴等[12]提出了一種基于YOLOv3 模型和卷積神經(jīng)網(wǎng)絡(luò)的多目標(biāo)肉牛進(jìn)食行為識別方法,為養(yǎng)殖場中對動(dòng)物行為非接觸式檢測提供了新的途徑。 何東?。?3]提出基于最大連通區(qū)域的目標(biāo)循環(huán)搜索環(huán)境建模、目標(biāo)檢測算法,提高了識別犢牛動(dòng)作的正確率(如:躺、站、走、跳等)。
本文在GoogLeNet 網(wǎng)絡(luò)中引入注意力機(jī)制模塊組成SE-GoogLeNet,將有用信號進(jìn)行篩選放大,對dropout 參數(shù)進(jìn)行調(diào)整。 在訓(xùn)練過程中,調(diào)整學(xué)習(xí)率大小以及對優(yōu)化器參數(shù)進(jìn)行優(yōu)化,提高了對復(fù)雜背景下羊的識別準(zhǔn)確率。 實(shí)驗(yàn)表明,改進(jìn)后的SEGoogLeNet 相比改進(jìn)前的模型,驗(yàn)證集精度提高了2.2%,并利用采集羊圖像對訓(xùn)練好的模型進(jìn)行了評價(jià)。
在一些典型的深度學(xué)習(xí)網(wǎng)絡(luò)中,大都存在著網(wǎng)絡(luò)訓(xùn)練收斂慢、訓(xùn)練時(shí)間長、容易出現(xiàn)梯度消失和梯度爆炸等現(xiàn)象。 為避免上述問題發(fā)生,在GoogLeNet網(wǎng)絡(luò)中提出了Inception 模塊,網(wǎng)絡(luò)深度有22 層,結(jié)構(gòu)如圖1 所示。 GoogLeNet 網(wǎng)絡(luò)采取全局均值池化策略,代替全連接層以減少參數(shù),并增加了兩個(gè)輔助分類器幫助訓(xùn)練,將Inception(4a)和Inception(4d)模塊的輸出用作分類,并按一個(gè)較小的權(quán)重(0.3)加到最終分類結(jié)果中,不僅達(dá)到了模型融合的效果,同時(shí)給網(wǎng)絡(luò)增加了反向傳播的梯度信號,也提供了額外的正則化,有益于網(wǎng)絡(luò)的訓(xùn)練。
圖1 GoogleNet 網(wǎng)絡(luò)模型圖Fig. 1 GoogleNet network model architecture
Inception 模塊中存在濾波器,且濾波器的輸出合并構(gòu)成下一層的輸入。 具體來說,Inception 模塊利用1×1 卷積核降維,再利用3×3、5×5 卷積核進(jìn)行卷積操作,將輸入的特征矩陣分別與這4 個(gè)分支運(yùn)算并得到4 個(gè)輸出,輸出在深度上拼接得到最終的輸出(使用Padding 填充讓4 個(gè)分支輸出能在寬度和高度上保持一致)。 使用不同大小卷積核融合了不同尺度的特征信息,增加了網(wǎng)絡(luò)的寬度以及網(wǎng)絡(luò)對尺度的適應(yīng)性,使得卷積網(wǎng)絡(luò)在特征提取過程中得到了不同大小的感受野,使網(wǎng)絡(luò)在訓(xùn)練過程中對不同大小個(gè)體有了更強(qiáng)的識別能力。 如圖2 所示,Inception 模塊結(jié)構(gòu)增加了網(wǎng)絡(luò)的寬度,可以達(dá)到更好的識別效果。 將網(wǎng)絡(luò)由深變寬,避免了網(wǎng)絡(luò)過深出現(xiàn)梯度消失和模型退化的問題。
圖2 Inception 模塊Fig. 2 Inception module
相比于傳統(tǒng)的Inception 模塊,GoogLeNet 網(wǎng)絡(luò)提出的Inception 模塊在分支2、3、4 中添加了1×1的卷積層,這3 個(gè)1×1 的卷積核是為了對通道方向上進(jìn)行降維,減少參數(shù)量。 如圖3 所示,以Inception(3a)模塊中1×1 卷積后連接5×5 卷積分支為例計(jì)算參數(shù)量,使用1×1 卷積操作的模型參數(shù)僅為未使用1×1 卷積模型參數(shù)的12.9%。
圖3 Inception 模塊參數(shù)量對比Fig. 3 Inception module parameter comparison
雖然GoogLeNet 網(wǎng)絡(luò)層數(shù)比較深,有較強(qiáng)的特征提取能力,但本文研究的是在養(yǎng)殖場環(huán)境下的羊個(gè)體識別,在識別過程中會(huì)遭受到不同程度噪聲的干擾,這些噪聲的干擾也會(huì)隨著網(wǎng)絡(luò)的訓(xùn)練進(jìn)行傳遞,對識別個(gè)體精度造成不利的影響。
本文提出的改進(jìn)GoogLeNet 網(wǎng)絡(luò)結(jié)構(gòu)如圖4 所示。 該網(wǎng)絡(luò)在主分類器末的平均池化層后引入了注意力機(jī)制模塊,以改變每個(gè)通道的權(quán)重,將有用的特征進(jìn)行放大,去除池化后學(xué)習(xí)到冗余特征信息。 為了防止過擬合現(xiàn)象的發(fā)生,將主網(wǎng)絡(luò)中隨機(jī)失活(dropout)層隨機(jī)失活神經(jīng)元由40%增大至70%。
圖4 SE-GoogLeNet 網(wǎng)絡(luò)結(jié)構(gòu)圖Fig. 4 SE-GoogLeNet network structure diagram
注意力機(jī)制結(jié)構(gòu)如圖5 所示,該機(jī)制是對輸入進(jìn)來的特征層進(jìn)行壓縮操作,每一層進(jìn)行平均池化操作得到本層的參數(shù)。 池化操作是在水平和垂直兩個(gè)維度進(jìn)行,針對于C個(gè)通道得到C個(gè)平均池化后的輸出,接著進(jìn)行兩次全連接層,對輸出結(jié)果進(jìn)行一個(gè)Sigmoid 激活函數(shù)處理,將輸出的值固定在0 ~1之間,得到每一個(gè)通道的權(quán)值,將此權(quán)值乘以輸入進(jìn)來的每個(gè)特征層,得到最終輸出。 壓縮操作函數(shù)公式如式(1)所示:
圖5 注意力機(jī)制結(jié)構(gòu)圖Fig. 5 Structure diagram of attention mechanism
其中,Zc表示輸出特征層;Fsq表示壓縮操作函數(shù);H、W表示特征圖的寬和高;i、j表示特征圖上的坐標(biāo)位置。
由于本文采集到的數(shù)據(jù)集較少,易發(fā)生過擬合現(xiàn)象,因此對主分類器中的隨機(jī)失活(dropout)層隨機(jī)失活從40%增大至70%。 在網(wǎng)絡(luò)訓(xùn)練過程中,從中隨機(jī)丟棄一些隱藏單元,相當(dāng)于在一個(gè)大的模型中隨機(jī)抽取出一個(gè)小的模型。 由于隨機(jī)失活的過程是動(dòng)態(tài)的,每次訓(xùn)練過程中隨機(jī)失活的神經(jīng)元都有可能是不相同的。 也就是說只訓(xùn)練當(dāng)前子模型使用過的參數(shù),而對于未使用過的參數(shù)不進(jìn)行更新。 這些抽取出來的子模型共享參數(shù),最終相當(dāng)于訓(xùn)練了很多的子模型。 在進(jìn)行預(yù)測時(shí),綜合所有子模型的預(yù)測結(jié)果,很好的解決了過擬合的問題。 具體公式如式(2)所示:
其中,Bernoulli(p) 是指伯努利分布。 以一個(gè)概率為p的伯努利分布,隨機(jī)生成與節(jié)點(diǎn)數(shù)相同的0、1 值,p就是每個(gè)神經(jīng)元被保留下的概率。
在經(jīng)過伯努利分布計(jì)算后得出概率p后,對輸入的神經(jīng)元重新計(jì)算進(jìn)行隨機(jī)失活。 式3 中,是第l層的輸入;是第l層的輸出;是第l層的權(quán)重矩陣;f是激活函數(shù)。
針對多分類問題,主分類器和副分類器的交叉熵?fù)p失函數(shù)表達(dá)式如式(4)所示:
其中,M表示類別的數(shù)量;yic表示符號函數(shù)(0或1),若樣本i的真實(shí)類別等于c取1,否則取0;Pic表示觀測樣本,i屬于類別c的預(yù)測概率。
SE-GoogLeNet 網(wǎng)絡(luò)采用一個(gè)主分類器和兩個(gè)輔助分類器進(jìn)行輸出,用定義好的損失函數(shù)分別求得3 個(gè)預(yù)測分類器的預(yù)測與真實(shí)標(biāo)簽之間的損失,將主分類器的損失值與兩個(gè)副分類器損失值的0.3倍相加得到總損失值。 總損失值計(jì)算如式(5)所示:
其中,Loss表示總損失;Loss0 表示主分類器損失;Loss1、Loss2 表示副分類器損失。
本文中數(shù)據(jù)均來自貴州省某羊養(yǎng)殖場的拍攝視頻,分別對40 只羊進(jìn)行了視頻拍攝(分辨率為1 920×1 080)。 經(jīng)過Adobe Premiere Pro 軟件進(jìn)行視頻抽幀,對視頻中羊的全身、頭部等突出的個(gè)體特征進(jìn)行圖像篩選,并將不同成長期的羊只混合在一起,共計(jì)抽取600 張樣本圖像。 部分圖像示例如圖6 所示。
圖6 羊部分圖片數(shù)據(jù)集Fig. 6 Examples of sheep data set
由于在網(wǎng)絡(luò)訓(xùn)練中需要大量的數(shù)據(jù)來達(dá)到更好的訓(xùn)練效果、提高網(wǎng)絡(luò)檢測的精度,但由于采集到的圖片數(shù)量有限,將對抽取的600 張圖片進(jìn)行數(shù)據(jù)增強(qiáng),增加數(shù)據(jù)數(shù)量,防止在網(wǎng)絡(luò)訓(xùn)練中出現(xiàn)過擬合的現(xiàn)象。 本文采用的數(shù)據(jù)增強(qiáng)主要是對圖片進(jìn)行多個(gè)角度的旋轉(zhuǎn)、對比度的調(diào)整、亮度的調(diào)整、隨機(jī)平移等方式對源圖片進(jìn)行數(shù)據(jù)擴(kuò)充,數(shù)據(jù)擴(kuò)充為原始圖片的7 倍數(shù)量,共計(jì)4 200 張羊的圖像。
本文在訓(xùn)練過程中將數(shù)據(jù)按照8 ∶2 的比例劃分為訓(xùn)練集和驗(yàn)證集。 考慮到每張照片尺寸大小的原因,使用transforms 工具包將所有的樣本圖像進(jìn)行隨機(jī)裁剪,設(shè)置大小為224×224 像素,并將其進(jìn)行均值和方差都為0.5 的標(biāo)準(zhǔn)化處理,以便高效的對網(wǎng)絡(luò)進(jìn)行訓(xùn)練。 處理后訓(xùn)練集和驗(yàn)證集的數(shù)據(jù)量見表1。
表1 數(shù)據(jù)集統(tǒng)計(jì)Tab. 1 Statistics of dataset
本次實(shí)驗(yàn)是在Python3.9、Pytorch1.11 的環(huán)境下進(jìn)行,采用RTX2070 加速訓(xùn)練,GPU 顯存為8 GB,CPU:AMD Ryzen 5 3600,CPU 基頻為3.49 GHZ。
在深度學(xué)習(xí)網(wǎng)絡(luò)訓(xùn)練中,超參數(shù)選擇的好壞不僅和模型自身有關(guān),還和軟硬件的配置相關(guān)。 本實(shí)驗(yàn)在進(jìn)行超參數(shù)調(diào)整之后,利用改進(jìn)的SE -GoogLeNet 模型進(jìn)行訓(xùn)練時(shí),采用批量訓(xùn)練方式對訓(xùn)練集進(jìn)行隨機(jī)打亂,驗(yàn)證集保持不變,Batch_size的大小設(shè)置為16,訓(xùn)練周期為60。 采用Adam 優(yōu)化器訓(xùn)練,eps值設(shè)為1e-5,初始學(xué)習(xí)率為0.000 08。
為了了解不同優(yōu)化算法[14]對SE-GoogLeNet 網(wǎng)絡(luò)模型性能的影響,本文選擇Adam、SGD、RMSprop 3 種算法在相同的實(shí)驗(yàn)環(huán)境下進(jìn)行訓(xùn)練,結(jié)果見表2。 由表2 中數(shù)據(jù)可見,Adam 的訓(xùn)練時(shí)長最短,且精度最高,相比RMSprop 算法、SGD 算法高出了1.4%、29.9%。 因此,本文采用Adam 優(yōu)化算法進(jìn)行訓(xùn)練。
表2 不同優(yōu)化算法下的模型精度Tab. 2 Model accuracy under different optimization algorithms
在采集的羊圖像數(shù)據(jù)集上進(jìn)行訓(xùn)練,保證了每個(gè)模型在相同實(shí)驗(yàn)環(huán)境下完成訓(xùn)練。 在訓(xùn)練過程中,每個(gè)訓(xùn)練周期后都會(huì)對模型的精確度進(jìn)行驗(yàn)證并保存數(shù)據(jù)。 引入注意力機(jī)制后,模型的識別準(zhǔn)確率得到了較大的提升,但是模型的大小增長非常小,進(jìn)一步顯示出模型性能的優(yōu)越性。 改進(jìn)后的網(wǎng)絡(luò)與3 種經(jīng)典分類網(wǎng)絡(luò)在羊只數(shù)據(jù)集上的準(zhǔn)確率和模型占用內(nèi)存容量對比見表3。
表3 模型準(zhǔn)確率和模型占用內(nèi)存容量對比Tab. 3 Comparison of model accuracy and model memory capacity
本文將數(shù)據(jù)集在GoogLeNet、改進(jìn)后SE -GoogLeNet 上的驗(yàn)證集準(zhǔn)確率的曲線展示如圖7 所示。
圖7 改進(jìn)前與改進(jìn)后GoogLeNet 網(wǎng)絡(luò)在羊圖像上的驗(yàn)證集精確度與損失值曲線對比圖Fig. 7 Comparison of validation set accuracy and loss value curves of GoogLeNet network on sheep images before and after improvement
由圖7 可見不同模型之間的曲線趨勢,SEGoogLeNet 代表本文改進(jìn)后的模型曲線。 模型學(xué)習(xí)羊只身體特征,不斷提高對個(gè)體的分類能力。 本文構(gòu)建的基于注意力機(jī)制的SE-GoogLeNet 模型準(zhǔn)確率更高,分類效果更好(如圖7(a))。 其主要原因是:一方面在于Inception 模塊將不同大小個(gè)體學(xué)習(xí)到的特征信息進(jìn)行多尺度融合(Multiscale fusion),Inception 模塊有不同尺寸大小的卷積核進(jìn)行提取特征,并將這些特征在深度上進(jìn)行融合,進(jìn)一步提高了模型的特征提取能力;另一方面在于加入注意力機(jī)制將有用信息的權(quán)重增強(qiáng),削弱了噪聲的干擾,因而提高了模型最終的分類能力。
Loss損失函數(shù)在模型訓(xùn)練中是一個(gè)重要參數(shù),可以通過其下降趨勢反映訓(xùn)練效果的好壞。 在訓(xùn)練網(wǎng)絡(luò)過程中,不斷地將數(shù)據(jù)傳入到網(wǎng)絡(luò)中進(jìn)行迭代,經(jīng)過正向傳播后得出一個(gè)預(yù)測值,將預(yù)測值與實(shí)際標(biāo)簽做出對比得到一個(gè)損失值,將得到的損失值進(jìn)行反向傳播來修正權(quán)重的誤差,使得損失函數(shù)不斷地減小,依次循環(huán),訓(xùn)練精度將會(huì)不斷的得到提高。由不同模型在訓(xùn)練時(shí)的損失函數(shù)對比(圖7(b))可以看出,Loss值在第55 個(gè)周期時(shí)已經(jīng)收斂,達(dá)到了模型精度最高且泛化性能最好點(diǎn)的值。
利用SE-GoogLeNet 網(wǎng)絡(luò)模型訓(xùn)練得到的權(quán)重對隨機(jī)選取的3 只羊圖像進(jìn)行預(yù)測,預(yù)測結(jié)果均達(dá)到了100%準(zhǔn)確率,說明改進(jìn)后的SE-GoogLeNet能較好的對羊只個(gè)體識別,羊只預(yù)測結(jié)果如圖8 所示。
圖8 羊只預(yù)測結(jié)果Fig. 8 Prediction result of sheep
本文針對目前大規(guī)模羊場養(yǎng)殖中存在的羊個(gè)體識別的效率低、人工依賴性較大等問題,提出了基于結(jié)合注意力機(jī)制的GoogLeNet 網(wǎng)絡(luò)改進(jìn)的SEGoogLeNet 模型,在網(wǎng)絡(luò)中引入注意力機(jī)制模塊用來減少噪聲影響,提高了模型的精度;同時(shí),在相同實(shí)驗(yàn)環(huán)境下研究了不同優(yōu)化算法對模型性能的影響。 實(shí)驗(yàn)結(jié)果表明,改進(jìn)后的SE-GoogLeNet 模型在對40 只羊的驗(yàn)證集準(zhǔn)確率達(dá)到了94.5%,相對于原GoogLeNet 模型精確率上升了2.2%,改進(jìn)后的SEGoogLeNet 模型相比于其它主流算法具有較高的準(zhǔn)確率,在智能化養(yǎng)殖中將會(huì)有很好的前景。