黃學飛,梁昌遠,郭杰
(1.皖北煤電集團有限責任公司,安徽宿州 234002;2.安徽恒源煤電股份有限公司,安徽宿州 234002)
遙感影像的獲取過程中云的存在是常見的現象,由于云的遮擋,使得地面信息無法被衛星獲取到,給后續的影像分析解譯帶來了困難[1-2]。所以,遙感影像云檢測是首要而且必要的一環,云檢測的精度與速度對分析解譯有直接影響。
云檢測的方法大致可以分為三種:手工勾繪方法、基于波段閾值及紋理信息的檢測方法與基于深度學習的檢測方法[3]。基于深度學習的云檢測過程中不需要人工干預,實現了端到端的檢測?;诓ǘ伍撝档脑茩z測方法最早是Zhu[4]等提出FMask算法,通過設定波段閾值來實現Landsat衛星影像的云檢測。在基于紋理的云檢測方法中,Otsu算法[5]、K-means聚類法[6]等都是基于鄰域的相似性進行檢測,對噪聲比較敏感,魯棒性較差。Kang[7]利用高斯混合模型自適應獲取影像的灰度閾值,從而分離ZY-3影像的前景與背景,實現云的檢測,但對地表上較亮的地物誤判比較嚴重。Qiu等[8]使用CFMask算法檢測Landsat8影像的云及云陰影,然后用其結果代替人工勾繪的云標簽參與深度學習訓練,再用訓練的模型檢測新圖像的云及云陰影,結果發現,其檢測結果比原始標簽精度更高。Li等[9]利用灰度共生矩陣提取圖像的紋理特征,使用紋理特征與光譜特征結合,再使用支持向量機的方法對高分一號衛星影像進行云檢測。Xu等[10]使用超像素分割方法與卷積神經網絡相結合,采用半監督的方式與傳統的Otsu算法相比,云檢測精度有較大的提高。
隨著深度學習算法的不斷進步,越來越多的遙感問題都可以通過深度學習的方法得到有效解決?;谏鲜鲅芯?,本文提出一種融入注意力機制的密集連接網絡,以解決深度學習算法檢測小塊云朵效果差的問題。
DenseNet[11]網絡是2018年由Gao H等提出,DenseNet借鑒了He K M提出的ResNet跳躍連接以減輕梯度消散現象,從而訓練到更深層的網絡思想,直接將任意兩層進行跳躍連接,以求最大化減輕梯度消散問題,從而訓練到更深的網絡。
DenseNet不同的是其互相連接所有的層,具體來說,就是每個層都會接受其前面所有層作為其額外的輸入,密集連接模塊(Densely Connected Block)結構如圖1所示,其公式如下:

圖1 密集連接模塊

其中xl表示第l層的輸出的特征圖,[x0,x1…,xl-1]表示前l-1層的輸出的特征圖的拼接,H表示對特征圖進行卷積層、批歸一化、激勵層等操作。
DenseNet還包含了一個重要的轉換模塊(Transition Block),如圖2所示,用在密集連接模塊之后,將得到的特征圖的通道數減小為原來的一半。每次拼接之前都加入一個瓶頸(bottleneck)結構,將其特征圖的通道數減小為增長率,這樣就可以大幅度減小通道數。則經過一個密集連接模塊之后的特征數就可以表示為:

圖2 轉換模塊

式中,Cˊ表示經過密集連接模塊之后的通道數,C為經過密集連接模塊之前的通道數,g表示通道數的增長率,n表示層數量。
通過密集連接模塊后,經過轉換模塊(Transition Block)可將其通道數降為原始的一半,從而更加簡化了計算量,提升計算效率。
1.2.1 雙注意力機制
通道注意力模塊。雙注意力機制[12]中的通道注意力模塊(Channel Attention Model)通過矩陣變換的方式對通道的信息加權,雙注意力機制的通道注意力模塊如圖4所示。

圖3 通道注意力模塊
位置注意力模塊。雙注意力機制中的位置注意力模塊(Position Attention Model)是使用通過自相關矩陣的變換得到位置權重,可以更注意全局特征,其模型結構如圖4所示:

圖4 位置注意力模塊
1.2.2 全局上下文建模模塊
雙注意力機制可以融合位置注意力機制與通道注意力機制,最早提出的是NLNet,它利用自我注意機制建立遠程依賴,使網絡能夠更全面地理解圖像,從而不會使計算機局部感知圖像。
GCNet[13]提出了簡化NLNet版本,并結合了SENet計算量少的優點,不僅有效地建立遠程依賴,而且節省了網絡結構的計算量。GCNet的GC-Block模塊如圖5所示。

