[180612] 「深度學習實戰」之「DeepSat衛星圖片分類」

[180612] 「深度學習實戰」之「DeepSat衛星圖片分類」

來自專欄 Python + OpenCV

曾經準備寫個主題是基於神經網路的花卉分類和檢索的文章系列,效果圖和前期花卉數據準備等已經寫好,但是想想還是先放下吧。來最近雜事比較多,除了更新Learn to Program 專欄文章,就沒功夫寫了。來覺得直接使用基於 ImageNet 預訓練網路遷移學習調調參又太爛大街了,形式上跟貓狗分類區分不大。則是暫時對網路搭積木還不熟練,沒法獨立成文章。

導師推薦了個 DeepSat 衛星圖片分類數據集 ,包含 SAT-4 和 SAT-6 兩個子集,分別是 4 類和 6 類典型地物。跟 ImageNet 數據集不同的是,這裡的圖片大小是 28x28,包含 RGB 三通道和 近紅外(Near Infrare)通道共4個通道,地物類別數分別是4個(荒地、樹、草地、其他)和6個(荒地、樹、草地、道路、建築、水體)。數據規模分別是50萬張和40萬張,訓練和測試集比例為4:1。由於樣本圖片是 28x28x4 的,所以直接拿預訓練的 VGG 或者 ResNet 網路經過遷移學習是不合適的,這裡必須自己動手改造網路,並重新訓練,適合練手

Sample images from the SAT-4 and SAT-6 datasets

經典的 LetNet5 手寫數字識別網路,奠定了CNN網路模型的原型;AlexNet 則是對網路加深,並結合 ReLU 激活函數和並行結構等增加非線性映射能力和可訓練性,在 ImageNet 分類比賽一舉成名;VGG16 等則對卷積核進行調整,採用一系列更小的卷積核心並進一步加深網路結構來增加網路的分類能力;GoogLeNet 則通過增加 Inception 單元來拓寬網路,減少了網路參數量;由於網路參數學習時採用的基於梯度的方法,當網路層次達到一定深度時出現梯度消失等問題,網路深度(非線性映射能力)和網路可學習性呈現出看似不可調和的矛盾,而 ResNet 則對網路增加了旁路(可以認為增加了跨層短路連接),這樣主線就像殘差/邊緣,而旁路類似於短路(跨域連接),使網路有較好的(可能)最差情況。

實踐中,分類網路採用了 Residule 殘差模塊後,分類效果確實有著良好效果。例如,借鑒 ResNet 網路在 DeepSat SAT-6 數據集上進行訓練,第一個 Epoch 即就達到了 0.9824(在GTX1080 行跑訓練一輪大概 70s,測試大概 7s), 已經優於作者手工設計特徵並使用 RBM 進行分類的方法了(0.9392)。經過 40~60輪訓練後,分類精度達到了 0.991。效果太出乎意料,又在情理之中。。

作者的方法(圖片來自 DeepSat - A Learning framework for Satellite Imagery)

設計基於深度學習的分類網路(借鑒了ResNet網路),部分訓練的 checkpoint:

或許,在資源充分的情況下,採用題海戰術從大數據樣本中學習規律,比想破腦袋手工設計特徵效果更好吧。


網路配置圖(主要是懶得畫 Visio 了):

推薦閱讀:

3D卷積神經網路Note01
Semantic Video CNNs through Representation Warping
[CVPR2018筆記]Deep Layer Aggregation
目標檢測入門(四):特徵復用、實時性
caffe 編譯bug匯總

TAG:深度學習DeepLearning | 計算機視覺 | 分類 |