金耀,何秀文,萬(wàn)世主,劉仁鑫
(江西農(nóng)業(yè)大學(xué)工學(xué)院,南昌市,330045)
近10年來(lái),隨著強(qiáng)農(nóng)惠農(nóng)富農(nóng)政策的實(shí)施[1],畜牧業(yè)呈現(xiàn)出加快發(fā)展勢(shì)頭,生豬等生產(chǎn)方式發(fā)生積極轉(zhuǎn)變,規(guī)?;?、標(biāo)準(zhǔn)化、產(chǎn)業(yè)化和區(qū)域化步伐加快。隨著硬件平臺(tái)的發(fā)展,計(jì)算機(jī)視覺(jué)技術(shù)正迅速的應(yīng)用到各行各業(yè)中[2-5]。在畜牧養(yǎng)殖行業(yè)也不例外,諸多方面也已經(jīng)取得了一定的進(jìn)展。開(kāi)展生豬全產(chǎn)業(yè)鏈數(shù)據(jù)監(jiān)測(cè),可以為農(nóng)業(yè)農(nóng)村大數(shù)據(jù)發(fā)展與應(yīng)用提供可復(fù)制、可推廣的經(jīng)驗(yàn)做法。所以尋找一種更加可靠、精確、方便的生豬監(jiān)測(cè)手段和方法顯得異常迫切。
計(jì)算機(jī)視覺(jué)技術(shù)應(yīng)用于畜牧養(yǎng)殖行業(yè)引起了國(guó)內(nèi)外學(xué)者的廣泛關(guān)注,Lee等[6]利用Kinect相機(jī)對(duì)豬只的攻擊行為進(jìn)行識(shí)別,并采用SVM的方法對(duì)所發(fā)生的侵略行為進(jìn)行分類(lèi); Kashiha等[7]在各豬體背部涂上不同的圖案編號(hào),通過(guò)對(duì)獲得的豬體俯視圖像進(jìn)行目標(biāo)提取,并識(shí)別圖案所在的位置,通過(guò)相似度匹配的方法來(lái)確定豬只具體的身份。Huang等[8]通過(guò)提取豬只的Gabor和LBP特征組合并通過(guò)PCA降維的方式來(lái)對(duì)俯視群養(yǎng)豬進(jìn)行身份識(shí)別。周勇鈞等[9]提出了多特征Camshift和Kalman濾波結(jié)合的豬只智能跟蹤,實(shí)現(xiàn)多豬只的跟蹤。仇益頁(yè)[10]使用基于弦軸變換的豬只特征區(qū)域的識(shí)別完成了俯視條件下對(duì)豬只特征區(qū)域的識(shí)別。張?zhí)礻坏萚11]利用基于紋理特征的濾波方法排除顏色灰度相似背景的干擾,實(shí)現(xiàn)了遠(yuǎn)程視頻采集的養(yǎng)殖場(chǎng)圖像識(shí)別計(jì)數(shù)。但以上方法存在識(shí)別精度不高,檢測(cè)效率低無(wú)法實(shí)現(xiàn)實(shí)時(shí)檢測(cè)等諸多缺點(diǎn)。
YOLO(you only look once)[12]是一種端到端的目標(biāo)檢測(cè)算法。它將檢測(cè)任務(wù)表述成一個(gè)統(tǒng)一的、端到端的回歸問(wèn)題[13-14],并且以只處理一次圖片得到位置和分類(lèi)而得名。和Fast RCNN[15-16]相比,YOLO的背景錯(cuò)誤不到Fast RCNN的一半,同時(shí)YOLO可以學(xué)到物體的泛化特征。該研究考察了江西省泰和縣和瑞昌市的兩個(gè)大北農(nóng)旗下的生豬養(yǎng)殖場(chǎng),了解到在生豬養(yǎng)殖場(chǎng)每個(gè)豬欄的豬只變動(dòng),包括其轉(zhuǎn)欄、出欄等盤(pán)點(diǎn)工作均由人工記錄并統(tǒng)計(jì)。為在生豬養(yǎng)殖場(chǎng)環(huán)境下實(shí)現(xiàn)非接觸、低成本的生豬個(gè)體識(shí)別,本文提出一種基于YOLO v3的生豬個(gè)體識(shí)別方法。
圖像采集于江西省吉安市泰和縣綠色巨農(nóng)養(yǎng)殖場(chǎng),養(yǎng)殖場(chǎng)內(nèi)約有5 000頭母豬。對(duì)養(yǎng)殖場(chǎng)母豬和仔豬采取多角度多場(chǎng)景的拍攝,共計(jì)拍攝圖片3 000多張,30 s以上視頻一百多條。為降低重疊率拍攝時(shí)主要以俯視圖為主。如圖1所示為采集到的母豬和仔豬原圖。
(a) 單只仔豬
(b) 少量仔豬
(c) 大量仔豬
(d) 母豬
為提高試驗(yàn)魯棒性,從拍攝的圖片中選取2 000張較為清晰且不同角度的圖片,將拍攝的視頻進(jìn)行取幀保存,并采用旋轉(zhuǎn)、平移、縮放、添加噪聲、裁剪等方式對(duì)數(shù)據(jù)進(jìn)行擴(kuò)充,最終獲得15 000張圖片。在擴(kuò)充的數(shù)據(jù)集中選取符合試驗(yàn)需求的8 000張圖片作為本次模型訓(xùn)練和測(cè)試的數(shù)據(jù)集,其中70%作為訓(xùn)練集,30%作為測(cè)試集。如圖2所示,使用YOLO v3自帶的yolo-mark標(biāo)注工具,分別對(duì)仔豬和母豬使用矩形框進(jìn)行標(biāo)注。
(a) 少量仔豬
(b) 大量仔豬
(c) 母豬
YOLO模型從誕生開(kāi)始就通過(guò)劃分單元格來(lái)做檢測(cè),二代模型開(kāi)始用批量歸一化(Bantch Normalization,BN)、加速收斂和避免過(guò)擬合的方法,把批量歸一層和激活函數(shù)層連接到卷積層,隨后采用一個(gè)單獨(dú)的CNN網(wǎng)絡(luò)模型實(shí)現(xiàn)端對(duì)端的目標(biāo)檢測(cè)。整個(gè)模型將輸入的圖片的尺寸調(diào)整到416像素×416像素大小,通過(guò)卷積神經(jīng)網(wǎng)絡(luò)處理預(yù)測(cè)結(jié)果并得到檢測(cè)目標(biāo)。相比R-CNN算法,YOLO模型是一個(gè)統(tǒng)一的框架,其速度更快且訓(xùn)練過(guò)程也是端對(duì)端的。
YOLO的CNN網(wǎng)絡(luò)將輸入的圖片分割成S×S網(wǎng)格,每個(gè)單元格負(fù)責(zé)檢測(cè)中心點(diǎn)落在該格子內(nèi)的目標(biāo),若目標(biāo)中心落在左下角一個(gè)單元格內(nèi),則該單元格負(fù)責(zé)預(yù)測(cè)這個(gè)目標(biāo)。每個(gè)單元格預(yù)測(cè)若干個(gè)邊界框以及邊界框的置信度。置信度可以定義為Pr(object)×IoU,它包含兩個(gè)方面,一是該邊界框含有目標(biāo)的可能性大小,二是該邊界框的準(zhǔn)確度。當(dāng)該邊界框是背景時(shí)Pr(object)=0,而當(dāng)該邊界框包含目標(biāo)時(shí)Pr(object) =1。邊界框的準(zhǔn)確度可以用預(yù)測(cè)框與實(shí)際框的交并比(IoU)來(lái)表示。
YOLO v3的整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)示意圖,如圖3所示。
圖3 YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)示意圖Fig. 3 Schematic diagram of YOLO v3 network structure
其中DBL層(Darknetconv2d-BN-Leaky)為YOLO v3的基本組件,由CONV、BN和Leaky relu組成。殘差層是YOLO v3中的大組件,表示殘差模塊(res_block)里面含有殘差單元(Res unit)的個(gè)數(shù),網(wǎng)絡(luò)結(jié)構(gòu)中的張量拼接層(concat)將Darknet網(wǎng)絡(luò)的中間層和上采樣層進(jìn)行拼接,擴(kuò)充了張量的維度。整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)包含了252層,其中疊加層(add)有23層;BN和Leaky relu有72層;CONV有75層;上采樣層和張量拼接層有2層,一共有5個(gè)殘差模塊,每個(gè)殘差模塊都會(huì)用一個(gè)零填充層(ZeroPadding)。
從圖中可以看出YOLO v3輸出了3個(gè)不同尺寸的特征圖,y1,y2,y3,采用多尺度來(lái)對(duì)不同尺寸的目標(biāo)進(jìn)行檢測(cè)。單元網(wǎng)格的精密程度決定了檢測(cè)結(jié)果的精確程度,YOLO v3的每個(gè)單元網(wǎng)格預(yù)測(cè)3個(gè)框,每個(gè)框有(x,y,w,h,c)五個(gè)參數(shù)分別表示預(yù)測(cè)框中心點(diǎn)的橫縱坐標(biāo),預(yù)測(cè)框的長(zhǎng)和寬及置信度。
基本的圖像特征提取部分,YOLO v3采用了Darknet53的網(wǎng)絡(luò)結(jié)構(gòu)。如圖4所示,Darknet53一共含有53層卷積,除去最后一個(gè)全連接層,共52個(gè)卷積用做主體網(wǎng)絡(luò)。由1個(gè)32個(gè)過(guò)濾器的卷積核,經(jīng)過(guò)5組重復(fù)的殘差模塊,殘差模塊中每個(gè)單元由1個(gè)單獨(dú)的卷積層與一組重復(fù)執(zhí)行的卷積層構(gòu)成,重復(fù)執(zhí)行的卷積層分別重復(fù)1次、2次、8次、8次、4次;在每個(gè)重復(fù)執(zhí)行的卷積層中,先對(duì)輸入圖像執(zhí)行1×1的卷積操作,再執(zhí)行3×3的卷積操作,過(guò)濾器的數(shù)量先減半,再恢復(fù),總共52層。
圖4 Darknet53網(wǎng)絡(luò)結(jié)構(gòu)示意圖Fig. 4 Schematic diagram of Darknet53 network structure
本文采用Darknet53作為網(wǎng)絡(luò)框架,模型在統(tǒng)一配置下進(jìn)行訓(xùn)練,硬件平臺(tái)CPU為Inter i7 6700@3.4 GHz,GPU為GeForce GTX 1070,6 G顯存,16 G運(yùn)行內(nèi)存,運(yùn)行系統(tǒng)為Windows10專(zhuān)業(yè)版。CUDA版本為10.1,CUDNN神經(jīng)網(wǎng)絡(luò)加速庫(kù)版本為10.1。
訓(xùn)練時(shí)設(shè)置動(dòng)量因子(Momentum)為0.9,該值影響梯度下降到最優(yōu)值的速度。衰減系數(shù)(Decay)設(shè)置為0.000 5,該值為權(quán)重正則項(xiàng),為了讓權(quán)重衰減到更小的值,防止模型過(guò)擬合。學(xué)習(xí)率(Learning_rate)設(shè)置為0.001。迭代次數(shù)與損失值變化如圖5所示。
圖5 損失函數(shù)輸出結(jié)果Fig. 5 Output result of loss function
由圖5可知,模型在迭代2 000次以前損失值迅速下降,在2 000次到10 000次的迭代中損失值緩慢減小,迭代10 000次以后模型損失值基本趨于穩(wěn)定狀態(tài),此時(shí)損失值穩(wěn)定在0.27左右,符合訓(xùn)練預(yù)期。本次模型訓(xùn)練總共進(jìn)行了12 000次迭代訓(xùn)練,訓(xùn)練時(shí)每1 000次迭代保存一個(gè)訓(xùn)練模型,共得到12個(gè)訓(xùn)練模型。因模型在迭代10 000次以后損失值趨于平穩(wěn),故本試驗(yàn)只取前10 000次迭代的10個(gè)模型,進(jìn)行模型評(píng)估。
為選取最優(yōu)模型,本文采用多項(xiàng)指標(biāo)對(duì)模型的性能進(jìn)行評(píng)估,具體指標(biāo)包括交并比(IoU)、準(zhǔn)確率(P)、召回率(R)、調(diào)和平均值(F1)、平均精度均值(mAP)。
(1)
(2)
(3)
(4)
式中:TP——真正樣本數(shù)量;
Fp——假正樣本數(shù)量;
N——檢測(cè)樣本類(lèi)別數(shù)量;
FN——假負(fù)樣本數(shù)量。
IoU交并比為預(yù)測(cè)框和真實(shí)框交集部分面積與并集部分面積的比值,體現(xiàn)了預(yù)測(cè)的邊界框與真實(shí)邊界框的接近程度。
(5)
式中:α——預(yù)測(cè)邊界框;
β——目標(biāo)物體真實(shí)邊界框;
Area——面積,cm2。
本試驗(yàn)只需識(shí)別生豬這一類(lèi)目標(biāo)物體故將N的值取為1,交并比(IoU)閾值的選擇會(huì)直接影響準(zhǔn)確率(P)和召回率(R)的大小。為了保證檢測(cè)精度,選擇IoU>50%作為判斷目標(biāo)是否被正確檢測(cè)。
表1列出了訓(xùn)練完成的10個(gè)模型相對(duì)應(yīng)的指標(biāo)參數(shù)。選擇最優(yōu)模型時(shí)不僅需要權(quán)衡準(zhǔn)確率與召回率,同時(shí)也應(yīng)該選擇能夠綜合反映模型性能的指標(biāo)。
表1 輸出模型參數(shù)比較Tab. 1 Output model parameter comparison
F1是P、R參數(shù)的加權(quán)調(diào)和平均指標(biāo),mAP是綜合衡量模型性能最為全面的指標(biāo),因此選擇mAP和F1數(shù)值最大的模型作為本次訓(xùn)練的最優(yōu)模型。將表1中模型迭代10 000次得到的mAP值作為參數(shù)建立曲線圖,變化曲線如圖6所示,迭代次數(shù)在5 000次時(shí),模型mAP達(dá)最大值91.22%同時(shí)F1也達(dá)到最大值92.09%,故在本次訓(xùn)練出來(lái)的模型當(dāng)中模型5為最優(yōu)檢測(cè)模型。
圖6 mAP隨迭代次數(shù)變化曲線圖Fig. 6 mAP variation curve with the number of iterations
以最優(yōu)模型作為檢測(cè)模型,分別對(duì)測(cè)試集中的母豬和仔豬進(jìn)行識(shí)別,得到該模型的F1、P、R、IoU等各項(xiàng)指標(biāo)參數(shù)。如表2所示為仔豬和母豬的識(shí)別參數(shù)對(duì)照表,從模型檢測(cè)結(jié)果來(lái)看,母豬的mAP高達(dá)到95.16%,而仔豬的mAP為89.65%。因母豬體型較大數(shù)量較少,在圖片檢測(cè)過(guò)程中更容易識(shí)別。仔豬體型較小,數(shù)量較多,存在重疊、模糊等情況,相較于母豬識(shí)別難度更高,因此識(shí)別精度相對(duì)較低。如圖7所示,圖7(a)和圖7(b)中的仔豬和母豬被正確識(shí)別,圖7(c)中存在被重復(fù)檢測(cè)的仔豬,圖7(d)中存在被漏檢的仔豬。
表2 仔豬、母豬識(shí)別參數(shù)對(duì)比Tab. 2 Comparison of identification parameters between piglets and sows
(a) 正確識(shí)別仔豬
(b) 正確識(shí)別母豬
(c) 重復(fù)識(shí)別仔豬
(d) 漏檢仔豬
為驗(yàn)證本模型的可靠性,將本模型的試驗(yàn)結(jié)果與Faster RCNN和SSD算法模型進(jìn)行對(duì)比,試驗(yàn)都在同一硬件配置下進(jìn)行。表3列出了三種不同算法模型對(duì)生豬個(gè)體識(shí)別效果的參數(shù)對(duì)比,從表中可以看出YOLO v3模型的檢測(cè)效率是Faster RCNN模型的7倍以上。對(duì)比SSD算法模型,YOLO v3算法的mAP值與F1值明顯更高。綜合上述,YOLO v3網(wǎng)絡(luò)模型兼具Faster RCNN的檢測(cè)精度和SSD網(wǎng)絡(luò)模型的檢測(cè)效率,是本試驗(yàn)的最優(yōu)檢測(cè)模型。
表3 不同模型識(shí)別參數(shù)對(duì)比Tab. 3 Comparison of identification parameters of different models
1) 該研究基于YOLO v3模型的目標(biāo)檢測(cè)框架。通過(guò)建立生豬識(shí)別的數(shù)據(jù)集對(duì)其進(jìn)行訓(xùn)練和測(cè)試。模型對(duì)仔豬的識(shí)別,準(zhǔn)確率達(dá)95.99%,召回率達(dá)84.09%。對(duì)母豬的識(shí)別,準(zhǔn)確率達(dá)96.00%,召回率達(dá)96.00%。
2) 分別對(duì)數(shù)據(jù)集中的母豬和仔豬進(jìn)行訓(xùn)練和識(shí)別,提高了模型的各項(xiàng)參數(shù)指標(biāo),母豬的mAP高達(dá)到95.16%,而仔豬的mAP為89.65%。得出母豬識(shí)別精度更高,仔豬由于數(shù)量多、體型小、模糊重疊等因素,識(shí)別效率相對(duì)較低。
3) 本試驗(yàn)?zāi)P拖噍^于Faster RCNN識(shí)別效率提升7倍以上,相較于SSD平均精度均值提高9%,說(shuō)明該模型在識(shí)別速率和識(shí)別精度都達(dá)到了較高水平。
中國(guó)農(nóng)機(jī)化學(xué)報(bào)2021年2期