《HybridSN: Exploring 3-D–2-DCNN Feature Hierarchy for Hyperspectral Image Classification》論文閱讀


《HybridSN: Exploring 3-D–2-DCNN Feature Hierarchy for Hyperspectral Image Classification》論文閱讀

一、引言

  • 高光譜圖像是立體數據,也有光譜維數,僅憑2D-CNN無法從光譜維度中提取出具有良好鑒別能力的feature maps。一個深度3D-CNN在計算上更加復雜,對於在許多光譜帶上具有相似紋理的類來說,單獨使用似乎表現得更差。
  • 混合CNN模型克服了之前模型的這些缺點,將3D-CNN和2D-CNN層組合到該模型中,充分利用光譜和空間特征圖,以達到最大可能的精度

二、詳細內容

2.1 基礎知識掃盲

  • 單色光:單一波長(或頻率)的光,不能產生色散。

  • 復色光:幾種單色光合成的光。

  • 色散系統:復色光分解為單色光而形成光譜的現象。

  • 光譜(光學頻譜,spectrum):復色光經過色散系統(如棱鏡、光柵)分光后,被色散開的單色光按波長(或頻率)大小而依次排列的圖案。

  • 光柵:由大量等寬等間距的平行狹縫構成的光學器件。

  • 高光譜圖像(Hyperspectral Image):在光譜的維度進行了細致的分割,不僅僅是傳統的黑,白或者RGB的區別,而是在光譜維度上也有N個通道。例如:我們可以把400nm-1000nm分為300個通道,一次,通過高光譜設備獲取的是一個數據立方,不僅有圖像的信息,並且在光譜維度上進行展開,結果不僅可以獲得圖像上每個點的光譜數據,還可以獲得任意一個譜段的影像信息。

  • 高光譜圖像成像原理:空間中的一維信息通過鏡頭和狹縫后,不同波長的光按照不同程度的彎散傳播,一維圖像上的每個點,再通過光柵進行衍射分光,形成一個譜帶,照射到探測器上,探測器上的每個像素位置和強度表征光譜和強度。

在這里插入圖片描述

  • HSI:數字圖像模型,反映了人的視覺系統感知彩色的方式,以色調H(Hue)、飽和度S(Saturation)、亮度I(Intensity)三種基本特征量來感知顏色。
    • 色調H(Hue):與光波的頻率有關,它表示人的感官對不同顏色的感受,也可以表示一定范圍的顏色;
    • 飽和度S(Saturation):表示顏色的純度,純光譜色是完全飽和的,加入白光會稀釋飽和度。飽和度越大,顏色看起來就越鮮艷。
    • 亮度I(Intensity):對應成像亮度和圖像灰度,是顏色的明亮程度。

2.2 實現過程

  • 空間光譜高光譜數據立方體表示為:

    • I為原始輸入,M為寬度,N為高度,D為光譜帶數/深度
    • I中的每個HSI像素包含D個光譜測度,形成一個one-hot向量
  • 然而, 高光譜像素 exhibit the mixed land-cover classes(??), introducing the high intra-class variability and interclass similarity into I.(個人理解為,引入這兩個性質比較難辦)因此:

    1. 將主成分分析(PCA)應用於原始HSI數據(I)的光譜波段(將光譜波段從D減少到B,保持相同的空間維數),只減少了光譜波段,保留了對識別物體重要的空間信息。

    2. 下式為處理后的數據立方體,其中X為PCA后的輸入,M為寬度,N為高度,B為主成分后的光譜帶數。

    3. 將HSI數據立方體划分為重疊的三維小塊,小塊的truth label由中心像素的label決定。

    4. 從X開始,創建以空間位置(α,β)為中心的三維相鄰塊,覆蓋了S×S的窗口或者是空間范圍和所有B光譜波段。

    5. 在(α,β)上的三維塊覆蓋了寬度從α-(S-1)/2到α+(S-1)/2,高度從β-(S-1)/2到β+(S-1)/2和所有的PCA簡化立體數據X的B光譜波段。

    6. 在二維卷積中,第j個特征圖的i層中(x,y)位置的激活值表示如公式(1)下:

      (其中φ是激活函數,bi, j是第j個特征圖的i層的偏差參數,dl−1是第(l−1)層特征圖的數量和第i層j個特征圖的數量,2γ+ 1是卷積核的寬度,2δ +1 是卷積核的高度,wi,j 為第i層j個特征圖權重指數的值)

    image-20200808095629078

  • 在HSI數據模型中,利用三維核在輸入層的多個連續頻帶上生成卷積層的特征圖,捕獲了光譜信息;在三維卷積中,在第i層第j個特征圖中(x,y)的激活值記為Vx,y, Zi,j,如公式(2)所示:

  • 2η + 1 為卷積核沿光譜維數的深度,其他參數不變。

