張譯文,李琦
(內(nèi)蒙古科技大學 信息工程學院,內(nèi)蒙古 包頭 014010)
目前,內(nèi)蒙古畜牧業(yè)正處于快速發(fā)展和轉(zhuǎn)型升級的關(guān)鍵時期,牛羊養(yǎng)殖產(chǎn)業(yè)的自動化能夠有效降低養(yǎng)殖成本、減小勞動力、增強科技水平,有效解決養(yǎng)殖過程中出現(xiàn)的常見難題.如何解決羊群自動計數(shù)問題便成為養(yǎng)殖場減少人力、提高效率的重要課題[1-3].傳統(tǒng)的基于RFID的羊只計數(shù)方法受到場地和讀寫距離的限制.田磊等[4]采用YOLO目標檢測算法,獲得圖像中羊的位置信息,通過統(tǒng)計檢測框的個數(shù)對羊只計數(shù);李琦等[5]利用YOLOv3目標檢測算法檢測圖像中牛和羊的位置信息,結(jié)合DeepSORT目標跟蹤算法控制云臺對牛群進行跟蹤.以上方案在實際應(yīng)用中效果并不理想.
為克服上述問題,并實現(xiàn)對羊只目標快速穩(wěn)定地跟蹤和計數(shù),文章提出一種將CenterNet目標檢測與DeepSORT跟蹤相結(jié)合的羊只計數(shù)方法.首先,建立CenterNet目標檢測模型,通過訓練數(shù)據(jù)集對標注的羊只頭部圖像數(shù)據(jù)集進行模型訓練并得到權(quán)重,再將CenterNet訓練出來的權(quán)重與DeepSORT目標跟蹤模型相結(jié)合,最后利用單線計數(shù)算法進行羊只跟蹤實時計數(shù).
羊只計數(shù)系統(tǒng)總體設(shè)計方案見圖1,包括數(shù)據(jù)集制作、目標檢測模型設(shè)計、目標跟蹤和單線計數(shù)4個部分.
圖1 羊只計數(shù)系統(tǒng)整體研究方案
原始數(shù)據(jù)集的羊只圖像數(shù)據(jù)來源于內(nèi)蒙古自治區(qū)呼倫貝爾盟和錫林郭勒盟2個自然放牧牧場.將??禂z像機置于羊只進出棚圈的通道前上方,采集得到羊只進出羊圈通道的視頻,用Labelimg對羊只進行標注,并得到標注圖像,將多次采集的視頻整理挑選出3 060張圖片,其中2 460張作為訓練集,600張作為測試集.首先將2 460張訓練集輸入CenterNet目標檢測模型,經(jīng)訓練得到權(quán)重參數(shù),利用600張測試集對訓練權(quán)重進行測試,然后將CenterNet目標檢測模型與DeepSORT目標跟蹤模型相結(jié)合,經(jīng)過單線計數(shù)算法對羊通道出口的羊只進行計數(shù).
CornerNet[6]是通過提取檢測物體的左上角點和右下角點的位置信息來確定目標,而在此過程中,CornerNet使用corner pooling僅僅能夠提取到目標邊緣的特征,導致CornerNet產(chǎn)生誤檢,基于此,CenterNet[7]在CornerNet的基礎(chǔ)上增加了中心預測點,減少了網(wǎng)絡(luò)的誤檢,文章采用CenterNet算法對羊只頭部進行目標檢測[8].首先通過中心點位置得到目標屬性,將圖像傳入全卷積網(wǎng)絡(luò)生成熱力圖;其次,確定熱力圖的峰值點;每個特征圖的峰值點位置預測了目標的寬高信息,最后生成目標框.目標中心點見圖2.
圖2 CenterNet目標中心點預測
CenterNet算法的流程如下:首先,將羊只頭部圖像輸入完全卷積網(wǎng)絡(luò)生成熱力圖;其次,將輸出熱力圖上的所有點與其相連8個臨近像素點比較,若該點的值不小于其8個臨近像素點,則該點保留,保留滿足所有要求的前100個峰值點.對每個峰值處的圖像特征預測得到目標框的高度和寬度信息.CenterNet整體架構(gòu)見圖3.
圖3 CenterNet整體架構(gòu)
SORT是一種基于檢測實現(xiàn)的多目標追蹤框架,逐幀進行目標檢測,將目標當前幀的位置信息傳遞到預測幀、當前檢測框與已存在的目標進行關(guān)聯(lián),以Bounding box展現(xiàn)檢測結(jié)果,SORT算法的跟蹤精度和準確率比較高,但其使用的關(guān)聯(lián)指標只有在狀態(tài)估計不確定性比較低的時候才精確,容易導致遮擋的ID丟失,DeepSORT算法在SORT算法基礎(chǔ)上增加了級聯(lián)匹配,使遮擋物體的ID能夠重新匹配.文章采用DeepSORT[9]跟蹤算法實現(xiàn)對羊只的跟蹤與計數(shù).DeepSORT跟蹤模型使用Torch版本對MARS數(shù)據(jù)集進行ReID訓練,并得到模型.
當運動狀態(tài)軌跡規(guī)律時,利用卡爾曼濾波預測結(jié)果與檢測結(jié)果之間的馬氏距離對運動目標的運動狀態(tài)進行計算,計算公式為:
(1)
式中:T為第條軌跡,S為第個檢測,d(1)(i,j)為運動匹配度,Si表示由卡爾曼濾波預測得到目標軌跡的檢測位置與預測位置的協(xié)方差矩陣,yi為第個追蹤器對羊只頭部檢測的目標預測位置,di為第個對羊只頭部目標檢測的位置框.當關(guān)聯(lián)的馬氏距離小于閾值,則設(shè)置目標運動狀態(tài)關(guān)聯(lián)成功.
當運動狀態(tài)出現(xiàn)不確定軌跡時,在圖像空間中使用卡爾曼濾波進行運動狀態(tài)預測時,其結(jié)果與實際目標數(shù)量相差較大,出現(xiàn)目標框ID跳變的現(xiàn)象,對預測結(jié)果造成很大影響,因此引入第二種關(guān)聯(lián)方法,每一個特征向量ri是由對應(yīng)的檢測塊di得到的,定義最小余弦距離為當前幀第j個檢測結(jié)果的特征向量和距離第i個追蹤器最近的100個成功關(guān)聯(lián)羊只頭部的特征集的最小余弦距離,計算公式為:
(2)
根據(jù)羊只頭部目標跟蹤結(jié)果,羊只計數(shù)采用單線計數(shù)的方法,首先在羊通道出口的位置對應(yīng)的視頻圖像定義一條紅色標記虛擬線,根據(jù)羊只頭部目標跟蹤的結(jié)果,當跟蹤目標框的中心點經(jīng)過紅線,計數(shù)開始,中心點離開紅線,計數(shù)結(jié)束.首先設(shè)置集合A和B,其中A記錄所有與計數(shù)線相交過的目標ID集合,B記錄所有與計數(shù)線相交之后,再離開線的目標ID集合.單線計數(shù)示意圖見圖4.
圖4 單線計數(shù)示意
時刻1:目標從左到右出現(xiàn)在視場內(nèi),假定跟蹤器將其ID設(shè)置為“1”.此時集合A和B中皆沒有任何元素.時刻2:目標“1”繼續(xù)往右移動直到和線相交的時刻,此時“1”這個ID將被添加到集合A中.這個相交時刻就不存在目標離開線的情況,故此時集合B依然不包含任何元素.時刻3:目標“1”繼續(xù)往右移動直到整體與線脫離的時刻,此時計數(shù)器發(fā)現(xiàn)目標“1”在集合A內(nèi),并且已經(jīng)離開計數(shù)線,則將“1”這個ID添加到集合B中.最終,所有目標都經(jīng)歷上述目標“1”的過程之后,集合B中所有元素的個數(shù)就表示計數(shù)個數(shù).
訓練數(shù)據(jù)集的試驗運行環(huán)境為Intel Xeon E5-2680 CPU,128 G內(nèi)存,英偉達1080Ti顯卡,CUDA版本為10.0,Python 版本為3.6,Pytorch版本為0.4.1,操作系統(tǒng)為Ubuntu16.04.
在羊只檢測方面,用制作的2 460張圖像測試集對CenterNet模型訓練進行了評估測試,以epochs(迭代次數(shù))作為橫坐標,以Loss(損失)作為縱坐標,繪制Loss曲線.紅線為Loss總體水平;藍線hm_Loss為熱力圖Loss曲線;黑線wh_Loss為檢測框?qū)捀週oss曲線;綠線off_Loss為偏移Loss曲線.經(jīng)過200多次迭代,可以看出Loss基本平穩(wěn),達到0.6,模型訓練良好,Loss曲線如圖5所示.
圖5 Loss曲線
在羊只檢測方面,根據(jù)文章制作的600張測試集對CenterNet檢測算法和DeepSORT跟蹤算法進行精度測試,以羊只的召回率(Recall)作為橫坐標,以羊只的精確率(Precision)作為縱坐標,繪制精確率(PR)曲線,通過對比檢測算法的平均精度(AP)和每秒檢測幀數(shù)(FPS).C75表示在交并比(IoU)=0.75的PR對應(yīng)平均準確率(APIoU)=0.75度量曲線下的面積,mm2;C50表示在IoU=0.50的PR對應(yīng)APIoU=0.50度量曲線下的面積,mm2;Loc表示IoU=0.10的PR定位誤差;Sim表示超類別誤報被移除后的PR值;Oth表示為所有類型混亂被移除后的PR值;BG表示為所有背景誤報被移除后的PR值;FN表示在所有剩余錯誤都被刪除后的PR值.一般以IoU=C50為平均召回率.可以看出,召回率為80%,CenterNet算法訓練出的模型和檢測準確率都較為理想.PR曲線如圖6所示.
圖6 PR曲線
在計數(shù)方面,視頻圖像中設(shè)定縱坐標為500像素的一條紅色虛擬線,將紅色虛擬線作為計數(shù)線并進行計數(shù),由于羊群密集,目標被部分遮擋,導致漏計.為控制羊群密度,文章設(shè)計寬度為1.5 m的羊通道,對羊通道出口的羊只進行檢測與計數(shù),羊只計數(shù)過程如圖7所示.
將截取視頻分為4個片段1~20 s,20~40 s,40~60 s,60~80 s,對實際通過紅線的羊只數(shù)量進行計數(shù),計數(shù)情況見表2.將實際羊只數(shù)量與算法羊只數(shù)量精度進行對比,精度(CenterNet算法/實際羊只數(shù)量)分別可達100%,97.3%,96.2%,95.3%.羊只真實值與檢測值對比結(jié)果見表1.
圖7 單線計數(shù)過程
表1 羊只真實值與檢測值對比結(jié)果表
在測試視頻中,每個時間段檢測通過紅線的羊只數(shù)量跟實際通過的羊只數(shù)量基本一致,精確率可達95.3%.其中,CenterNet算法的羊只數(shù)量少于實際羊只數(shù)量,其原因為羊只通過羊通道時因擁堵產(chǎn)生互相遮擋,導致目標框ID丟失,以上問題可以通過將羊通道出口收窄改善,文章算法能夠基本實現(xiàn)羊只計數(shù).
第一部分是羊只頭部目標檢測,文章采用CenterNet目標檢測算法對羊只頭部進行檢測,介紹了羊只頭部中心點預測和CenterNet整體結(jié)構(gòu),并對羊只檢測實驗結(jié)果進行分析,精確度可達80%,可作為羊只目標檢測的應(yīng)用算法.
第二部分是羊只頭部跟蹤與計數(shù),文章采用DeepSORT目標跟蹤算法對羊只ID進行跟蹤,介紹了DeepSORT目標跟蹤算法以及單線計數(shù)算法,并對計數(shù)結(jié)果進行實驗分析,精確度可達95.3%,可作為羊只目標跟蹤的應(yīng)用算法.
以上實驗表明,文章算法可以實現(xiàn)牧場中羊只自動計數(shù),為接下來系統(tǒng)推廣應(yīng)用奠定了基礎(chǔ).