Kaggle優勝者詳解:如何用深度學習實現衛星圖像分割與識別

Kaggle優勝者詳解:如何用深度學習實現衛星圖像分割與識別

 

最近,Kaggle網站舉辦了一場在衛星圖像上進行場景特徵檢測的比賽Dstl Satellite Imagery Feature Detection,數據集由英國國防科學與技術實驗室(DSTL)提供。以色列團隊http://deepsense.io在419支參賽隊伍中獲得了第四名的成績。http://deepsense.io的模型使用了改進版的U-Net網絡,這是一種常用於圖像分割問題的人工神經網絡。隨後,他們在官方網站上發佈文章,介紹了模型所使用的深度學習方法,並分享了在完成項目過程中學習到的教訓。

比賽介紹

國防科學技術實驗室(DSTL),是英國國防部的執行機構,也是這次比賽的舉辦方。他們所提供的訓練集裏包含了25個1平方公里大小地區的高分辨率衛星圖像,具體任務是通過算法進行識別10個不同類型的對象,分別是:

  1. 房屋和樓房;

  2. 混雜的人工建築;

  3. 道路;

  4. 鐵路;

  5. 樹木;

  6. 農作物;

  7. 河流;

  8. 積水區;

  9. 大型車輛;

  10. 小轎車。

訓練集的樣本圖像及對應標籤:

 

從圖中可以看出,這些對象之間並沒有完全分離開來,你可以發現在道路上存在車輛,以及位於農作物內的樹木。各類的分佈是不均勻的,統計得到,農作物所佔面積最多,達到了總面積的28%,樹木佔了10%,但是道路所佔面積則小得多,只有總面積的0.8%,車輛所佔面積只有0.02%。此外,大多數圖像區域只有一個相應的類標籤。

 

爲了評估模型預測結果和地面實際情況的吻合程度,引入了檢測評價函數Intersection over Union(IOU,也叫做Jaccard指數),來說明模型檢測的準確率。如當得分爲0,則說明完全不匹配,而得分爲1時說明檢測結果和實際情況完全吻合。最後的評分結果是將每個類的單獨得分進行平均得到的。第一名隊伍的模型評分爲0.49,我們模型的評分結果也達到了0.46。

數據預處理

訓練集圖像有三個版本可供選擇,分別是:灰度圖、3通道RGB彩色圖和16通道圖像,詳情見下表:

 

我們通過調整和對齊16通道圖像,使其與3通道的RGB圖像進行匹配。校準操作是非常必要的,能夠消除通道之間的差異。最終,我們將訓練集中三個版本的圖像,整合成一個20通道的輸入圖像。

 

訓練模型

我們通過借鑑U-Net網絡結構來建立卷積網絡模型,其中U-Net網絡能夠通過對低層次特徵映射的組合,構建高層次複雜特徵,來實現精確定位。

要詳細瞭解U-Net,見論文Convolutional Networks for Biomedical Image Segmentation

這種網絡結構能夠就是爲有效地解決圖像分割問題而做的。我們和其他隊伍在解決這個問題時都把它所謂首選。我們最終的網絡結構如下:

 

在典型的卷積神經網絡(CNN)結構中,通常會在每次最大池化操作後增加特徵圖譜(卷積通道)的數量。在我們的模型中,我們決定在整個網絡中保持特徵圖譜始終爲64個。這樣做出於以下兩個因素:首先,我們可以允許網絡在進行下采樣操作時丟失一些信息,因爲該模型在上採樣過程中已經可以得到相關低級特徵。其次,在衛星圖像中,不需要去理解和識別高層次3D物體的概念,因此,在較高網絡層中增加特徵圖譜的數量,可能並不會影響到該模型的實際預測性能。

 

我們爲每一類的對象都訓練了特定的模型,因爲這樣能更容易對每一類網絡進行微調,以獲得更好的預測性能,並克服數據量不平衡的問題。

訓練步驟

該模型能夠對輸入圖像的每個像素作出該點屬於目標類的概率。雖然用Jaccard指數作爲模型的評估指標,但是在訓練過程中以最小化所有像素的二進制交叉熵總和爲訓練目標。