2.3 混合特征學習框架hybrid feature learning framework

網絡結構如圖所示(三個三維卷積【公式2】,一個二維卷積【公式1】,三個全連接層):

  • 三維卷積中,卷積核的尺寸為8×3×3×7×1、16×3×3×5×8、32×3×3×3×16(16個三維核,3×3×5維)
  • 二維卷積中,卷積核的尺寸為64×3×3×576(576為二維輸入特征圖的數量)

2.4 實驗數據集

三種開源高光譜圖像數據集,Indian Pines(IP), University of Pavia(UP) and Salinas Scene(SA)

  • IP圖像空間維度為:145×145,波長范圍為400-2500nm,共有224個光譜波段
  • UP圖像空間維度為:610×340,波長范圍430-860nm,共有103個光譜波段
  • SA圖像空間維度為:512×217,波長范圍360-2500nm,共有224個光譜波段

2.5 實驗結果分析

作者使用了Overall Accuracy (OA), Average Accuracy (AA) and Kappa Coefficient (Kappa)三個評價指標來判斷HSI的分類性能。其中OA表示測試樣本總數中正確分類的樣本數;AA為分類分類准確率的平均值;和Kappa是一個統計測量的度量,它提供關於在地面真實地圖和分類地圖之間的一個強協議的相互信息。

從表二可以看出,混合算法在保持最小標准偏差的同時,在每個數據集上都優於所有的比較方法。

圖3顯示了混合網絡在IP、UP和SA數據集上的HSI分類性能的混淆矩陣。

訓練集和驗證集100個epoch的准確性和損失收斂如圖4所示。可以看出,收斂時間約為50個epoch,這表明作者的方法收斂速度較快。

混合動力網絡模型的計算效率體現在訓練和測試次數方面,如表3所示。

2.6 總結

這篇論文介紹了一種混合的3D和2D模型用於高光譜圖像分類。本文提出的hybrid dsn模型是將空間光譜和光譜的互補信息分別以三維卷積和二維卷積的形式結合在一起。在三個基准數據集上的實驗結果與最新方法進行了比較,驗證了該方法的優越性。該模型比3D-CNN模型的計算效率更高。在小的訓練數據上也顯示出了優越的性能。

三、代碼練習

三維卷積部分:

  • conv1:(1, 30, 25, 25), 8個 7x3x3 的卷積核 ==>(8, 24, 23, 23)
  • conv2:(8, 24, 23, 23), 16個 5x3x3 的卷積核 ==>(16, 20, 21, 21)
  • conv3:(16, 20, 21, 21),32個 3x3x3 的卷積核 ==>(32, 18, 19, 19)

接下來要進行二維卷積,因此把前面的 32*18 reshape 一下,得到 (576, 19, 19)

二維卷積部分:
(576, 19, 19) 64個 3x3 的卷積核,得到 (64, 17, 17)

接下來是一個 flatten 操作,變為 18496 維的向量,

接下來依次為256,128節點的全連接層,都使用比例為0.4的 Dropout,

最后輸出為 16 個節點,是最終的分類類別數。

下面是 HybridSN 類的代碼:

class HybridSN(nn.Module):
  def __init__(self):
    super(HybridSN, self).__init__()
    self.conv3d_1 = nn.Sequential(
        nn.Conv3d(1, 8, kernel_size=(7, 3, 3), stride=1, padding=0),
        nn.BatchNorm3d(8),
        nn.ReLU(inplace = True),
    )
    self.conv3d_2 = nn.Sequential(
        nn.Conv3d(8, 16, kernel_size=(5, 3, 3), stride=1, padding=0),
        nn.BatchNorm3d(16),
        nn.ReLU(inplace = True),
    ) 
    self.conv3d_3 = nn.Sequential(
        nn.Conv3d(16, 32, kernel_size=(3, 3, 3), stride=1, padding=0),
        nn.BatchNorm3d(32),
        nn.ReLU(inplace = True)
    )

    self.conv2d_4 = nn.Sequential(
        nn.Conv2d(576, 64, kernel_size=(3, 3), stride=1, padding=0),
        nn.BatchNorm2d(64),
        nn.ReLU(inplace = True),
    )
    self.fc1 = nn.Linear(18496,256)
    self.fc2 = nn.Linear(256,128)
    self.fc3 = nn.Linear(128,16)
    self.dropout = nn.Dropout(p = 0.4)

  def forward(self,x):
    out = self.conv3d_1(x)
    out = self.conv3d_2(out)
    out = self.conv3d_3(out)
    out = self.conv2d_4(out.reshape(out.shape[0],-1,19,19))
    out = out.reshape(out.shape[0],-1)
    out = F.relu(self.dropout(self.fc1(out)))
    out = F.relu(self.dropout(self.fc2(out)))
    out = self.fc3(out)
    return out


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM