杜永興,苗曉偉,秦 嶺,李寶山
(內(nèi)蒙古科技大學(xué) 信息工程學(xué)院,包頭 014000)
內(nèi)蒙古大草原作為最佳天然牧場之一,是我國草地分布最廣的地區(qū)。但是由于牧區(qū)缺乏高效的羊群計(jì)數(shù)的方法,因此相關(guān)部門不能對放牧強(qiáng)度作出監(jiān)管和指導(dǎo),導(dǎo)致過度放牧。高效的羊群計(jì)數(shù)方法同時能提高牧民在養(yǎng)殖過程中的工作效率。
近年來研究人員提出了一些有關(guān)羊群計(jì)數(shù)任務(wù)的方法。例如傳統(tǒng)的基于你只需一次運(yùn)算(you only look once,YOLO)監(jiān)測的方法[1],這種方法需要提取整張圖片的特征,然后進(jìn)行卷積運(yùn)算和非極大值抑制處理,得到圖片中羊的位置,最終計(jì)算出輸入圖片中羊的數(shù)量。這種方法雖然能對羊群進(jìn)行計(jì)數(shù),但是需要檢測并框出圖片中的每一只羊,因此當(dāng)羊的密度較大時,由于羊群之間相互遮擋比較嚴(yán)重,所以計(jì)數(shù)效果較差。ZHANG等人提出了一種基于單片機(jī)和射頻識別(radio frequency identification,RFID)技術(shù)的智能數(shù)羊器系統(tǒng)[2],該方法首先給每一只羊的耳朵打耳標(biāo),然后通過RFID模塊對其進(jìn)行計(jì)數(shù),這種方法只適合在羊群入圈和出圈時使用,限制了羊群計(jì)數(shù)的場地。如果想對羊群進(jìn)行計(jì)數(shù),必須設(shè)有一個讓羊有序通過的通道,在羊有序通過的過程中由RFID模塊進(jìn)行計(jì)數(shù)。但由于通道中能同時通過的羊群是有限的,因此不能快速且高效地對羊群進(jìn)行計(jì)數(shù)。
針對目標(biāo)計(jì)數(shù)的傳統(tǒng)方法有基于監(jiān)測目標(biāo)整體的方法[3],該類方法使用支持向量機(jī)、提升和隨機(jī)森林等多種分類器結(jié)合哈爾小波[4]、方向梯度直方圖(histogram of gradient,HOG)、小邊[5]等特征,使得這種方法在行人、車輛計(jì)數(shù)等方面進(jìn)行了初步的應(yīng)用。后來學(xué)者提出了基于部分監(jiān)測的方法來提高計(jì)數(shù)的準(zhǔn)確度,這類方法主要通過檢測目標(biāo)的部分結(jié)構(gòu)例如人的頭部和肩部[6]來進(jìn)行計(jì)數(shù),無論是哪種基于檢測的方法都無法規(guī)避目標(biāo)之間相互遮擋的問題,研究人員提出了基于回歸的方法[7-8],該類方法首先提取低級特征,然后利用回歸模型學(xué)習(xí)低級特征與人群個數(shù)的映射關(guān)系,由于不需要檢測每一個目標(biāo)個體,因此與基于檢測的方法相比較,計(jì)數(shù)準(zhǔn)確率顯著地提高。
近年來,在計(jì)算機(jī)視覺領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)表現(xiàn)出了巨大的優(yōu)勢,研究人員開始嘗試在人群計(jì)數(shù)任務(wù)中使用卷積神經(jīng)網(wǎng)絡(luò)對高密度場景的人群進(jìn)行計(jì)數(shù)[9-10]。ZHANG等人提出了一種帶有不同尺度卷積核的多列卷積來應(yīng)對密度差異的變化[11]。WU等人提出了具有不同感受野的兩條平行體系結(jié)構(gòu)[12],并在公開的數(shù)據(jù)集上取得了較好的結(jié)果。OORO-RUBIO等人使用金字塔圖像來提取多個尺度的密度特征[13]。為了避免景深和遮擋的干擾,LEI提出了一種多模型融合的人群計(jì)數(shù)算法,并在人群計(jì)數(shù)任務(wù)方面取得了較好的效果[14]。TANG等人針對復(fù)雜開放環(huán)境下人群密度估計(jì)中的多尺度目標(biāo)和小目標(biāo)感知問題,提出了一種基于特征圖融合的多列卷積神經(jīng)網(wǎng)絡(luò)的人群密度估計(jì)算法[15]。WANG等人提出了一種帶有注意力圖的兩分支融合模型,用于解決人群計(jì)數(shù)中比例尺度變化和復(fù)雜背景的問題[16]。WANG等人提出了一種上下文學(xué)習(xí)網(wǎng)絡(luò)用于對高密度人群進(jìn)行計(jì)數(shù)[17]。為了讓模型適應(yīng)不同人群密度的場景,WU等人提出了一種自適應(yīng)場景發(fā)現(xiàn)框架,用于對密度不同的人群進(jìn)行計(jì)數(shù)[18]。
使用卷積神經(jīng)網(wǎng)絡(luò)的方法在高密度人群計(jì)數(shù)任務(wù)中已經(jīng)取得了理想的效果。但針對草原上羊群計(jì)數(shù)的任務(wù),目前還沒有相關(guān)報道。于是作者提出了一種基于視覺幾何群(visual geometry group,VGG)16與空洞卷積(dialated convolution,DC)相結(jié)合的卷積神經(jīng)網(wǎng)絡(luò)(VGG-16+DC net,VDNet)的羊群計(jì)數(shù)算法來滿足牧民和相關(guān)部門的需要。將無人機(jī)拍攝的無固定分辨率的彩色圖片送入模型,生成對應(yīng)的羊群分布圖,然后對密度圖進(jìn)行像素積分得出圖片中羊群的數(shù)量,此方法不需要像傳統(tǒng)羊群計(jì)數(shù)方法一樣檢測并框出圖片中的每一只羊,因此在高密度場景下提升了計(jì)數(shù)準(zhǔn)確度。經(jīng)過實(shí)驗(yàn)驗(yàn)證平均準(zhǔn)確率為93%。
采用大疆御2Mavic2Pro無人機(jī),在內(nèi)蒙古錫林郭勒盟蘇尼特左旗草原采集羊群視頻,同時在互聯(lián)網(wǎng)中爬取羊群圖片做為數(shù)據(jù)來源。
數(shù)據(jù)預(yù)處理:先人工篩選無人機(jī)拍攝回來的羊群視頻。再將視頻裁剪成一張張的圖片,并人工挑選適合標(biāo)注的圖片。然后用Python腳本將圖片統(tǒng)一規(guī)范命名。最后將處理好的圖片分成測試集、訓(xùn)練集,并進(jìn)行人工標(biāo)注。
采用MATLAB工具對羊群數(shù)據(jù)集進(jìn)行手工標(biāo)注,由于羊之間相互遮擋,在大多數(shù)時候看不到所有羊的頭部,所以標(biāo)注羊身體的中心位置。標(biāo)注過程如圖1所示。羊中心帶有紅色“+”號表示已經(jīng)被人工標(biāo)注。
Fig.1 Picture annotaion
標(biāo)注過程中只標(biāo)注了每只羊的一個點(diǎn),但是直接使用標(biāo)注的某個點(diǎn)作為訓(xùn)練標(biāo)簽進(jìn)行訓(xùn)練非常困難,預(yù)測結(jié)果很差。由于在擁擠的場景中,每只羊的大小通常與相鄰k只羊的中心距離有關(guān),所以根據(jù)每只羊與其相鄰的k只羊的平均距離來自適應(yīng)地確定每只羊的傳播參量,采用高斯核回歸的方式生成最終的訓(xùn)練標(biāo)簽。
采用幾何自適應(yīng)高斯核的方法來生成密度圖[11]。假設(shè)在輸入的圖片中像素點(diǎn)xi處有一只羊,用δ(x-xi)來表示那只羊,則輸入圖片中的N只羊可用下式表示:
(1)
為了生成密度圖F(x),用帶有參量σi的高斯核濾波器函數(shù)Gσi(x)和H(x)做卷積:
F(x)=H(x)×Gσi(x)
(2)
(3)
2維空洞卷積的定義如下[19]:
(4)
式中,r表示空洞率,w(i,j)是過濾器,x(m,n)是長和寬分別為m和n的輸入圖像的信息??斩淳矸e能將k×k的卷積核擴(kuò)張成為k+(k-1)(r-1)的卷積核,根據(jù)公式可知,當(dāng)r=1時,卷積核大小不變,相當(dāng)于一個普通的卷積核;當(dāng)r=2時,3×3卷積核被擴(kuò)大為5×5;當(dāng)r=3時,3×3的卷積核被擴(kuò)大為7×7。圖2中顯示了3×3的卷積核,在r為1,2,3時的情況。
Fig.2 Dilated convolution
雖然傳統(tǒng)的池化層(例如最大池化)常常用來保持不變性和控制過擬合,但是池化層的引入降低了空間分辨率,會導(dǎo)致丟失特征圖的一些空間信息。而反卷積操作可以減少空間信息的丟失,但是會導(dǎo)致執(zhí)行延遲和增加網(wǎng)絡(luò)的復(fù)雜性??斩淳矸e利用擴(kuò)張后這種稀疏的卷積核在保持分辨率的同時擴(kuò)大了感受野,代替池化操作,更加適合用來為高密度的羊群生成密度圖。
整個網(wǎng)絡(luò)分為前端和后端兩個部分,輸入為任意尺寸大小的原始彩色羊群圖片,經(jīng)過網(wǎng)絡(luò)的前端和后端,最后用1×1的卷積層形成密度圖。
前端采用去除了全連接層的VGG-16[20]網(wǎng)絡(luò)提取2-D特征,為了平衡準(zhǔn)確性和資源開銷,采用3層池化和10層卷積。前端網(wǎng)絡(luò)全部采用3×3的卷積核,最大池化層的大小為2×2,步長為2,前端輸出大小是原始輸入大小的1/8,如果繼續(xù)使用更多的卷積和池化操作,輸出圖像將進(jìn)一步縮小,這將增加生成密度圖的難度。所以本文中采用空洞卷積作為后端網(wǎng)絡(luò),空洞卷積能夠在保持分辨率不變的同時擴(kuò)大感受野,更加適合生成高質(zhì)量的羊群分布密度圖。由于VGG-16與空洞卷積相結(jié)合的網(wǎng)絡(luò)(VDNet)輸出的密度圖是原始輸入圖像的1/8,因此選擇倍數(shù)為8的雙線性插值對圖像進(jìn)行縮放,確保模型的輸出圖像與輸入圖像具有相同的分辨率。VDNet網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。網(wǎng)絡(luò)后端卷積層的參量依次表示為“卷積核大小-卷積核數(shù)量-空洞率”。
Fig.3 Network structure
本次實(shí)驗(yàn)中所采用的服務(wù)器操作系統(tǒng)為Ubuntu16.04,中央處理器為RTX 2080 Ti,采用MATLAB 2018a作為手動標(biāo)注羊群數(shù)據(jù)集的工具,使用的Python版本為3.6,0.4.0 Pytorch版本框架,采用的CUDA版本為CUDA9.2 cuDNN7.4.1。
制作的數(shù)據(jù)集包括1400張羊群圖片。其中有200張圖片來自互聯(lián)網(wǎng),1200張圖片來自錫林郭勒盟蘇尼特左旗草原,單張圖片羊的數(shù)量范圍從10只~380只,經(jīng)過人工標(biāo)注后,使用隨機(jī)算法隨機(jī)給訓(xùn)練集分配840張,測試集分配560張。
將整個網(wǎng)絡(luò)作為端到端的結(jié)構(gòu)進(jìn)行訓(xùn)練,模型的前13層使用訓(xùn)練好的VGG-16的參量進(jìn)行初始化,其它各層使用標(biāo)準(zhǔn)差為0.01的高斯分布初始化,學(xué)習(xí)率為0.00006,優(yōu)化算法為隨機(jī)梯度下降,并采用歐氏距離來計(jì)算圖片中羊群真實(shí)數(shù)量與預(yù)測的密度圖之間的距離。損失函數(shù)定義如下:
(5)
式中,‖·‖代表范數(shù),N表示訓(xùn)練圖像的總數(shù)量,Xi是第i張羊群圖像,θ是權(quán)值參量,Z(Xi∶θ)表示第i張圖像的估計(jì)密度,Zi′表示第i張圖像的真實(shí)密度。
研究人員都采用均方誤差(mean square error,MSE)和平均絕對誤差(mean absolute error,MAE)[21]來評估模型的性能。MSE表示模型的魯棒性,MSE越小表示魯棒性越高;MAE能反映出預(yù)測值的誤差情況,MAE值越小準(zhǔn)確度越高。
Fig.4 Experimental result from thm first image to the forth image
(6)
(7)
式中,Ci代表圖片中羊的預(yù)測數(shù)量,Ci′代表圖片中羊的真實(shí)數(shù)量。Ci的值由下式計(jì)算:
(8)
式中,L表示密度圖的長,W表示密度圖的寬,Zl,w表示密度圖在(l,w)處的像素點(diǎn)。
經(jīng)過實(shí)驗(yàn),作者的方法在此數(shù)據(jù)集上的MAE為2.51,MSE為3.74。圖4和圖5中提供了8組在不同密度區(qū)間羊群圖片的實(shí)驗(yàn)結(jié)果。其中a列為輸入的原始圖像,b列為VDNet生成的密度圖以及對生成的密度圖像素積分后得出的羊群數(shù)量,c列為根據(jù)圖片中羊的真實(shí)位置生成的真實(shí)羊群密度圖及對密度圖積分后羊的真實(shí)數(shù)量。圖中橫縱坐標(biāo)僅表示2維圖像中的間隔和范圍,無具體單位??梢钥闯?本文中的網(wǎng)絡(luò)結(jié)構(gòu)能夠較為準(zhǔn)確地反映輸入圖片中羊群的分布情況。
將本文中的方法與現(xiàn)有的人群計(jì)數(shù)方法進(jìn)行對比。從表1中可以看出,本文中提出的方法在羊群計(jì)數(shù)任務(wù)上取得了更好的實(shí)驗(yàn)結(jié)果。
Fig.5 Experimental result from the fifth image of the eighth image
Table 1 Experimental comparison
為了更好地滿足牧民和相關(guān)部門對羊群計(jì)數(shù)任務(wù)的需求,引入了空洞卷積對高密度羊群進(jìn)行計(jì)數(shù)。網(wǎng)絡(luò)的前端采用VGG-16的前13層,后端采用6層的空洞卷積,最后一層使用1×1的卷積層進(jìn)行卷積輸出密度圖。此方法不需要像傳統(tǒng)基于YOLO的羊群計(jì)數(shù)方法一樣檢測圖片中的每一只羊,避免了羊群之間相互遮擋帶來的計(jì)數(shù)準(zhǔn)確率下降的問題。經(jīng)過實(shí)驗(yàn)驗(yàn)證,本文中計(jì)數(shù)的方法平均絕對誤差為2.51,均方誤差為3.74,平均準(zhǔn)確率為93%。