為了加快開發速度,使用了開源框架,開源框架有很多,這里僅選擇其中一個做介紹 -- 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_model和predict。這里也可以參考實際應用中使用的代碼。