使用U-Net進行圖像分割


為了加快開發速度,使用了開源框架,開源框架有很多,這里僅選擇其中一個做介紹 -- Keras。

視頻講解:www.mooc.ai/course/549/learn?lessonid=2859

預處理

首先,也是第一步,需要做的是預處理,該步驟的目標是把圖像整理成能夠直接塞入網絡的圖片的樣子。

什么樣子的圖片格式才是一個網絡需要的呢?

  • 一個是未經過處理的原始圖片;
  • 一個是經過處理后,你想要得到的樣子的圖片。

比如,你未經過處理的圖像是下面的圖像的樣子(Input,X_train,X)。

然后你想要得到的輸出圖片的樣子是下面的樣子(Output,Y_train,Y):

那么,你要做的工作來了。手動的把上面的未經過處理的圖片的整理成下面圖片的樣子(或者借助其他工具)。

而你需要注意的是,這兩張圖片的大小是一樣的(保證像素點的個數一致),因為我們要得到的神經網絡輸出圖片(也叫做掩膜圖)需要和神經網絡的輸入圖片的像素點一一對應。

神經網絡會根據某種對應法則,將上面的圖片\(X\),映射到下面的圖片\(Y\)中,即\(Y = f(x)\) ,這個映射法則\(f\)我們無法用一個公式准確的表達,但是確實是在神經網絡內部實現了這種一一映射。如果真的要表達的話,那么只能用一個網絡結構來說明這種映射關系了。

如果下面的圖片的每個像素點都是一個概率值,那么這個圖片就是一個由概率組成的一個矩陣,也叫做概率矩陣。

接下來,需要完成的就是需要把這個圖片整理成能夠輸入網絡的形式(統一格式):

  • 統一顏色格式(RGB還是GRAYSCALE)
  • 統一圖片大小(size)
  • 格式化圖片名稱(file_rename)
  • 設置batch_size以及其他參數(非必須)

關於這個步驟的處理過程可以先Copy預處理的代碼,該步驟用到了Keras的一個類庫:ImageDataGenerator,從這個文檔中,可以更加詳細的了解到如何使用現有的方法解決你的問題了。官方解釋的很到位,更重要的是還有實例。

開始訓練

預處理做完了,那么就開始訓練吧。

  • 了解一下shape
  • 制作一個網絡模型
  • 用你的模型進行訓練

關於shape,是我們必須要掌握的一個常識性問題,看下圖:

看圖理解,不做解釋。

如何制作網絡模型呢?在圖像分割上,有一個目前效果較好的模型叫做U-net,可以先用他們的模型直接訓練,然后在前人的基礎上做修改,以此降低學習成本,讓成就感更高,從而促進學習興趣(有點扯)。

模型框架做(Copy)好了,怎么來使用這個模型來訓練自己的圖片呢?Keras給出了一個方法叫做fit_generator,它可以激活你的模型,開始你的訓練,里面的參數需要根據需要自己設置了,每個參數都是什么意思可以參考官方提供的幫助。這里也是有一個可以用來參考的實例代碼可以使用。

運行測試

激動人心的時刻就是當你運行了python train.py之后,接下來,就是漫長的等待它訓練完成,然后對結果進行測試。

如何使用已經建立的網絡模型進行測試?過程十分簡單,使用load_model加載已經保存的模型,然后使用predict方法進行預測。使用方式及參數說明參考官方文檔load_modelpredict。這里也可以參考實際應用中使用的代碼。


免責聲明!

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



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