keras UNET視網膜血管分割除錯記錄

hehehema發表於2020-12-02

隨隨便便的廢話

跑自己的程式碼的時候發現CHASE_DB1資料集總是過擬合,即使是做了資料增強將影像增加到600+,驗證集準確率依舊達到0.99,懷疑是在資料預處理的時候簡單的參考別的開原始碼將影像簡單的劃分為無重疊的64*64 patch導致類不平衡,遂找到當年因為硬體查沒跑通的程式碼,開始除錯,學習如何在訓練集上隨機提取patch進行訓練。
除錯的程式碼來自這位大佬

環境

老闆大手一揮給配了個3080,當初配置環境的時候簡直是摸著石頭過河,都說新版本容易碰壁,原先想要直接用上以前tensorflow1.6+keras的程式碼,就弄了個CUDA9,結果配的天昏地暗,還是報錯。想過在虛擬環境中配置CUDA,也不行。問了同學,同學答:我覺得pytorch不錯,你可以試試。 最後老老實實卸了重灌,按照網上不多的教程配置好了3080能執行的環境。

  1. GPU RTX 3080,cuda 11;
  2. tensorflow==2.5.0-dev;
  3. keras==2.3.0;
  4. opencv-python==4.4.0.46;
  5. scikit-learn==0.23.2;
  6. pillow==8.0.1;
  7. h5py==2.10.0;
  8. configparser==3.5.0

除錯記錄

1) Cannot Run Git & Invalid VCS root mapping

和github相關的報錯,可以按照網上下載並配置Git,不過我一直都傾向於自己新建工程,複製貼上。新建工程後不存在這個問題。

1.retinaNN_training.py

2) import

在tensorflow升級到2之後,相當於內建了keras,如果按照原始碼的import,如:

from keras.models import Model;
from keras.layers import Input, concatenate, Conv2D, MaxPooling2D, UpSampling2D, Reshape, core, Dropout

則可能會出現報錯:
在這裡插入圖片描述
或者出現No module named ’ tensorflow.keras ’ 的錯誤,大概率是tensorflow.keras和keras之間的相容性問題。之前在跑自己的程式碼的時候就已經碰上了這個坑,所以解決的思路還是很清晰的。這篇部落格給出的解決思路是非常清晰的。根據提供的思路,對import方式做修改就能正常執行了。

from tensorflow.python.keras.models import Model
from tensorflow.python.keras.layers import Input, concatenate, Conv2D, MaxPooling2D, UpSampling2D, Reshape, core, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.python.keras.callbacks import ModelCheckpoint, LearningRateScheduler

3) FileNotFoundError: [Errno 2] No such file or directory: ‘./test/sample_input_imgs.png’

報錯如下:
在這裡插入圖片描述

需要根目錄下額外的建立一個空的資料夾test,程式碼作者部落格評論給出了方法。至此,retinaNN_training可正常執行。

2.retinaNN_predict.py

1) from sklearn.metrics import jaccard_similarity_score報錯

scikit-learn升級到0.2版本後,jaccard_similarity_score改名為jaccard_score,此外,還需要在呼叫的程式碼中將引數normalize=True刪除。即,

#Jaccard similarity index
jaccard_index = jaccard_score(y_true, y_pred)
print("\nJaccard similarity score: " +str(jaccard_index))

2) ValueError: Unknown layer: Functional

報錯截圖如下:
在這裡插入圖片描述
將錯誤Unknown layer: Functional在網上搜尋後,發現大多數問題是keras無法識別自定義層,然而在程式碼中並沒有自定義層。在https://stackoverflow.com/上也有看到類似的提問,感覺沒有一個比較符合我的問題的回答。本來想在training的程式碼中直接做predict,後面回過頭一看from keras.models import model_from_json ,還是出現了keras和tensorflow.keras的相容性錯誤。修改後即可成功執行。

from tensorflow.python.keras.models import model_from_json

執行結果

分割結果和ROC等指標都存放在test資料夾下
在這裡插入圖片描述
準確率和之前借鑑的程式碼 相近
在這裡插入圖片描述

相關文章