DeeplabV3+ 訓練自己的遙感數據


一、預處理數據部分

1、創建 tfrecord(修改 deeplab\ dateasets\ build_data.py

  模型本身是把一張張 jpg 和 png 格式圖片讀到一個 Example 里,寫入 tfrecord。但我是一個大的 tif 文件,需要把幾萬像素的圖片分割成小塊寫入到一個 tfrecord 文件里,而 tf 沒有對 tif 格式的圖片的解碼,因此不能直接使用原來的 build_data.py。

  先用 osgeo 里的 gdal 讀取 tif 文件,得到大 tif 的 np.array,再設置步長一塊塊讀取,調用 tobytes() 轉成二進制字符串,保存到 tfrecord 中,不過需要把圖片 shape 都設置好,大小還有維度,這點有待改進。

  最后的 tfrecord 里就只有兩個數組:原圖片和標簽值

  加入高度和寬度信息后會報錯,不知道怎么 debug,只能從頭到尾固定好大小 321 了

2、data_generator讀數據(修改 deeplab\ dateasets\ data_generator.py

  加入自己的數據集,只需模仿它已經創建的數據就好,訓練驗證測試大小,以及忽略值等

  解碼時用 tf.decode_raw() 解碼,不用再根據后綴判斷調用哪個。

二、訓練部分

1、訓練(修改 deeplab\ train.py

  參數設置里需要指定自己的數據集 dataset

  由於類別數不同,設置 initialize_last_layer=False,last_layers_contain_logits_only=True

  crop_size縮小為321(由於內存不夠,將其改小,但是crop_size至少要大於300,遵循的公式是(crop_size-1)/4為整數)

2、修改 deeplab\ utils\ train_utils.py

  159 行改成 exclude_list = ['global_step','logits'],即把 logits 層加到不恢復的列表中,這樣才能訓練自己的數據,改類別數

  訓練的一些問題可以參考:https://github.com/tensorflow/models/issues/3730

  logits is the last feature maps before softmax. logits 層是在 softmax 前的最后一層特征圖,是沒有經過歸一化的預測值,如果面對分類問題再經過一層 softmax 就可以得到每類的概率

  Maybe this can help you.

The vector of raw (non-normalized) predictions that a classification model generates, which is ordinarily then passed to a normalization function. If the model is solving a multi-class classification problem, logits typically become an input to the softmax function. The softmax function then generates a vector of (normalized) probabilities with one value for each possible class.

三、驗證部分

1、驗證(修改 deeplab\ eval.py

  eval.py 不會出現 miou 分數,在 summary 里加入一個 tf.Print 的 op,就可以顯示了

四、可視化部分

1、可視化(修改 deeplab\ vis.py

  由於沒有每個文件的文件名,需要把 vis.py 里有關文件名的地方做相應的修改,sample.HEIGHT,WIDTH 也沒有要注釋掉。_process_batch 的參數對應修改

  需要在 get_dataset_colormap.py 中加入自己的數據集

2、可視化標簽(再修改 deeplab\ vis.py

  原來的 vis 只可視化了圖片和預測值,為了方便比較,把真值也顯示,把 tfrecord 里的真值讀出來就可以

3、可視化預測圖像(修改 deeplab\ utils\ get_dataset_colormap.py

  加入自己的數據集,根據類別設置顏色個數

  可視化真值時報錯 label[255] 超出索引,把忽略值直接賦值為0解決

五、預測部分

1、修改deeplab\ datasets\ build_data_test.py

  預測數據沒有真值,需要重寫一個 build_data

2、修改 deeplab\ input_preprocess.py

  預測時 label 為 None,但原始影像還是要裁剪,去適配我的 data_generator,原始的不需要因為大小信息都在 tfrecord 里,會自動處理,我指定了大小

3、修改 deeplab\ datasets\ data_generator_test.py

  不解析 label

參考:https://blog.csdn.net/weixin_38385446/article/details/82781109


免責聲明!

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



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