祁 洋,李亞楠,孫 明,徐文霞
(1.武漢工程大學計算機科學與工程學院、人工智能學院,武漢 430205; 2.武漢工程大學智能機器人湖北省重點實驗室,武漢 430073)
中國是世界第一大棉花消費國和進口國,也是世界第二大棉花生產國,棉花高質量生產與經濟發展息息相關。幼苗作為棉花生長期內的一個重要階段,幼苗數量直接關系到其播種成活率、出苗率等苗情信息的獲取,間接影響棉花的發育監測與產量估計。然而,目前幼苗數量的統計手段還主要依賴于人工觀測。這種方式不僅效率低,主觀性強,而且很難滿足現代化大型農業的發展需要。因此,有必要利用智能化技術代替繁雜的人工觀測,助力棉花高質量生產。得益于深度學習技術的快速發展,基于計算機視覺的目標計數方法為獲取田間幼苗數量提供了新的技術手段。
在農業領域,目標計數方法常被用來解決農作物的空間分布、種植密度、以及產量預估等問題。傳統的目標計數方法主要包括基于檢測和基于回歸兩類。基于檢測的方法通過累加圖像中檢測框的數量獲取計數結果,或通過視頻序列統計前景目標的數量得到計數結果。陳鋒軍等在無人機航拍圖像的云杉計數問題上,提出了基于改進YOLOv3的檢測方法,梁習卉子等在棉花行數的計數問題上嘗試了基于視頻序列圖像,利用方向梯度直方圖(Histogram of Oriented Gradient, HOG)特征和支持向量機(Support Vector Machine, SVM)分類器來檢測棉花行數。上述基于檢測的方法在應對清晰的大尺寸目標取得較好效果,然而卻不能有效解決尺度變化大的小目標計數問題。并且,該方法需要繁瑣的邊界框標注或像素級注釋。因此,基于檢測的方法并不適用于棉花幼苗這種小目標的計數問題。基于回歸的計數方法通過學習目標顏色、紋理等淺層特征與數量間的映射關系,建立回歸模型直接輸出計數結果。Ramos等通過對單面圖像中的咖啡豆顏色形態等特征構建一個線性回歸模型,估計出整條枝干上的咖啡豆數量。盡管基于回歸的方法能在一定程度上解決小目標以及尺度變化帶來的問題,但是卻忽略了目標的空間位置信息。在針對棉花幼苗圖像這種高分辨率以及空間分布具有一定規律性的計數問題上,忽略位置信息可能導致計數精度的降低。
近年來,一種基于密度圖的計數方法能通過學習特征與密度圖之間的映射關系,生成高質量密度圖以獲取目標數量,大幅提升了計數精度。在人群計數領域,Zhang等提出多列卷積神經網絡(Multi-column Convolutional Neural Network, MCNN)方法,利用大小不同的濾波器獲取不同的感受野,以適應人群的尺度變化,估計出人群密度圖。Li等提出擁擠場景識別網絡(Congested Scene Recognition Network, CSRNet)方法,使用VGG-16的前十層提取圖像特征,用膨脹卷積層代替池化層和全連接層,在不增加計算量的情況,擴大感受野,提取更細致的特征。以及其他一些典型的基于密度圖的方法都取得了較好的效果。在農作物計數領域,這種方法也表現出良好的性能。鮑文霞等先對田間麥穗圖像進行均衡化和分割處理,通過遷移學習訓練田間麥穗密度圖估計模型,實現了灌漿期田間麥穗的數量估計。黃紫云等通過對圖像中棉鈴密度等級進行分類,將分類信息與特征相結合,生成高質量密度圖解決了復雜背景下棉鈴的計數問題。Lu等通過對圖像劃分區塊,從區塊密度圖中得到的局部計數,最后合并歸一化獲取整幅圖像中玉米須的數量。盡管基于密度圖的方法在解決小目標、多尺度等問題上取得了較好的計數效果,但是卻忽略了目標對象特征之間的關聯性,一定程度上限制了計數性能。
綜上所述,本文在CSRNet密度圖生成框架下,結合幼苗圖像全局特征信息與特征之間的關聯性,提出了一種基于特征融合的棉花幼苗計數算法。該算法通過注意力模塊對棉花幼苗全局特征信息進行增強,并將丟棄(Dropout)方法用于特征融合過程,最后通過去冗余和歸一化操作生成密度圖獲取計數結果。此外,本文對不同時間圖像進行了測試,并且對比了不同的計數方法,以驗證本文算法的有效性。
本文的棉花幼苗圖像采集試驗田位于新疆烏蘭烏蘇、阿瓦提和庫爾勒等地。從2017-2018年,連續采集了所有棉花生長期內的可見光圖像(分辨率為3 088像素×2 056像素)。本文在上述圖像中選取了從出苗期到三真葉期的部分圖像序列構成棉花幼苗數據(Cotton Seedling Counting Dataset,CSC數據集),其中幼苗圖像示例如圖1a和圖1b所示。CSC數據集大小為1.36 GB,一共包含399張棉花幼苗圖像,使用labelme3.16.2對每幅棉花幼苗圖像進行了手工標注點標簽,得到真值圖(ground-truth image,人工標記好的數據,用于測試試驗結果),如圖1c與圖1d所示。CSC數據集共標注了212 572株棉花幼苗,其中,單幅圖像最多幼苗標注數量為1 541,最少為196,平均每幅圖像標注數量為532.76。此外,為了說明本文算法的有效性,將數據集劃分為訓練集和測試集,其中,訓練集包含300幅圖像,測試集包含99幅圖像。

