keras 的 Deeplabv3+ 實現遇到的問題


代碼大佬都已經寫好了,具體參考:https://github.com/bonlime/keras-deeplab-v3-plus

git clone 下來以后,按照指南要訓練自己的數據集,只要設置好自己的數據大小和類別就可以了

from model import Deeplabv3
deeplab_model = Deeplabv3(input_shape=(384, 384, 3), classes=4)

問題1:我的數據集不是一張張小圖片,而是一個大的遙感影像tif,如何訓練這個數據

解決:用 gdal 讀取得到它的 np.array,再通過生成器一小塊一小塊輸入

問題2:但是這樣的生成器無法打亂順序,把多景影像標簽和圖像 zip 起來后也無法用 random.shuffle 打亂圖片順序

解決:現在只能每次都按順序讀入,應該對訓練影響不大

設想:后續想法是設置一個隨機數列,根據這個隨機數列讀取指定大小范圍,這樣是把步長變為了1,會有好多樣本

問題3:驗證集和訓練集只能按 tif 分,如何能隨機取

設想:隨機數列解決

問題4:運行一直報錯,各種錯,先后有 

  module 'tensorflow._api.v1.compat' has no attribute 'v1'

  unsupported operand type(s) for /: 'Dimension' and 'float'

解決:直接 git clone 下來的是用最新版 tf2.0 寫的,需要升級自己的 tf 或者用作者之前版本的實現,在這里用了之前版本的 keras 實現,在命令行輸入一下代碼

git clone https://github.com/bonlime/keras-deeplab-v3-plus/
cd keras-deeplab-v3-plus/
git checkout 714a6b7d1a069a07547c5c08282f1a706db92e20

問題5:寫的生成器生成的標簽最后一維是1,導致運行一直報錯,維度不匹配

解決:這個寫的是用了 one-hot 編碼的,需要把標簽轉換成 one-hot,用 “ from keras.utils import to_categorical ”,to_categorical(x, num_classes=n)把 x 里從 0 到 n-1的值根據大小擴展到 n 維,若最大值和類別數目不同會報錯

問題6:評價指標 loss 和各種系數不在正常范圍內

解決:一開始以為是 one-hot 編碼問題,一直嘗試用 k.argmax 去得到1維的 tensor,死活弄不出來,報錯有:數據類型不對,用 K.cast 強制轉換解決,tensor 不能和數值相加,用argmax導致梯度無法回流等。睡了一覺想想不能用 argmax,他就是要在每一個維度上計算出相應指標再求平均,原來在不是 one-hot 編碼里用的函數都還是對的,那問題出在老版本里最后沒有用激活函數,給他加個激活函數以后一切都正常了。

問題7:作者說沒有實現 weight_decay,需要的自己加

還未解決:不知道去哪加


免責聲明!

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



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