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