金耀,何秀文,萬世主,劉仁鑫
(江西農業大學工學院,南昌市,330045)
近10年來,隨著強農惠農富農政策的實施[1],畜牧業呈現出加快發展勢頭,生豬等生產方式發生積極轉變,規模化、標準化、產業化和區域化步伐加快。隨著硬件平臺的發展,計算機視覺技術正迅速的應用到各行各業中[2-5]。在畜牧養殖行業也不例外,諸多方面也已經取得了一定的進展。開展生豬全產業鏈數據監測,可以為農業農村大數據發展與應用提供可復制、可推廣的經驗做法。所以尋找一種更加可靠、精確、方便的生豬監測手段和方法顯得異常迫切。
計算機視覺技術應用于畜牧養殖行業引起了國內外學者的廣泛關注,Lee等[6]利用Kinect相機對豬只的攻擊行為進行識別,并采用SVM的方法對所發生的侵略行為進行分類; Kashiha等[7]在各豬體背部涂上不同的圖案編號,通過對獲得的豬體俯視圖像進行目標提取,并識別圖案所在的位置,通過相似度匹配的方法來確定豬只具體的身份。Huang等[8]通過提取豬只的Gabor和LBP特征組合并通過PCA降維的方式來對俯視群養豬進行身份識別。周勇鈞等[9]提出了多特征Camshift和Kalman濾波結合的豬只智能跟蹤,實現多豬只的跟蹤。仇益頁[10]使用基于弦軸變換的豬只特征區域的識別完成了俯視條件下對豬只特征區域的識別。張天昊等[11]利用基于紋理特征的濾波方法排除顏色灰度相似背景的干擾,實現了遠程視頻采集的養殖場圖像識別計數。但以上方法存在識別精度不高,檢測效率低無法實現實時檢測等諸多缺點。
YOLO(you only look once)[12]是一種端到端的目標檢測算法。它將檢測任務表述成一個統一的、端到端的回歸問題[13-14],并且以只處理一次圖片得到位置和分類而得名。和Fast RCNN[15-16]相比,YOLO的背景錯誤不到Fast RCNN的一半,同時YOLO可以學到物體的泛化特征。該研究考察了江西省泰和縣和瑞昌市的兩個大北農旗下的生豬養殖場,了解到在生豬養殖場每個豬欄的豬只變動,包括其轉欄、出欄等盤點工作均由人工記錄并統計。為在生豬養殖場環境下實現非接觸、低成本的生豬個體識別,本文提出一種基于YOLO v3的生豬個體識別方法。
圖像采集于江西省吉安市泰和縣綠色巨農養殖場,養殖場內約有5 000頭母豬。對養殖場母豬和仔豬采取多角度多場景的拍攝,共計拍攝圖片3 000多張,30 s以上視頻一百多條。為降低重疊率拍攝時主要以俯視圖為主。如圖1所示為采集到的母豬和仔豬原圖。

(a) 單只仔豬

(b) 少量仔豬

(c) 大量仔豬

(d) 母豬
為提高試驗魯棒性,從拍攝的圖片中選取2 000張較為清晰且不同角度的圖片,將拍攝的視頻進行取幀保存,并采用旋轉、平移、縮放、添加噪聲、裁剪等方式對數據進行擴充,最終獲得15 000張圖片。在擴充的數據集中選取符合試驗需求的8 000張圖片作為本次模型訓練和測試的數據集,其中70%作為訓練集,30%作為測試集。如圖2所示,使用YOLO v3自帶的yolo-mark標注工具,分別對仔豬和母豬使用矩形框進行標注。

(a) 少量仔豬

(b) 大量仔豬