圖1 棉花幼苗圖像與真值圖像示例 Fig.1 Samples of cotton seedling image and ground-truth image
本文的計數算法由VGG基礎模塊、注意力模塊、特征融合模塊以及去冗余歸一化操作4個部分組成,如圖2所示。首先,輸入圖像經過VGG基礎模塊生成特征圖像。之后,注意力模塊對通道和空間維度上的特征圖像空間位置信息進行增強。特征融合模塊將增強后的特征與基礎模塊中的特征進行融合,最后去除冗余信息和歸一化操作,輸出計數結果。


圖2 棉花幼苗計數算法框架 Fig.2 The framework of cotton seedling counting algorithm
經過上述4層卷積層,特征圖變為原圖的1/64,通道維數升至512,為了避免幼苗空間關系特征以及顏色、紋理等細節特征的丟失,并提高計數精度,本文采用了注意力模塊CBAM。該模塊包含通道注意力模塊CAM(Channel Attention Module)和空間注意力模塊SAM(Spatial Attention Module),如圖3所示。

圖3 CBAM結構圖 Fig.3 CBAM structure diagram
其中,CAM對輸入的特征圖進行通道維度上的重新整合和優化。SAM采用自適應的平均池化和最大池化,將圖像中棉花幼苗空間特征連接起來。因此,CBAM模塊從通道和空間維度上對幼苗全局特征信息進行增強。需要強調的是,該模塊的輸出特征圖與輸入特征圖保持相同的大小和通道數。為了細化基礎模塊生成的特征圖以及為后續融合模塊保留更多更重要的融合信息,本文將CBAM模塊置于特征提取基礎模塊與特征融合模塊之間。 活函數ReLU(修正線性單元,Rectified Linear Unit)。其中,為了實現通道維度上的信息交互,以及保證特征融合時的通道數量一致性,本文將此處的1×1卷積的輸出通道數量設置為輸入通道數量的二分之一。值得注意的是,在完成上一次的特征融合后,1×1卷積塊會對融合的特征圖進行預處理,將語義信息和細節信息凸顯化,進而準備下一階段的融合。之后,對經過卷積塊操作的特征圖像通過雙線性插值進行上采樣(Upsample),上采樣率設置為2,即與淺層特征圖保持相同的尺寸,保證在特征融合時的大小一致性。
一般來說,淺層特征圖具有復雜的細節信息,而深層特征圖包含豐富的語義信息。深層特征與淺層特征的融合不僅可以避免細節信息的丟失,還能加快模型訓練損失的收斂。因此,在MobileCount的啟發下,本文提出一種特征融合模式,如圖2特征融合模塊所示。對經過注意力模塊增強后的特征與VGG基礎模塊提取的前3層(Conv1-Conv3)特征進行3個階段的融合,增強幼苗特征信息表達。然而,盡管淺層特征圖具有復雜的細節信息,但同時也包含較多的噪聲。此前,Lin等提出了較為成熟的特征融合方法,但這種方法并不能有效避免淺層特征圖中的噪聲。為解決這一問題,本文設計了一種特征融合方法,具體過程如圖4所示。需要注意的是,在特征融合時,應保證兩端輸入的特征圖具有一致的尺寸大小和通道數量。

