王婷婷, 蒼巖, 畢曉君, 何恒翔
(1.哈爾濱工程大學(xué) 信息與通信工程學(xué)院,黑龍江 哈爾濱 150001; 2.哈爾濱工業(yè)大學(xué) 電子與信息工程學(xué)院,黑龍江 哈爾濱 150006)
隨著“網(wǎng)易”、“阿里”、“京東”等互聯(lián)網(wǎng)企業(yè)強(qiáng)勢進(jìn)入農(nóng)業(yè)生產(chǎn)領(lǐng)域,人工智能技術(shù)開始廣泛應(yīng)用于動物養(yǎng)殖領(lǐng)域[1-4]。生豬的體重信息是生豬體況的重要參數(shù)。傳統(tǒng)的生豬體重測量方法是磅秤測量或者懸掛稱重,不僅不能實現(xiàn)體重實時監(jiān)控以實現(xiàn)精細(xì)化飼養(yǎng);而且會造成豬只應(yīng)激反應(yīng),嚴(yán)重影響其生長速度。因此,無接觸式測重方式一直是生豬養(yǎng)殖產(chǎn)業(yè)的一個熱點以及難點問題。目前比較常見的非接觸式體重測量方法多是基于機(jī)器視覺方法。學(xué)者利用視覺圖像分析方法發(fā)現(xiàn)了豬體背部面積與體重參數(shù)之間具有很強(qiáng)的相關(guān)性[5];隨后,證明了豬體背部面積和體高參數(shù)與體重的相關(guān)性最高[6];學(xué)者利用視覺圖像分析方法進(jìn)行了實際生豬體重的測量,并且取得了較好的精度;胡英新等[8]對單體生豬的體重參數(shù)以及體尺參數(shù)進(jìn)行線性回歸分析研究,利用體尺參數(shù)成功預(yù)測出體重數(shù)據(jù)。李卓等[9-10]利用立體視覺方式實現(xiàn)了生豬體尺參數(shù)的測量,通過SPSS軟件處理體尺和體重數(shù)據(jù),建立體重預(yù)估的數(shù)學(xué)模型,其研究重點是如何通過的精準(zhǔn)的體尺參數(shù),包括體長、臀圍、胸圍等參數(shù),分析這些參數(shù)與體重之間的關(guān)系,同時加入品系影響因數(shù),從而實現(xiàn)體重的預(yù)測。論文中利用人工測量的體尺參數(shù)作為模型校準(zhǔn)參數(shù),樣本數(shù)據(jù)量比較少,很難確定精確的模型關(guān)系。深度學(xué)習(xí)算法恰恰能夠在“大數(shù)據(jù)量”的驅(qū)動下,挖掘數(shù)據(jù)的潛在特征,從而實現(xiàn)精準(zhǔn)預(yù)測。
近年來,基于深度學(xué)習(xí)的目標(biāo)檢測算法快速發(fā)展。Girshick等[11]提出R-CNN(regions with CNN features)算法,使用卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)處理目標(biāo)檢測問題,基于數(shù)據(jù)集VOC2012平均準(zhǔn)確率為53.3%。2014年,He等[12]提出了SPPNet,用于解決CNN輸入圖片尺寸不固定的問題,進(jìn)一步推動了基于深度學(xué)習(xí)的目標(biāo)檢測算法的發(fā)展。Girshick[13]又推出了Fast RCNN算法,大幅提升了目標(biāo)檢測的速度。然而,應(yīng)用此類算法進(jìn)行目標(biāo)檢測依然存在一個瓶頸問題,即目標(biāo)候選區(qū)域提取計算量大,候選區(qū)域提取復(fù)雜等問題。針對此問題,Ren等[14]對Fast R-CNN算法進(jìn)行了改進(jìn),將候選區(qū)域提取部分也使用CNN來完成,并與后續(xù)目標(biāo)檢測網(wǎng)絡(luò)參數(shù)共享設(shè)計了Faster R-CNN算法,大大減少了計算量。至此,F(xiàn)aster R-CNN算法成為這一系列算法中最為常用的主流算法。此外,一些研究人員將目標(biāo)檢測問題看成回歸問題,也實現(xiàn)了較好的目標(biāo)檢測效果。2016年,一種新的目標(biāo)檢測方法YOLO(you only look once)使用一個神經(jīng)網(wǎng)絡(luò),直接從整張圖像來測量出邊界框的坐標(biāo)、物體的置信度[15]。在此基礎(chǔ)上,又陸續(xù)推出了YOLOv2[16]和YOLOv3[17],進(jìn)一步提升了網(wǎng)絡(luò)的檢測性能。Liu等[18]提出了一種與YOLO思想一致但效果更好的算法SSD(single shot multibox detector, SSD)。基于深度學(xué)習(xí)的回歸擬合方面,Dai等[19]設(shè)計了一種多線性回歸測量模型,專門用于分析和測量對尺度時序交通數(shù)據(jù)。Lu等[20]提出了一種Lasso和梯度增強(qiáng)混合的回歸模型用于房價的預(yù)測,具有很好的檢測精度。
綜上,基于深度學(xué)習(xí)模型的目標(biāo)檢測算法以及參數(shù)預(yù)測的回歸算法,都具有很高的精度,具有實際應(yīng)用條件。本文算法的實際應(yīng)用背景中,需先通過深度學(xué)習(xí)網(wǎng)絡(luò)實現(xiàn)圖像中目標(biāo)的檢測,將圖片中的生豬目標(biāo)識別出來,即首先完成分類任務(wù),并對目標(biāo)進(jìn)行定位,而后利用深度學(xué)習(xí)網(wǎng)絡(luò)進(jìn)行回歸計算,預(yù)測體重參數(shù)。若采用2個深度學(xué)習(xí)網(wǎng)絡(luò)級聯(lián)結(jié)構(gòu),雖然也可以完成任務(wù),但特征提取層出現(xiàn)冗余,模型結(jié)構(gòu)復(fù)雜度高,訓(xùn)練耗時。針對這一問題,本文提出一個多任務(wù)并行處理的端對端的深度神經(jīng)網(wǎng)絡(luò),能夠同時完成目標(biāo)識別、定位以及參數(shù)測量。目標(biāo)識別與定位網(wǎng)絡(luò)使用聯(lián)合訓(xùn)練方式進(jìn)行訓(xùn)練,與目標(biāo)參數(shù)測量網(wǎng)絡(luò)之間進(jìn)行交替訓(xùn)練,多個任務(wù)之間網(wǎng)絡(luò)參數(shù)獨立學(xué)習(xí)。
本文針對實際應(yīng)用場景,通過將回歸網(wǎng)絡(luò)與Faster R-CNN算法融合,構(gòu)建了一個端對端的多任務(wù)并行處理網(wǎng)絡(luò)結(jié)構(gòu),實現(xiàn)對目標(biāo)的識別、定位和參數(shù)測量。改進(jìn)后的網(wǎng)絡(luò)總體可以劃分為2個部分,一是原始Faster R-CNN基本結(jié)構(gòu),它包含2個輸出分別為目標(biāo)候選窗口分類和窗口坐標(biāo)偏移量回歸;另一個是新添加的回歸網(wǎng)絡(luò)層,輸出的是目標(biāo)的參數(shù)歸一化測量值。目標(biāo)的參數(shù)回歸部分網(wǎng)絡(luò)與Faster R-CNN網(wǎng)絡(luò)通過2個全連接層并行連接,構(gòu)成了一個端對端的多個任務(wù)處理的網(wǎng)絡(luò)。具體改進(jìn)后的網(wǎng)絡(luò)如圖1所示。
圖1 改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Improved network structure figure
原始Faster R-CNN網(wǎng)絡(luò)包含3個部分,分別為基礎(chǔ)特征提取網(wǎng)絡(luò)、候選區(qū)域生成網(wǎng)絡(luò)(region proposal networks,RPN)和Fast R-CNN輸出網(wǎng)絡(luò)。其網(wǎng)絡(luò)框架如圖2所示。
圖2 Faster R-CNN 網(wǎng)絡(luò)框架Fig.2 The framework of Faster R-CNN network
回歸網(wǎng)絡(luò)分為特征提取部分和回歸輸出2個部分網(wǎng)絡(luò)。其具體框架如圖3所示。
圖3 回歸網(wǎng)絡(luò)基本框架Fig.3 The framework of the regression network
2個網(wǎng)絡(luò)均需要進(jìn)行特征提取,共享2個部分網(wǎng)絡(luò)的特征提取網(wǎng)絡(luò)層可以減少網(wǎng)絡(luò)需要訓(xùn)練的參數(shù),且可以將2個網(wǎng)絡(luò)通過特征提取網(wǎng)絡(luò)層的共享而結(jié)合成一個統(tǒng)一的網(wǎng)絡(luò)。原始Faster R-CNN網(wǎng)絡(luò)經(jīng)過RPN網(wǎng)絡(luò)處理后可以得到目標(biāo)的大致候選區(qū)域,這些候選區(qū)域經(jīng)過ROI(region of interesting)池化處理后得到固定尺寸為7×7×512的特征向量。每個候選區(qū)域的特征向量使用ReLU函數(shù)和2個全連接層激活處理后,連接3個并行的全連接層分別輸出目標(biāo)的類別置信度、定位框坐標(biāo)的偏移量和目標(biāo)的參數(shù)歸一化測量值。其中,新添加的分支是一個簡單的回歸網(wǎng)絡(luò),具體通過一個全連接層與Sigmoid函數(shù)結(jié)合的方式實現(xiàn),全連接層和Sigmoid函數(shù)輸出神經(jīng)元個數(shù)均設(shè)置為1。具體改進(jìn)部分的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。通過添加這一分支,擴(kuò)展了Faster R-CNN算法的功能,使網(wǎng)絡(luò)可以對每一個候選區(qū)域進(jìn)行進(jìn)一步的參數(shù)測量,解決了一個圖像中有多個目標(biāo)時的參數(shù)測量問題。
圖4 改進(jìn)部分的網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.4 Image of improved partial network structure
為了使網(wǎng)絡(luò)測量值與目標(biāo)的參數(shù)的真實標(biāo)簽一一對應(yīng),需要在圖像真實參數(shù)標(biāo)簽輸入到網(wǎng)絡(luò)訓(xùn)練之前對其進(jìn)行歸一化處理,使其映射到[0,1],具體為:
(1)
參數(shù)測量值為網(wǎng)絡(luò)輸出層測量值經(jīng)過反歸一化計算所得的數(shù)值:
(2)
與Faster R-CNN算法一樣,當(dāng)真實標(biāo)簽與測量候選區(qū)域的IOU(intersection over union)至少為0.5時,認(rèn)為ROI是正例,目標(biāo)的參數(shù)測量的損失函數(shù)只針對正例的ROI進(jìn)行計算。原始Faster R-CNN目標(biāo)檢測的損失函數(shù)定義不變[8],新添加的回歸測量分支的損失函數(shù)定義為[21]:
(3)
本文所提出網(wǎng)絡(luò)的輸入是一幅圖像,目標(biāo)類別、位置和參數(shù)的測量值是網(wǎng)絡(luò)的輸出。通過將目標(biāo)識別和目標(biāo)定位結(jié)合一起,利用聯(lián)合訓(xùn)練方式進(jìn)行權(quán)重參數(shù)更新。 目標(biāo)參數(shù)測量任務(wù),則作為一個單獨的任務(wù)使用獨立的優(yōu)化器優(yōu)化。從整個網(wǎng)絡(luò)表現(xiàn)上看,訓(xùn)練方式為交替訓(xùn)練方式。但是從內(nèi)部任務(wù)來看,目標(biāo)檢測任務(wù)使用聯(lián)合訓(xùn)練方式,其損失函數(shù)繼承了Faster R-CNN的結(jié)構(gòu)[21]:
(4)
式中:加權(quán)求和的2項分別為交叉熵?fù)p失函數(shù)和SmoothL1損失函數(shù),分別對應(yīng)目標(biāo)識別和目標(biāo)定位框預(yù)測任務(wù)。λ為2個損失函數(shù)的平衡參數(shù),依據(jù)經(jīng)驗設(shè)置為10。
本文目標(biāo)參數(shù)測量網(wǎng)絡(luò)損失函數(shù)為歐氏距離損失函數(shù)。交替訓(xùn)練過程中,每次優(yōu)化只針對當(dāng)前的學(xué)習(xí)任務(wù),而不考慮另一個任務(wù),故本文多個任務(wù)的整體訓(xùn)練方式如圖5所示,是聯(lián)合訓(xùn)練方式與交替訓(xùn)練方式的混合訓(xùn)練方法。
圖5 改進(jìn)網(wǎng)絡(luò)整體訓(xùn)練方式Fig.5 Training scheme of improved network
原始Faster R-CNN參數(shù)利用Momentum優(yōu)化參數(shù),在利用該優(yōu)化器對本文網(wǎng)絡(luò)進(jìn)行測試的過程中發(fā)現(xiàn)目標(biāo)參數(shù)測量網(wǎng)絡(luò)長時間不收斂,預(yù)測相對誤差較大,因此本文嘗試使用Adam優(yōu)化器。它針對不同的參數(shù)計算不同的自適應(yīng)學(xué)習(xí)率,每一次迭代學(xué)習(xí)率都有確定范圍,參數(shù)比較平穩(wěn),所需內(nèi)存資源少,收斂速度快,是目前最好的優(yōu)化算法。具體為:
mt=μmt-1+(1-μ)gt
(5)
(6)
(7)
(8)
(9)
網(wǎng)絡(luò)參數(shù)優(yōu)化過程如下:
(10)
(11)
式中:β1為一階動量衰減系數(shù);β0為二階動量衰減系數(shù);α為步長;θ為模型參數(shù);ε為網(wǎng)絡(luò)模糊因子。本文使用優(yōu)化器的默認(rèn)參數(shù)為:
β1=0.9,β2=0.999,ε=1×10-8
(12)
在數(shù)據(jù)和網(wǎng)絡(luò)參數(shù)都相同的條件下,對比Momentum和Adam這2種優(yōu)化器的目標(biāo)參數(shù)測量損失函數(shù)變化曲線,如圖6所示。從圖中可以看出,Adam優(yōu)化器收斂速度比Momentum更快,且收斂平穩(wěn),損失函數(shù)一直在收斂數(shù)值附近輕微波動,并且收斂數(shù)值較小。測量值與真實值互相之間接近程度較高,Adam優(yōu)化器對本文網(wǎng)絡(luò)優(yōu)化效果更好。
圖6 2種優(yōu)化器下的損失函數(shù)變化Fig.6 The loss function of two optimizer
本實驗所用數(shù)據(jù)為使用圖森科技3D攝像頭在吉林省某豬場現(xiàn)場采集的生豬背部深度圖像,采集周期為1個月。本文共標(biāo)注圖像12 718張,其中訓(xùn)練集以及驗證集圖像共有9 989張,測試集圖像2 729張,數(shù)據(jù)劃分比例為8∶2,將劃分好的圖像索引分別寫入trainval.txt和test.txt文檔中,圖像索引只包含圖像名稱,不包含圖像擴(kuò)展名。
1)本文所提出的網(wǎng)絡(luò)對圖像輸入大小沒有任何限制,輸入圖像的大小不影響參數(shù)測量精度。輸入圖像經(jīng)過基礎(chǔ)特征提取網(wǎng)絡(luò)后,圖像尺寸進(jìn)行歸一化處理,長邊設(shè)置為800 pixels,短邊設(shè)置為600 pixels。
2)本實驗增加了數(shù)據(jù)增強(qiáng)以防止網(wǎng)絡(luò)發(fā)生欠擬合現(xiàn)象。本文采用的方法是對輸入圖像進(jìn)行水平鏡像翻轉(zhuǎn),其中,鏡像的對稱軸是圖像的中心線。經(jīng)過數(shù)據(jù)增強(qiáng)操作后,數(shù)據(jù)集數(shù)量較原始數(shù)據(jù)集增長一倍,變?yōu)?9 978張,大大增加了訓(xùn)練圖像的數(shù)量。由于對圖像進(jìn)行翻轉(zhuǎn)時,相應(yīng)的感興趣區(qū)域也進(jìn)行相同的翻轉(zhuǎn)操作,因此翻轉(zhuǎn)后的圖像目標(biāo)候選區(qū)域能夠與標(biāo)簽依然一一對應(yīng)。
3)訓(xùn)練圖像中目標(biāo)的體重參數(shù)范圍為159.27~167.27 kg。在本文提出的網(wǎng)絡(luò)訓(xùn)練之前,將目標(biāo)的體重標(biāo)注信息進(jìn)行歸一化處理,將其映射到[0,1],與Sigmoid函數(shù)構(gòu)成一一對應(yīng)關(guān)系。
4)網(wǎng)絡(luò)初始化參數(shù)。待測圖像分為2個類別,分別為“pig”和“pig_bad”,算法默認(rèn)的背景類為“background”,因此本實驗需要進(jìn)行3個類別的目標(biāo)分類識別。將目標(biāo)分類識別網(wǎng)絡(luò)的輸出層類別參數(shù)設(shè)置為3,定位框坐標(biāo)的輸出單元個數(shù)設(shè)置為3×4,體重參數(shù)測量輸出層的神經(jīng)元個數(shù)設(shè)置為1,輸出體重參數(shù)的歸一化數(shù)值。訓(xùn)練網(wǎng)絡(luò)使用ImageNet預(yù)訓(xùn)練的網(wǎng)絡(luò)模型進(jìn)行遷移學(xué)習(xí)微調(diào)操作。網(wǎng)絡(luò)只使用了VGG16的前13層網(wǎng)絡(luò)結(jié)構(gòu),故只遷移預(yù)訓(xùn)練網(wǎng)絡(luò)的前13層參數(shù),跳過其他層參數(shù)。其中,底層特征提取層參數(shù)不進(jìn)行更新,具體指的是網(wǎng)絡(luò)的前4層(conv1_1、conv1_2、conv2_1和conv2_2)的參數(shù)固定,其他層參數(shù)根據(jù)本實驗圖像數(shù)據(jù)內(nèi)容進(jìn)行學(xué)習(xí)微調(diào),通過此方式進(jìn)行訓(xùn)練可以有效減少總體需要訓(xùn)練的參數(shù),RPN網(wǎng)絡(luò)層以及Fast RCNN網(wǎng)絡(luò)卷積層參數(shù)使用零均值、標(biāo)準(zhǔn)差為0.01的高斯函數(shù)隨機(jī)初始化。
5)網(wǎng)絡(luò)訓(xùn)練相關(guān)參數(shù)設(shè)置。每批次送入網(wǎng)絡(luò)訓(xùn)練的數(shù)據(jù)量為256。使用9 989張深度訓(xùn)練圖像,訓(xùn)練迭代參數(shù)設(shè)置為20 000次,將初始學(xué)習(xí)率步長設(shè)置為0.000 1,經(jīng)過4 000次訓(xùn)練,學(xué)習(xí)率依次衰減為原來學(xué)習(xí)率的1/10。網(wǎng)絡(luò)訓(xùn)練利用GPU處理模式處理。網(wǎng)絡(luò)其他參數(shù)從原始Faster R-CNN網(wǎng)絡(luò)遷移過來。
6)網(wǎng)絡(luò)總體訓(xùn)練方式設(shè)置為交替訓(xùn)練。首先進(jìn)行特征提取完成目標(biāo)檢測任務(wù)和目標(biāo)體重參數(shù)測量2個任務(wù)的并行前向傳播,隨后共享特征提取部分網(wǎng)絡(luò)參數(shù),目標(biāo)檢測網(wǎng)絡(luò)進(jìn)行反向傳播時,目標(biāo)體重參數(shù)測量網(wǎng)絡(luò)依然進(jìn)行前向傳播。反之亦然,總體上,目標(biāo)檢測任務(wù)和體重參數(shù)測量任務(wù)表現(xiàn)為交替進(jìn)行,反向傳播微調(diào)整體網(wǎng)絡(luò)權(quán)重參數(shù)。
改進(jìn)網(wǎng)絡(luò)的目標(biāo)檢測部分損失函數(shù)以及目標(biāo)體重參數(shù)測量部分的損失函數(shù),表征測量值與真實值之間的接近程度。經(jīng)過20 000次迭代,2個任務(wù)的損失函數(shù)均達(dá)到1×10-10數(shù)量級,本文提出的網(wǎng)絡(luò)已經(jīng)成功收斂。對訓(xùn)練好的網(wǎng)絡(luò),利用測試圖片進(jìn)行測試。測試集中包含2 729張圖像,用來驗證模型性能。為了證明本文所提出的網(wǎng)絡(luò)具有很好的泛化性,測試圖片與訓(xùn)練圖片之間沒有重復(fù)。
為了更清晰地描述體重測量值與真實值之間的接近程度,本文隨機(jī)選取1 000張圖像的體重測量數(shù)值,體重參數(shù)測量誤差曲線,如圖7所示。圖中實線表示測量的絕對誤差,虛線表示測量的相對誤差。圖7表明,體重測量的絕對誤差大部分小于0.8 kg,僅有少數(shù)測量誤差較大,但也小于3 kg。測量結(jié)果表明,本網(wǎng)絡(luò)的預(yù)測體重的相對誤差較低,在0.5%附近有輕微波動。通過計算2 729張測試圖像的測量結(jié)果,絕對誤差的平均值為0.644 kg,相對誤差的平均值為0.374%。實驗結(jié)果表明本文所提出網(wǎng)絡(luò)的預(yù)測體重參數(shù)與實際體重真實值相近,模型測量精度較高。
圖7 測量誤差變化Fig.7 Image of measurement error variation
圖8為本文所提出的網(wǎng)絡(luò)輸出的結(jié)果圖,其中類別為“pig”表示待測對象的類別,數(shù)值顯示測量結(jié)果。無論獲取到的待測對象身體角度如何變化,本文所提出的網(wǎng)絡(luò)均能準(zhǔn)確的檢測出目標(biāo)類別,并對其定位,以及預(yù)測出目標(biāo)的體重參數(shù)值。圖中所顯示的矩形框左上角區(qū)域表示待測對象的類別、及其概率,以及相應(yīng)的體重參數(shù)測量值。本文所提出的網(wǎng)絡(luò)檢測結(jié)果的mAP為0.909,通過與真實數(shù)值對比可以發(fā)現(xiàn)本文所提出的網(wǎng)絡(luò)體重參數(shù)測量較準(zhǔn)確。
圖8 類別為“pig”的樣本測試結(jié)果Fig.8 The test results of sample for category “pig”
1)本文通過改進(jìn)Faster R-CNN目標(biāo)檢測算法的網(wǎng)絡(luò)結(jié)構(gòu),擴(kuò)展了網(wǎng)絡(luò)的功能,成功設(shè)計并實現(xiàn)了2個網(wǎng)絡(luò)的融合并使網(wǎng)絡(luò)兼具目標(biāo)識別、定位和相關(guān)參數(shù)測量等多個任務(wù)同時并行處理的功能。
2)提出使用整體交替訓(xùn)練的方式,可以實現(xiàn)網(wǎng)絡(luò)的快速收斂,同時將改進(jìn)的Faster R-CNN算法應(yīng)用于限位欄條件下單個豬體的體重的測量。
3)實驗結(jié)果表明,本文改進(jìn)網(wǎng)絡(luò)在限位欄有遮擋的條件下,目標(biāo)體重參數(shù)測量的平均絕對誤差為0.644 kg,相對平均誤差為0.374%。測量效果好,可以滿足實際應(yīng)用的精度要求。