代码基于Keras,下载地址为:https://github.com/zhixuhao/unet。
将源代码中main.py的model.fit_generator(myGene,steps_per_epoch=300,epochs=10,callbacks=[model_checkpoint])
epoch改为4。问题得到解决。
跑的是原模型给的数据集,所以不存在位深不为8的问题。
debug过程:
1)把代码看懂后就直接跑了一遍,先把data/membrane/train里面的预测图删掉,跑了大概4h,问题来了,图像全灰?!!!
2)搜了一些解决办法,发现初始learning rate太大,改为了0.00001。跑了一遍还是灰色啊…还是把lr改回了0.0001.
3)又将img/255改成img/255.0,结果仍然灰色。突然想到img读取后本身就是浮点型,除以整型后结果还是浮点型啊…这个解决办法真是鸡肋
4)灵机一动将自己预测图与下载时自带的预测图以数组的形式输出,发现自己的预测图(上面的数组)像素值在0.4~0.5左右徘徊,而标准预测确是0.4-0.8不等,考虑是不是没训练好?于是将epoch改成4。跑了差不多20h,问题解决!。
5)基于训练4轮的结果,把模型加载出来又跑4个epoch,最终acc稳定在93%左右。最后预测效果如下。
再跑四epoch的做法是,新建一个.py,运行。
from model import *
from data import *
from keras.models import load_model
model = load_model('unet_membrane.hdf5')
data_gen_args = dict(rotation_range=0.2,
width_shift_range=0.05,
height_shift_range=0.05,
shear_range=0.05,
zoom_range=0.05,
horizontal_flip=True,
fill_mode='nearest')
myGene = trainGenerator(2,'data/membrane/train','image','label',data_gen_args,save_to_dir = None)
model_checkpoint = ModelCheckpoint('unet_membrane8.hdf5', monitor='loss',verbose=1, save_best_only=True) #总共跑了8轮,所有保存模型的文件取名为unet_membrane8.hdf5
model.fit_generator(myGene,steps_per_epoch=300,epochs=4,callbacks=[model_checkpoint]) #已经跑了4轮了,再跑4轮就是8轮
testGene = testGenerator("data/membrane/test")
results = model.predict_generator(testGene,30,verbose=1)
saveResult("data/membrane/test",results)