杜永興,苗曉偉,秦 嶺,李寶山
(內蒙古科技大學 信息工程學院,包頭 014000)
內蒙古大草原作為最佳天然牧場之一,是我國草地分布最廣的地區。但是由于牧區缺乏高效的羊群計數的方法,因此相關部門不能對放牧強度作出監管和指導,導致過度放牧。高效的羊群計數方法同時能提高牧民在養殖過程中的工作效率。
近年來研究人員提出了一些有關羊群計數任務的方法。例如傳統的基于你只需一次運算(you only look once,YOLO)監測的方法[1],這種方法需要提取整張圖片的特征,然后進行卷積運算和非極大值抑制處理,得到圖片中羊的位置,最終計算出輸入圖片中羊的數量。這種方法雖然能對羊群進行計數,但是需要檢測并框出圖片中的每一只羊,因此當羊的密度較大時,由于羊群之間相互遮擋比較嚴重,所以計數效果較差。ZHANG等人提出了一種基于單片機和射頻識別(radio frequency identification,RFID)技術的智能數羊器系統[2],該方法首先給每一只羊的耳朵打耳標,然后通過RFID模塊對其進行計數,這種方法只適合在羊群入圈和出圈時使用,限制了羊群計數的場地。如果想對羊群進行計數,必須設有一個讓羊有序通過的通道,在羊有序通過的過程中由RFID模塊進行計數。但由于通道中能同時通過的羊群是有限的,因此不能快速且高效地對羊群進行計數。
針對目標計數的傳統方法有基于監測目標整體的方法[3],該類方法使用支持向量機、提升和隨機森林等多種分類器結合哈爾小波[4]、方向梯度直方圖(histogram of gradient,HOG)、小邊[5]等特征,使得這種方法在行人、車輛計數等方面進行了初步的應用。后來學者提出了基于部分監測的方法來提高計數的準確度,這類方法主要通過檢測目標的部分結構例如人的頭部和肩部[6]來進行計數,無論是哪種基于檢測的方法都無法規避目標之間相互遮擋的問題,研究人員提出了基于回歸的方法[7-8],該類方法首先提取低級特征,然后利用回歸模型學習低級特征與人群個數的映射關系,由于不需要檢測每一個目標個體,因此與基于檢測的方法相比較,計數準確率顯著地提高。
近年來,在計算機視覺領域中,卷積神經網絡表現出了巨大的優勢,研究人員開始嘗試在人群計數任務中使用卷積神經網絡對高密度場景的人群進行計數[9-10]。ZHANG等人提出了一種帶有不同尺度卷積核的多列卷積來應對密度差異的變化[11]。WU等人提出了具有不同感受野的兩條平行體系結構[12],并在公開的數據集上取得了較好的結果。OORO-RUBIO等人使用金字塔圖像來提取多個尺度的密度特征[13]。為了避免景深和遮擋的干擾,LEI提出了一種多模型融合的人群計數算法,并在人群計數任務方面取得了較好的效果[14]。TANG等人針對復雜開放環境下人群密度估計中的多尺度目標和小目標感知問題,提出了一種基于特征圖融合的多列卷積神經網絡的人群密度估計算法[15]。WANG等人提出了一種帶有注意力圖的兩分支融合模型,用于解決人群計數中比例尺度變化和復雜背景的問題[16]。WANG等人提出了一種上下文學習網絡用于對高密度人群進行計數[17]。為了讓模型適應不同人群密度的場景,WU等人提出了一種自適應場景發現框架,用于對密度不同的人群進行計數[18]。
使用卷積神經網絡的方法在高密度人群計數任務中已經取得了理想的效果。但針對草原上羊群計數的任務,目前還沒有相關報道。于是作者提出了一種基于視覺幾何群(visual geometry group,VGG)16與空洞卷積(dialated convolution,DC)相結合的卷積神經網絡(VGG-16+DC net,VDNet)的羊群計數算法來滿足牧民和相關部門的需要。將無人機拍攝的無固定分辨率的彩色圖片送入模型,生成對應的羊群分布圖,然后對密度圖進行像素積分得出圖片中羊群的數量,此方法不需要像傳統羊群計數方法一樣檢測并框出圖片中的每一只羊,因此在高密度場景下提升了計數準確度。經過實驗驗證平均準確率為93%。
采用大疆御2Mavic2Pro無人機,在內蒙古錫林郭勒盟蘇尼特左旗草原采集羊群視頻,同時在互聯網中爬取羊群圖片做為數據來源。
數據預處理:先人工篩選無人機拍攝回來的羊群視頻。再將視頻裁剪成一張張的圖片,并人工挑選適合標注的圖片。然后用Python腳本將圖片統一規范命名。最后將處理好的圖片分成測試集、訓練集,并進行人工標注。
采用MATLAB工具對羊群數據集進行手工標注,由于羊之間相互遮擋,在大多數時候看不到所有羊的頭部,所以標注羊身體的中心位置。標注過程如圖1所示。羊中心帶有紅色“+”號表示已經被人工標注。

Fig.1 Picture annotaion
標注過程中只標注了每只羊的一個點,但是直接使用標注的某個點作為訓練標簽進行訓練非常困難,預測結果很差。由于在擁擠的場景中,每只羊的大小通常與相鄰k只羊的中心距離有關,所以根據每只羊與其相鄰的k只羊的平均距離來自適應地確定每只羊的傳播參量,采用高斯核回歸的方式生成最終的訓練標簽。
采用幾何自適應高斯核的方法來生成密度圖[11]。假設在輸入的圖片中像素點xi處有一只羊,用δ(x-xi)來表示那只羊,則輸入圖片中的N只羊可用下式表示:

(1)
為了生成密度圖F(x),用帶有參量σi的高斯核濾波器函數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的輸入圖像的信息。空洞卷積能將k×k的卷積核擴張成為k+(k-1)(r-1)的卷積核,根據公式可知,當r=1時,卷積核大小不變,相當于一個普通的卷積核;當r=2時,3×3卷積核被擴大為5×5;當r=3時,3×3的卷積核被擴大為7×7。圖2中顯示了3×3的卷積核,在r為1,2,3時的情況。

Fig.2 Dilated convolution
雖然傳統的池化層(例如最大池化)常常用來保持不變性和控制過擬合,但是池化層的引入降低了空間分辨率,會導致丟失特征圖的一些空間信息。而反卷積操作可以減少空間信息的丟失,但是會導致執行延遲和增加網絡的復雜性。空洞卷積利用擴張后這種稀疏的卷積核在保持分辨率的同時擴大了感受野,代替池化操作,更加適合用來為高密度的羊群生成密度圖。
整個網絡分為前端和后端兩個部分,輸入為任意尺寸大小的原始彩色羊群圖片,經過網絡的前端和后端,最后用1×1的卷積層形成密度圖。
前端采用去除了全連接層的VGG-16[20]網絡提取2-D特征,為了平衡準確性和資源開銷,采用3層池化和10層卷積。前端網絡全部采用3×3的卷積核,最大池化層的大小為2×2,步長為2,前端輸出大小是原始輸入大小的1/8,如果繼續使用更多的卷積和池化操作,輸出圖像將進一步縮小,這將增加生成密度圖的難度。所以本文中采用空洞卷積作為后端網絡,空洞卷積能夠在保持分辨率不變的同時擴大感受野,更加適合生成高質量的羊群分布密度圖。由于VGG-16與空洞卷積相結合的網絡(VDNet)輸出的密度圖是原始輸入圖像的1/8,因此選擇倍數為8的雙線性插值對圖像進行縮放,確保模型的輸出圖像與輸入圖像具有相同的分辨率。VDNet網絡結構如圖3所示。網絡后端卷積層的參量依次表示為“卷積核大小-卷積核數量-空洞率”。

Fig.3 Network structure
本次實驗中所采用的服務器操作系統為Ubuntu16.04,中央處理器為RTX 2080 Ti,采用MATLAB 2018a作為手動標注羊群數據集的工具,使用的Python版本為3.6,0.4.0 Pytorch版本框架,采用的CUDA版本為CUDA9.2 cuDNN7.4.1。
制作的數據集包括1400張羊群圖片。其中有200張圖片來自互聯網,1200張圖片來自錫林郭勒盟蘇尼特左旗草原,單張圖片羊的數量范圍從10只~380只,經過人工標注后,使用隨機算法隨機給訓練集分配840張,測試集分配560張。
將整個網絡作為端到端的結構進行訓練,模型的前13層使用訓練好的VGG-16的參量進行初始化,其它各層使用標準差為0.01的高斯分布初始化,學習率為0.00006,優化算法為隨機梯度下降,并采用歐氏距離來計算圖片中羊群真實數量與預測的密度圖之間的距離。損失函數定義如下:

(5)
式中,‖·‖代表范數,N表示訓練圖像的總數量,Xi是第i張羊群圖像,θ是權值參量,Z(Xi∶θ)表示第i張圖像的估計密度,Zi′表示第i張圖像的真實密度。
研究人員都采用均方誤差(mean square error,MSE)和平均絕對誤差(mean absolute error,MAE)[21]來評估模型的性能。MSE表示模型的魯棒性,MSE越小表示魯棒性越高;MAE能反映出預測值的誤差情況,MAE值越小準確度越高。

Fig.4 Experimental result from thm first image to the forth image

(6)

(7)
式中,Ci代表圖片中羊的預測數量,Ci′代表圖片中羊的真實數量。Ci的值由下式計算:

(8)
式中,L表示密度圖的長,W表示密度圖的寬,Zl,w表示密度圖在(l,w)處的像素點。
經過實驗,作者的方法在此數據集上的MAE為2.51,MSE為3.74。圖4和圖5中提供了8組在不同密度區間羊群圖片的實驗結果。其中a列為輸入的原始圖像,b列為VDNet生成的密度圖以及對生成的密度圖像素積分后得出的羊群數量,c列為根據圖片中羊的真實位置生成的真實羊群密度圖及對密度圖積分后羊的真實數量。圖中橫縱坐標僅表示2維圖像中的間隔和范圍,無具體單位。可以看出,本文中的網絡結構能夠較為準確地反映輸入圖片中羊群的分布情況。
將本文中的方法與現有的人群計數方法進行對比。從表1中可以看出,本文中提出的方法在羊群計數任務上取得了更好的實驗結果。

Fig.5 Experimental result from the fifth image of the eighth image

Table 1 Experimental comparison
為了更好地滿足牧民和相關部門對羊群計數任務的需求,引入了空洞卷積對高密度羊群進行計數。網絡的前端采用VGG-16的前13層,后端采用6層的空洞卷積,最后一層使用1×1的卷積層進行卷積輸出密度圖。此方法不需要像傳統基于YOLO的羊群計數方法一樣檢測圖片中的每一只羊,避免了羊群之間相互遮擋帶來的計數準確率下降的問題。經過實驗驗證,本文中計數的方法平均絕對誤差為2.51,均方誤差為3.74,平均準確率為93%。