圖4 特征融合方法的過程 Fig.4 The process of feature fusion method
特征融合方法首先采用1×1卷積塊對深層特征圖進行操作。該卷積塊包括一層1×1卷積(1×1Convolution),一層批量歸一化(Batch Normalization,BN)和一層激
其次,對于噪聲較大的淺層特征圖,在進行融合之前,使用Dropout隨機丟棄其中一部分信息(只用于訓練,且Dropout概率設置為50%),從而避免噪聲的干擾,同時也防止模型在訓練時過擬合。之后,再對保留下來的特征進行1×1卷積塊的操作,完成與深層特征圖的融合,并進入下一階段。此時,1×1卷積塊中的卷積操作只是對保留的特征信息進行重新整合,并沒有改變特征圖的通道數目。
經過多層融合后得到的特征圖像的通道數為64,包含了大量的通道冗余信息,直接進行預測輸出很大程度上會影響最終的計數精度。因此,本文先使用三個3×3卷積對融合后的特征信息進行歸納和整合,然后再用一個1×1卷積對特征圖每一像素位置通道維度上的特征向量進行壓縮,生成一張單通道的特征圖,以去除冗余信息。受尺度融合計數分類網絡(Scale-Fusion Counting Classification Network, SFC Net)的啟發,去冗余之后,本文對單通道特征圖進行計數歸一化(Normalization),將每一個像素位置的計數數量與該位置被計數次數相除,生成密度圖像輸出并獲取最終計數結果。
本文算法試驗環境為:Ubuntu20.04系統、Pytorch1.7.1開源框架、Python3.8編程語言、Intel Core i9-10900X CPU@3.70GHz以及GeForce RTX 3090。訓練時,為了減少計算量以及擴大訓練樣本數量,將訓練圖像進行隨機裁剪(尺寸為256像素×1 024像素)、翻轉以及標準化預處理(均值減法和標準差除法),之后與ground-truth一起被加載訓練。設置訓練時的批樣本大小(batch size)為10,即每批次從訓練集中加載10幅圖像。測試時batch size設置為1,每批次從測試集中加載1幅圖像。迭代訓練次數(epoch)設置為500,從圖5可以看出,在模型迭代訓練100次之前,訓練損失下降明顯,之后逐漸趨于平穩,并在第200次和第400次時,將學習率進行調整為當前學習率的十分之一,以保證模型收斂且接近于最優。采用Adam算法對模型參數進行優化,使用L1損失函數對模型訓練進行監督。損失函數L1Loss定義如式(1)~式(2)所示。

圖5 模型訓練損失曲線 Fig.5 Model training loss curve


本文使用平均絕對誤差(Mean Absolute Error,MAE)和均方根誤差(Root Mean Square Error,RMSE)來評估算法模型的性能。定義如下:

式中代表測試集中圖像的總數量,y表示第張圖像中幼苗的真實數量,y′表示第張圖像中幼苗的估計數量。平均絕對誤差與均方根誤差越低,從某種程度上可以反映出算法的性能越強。
本文在棉花幼苗圖像上進行實際計數估計,并輸出密度圖及計數結果。圖6列舉了一些拍攝于不同時間段的棉花幼苗圖像計數預測結果。其中,真值密度圖是對標注的真值圖利用熱力圖顯示得到,其幼苗數量通過點標簽的數量確定。預測密度圖中的幼苗數量是通過對模型輸出密度圖中的所有像素點(包括稀疏像素點)進行積分求和得到的。值得注意的是,在圖6的列舉結果中,拍攝于2018年5月6日14:00的圖像,即使在噪聲(圖中電線桿和攝像頭的陰影區域)的干擾下,算法預測的幼苗數量與實際幼苗數量相差僅為1株,較為準確的估計出了幼苗的數量,另外3幅圖像的預測數量與真實數量之間相差均不超過10株,這說明本文算法表現出較好的性能。并且,算法預測的密度圖不僅能夠獲取棉花幼苗數量,也能在一定程度上反應出棉花幼苗的種植密度。此外,在圖6的列舉結果中,拍攝于2018年5月6日14:00的圖像,即使在陰影噪聲的干擾下,本文算法依然能夠較為準確的估計出幼苗的數量,也能反映出該算法具有一定的有效性。

圖6 不同時間計數結果 Fig.6 Counting results at different times
此外,本文將測試集圖像分為中午組和早晚組。中午組為拍攝于12:00和14:00的圖像,此段時間陽光充足,光照條件較好,共計52張。早晚組為拍攝于8:00、9:00、10:00以及16:00、18:00的圖像,這些時間光線斜射,光照條件相對較弱,共計47張。不同組別的驗證結果如表1所示,可以看出,在不同的光照條件下,本文算法模型的性能變化并不大,說明了本文算法具有較強的魯棒性和穩定性。

