丁奇安 劉龍申 陳 佳 太 猛 沈明霞
(1.南京農(nóng)業(yè)大學(xué)工學(xué)院, 南京 210031; 2.南京農(nóng)業(yè)大學(xué)人工智能學(xué)院, 南京 210031;3.江蘇智慧牧業(yè)裝備科技創(chuàng)新中心, 南京 210031)
我國養(yǎng)豬業(yè)向規(guī)模化、集約化發(fā)展,生豬養(yǎng)殖產(chǎn)業(yè)總產(chǎn)值在整個畜牧業(yè)所占比重最高[1]。將人工智能技術(shù)引入生豬養(yǎng)殖管理,有利于實現(xiàn)精細化養(yǎng)殖,提高生產(chǎn)質(zhì)量與動物福利[2]。哺乳期作為豬只生命周期的第一階段,能夠影響豬只后續(xù)生長狀態(tài),實現(xiàn)智能化仔豬目標檢測能夠為進一步探究豬只個體行為,例如躺臥[3]、爬跨[4]、攻擊[5]、采食[6]、飲水[7]、運動[8]和個體跟蹤[9]等任務(wù)奠定技術(shù)基礎(chǔ)。
采用形態(tài)學(xué)[10-11]方式進行仔豬目標檢測對設(shè)備要求低,但仔豬目標為非剛性,易產(chǎn)生尺度和形態(tài)變化,因此需要為目標個體添加人工標記來保障檢測的精度,導(dǎo)致該類方法不易在規(guī)?;i場進行推廣。而基于深度學(xué)習(xí)[12-15]的方法能夠解決復(fù)雜環(huán)境下多尺度仔豬目標檢測問題,逐漸成為該領(lǐng)域的研究熱點。高云等[16]通過卷積神經(jīng)網(wǎng)絡(luò)構(gòu)建仔豬識別模型PigNet,實現(xiàn)群豬圖像分割,準確識別豬只個體;王浩等[17]對Faster R-CNN結(jié)構(gòu)進行改進,通過識別豬只目標建立豬只圈內(nèi)位置識別算法;沈明霞等[18]利用YOLO v3網(wǎng)絡(luò),實現(xiàn)對初生仔豬目標的實時檢測。高云等[19]提出基于雙金字塔網(wǎng)絡(luò)的RGB-D群豬圖像分割方法。基于深層卷積神經(jīng)網(wǎng)絡(luò)的仔豬目標檢測算法,無論是檢測精度還是速度都較傳統(tǒng)機器學(xué)習(xí)算法有所提升,但是對硬件算力的依賴,限制了其在實際養(yǎng)殖生產(chǎn)中的應(yīng)用與推廣。
邊緣計算模式具有分布式、高效率、低延時和低成本等特點[20]。隨著規(guī)?;i場的不斷發(fā)展,哺乳期仔豬數(shù)量也會持續(xù)增長,將數(shù)據(jù)處理任務(wù)分布式部署至養(yǎng)殖系統(tǒng)中靠近設(shè)備側(cè),減輕數(shù)據(jù)中心的計算壓力、保障數(shù)據(jù)安全至關(guān)重要。采用邊緣計算模式的難點之一是如何優(yōu)化模型結(jié)構(gòu),使算法能夠在低算力設(shè)備上運行。
本文采用YOLO v5網(wǎng)絡(luò)訓(xùn)練哺乳期仔豬目標檢測模型,Jetson Nano開發(fā)板作為部署載體。其具有嵌入式端的GPU模塊,能夠更好地完成深度學(xué)習(xí)模型推理。將訓(xùn)練后的模型進行剪枝與量化,使得模型推理速度加快,形成能夠在嵌入式端部署并精確檢測目標的深度學(xué)習(xí)算法模型,實現(xiàn)哺乳期仔豬目標檢測任務(wù)在邊緣端的數(shù)據(jù)處理,使系統(tǒng)的部署更加靈活,滿足不同規(guī)模的豬場需求,為構(gòu)成適用于畜禽養(yǎng)殖領(lǐng)域的邊緣計算模式奠定基礎(chǔ)。
實驗數(shù)據(jù)采集于江蘇省靖江市豐園生態(tài)農(nóng)業(yè)園有限公司。選擇兩間面積同為7 m×9 m的母豬產(chǎn)房,每間產(chǎn)房有6個2.2 m×1.8 m的分娩欄,每個分娩欄中配有1個分辨率為2 048像素×1 536像素的??低?DS-2CD3135F-l型)攝像頭,對分娩欄內(nèi)的母豬進行俯拍,拍攝高度為3 m。視頻采集時間為2017年4月24日—5月31日。
對視頻進行截圖,截圖速率為1 f/s,截圖完成后剔除數(shù)據(jù)集內(nèi)異物遮擋嚴重以及相似度過高的圖像,并保持夜間圖像與白天圖像數(shù)量一致,共計14 000幅圖像。將圖像縮放至500像素×375像素以減少內(nèi)存占用,采用開源軟件LabelImg對圖像進行標注,標注格式為PASCAL VOC數(shù)據(jù)集標準[21],并按8∶1∶1將標注好的數(shù)據(jù)隨機分配為訓(xùn)練集、測試集和驗證集,圖像中的仔豬數(shù)量范圍為0~15,包括1 000幅無仔豬存在的母豬圖像。采用Mosaic數(shù)據(jù)增強方式,在數(shù)據(jù)輸入網(wǎng)絡(luò)前進行隨機縮放、隨機裁剪和隨機排布,圖像的處理效果如圖1所示。
圖1 Mosaic數(shù)據(jù)增強效果Fig.1 Data augmentation effect by Mosaic
受產(chǎn)房環(huán)境和哺乳期仔豬個體表征因素影響,哺乳期仔豬目標檢測任務(wù)需要綜合考慮檢測精度與速度,而one-stage網(wǎng)絡(luò)能夠在檢測過程中同時輸出類別的錨框與概率,因此更加適合該任務(wù)場景。YOLO v3[14]能以3倍的推理速度取得與SSD相近的檢測結(jié)果,YOLO v5比YOLO v3、YOLO v4[15]在檢測速度與檢測精度上有了進一步提升。所以本文基于YOLO v5算法進行優(yōu)化,完成哺乳期仔豬目標檢測模型的嵌入式端部署,YOLO系列模型進行仔豬目標檢測的主要過程如圖2所示。
圖2 哺乳期仔豬目標檢測流程Fig.2 Process of object detection for suckling piglets
將一幅圖像分成n×n網(wǎng)格(grid cell),如果某個目標(object)的中心點落在網(wǎng)格中,則該網(wǎng)格就負責(zé)預(yù)測這個目標。每層網(wǎng)絡(luò)預(yù)測邊框(Bounding box)的位置信息和置信度(confidence)信息,一個邊框?qū)?yīng)4個角點位置信息和1個置信度信息。
模型的結(jié)構(gòu)主要分為Input、Backbone、Neck和Prediction共4部分。Input為仔豬圖像輸入環(huán)節(jié)、Backbone主要實現(xiàn)仔豬圖像特征提取、Neck主要實現(xiàn)仔豬圖像特征融合、Prediction主要實現(xiàn)仔豬目標預(yù)測,主要結(jié)構(gòu)如圖3所示。
圖3 YOLO v5主要結(jié)構(gòu)圖Fig.3 Main model structure diagram of YOLO v5
通過在Backbone結(jié)構(gòu)中增加Focus結(jié)構(gòu)與CSP結(jié)構(gòu),增強卷積神經(jīng)網(wǎng)絡(luò)(CNN)的學(xué)習(xí)能力,能夠在輕量化的同時保持準確性。Focus的主要操作為圖像切片操作,能夠進一步提取仔豬目標特征,切片操作示意圖如圖4所示。
圖4 切片操作示意圖Fig.4 Operation schematic of slicing
在損失函數(shù)部分,主要計算3類損失函數(shù),邊框損失(Bounding box loss)、類間損失(Class loss)和目標損失(Object loss)。YOLO v5采用GIoU 損失值(Generalized IoU loss)作為Bounding box的損失函數(shù),但哺乳期仔豬目標容易受到遮擋干擾,為提高模型對受遮擋仔豬目標的檢測性能,將GIoU損失值替換為更加適合遮擋目標檢測的CIoU損失值(Complete IoU loss)[15]作為邊框損失的損失函數(shù),CIoU損失值計算公式為
(1)
其中
(2)
(3)
(4)
式中LCIoU——CIoU損失值
A——預(yù)測框B——實際框
ρ——歐氏距離p——預(yù)測框中心點
pgt——目標框中心點
c——框之間的最小外接矩形的對角線距離
α——權(quán)重函數(shù)
IoU——預(yù)測框與實際框的交并比
ν——寬高比度量函數(shù)
w——預(yù)測框的寬h——預(yù)測框的高
wgt——目標框的寬hgt——目標框的高
類間損失采用交叉熵損失函數(shù)(Binary cross entropy loss,BCEloss),BCEloss計算式為
l(x,y)=L=∑(l1,l2…,lN)
(5)
其中
lN=-ω[ynlgxn+(1-yn)lg(1-xn)]
(6)
式中l(wèi)(x,y)——交叉熵損失函數(shù)
lN——單批樣本交叉熵損失值
N——一次訓(xùn)練的樣本數(shù)
xn——第n次輸入的預(yù)測值
yn——第n次輸入的實際值
ω——相關(guān)系數(shù),取值為1/N
object loss采用BCElogitsloss(Binary cross entropy with logits loss),即在BCEloss的基礎(chǔ)上結(jié)合sigmoid函數(shù),將式(6)變?yōu)?/p>
lN=-ω[ynlgS(xn)+(1-yn)lg(1-S(xn))]
(7)
(8)
式中S(·)——sigmoid函數(shù)
由于哺乳期仔豬為非剛性目標,易產(chǎn)生多尺度邊框,因此采用自適應(yīng)錨框計算方式[15]。
2.3.1模型優(yōu)化
通過CSP結(jié)構(gòu)來輕量化網(wǎng)絡(luò),但最終網(wǎng)絡(luò)結(jié)構(gòu)也較為復(fù)雜,模型在嵌入式端進行部署的效果并不理想,需要對網(wǎng)絡(luò)結(jié)構(gòu)進行優(yōu)化,減少網(wǎng)絡(luò)的復(fù)雜度,提升推理速度。將Conv、BN和Activate Function層進行融合[22]。
可以將BN層視為輸入與輸出通道數(shù)相同的1×1卷積層。由于BN層位于Conv層之后,因此二者合并為新的卷積層。
Activate Function層是在網(wǎng)絡(luò)中的BN層后增加的非線性單元,維度尺寸需要與前一層相同,同理能夠?qū)ctivate Function層與Conv+BN層進行融合。
Concat層的主要作用是實現(xiàn)多輸入的合并,將輸入為相同張量和執(zhí)行相同操作的部分進行融合即可代替Concat層,減少數(shù)據(jù)傳輸環(huán)節(jié),實現(xiàn)對網(wǎng)絡(luò)模型的量化和剪枝,具體操作示意圖如圖5所示。
圖5 網(wǎng)絡(luò)優(yōu)化操作示意圖Fig.5 Network optimization operation schematic
圖5a中,紅色虛線框1表示將Conv、BN和Activate Function層進行融合,紅色虛線框2表示將相同張量和操作進行融合,紅色虛線框3表示將Concat操作刪除,但對于卷積核不同的層無法進行相應(yīng)的融合。圖5b為優(yōu)化后的網(wǎng)絡(luò)結(jié)構(gòu),其中CBR表示Conv、BN和Activate Function層融合得到的新的卷積層。該優(yōu)化方式是針對推理階段進行數(shù)據(jù)處理推導(dǎo)過程的融合,在模型訓(xùn)練階段不進行網(wǎng)絡(luò)層的修改,因此能夠保證訓(xùn)練過程的精度。
2.3.2模型部署
采用Jetson Nano進行模型遷移部署,Jetson Nano測試圖如圖6所示。在深度學(xué)習(xí)主機上將訓(xùn)練好的YOLO v5s、YOLO v5m、YOLO v5l、YOLO v5x模型傳入Jetson Nano開發(fā)板,在Jetson Nano開發(fā)板上優(yōu)化并編譯相應(yīng)的YOLO v5模型文件,完成后進行模型轉(zhuǎn)換,轉(zhuǎn)換格式過程為Pytorch格式(Pt)—開放神經(jīng)網(wǎng)絡(luò)交換格式(Onnx)—TensorRT格式 (TRT),轉(zhuǎn)換時模型計算精度為半精度計算,采用C++程序接口實現(xiàn)API調(diào)用,模型運行圖像如圖6所示。
圖6 Jetson Nano測試圖Fig.6 Experiment diagram on Jetson Nano1.Jetson Nano 2.外接顯示器 3.檢測圖像 4.運行界面
模型性能評價指標為單幀圖像推理時間、精確率(Precision)和召回率(Recall)。
模型訓(xùn)練平臺使用Intel i9-10900k處理器;GPU采用NVIDIA GTX3090型顯卡,顯存為24 GB;操作系統(tǒng)為Ubuntu18.04;在Pytorch深度學(xué)習(xí)框架上進行模型訓(xùn)練。
模型優(yōu)化后的推理過程在Jetson Nano開發(fā)板上進行,GPU為128-core Maxwell,CPU為Quad-core ARM A57 @ 1.43 GHz,內(nèi)存為4 GB、64位LPDDR4。相應(yīng)配置系統(tǒng)為ARM版Ubuntu16.04操作系統(tǒng),模型運行環(huán)境的配置為JetPack4.4、Python 3.8、Pytorch 1.6、Cuda 10.1和TensorRT 7.1。
對各個網(wǎng)絡(luò)模型的參數(shù)設(shè)置均保持一致,其中迭代周期設(shè)置為350,批量大小設(shè)置為16,初始學(xué)習(xí)率設(shè)置為0.001,初始沖量設(shè)置為0.98,初始權(quán)重衰減系數(shù)為0.1,每個迭代周期保存一次模型,最終選取最優(yōu)的模型。
訓(xùn)練350個迭代周期的邊框損失值和目標損失值曲線如圖7所示。圖7中,YOLO v5s的損失值在迭代周期0~70之間下降了約0.008,而在迭代周期70~350之間僅下降了0.002,YOLO v5m、YOLO v5l和YOLO v5x的損失值曲線在約70個迭代周期之后每50個迭代周期平均下降0.002。由于本研究中的類別總數(shù)為1,所以類間損失值出現(xiàn)無限接近于0的情況,此處不做說明。訓(xùn)練數(shù)據(jù)集的精確率、召回率和平均精度均值(mAP)曲線如圖8所示。
圖7 邊框損失值和目標損失值曲線Fig.7 Results of bounding box loss and object loss
圖8 模型測試效果Fig.8 Model tested effect diagrams
圖8中,平均精度均值(mAP)表示所有類別平均精度的平均值,本文類別數(shù)為1。mAP0.5表示交并比閾值為0.5時的mAP,mAP0.5∶0.95表示交并比閾值在[0.5,0.95]之間每隔0.05取一次mAP,然后取的平均值。
由圖7可知,雖然模型的損失值曲線在350迭代周期內(nèi)未完全擬合,但是由損失值下降頻率判斷,損失值曲線已經(jīng)趨于擬合。結(jié)合圖8可知,模型精度隨著訓(xùn)練次數(shù)增加不斷上升,但是網(wǎng)絡(luò)模型的召回率在迭代周期70~85時開始下降。這表明在約70個迭代周期之后,模型訓(xùn)練效果將不再隨著迭代次數(shù)的增加而上升。因此,綜合考慮mAP0.5與召回率的變化情況,選取350個迭代周期權(quán)重模型中的最優(yōu)權(quán)重模型,選取權(quán)重模型的測試性能如表1所示。
表1 模型測試結(jié)果Tab.1 Results of model tested %
該優(yōu)化方法雖然能夠保留訓(xùn)練精度,但是由于模型在推理階段的網(wǎng)絡(luò)結(jié)構(gòu)融合會使模型在加速時犧牲一部分檢測精度。因此為驗證模型轉(zhuǎn)換后的有效性,將模型轉(zhuǎn)換前后的效果進行對比,模型轉(zhuǎn)換前后在RTX3090顯卡與Jetson Nano上的測試效果如表2所示。
由表2可知,模型在轉(zhuǎn)換后的精確率并沒有太大的下降,但推理時間極大減少,YOLO v5s與YOLO v5m
表2 模型測試效果對比Tab.2 Comparison of model measuring effects
模型在Jetson Nano開發(fā)板上的運行時間分別縮短為原先運行時間的65/550和17/160。同時,在未轉(zhuǎn)換模型前,YOLO v5l與YOLO v5x模型難以直接在Jetson Nano開發(fā)板上直接運行,模型轉(zhuǎn)換后可以在開發(fā)板上運行,將主機端與Jetson Nano端的運行效果進行對比,結(jié)果如圖9所示。
圖9 檢測結(jié)果對比Fig.9 Contrast of detection results
圖9中每組圖像的左側(cè)圖像是加速前的檢測效果,右側(cè)圖像是加速后的檢測效果。由圖9可知,本研究構(gòu)建的YOLO v5網(wǎng)絡(luò)能夠精準地檢測出哺乳期仔豬個體,優(yōu)化后的模型在利用TensorRT加速時,能夠在提升仔豬目標檢測速度的同時保持有效檢測精度。
進一步分析模型在Jetson Nano上的實際運行效果,為后續(xù)邊緣計算模式下的模型部署提供理論依據(jù)。對Jetson Nano運行YOLO v5模型時的GPU利用率進行可視化,可視化結(jié)果如圖10所示。
由圖10可知,Jetson Nano在運行不同網(wǎng)絡(luò)深度和寬度的模型時,GPU達到高負載的持續(xù)時間也是不同的,網(wǎng)絡(luò)結(jié)構(gòu)越復(fù)雜的模型占用的GPU資源也就越多,隨著模型復(fù)雜度的增加所需要的算力也是不斷提升的。為了更好地在嵌入式端運行相應(yīng)的模型,綜合考慮模型復(fù)雜度與檢測精度,優(yōu)化后的YOLO v5s在Jetson Nano設(shè)備上的運行效果最好。圖11為優(yōu)化后的模型在Jetson Nano上檢測不同環(huán)境條件下的仔豬目標結(jié)果。在光照充足的條件下,能夠準確檢測出仔豬聚集、陰影干擾情況下的仔豬目標;在無光照的條件下,仍然能夠?qū)崿F(xiàn)仔豬目標檢測并應(yīng)對異物遮擋問題,但是相較于光照條件下的檢測效果,存在部分漏檢情況,后續(xù)需要對該問題進行優(yōu)化。
圖10 Jetson Nano的GPU利用率Fig.10 GPU utilization of Jetson Nano
圖11 優(yōu)化后YOLO v5s檢測效果Fig.11 Results of detection with optimized YOLO v5s
(1)構(gòu)建哺乳期仔豬個體數(shù)據(jù)集,建立YOLO v5系列網(wǎng)絡(luò),訓(xùn)練哺乳期仔豬目標檢測模型。在RTX3090的環(huán)境測試YOLO v5s、YOLO v5m、YOLO v5l和YOLO v5x 4種不同復(fù)雜度的網(wǎng)絡(luò)模型,對比測試結(jié)果表明,YOLO v5s模型擁有最快的處理速度,且4種模型的檢測精確率均高于97%。
(2)對基于YOLO v5的哺乳期目標檢測模型進行量化與剪枝,實現(xiàn)模型在嵌入式設(shè)備Jetson Nano上的部署。在Jetson Nano上運行的YOLO v5s哺乳期仔豬目標檢測模型的單幀圖像處理速度僅需要65 ms,YOLO v5m、YOLO v5l和YOLO v5x在測試集上的平均檢測時間分別為170、315、560 ms,檢測精確率分別為96.8%、97.0%、97.0%和96.6%。因此,綜合考慮YOLO v5s、YOLO v5m、YOLO v5l和YOLO v5x模型在Jetson Nano上的運行速度和檢測精度,優(yōu)化后的YOLO v5s模型擁有更好的實際處理效果,能夠?qū)崿F(xiàn)哺乳期仔豬目標準確檢測。
(3)規(guī)模化養(yǎng)殖使用邊緣計算的基礎(chǔ)是將算法模型部署至邊緣設(shè)備。本研究提出一種基于Jetson Nano的哺乳期仔豬目標檢測方法,能夠為后續(xù)邊緣計算在生豬養(yǎng)殖中的應(yīng)用奠定基礎(chǔ),為智慧養(yǎng)殖提供技術(shù)支持,有助于加速生豬養(yǎng)殖的智能化進程。