(c) 母豬
YOLO模型從誕生開始就通過劃分單元格來做檢測,二代模型開始用批量歸一化(Bantch Normalization,BN)、加速收斂和避免過擬合的方法,把批量歸一層和激活函數層連接到卷積層,隨后采用一個單獨的CNN網絡模型實現端對端的目標檢測。整個模型將輸入的圖片的尺寸調整到416像素×416像素大小,通過卷積神經網絡處理預測結果并得到檢測目標。相比R-CNN算法,YOLO模型是一個統一的框架,其速度更快且訓練過程也是端對端的。
YOLO的CNN網絡將輸入的圖片分割成S×S網格,每個單元格負責檢測中心點落在該格子內的目標,若目標中心落在左下角一個單元格內,則該單元格負責預測這個目標。每個單元格預測若干個邊界框以及邊界框的置信度。置信度可以定義為Pr(object)×IoU,它包含兩個方面,一是該邊界框含有目標的可能性大小,二是該邊界框的準確度。當該邊界框是背景時Pr(object)=0,而當該邊界框包含目標時Pr(object) =1。邊界框的準確度可以用預測框與實際框的交并比(IoU)來表示。
YOLO v3的整個網絡結構示意圖,如圖3所示。

圖3 YOLO v3網絡結構示意圖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)的個數,網絡結構中的張量拼接層(concat)將Darknet網絡的中間層和上采樣層進行拼接,擴充了張量的維度。整個網絡結構包含了252層,其中疊加層(add)有23層;BN和Leaky relu有72層;CONV有75層;上采樣層和張量拼接層有2層,一共有5個殘差模塊,每個殘差模塊都會用一個零填充層(ZeroPadding)。
從圖中可以看出YOLO v3輸出了3個不同尺寸的特征圖,y1,y2,y3,采用多尺度來對不同尺寸的目標進行檢測。單元網格的精密程度決定了檢測結果的精確程度,YOLO v3的每個單元網格預測3個框,每個框有(x,y,w,h,c)五個參數分別表示預測框中心點的橫縱坐標,預測框的長和寬及置信度。
基本的圖像特征提取部分,YOLO v3采用了Darknet53的網絡結構。如圖4所示,Darknet53一共含有53層卷積,除去最后一個全連接層,共52個卷積用做主體網絡。由1個32個過濾器的卷積核,經過5組重復的殘差模塊,殘差模塊中每個單元由1個單獨的卷積層與一組重復執行的卷積層構成,重復執行的卷積層分別重復1次、2次、8次、8次、4次;在每個重復執行的卷積層中,先對輸入圖像執行1×1的卷積操作,再執行3×3的卷積操作,過濾器的數量先減半,再恢復,總共52層。

圖4 Darknet53網絡結構示意圖Fig. 4 Schematic diagram of Darknet53 network structure
本文采用Darknet53作為網絡框架,模型在統一配置下進行訓練,硬件平臺CPU為Inter i7 6700@3.4 GHz,GPU為GeForce GTX 1070,6 G顯存,16 G運行內存,運行系統為Windows10專業版。CUDA版本為10.1,CUDNN神經網絡加速庫版本為10.1。
訓練時設置動量因子(Momentum)為0.9,該值影響梯度下降到最優值的速度。衰減系數(Decay)設置為0.000 5,該值為權重正則項,為了讓權重衰減到更小的值,防止模型過擬合。學習率(Learning_rate)設置為0.001。迭代次數與損失值變化如圖5所示。