圖5 全局上下文建模模塊
擴大感受野最簡單的方法就是增大卷積核的大小,但是卷積核大小的增大一定會使計算量增加,隨著Deeplab V1提出的空洞卷積,即擴大卷積核并在卷積核中使用部分用0來填充,可以簡單方便地解決計算量增加的問題。如圖6所示,空洞卷積模塊通過不同空洞率的級聯,實現了在不改變圖像分辨率的前提下獲得更大的感受野。

圖6 空洞卷積模塊
在上述研究的基礎上,本文提出融合注意力機制的密集連接網絡,具體模型結構如圖7所示:

圖7 融入注意力機制的密集連接網絡
編碼器階段:將裁切好的3通道的影像經過一個初始模塊,然后分別經過四個密集連接模塊與轉換模塊提取特征,密集連接模塊有效地減弱了梯度消散問題。
中間層:首先,通過GC-Block提取特征圖的上下文信息,雙注意力機制融合了位置注意力與通道注意力信息,使計算機更好地注意需要的特征,再將結果送入空洞卷積模塊中,使其在不改變特征圖分辨率的前提下,增大感受野,進一步提取特征圖的全局特征。
解碼器階段:解碼器部分首先上采樣使特征圖的通道數減小為剛通過編碼器階段DenseBlock3特征圖的通道數,然后與其進行跳躍拼接,從而使特征圖通道數變為原來的兩倍。經過DenseBlock之后,通道數增加,再通過上采樣降低通道數,直到最后將特征圖變為通道數為1的二值圖。
本文的實驗均在Ubantu16.04,CUDA 10.1,NVIDIA UNIX 64核的PyTorch 1.2.0深度學習框架下進行。
本次實驗的數據為來自于38cloud公開數據集影像。
參數設置。batchsize為4,步長為20,使用的優化器為Adam,初始學習率為0.001,自動調整學習率,每次調整變為原來的1/2,直到損失值7次不再下降為止。
由于這是針對二分類問題,所以使用BCELoss作為損失函數。BCELoss是二分類問題中優秀的損失函數,其公式為:

公式(3)(4)中GT表示標簽影像(Ground True),P表示預測影像(Predicet Mask),N為批大小,W表示影像的寬度,H為高度,gtij為在i,j位置的像素值,pij為在i,j位置的像素值。
這里選取的指標為平均交并比(mIou)、召回率(recall)以及準確率(precision)。其計算方式如下:

在公式(5)(6)(7)中TP(True Positive)為真陽性表示原本為云預測為云的數量,TN(True Negative)真陰性表示原本為非云預測為非云的數量,FP(False Positive)假陽性表示原本為非云錯預測為云的數量,FN(False Negative)假陰性表示原本為云錯誤預測為非云的數量,其中三個指標越高表示精度越高。
首先,進行定量分析,其中在訓練集上的不同算法模型評價指標表現如表1所示,從表1可以看出,傳統算法的精度較深度學習算法的精度低,加上注意力機制后精度更高。

表1 訓練集上的不同算法模型評價結果

圖8 不同算法的云檢測結果對比圖
從圖12中可以看到,原始影像在紅色框中有片云,其中SegNet預測結果將部分非云像素都預測為云像素,UNet紅色虛線框右方原來的標簽無云,但其預測的結果為有云,即出現了錯檢現象,DlinkNet50算法預測出來的結果,正確預測了云的范圍,DDenseNet算法進行的云預測結果可以明顯地看到拼接縫,紅色框中有大量非云像素被錯檢為云像素,最后為本文算法AD-DenseNet,可以看到,本文算法精確地預測出來云的位置及形狀。另外結合黃色框及藍色框都可以看到本文算法最優。
本文針對傳統的深度學習算法不能很好地檢測出云的范圍的問題,提出了一種融合注意力機制的密集連接網絡,即AD-DenseNet。
(1)首先從編碼器與解碼器結構出發,不再使用通常使用的ResNet-Block結構作為骨干網絡,使用DenseNet-Block作為編碼器與解碼器,從而可以訓練到更深層的網絡,提取到更多的影像特征。
(2)中間層使用GC-Block提取全局特征,防止網絡陷入局部,引入雙注意力機制,使網絡更加注意有用信息,抑制無關信息。
(3)中間層加入DBlock結構,使網絡在不改變分辨的情況下增大感受野,以提取全局特征。