表1 不同光照條件的幼苗計數對比結果 Table 1 Comparison results of seedling counting under different lighting conditions
為了進一步說明本文方法的有效性,選擇了4種典型的基于密度圖的目標計數方法進行對比,對比試驗的訓練數據、測試數據(全部測試集)以及訓練細節均保持一致。
在目標計數領域,MCNN和CSRNet這兩種方法非常具有典型性,雖然其研究對象為人群,但是其基于CNN的計數模型與本文算法具有一定的相似性。TasselNet是Lu等提出的針對田間玉米穗計數方法,本文對比試驗使用TasselNet中具有最佳計數性能的基于AlexNet-Like架構的方法作為對比。MobileCount是Wang提出的方法,其在Lin等提出的輕量級模型方法的基礎上,利用多層知識蒸餾和特征融合,進一步提高了計數性能。因本文特征融合的思想來源于它,所以將其加入對比試驗。
本文方法與其他方法進行對比的結果如表2所示。為了合理的進行對比,所有結果均取自測試集上的最優數據。從表2的數據中可以看出,MCNN和CSRNet這兩種典型的目標計數方法表現出的性能并不好,這可能與沒有考慮目標的空間信息有關,并不適用于田間棉花幼苗的計數。MobileCount利用知識蒸餾融合特征,從而達到了較好的計數效果,與TasselNet相比,MAE和RMSE下降幅度(計算方式參考Liu等的方法)均超過40%。與MobileCount方法相比,本文算法MAE和RMSE分別降低了10.89%和10.34%。相較于MCNN、CSRNet、TasselNet和MobileCount 4個對比方法,本文算法MAE和RMSE分別為63.46、81.33, MAE平均下降了48.8%,RMSE平均下降了45.3%,這證明了本文所提方法的有效性。

表2 不同計數算法的定量分析 Table 2 Quantitative analysis of different counting algorithms
為了驗證本文算法設計的合理性和有效性,分別從Dropout對特征融合的影響和不同模塊對本文算法的影響兩方面進行消融試驗,試驗結果分別如表3和表4所示。

表4 不同模塊對本文算法的影響 Table 4 The effect of different modules on the algorithm of this article
表3中,無Dropout的融合方法是保持原有的融合策略,直接使用VGG基礎模塊中的特征進行融合。反之,則為本文提出的融合方法,即在融合過程中添加了Dropout,隨機丟棄一部分噪聲較大的淺層特征圖。從表3中可以看出,Dropout在融合過程中發揮了積極的作用。相比于無Dropout的融合方法,本文融合方法的MAE和RMSE都下降約16%。

表3 Dropout對特征融合的影響 Table 3 The effect of Dropout on the feature fusion
表4驗證了不同模塊對本文算法的影響,其結果表明,相較于單獨使用CBAM和歸一化中任意一個模塊,本文算法MAE平均下降47.8%,RMSE平均下降44.8%。因此,將注意力模塊CBAM與去冗余(Normalization)操作引入本文算法是有效的。
本文提出的棉花計數算法,采用VGG-16作為骨干網絡提取圖像特征,引入注意力機制模塊CBAM增強基礎特征,隨后將這些特征一并融合,進一步強化幼苗特征表示,最后通過去冗余和使用歸一化模塊獲得較為精確的計數結果。與目標計數方法MCNN、CSRNet、TasselNet以及MobileCount的對比試驗結果表明,本文算法MAE和RMSE分別為63.46、81.33,相較于對比方法,MAE平均下降了48.8%,RMSE平均下降了45.3%,驗證了本文算法的有效性。即使存在陰影噪聲干擾和光照強弱變化,該算法仍然能夠較為準確地估計出圖像中的幼苗數量,進一步說明該算法具有較強的魯棒性。此外,消融試驗結果表明:添加Dropout特征融合方法、引入注意力模塊CBAM以及歸一化操作是有效的。
由于本文棉花幼苗數據采集于實際農田環境,幼苗在生長過程中呈現多樣的姿態和尺度,這可能是導致少數測試圖像的預測數量與實際數量相差較大的原因。在今后的研究中,將從上述不足和算法的可遷移性等方向進一步優化算法,以提升其計數性能和適用性。