葉潤發(fā),趙建敏,李雪冬
(內蒙古科技大學 信息工程學院,內蒙古自治區(qū) 包頭 014010)
內蒙古自治區(qū)是中國重要的畜牧業(yè)生產基地,蓬勃發(fā)展的羊養(yǎng)殖業(yè)成為了內蒙古地區(qū)的標志性產業(yè)。羊群計數在監(jiān)測草原過度放牧和大規(guī)模牲畜保險理賠時是不可或缺的環(huán)節(jié),依靠傳統(tǒng)的人工計數方法費時費力,效率低下。利用深度學習的方法實現自動精確地計數,有助于節(jié)約人工成本,提高管理效率,為草原生態(tài)評估及牲畜保險理賠提供了技術和數據支持。本文將羊群密集計數算法與應用系統(tǒng)設計結合,構建羊群密集計數應用系統(tǒng)。在羊群密集計數算法部分,將密集人群計數領域的M-SegNet模型應用于密集羊群計數研究,同時在USC2021 數據集上與M-SFANet 模型對比。在應用系統(tǒng)設計部分,采用Django 框架作為Web 服務器端,實現用戶通過人機交互界面對羊群羊只計數。
大部分早期的密集計數研究集中在使用基于檢測的方法,依賴于從計數對象中提取特征,如哈爾小波(Haar Wavelets)和方向梯度直方圖(Histogram of Oriented Gradient,HOG),提取的特征較為單一,適用于稀疏的場景,這種計數模型在羊只密度較大的復雜場景下表現不佳,難以克服高遮擋問題,使估計精度有所降低。針對在高密度復雜場景下基于檢測的方法存在遷移困難的問題,相關研究人員提出了基于回歸的方法,該方法試圖根據圖像特征到數量的映射進行計數,巧妙地避開了復雜的檢測過程,但受到攝像機視角引起的頭部尺度變化大和背景噪聲大的人群分布多樣化的影響,基于回歸的方法難以進一步提升準確度。Lempitsky V 等[1]提出了一種基于密度圖估計的人群密集計數方法,通過對估計的密度圖進行積分,得到計數結果,同時保留了計數目標的空間分布信息,但這種方法的性能高度依賴于生成的真實密度圖的質量。
近年來,深度學習技術發(fā)展迅猛,在處理高密度計數問題上展現了傳統(tǒng)方法無法比擬的優(yōu)勢。許多研究人員致力于探索基于卷積神經網絡(convolutional neural network,CNN)的人群計數方法。與傳統(tǒng)方法相比,在處理場景適應性、尺度多樣性等問題時,基于CNN 的人群計數方法表現更佳。Zhang 等[2]提出了一個經過深度訓練的CNN 來估計人群數量,同時預測人群密度水平;Zhang Y 等[3]首次提出一種并行提取多尺度信息的多列卷積神經網絡(MCNN)模型,一定程度上解決了多尺度特征提取問題,大大提升了人群計數的精度;Cao 等[4]提出了一種編碼器-解碼器的規(guī)模聚合網絡(SANet),在編碼器中引入尺度聚合模塊來提高特征的表示能力和尺度多樣性,解碼器則生成與原始圖像大小一致的高質量密度圖;Liu N 等[5]通過將注意力感知網絡集成到多尺度可變形網絡中來檢測人群區(qū)域,從而將注意力機制應用于人群計數;Liu W 等[6]提出了一個基于VGG16 的模型,該模型具有可感知規(guī)模的上下文結構(CAN),結合從多個感受野大小中提取的特征,并了解每一個這樣的特征在圖像位置上的重要性;Zhu等[7]提出了雙路徑多尺度融合網絡(SFANet),并通過一條附加路徑來監(jiān)督學習生成的注意力圖,該網絡將類似UNet 的解碼器與雙路徑結構集成在一起,以預測復雜背景中的頭部區(qū)域,然后進行人數回歸,但SFANet 沒有明確的模塊來處理尺度變化問題。
M-SegNet 是基于編碼器-解碼器的深層卷積神經網絡,得益于3×3 卷積層在提取多尺度特征和多層次語義信息上的優(yōu)秀表現,M-SegNet 采用VGG16-bn 的前10 層作為特征圖編碼器,逐漸減小特征圖的大小并捕獲高級語義信息。輸出的特征圖為原始輸入圖像的1/8,便于生成高質量的密度圖,解碼器恢復空間信息以生成最終的高分辨率密度圖。M-SegNet 設計為使用最大反池化操作替換SFANet 中的雙線性上采樣,這種設計提供了更快的模式,同時提供了具有競爭力的計數性能。在人群計數中表現優(yōu)秀的M-SFANet 相比M-SegNet 沒有附加的上下文感知模塊CAN 和ASSP 來額外強調多尺度信息,因此是輕量級的模型,可以在某些人群計數基準上取得競爭性結果,且經實驗驗證,在羊群密集計數上也表現優(yōu)異。M-SegNet 的體系結構如圖1 所示。卷積層的參數表示為:Conv(內核大小)×(內核大?。粒ㄍǖ罃担?,最大值池化在2×2 像素的窗口上進行,步長為2。
圖1 M-SegNet 模型的體系結構Fig.1 The structure of the M-SegNet model
本文采用密度圖計數方法,該方法能夠反映出羊只的空間分布情況,對密度圖進行積分即可得到計數結果。為了生成密度圖的地面真實值D(x),本文采用帶有固定標準偏差核的高斯方法,對每個被標注的點進行高斯核卷積。假設在像素xi處有一個羊只身體部位標注為增量函數δ(x -xi),因此一幅帶有C個羊只標注點的圖像可以表示為H(x) 函數:
為了轉換成一個連續(xù)的密度函數F(x),可以將每個δ(x -xi) 與具有參數σ的高斯核濾波器Gσ進行卷積。該過程為
其中,*表示卷積運算。
事實上,每一個xi都是三維場景中地面上的羊群密度的樣本,并非是圖像平面上的獨立樣本。由于透視失真,表示羊身體部位的每一個像素點所占面積會存在較大差異。對于給定圖像中每個xi,本文將離其最近的K個羊只標注點的距離表示為。因此,平均距離可以表示為
為了準確估計xi周圍的羊群密度,需要用方差σi與di成正比的高斯核對δ(x -xi) 進行卷積,得到的密度圖方程為
本文在數據集USC(UAV Sheep Counting)的基礎上,采集了內蒙古自治區(qū)呼倫貝爾市新巴爾虎右旗牧場中羊圈羊群圖像,通過幀截取等處理,共得到3 590張羊群圖像,挑選2 700 張制作成數據集USC2021,涵蓋羊只遮擋嚴重、羊只數量不同、密度變化大和復雜光照條件等特點,為密集計數研究提供了數據支持。USC2021 數據集部分樣本如圖2 所示。
圖2 USC2021 數據集樣本示例Fig.2 Sample example of USC2021 dataset
為保證樣本的多樣性,將得到的圖像進行預處理,使用Matlab 2015a 作為標定軟件,標定點的個數即為圖像中羊只的真實個數。按照4 ∶1的比例將數據集劃分為訓練集和測試集,USC2021 羊群數據集見表1。
表1 USC2021 羊群數據集Tab.1 USC2021 sheep dataset
本文在羊群數據集USC2021 上訓練了MSFANet 模型和M-SegNet 模型,優(yōu)化了模型參數。
模型訓練與測試所使用硬件平臺為Intel i7-7700k,32 G 內存的CPU,NVIDIA GeForce GTX 1 080Ti×2 的顯卡,軟件平臺為Ubuntu16.04、CUDA 10.0、cudnn7.6.4。
模型訓練選用Adam 優(yōu)化器和lookahead 優(yōu)化器,參數配置為訓練epoch =1 500,學習率為0.000 05,權重衰減為 0.000 1,批處理規(guī)模batch_size =5;利用訓練后的網絡模型在USC2021的測試集上驗證對比算法的性能。
本文采用平均絕對誤差(Mean Absolute Error,MAE)、均方誤差(Mean Square Error,MSE)和平均相對誤差(Mean Relative Error,MRE)作為模型評價指標。指標定義公式(5)~公式(7):
對M -SFANet 模型和M -SegNet 模型在USC2021 測試集上的性能進行了對比,得到的結果見表2。
表2 兩種計數方法性能比較Tab.2 Performance comparison of two counting methods
可以看出,M-SegNet 模型訓練時間相對減少了20 個小時,密度圖平均絕對誤差為6.84、均方誤差為9.48、計數平均相對誤差為3.65%。本文還對比了兩個模型的網絡收斂情況,兩種模型的訓練損失曲線如圖3 所示??梢钥闯瞿P偷恼`差隨著epoch的增加趨于同一趨勢,表明在epoch的設計上能夠保證模型的誤差收斂??傮w來說,M-SegNet 模型在測試集上表現比M-SFANet 模型更勝一籌。
圖3 兩種模型的訓練損失曲線Fig.3 Training loss curve of the two models
實驗發(fā)現,公式(4)中β取0.3 時生成的羊群密度圖表現最佳,為了直觀的顯示網絡生成的密度圖,圖4 展示了兩個模型的可視化結果,既得到圖像中羊只的個數,也反映了羊只在圖像中的空間分布信息。
圖4 所選模型在測試集上的可視化結果Fig.4 Visualization results of two selected models on the test set
為更方便相關工作人員對牧場羊群的計數操作,本文基于Django 框架設計了羊群計數應用系統(tǒng)。Django 遵循模型-模板-視圖(Model-Template-View,MTV)模式,擁有良好的ORM 數據庫支持和URL 設計。本系統(tǒng)基于系統(tǒng)開發(fā)需求結合了輕量級數據庫SQLite,SQLite 將定義、表、索引和數據都存儲于宿主主機的一個單一文件中,能夠支撐起整個系統(tǒng)的運轉,功能不亞于如Mysql 等大型數據庫。羊群計數應用系統(tǒng)結構如圖5 所示。
圖5 羊群計數應用系統(tǒng)結構圖Fig.5 Sheep counting application system structure diagram
本系統(tǒng)的主要用戶是過度放牧監(jiān)測人員和牲畜保險工作人員,系統(tǒng)實現用戶注冊、找回密碼、羊只數量查詢以及系統(tǒng)維護等功能。羊只數量查詢結果界面如圖6 所示。
圖6 羊只計數查詢結果界面Fig.6 Sheep count query result interface
查詢結果界面展示有羊只數量、查詢時間、查詢用戶以及查詢次數等信息。為了記錄用戶的歷史查詢信息,本系統(tǒng)設計了用戶操作歷史查詢功能,除以上信息外,還能根據時間戳詳細記錄查詢者、查詢結果、查詢詳情和總查詢次數等信息,為信息維護提供了數據支持。
本文借鑒了人群密集計數方法,采用M-SegNet模型進行羊群密集計數,并與M-SFANet 模型進行對比。實驗結果表明,M-SegNet 模型比M-SFANet模型計算能力強,MAE、MSE和MRE分別降低了1.25、3.32 和0.6%,訓練時間短,同時還提供了類似的性能,提高了在復雜擁擠場景下的羊群計數精度,具有良好的準確性和魯棒性。
本系統(tǒng)設計提供了羊只數量查詢、用戶管理和歷史查詢等基本功能,用戶能夠直觀地對羊群圖像進行計數,方便計數結果的保存與維護,提升了工作效率。