我們對數據集通過預先計算得到數據的統計值,將圖像集歸一化爲具有零均值和單位方差的數據集。

根據圖像的實際類別,我們將預處理的圖像保持不變,或者將圖像及相應標籤共同調整爲1024x1024和2048x2048分辨率的正方形圖像。在訓練期間,我們從不同的圖像中隨機收集大小爲256x256的圖像塊,其中一半的圖像塊總是包含了一些正像素,即分類的目標對象。我們通過對圖像塊隨機地應用水平翻轉、垂直翻轉、隨機旋轉和顏色抖動等方法來增加批次中的圖像數量。雖然在處理數據集的不平衡類問題時,有欠採樣和調整數據集權重等多種方法,如上過採樣方法是效果最好和最簡單的方法。

每個網絡模型有大約有170萬個參數,設置批次大小爲4。該網絡訓練沒有采用現有模型進行微調的方法,在單個GTX 1070上花了約兩天時間完成了從權值初始化開始進行的網絡訓練過程。

預測

我們在測試過程中時使用滑動窗口的方法,窗口大小固定爲256x256,滑動步幅爲64。圖像塊邊界的對象在沒有周圍的環境時只能部分顯示,我們通過上述操作能夠消除對圖像塊邊界效果較弱的預測。爲了進一步提高預測質量,我們將輸入圖像的翻轉和旋轉版本,以及在不同尺度下訓練的網絡模型進行了平均操作。總體而言,我們獲得了很好的平滑輸出效果。

後期處理

地面實際情況的標籤通過WKT格式文件進行加載,以由頂點定義的多邊形來表示對象。我們在提交過程中需要簡化所生成的多邊形,去除不必要的噪聲干擾。這樣評估系統可以快速處理所提交的結果,避免超時而限制實際效果。我們可以通過使用二值化輸出上的參數化操作,以最小的評估指標損失來實現多邊形簡化。在後期處理階段,我們使用了形態學上的圖像擴張和侵蝕操作,簡單有效地去除了小於給定閾值的物體及小孔。

我們的解決方案

房屋,各種建築物,道路,鐵路,樹木,農作物,積水區

對於這七類,輸入訓練集爲20通道的圖像集,具有1024和2048這兩種不同的輸入維度。我們以最小化二進制交叉熵損失總和爲目標,分別對每個類別訓練對應的卷積神經網絡,得到了令人滿意的結果。所有模型的輸出簡單地進行平均,然後根據特定的類對超參數進行後期處理。

河流

我們通過線性迴歸和隨機森林的組合方法來識別河流對象,對20通道的輸入數據進行了訓練。由於水面獨特的光譜響應,這種簡單的方法起到了很好的效果。

大型和小型車輛

由於訓練集中的車輛數量較少,我們發現本地驗證得到的結果和公開排行榜上的結果相差較大。爲了解決這個問題,我們分別爲大型車輛和小汽車訓練了對應的模型,以及將兩個不同輸入維度的模型標籤進行相加。此外,我們改變輸入數據,使用RGB+灰度的4通道輸入數據,重複了所有實驗,以增加我們模型在網絡集成中的多樣性。最終,我們對兩類訓練模型和單類特定模型進行平均得到了頂層輸出,用來預測車輛類型。

技術

我們根據團隊成員的喜好,基於PyTorch、Keras和TensorFlow這三種框架實現了預測模型。我們的策略是爲每個類別建立單獨的模型,並且需要仔細檢查我們的代碼確保不出錯。爲了運行模型並跟蹤實驗進度,我們使用了Neptune桌面應用。

最終結果

下面我們來展示一下最終模型的檢測效果。

房屋和樓房:

 

道路:

 

 

鐵路:

 

 

農作物:

 

 

河流:

 

 

小汽車:

 

 

結論

衛星領域能夠產生大量的圖像數據,非常適合應用深度學習方法進行研究。我們已經證明,可以應用最新研究方法來解決實際問題。目前模型的效果不錯,我們期待未來會有更多的挑戰。

torh.nn    http://codingdict.com/sources/py/torch.nn/8372.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章