圖5 損失函數輸出結果Fig. 5 Output result of loss function
由圖5可知,模型在迭代2 000次以前損失值迅速下降,在2 000次到10 000次的迭代中損失值緩慢減小,迭代10 000次以后模型損失值基本趨于穩定狀態,此時損失值穩定在0.27左右,符合訓練預期。本次模型訓練總共進行了12 000次迭代訓練,訓練時每1 000次迭代保存一個訓練模型,共得到12個訓練模型。因模型在迭代10 000次以后損失值趨于平穩,故本試驗只取前10 000次迭代的10個模型,進行模型評估。
為選取最優模型,本文采用多項指標對模型的性能進行評估,具體指標包括交并比(IoU)、準確率(P)、召回率(R)、調和平均值(F1)、平均精度均值(mAP)。
(1)
(2)
(3)
(4)
式中:TP——真正樣本數量;
Fp——假正樣本數量;
N——檢測樣本類別數量;
FN——假負樣本數量。
IoU交并比為預測框和真實框交集部分面積與并集部分面積的比值,體現了預測的邊界框與真實邊界框的接近程度。
(5)
式中:α——預測邊界框;
β——目標物體真實邊界框;
Area——面積,cm2。
本試驗只需識別生豬這一類目標物體故將N的值取為1,交并比(IoU)閾值的選擇會直接影響準確率(P)和召回率(R)的大小。為了保證檢測精度,選擇IoU>50%作為判斷目標是否被正確檢測。
表1列出了訓練完成的10個模型相對應的指標參數。選擇最優模型時不僅需要權衡準確率與召回率,同時也應該選擇能夠綜合反映模型性能的指標。

表1 輸出模型參數比較Tab. 1 Output model parameter comparison
F1是P、R參數的加權調和平均指標,mAP是綜合衡量模型性能最為全面的指標,因此選擇mAP和F1數值最大的模型作為本次訓練的最優模型。將表1中模型迭代10 000次得到的mAP值作為參數建立曲線圖,變化曲線如圖6所示,迭代次數在5 000次時,模型mAP達最大值91.22%同時F1也達到最大值92.09%,故在本次訓練出來的模型當中模型5為最優檢測模型。

圖6 mAP隨迭代次數變化曲線圖Fig. 6 mAP variation curve with the number of iterations
以最優模型作為檢測模型,分別對測試集中的母豬和仔豬進行識別,得到該模型的F1、P、R、IoU等各項指標參數。如表2所示為仔豬和母豬的識別參數對照表,從模型檢測結果來看,母豬的mAP高達到95.16%,而仔豬的mAP為89.65%。因母豬體型較大數量較少,在圖片檢測過程中更容易識別。仔豬體型較小,數量較多,存在重疊、模糊等情況,相較于母豬識別難度更高,因此識別精度相對較低。如圖7所示,圖7(a)和圖7(b)中的仔豬和母豬被正確識別,圖7(c)中存在被重復檢測的仔豬,圖7(d)中存在被漏檢的仔豬。

表2 仔豬、母豬識別參數對比Tab. 2 Comparison of identification parameters between piglets and sows

(a) 正確識別仔豬

(b) 正確識別母豬

(c) 重復識別仔豬

(d) 漏檢仔豬
為驗證本模型的可靠性,將本模型的試驗結果與Faster RCNN和SSD算法模型進行對比,試驗都在同一硬件配置下進行。表3列出了三種不同算法模型對生豬個體識別效果的參數對比,從表中可以看出YOLO v3模型的檢測效率是Faster RCNN模型的7倍以上。對比SSD算法模型,YOLO v3算法的mAP值與F1值明顯更高。綜合上述,YOLO v3網絡模型兼具Faster RCNN的檢測精度和SSD網絡模型的檢測效率,是本試驗的最優檢測模型。

表3 不同模型識別參數對比Tab. 3 Comparison of identification parameters of different models
1) 該研究基于YOLO v3模型的目標檢測框架。通過建立生豬識別的數據集對其進行訓練和測試。模型對仔豬的識別,準確率達95.99%,召回率達84.09%。對母豬的識別,準確率達96.00%,召回率達96.00%。
2) 分別對數據集中的母豬和仔豬進行訓練和識別,提高了模型的各項參數指標,母豬的mAP高達到95.16%,而仔豬的mAP為89.65%。得出母豬識別精度更高,仔豬由于數量多、體型小、模糊重疊等因素,識別效率相對較低。
3) 本試驗模型相較于Faster RCNN識別效率提升7倍以上,相較于SSD平均精度均值提高9%,說明該模型在識別速率和識別精度都達到了較高水平。