目的:实现细胞分割
数据集:isbi挑战赛的数据,只有30张512x512的image和label
思路:
- 读取数据,将数据转换成 30x512x512x1格式;
- 由于数据太少,所以进行数据增强;(注意:对训练数据进行增强的时候image和label增强方式要一致)
- 搭建模型。这里直接调用segmentation-models模块的Unet;(提前pip install segmentation-models)
- 训练。推荐用Google的Colaboratory,免费GPU亲测真的好用;
- 保存模型;
- 预测。这里预测暂时5张图片看看效果;
数据处理+训练+保存模型 代码
#coding=utf-8
from segmentation_models import Unet
from keras.preprocessing.image import ImageDataGenerator
from PIL import Image
from keras.optimizers import *
import numpy as np
import os
import skimage.io as io
import skimage.transform as trans
import matplotlib.pyplot as plt
import random
#给定路径,起点和终点,进行图像增强,每次迭代返回一个batch_size的训练图片集和标签集 -> 这里的起点和终点对应下标都是包含在内的!
def train_image_generator(image_path,label_path,st,ed,batch_size,aug = None):
nowinx = st #设定初始图片
while True:
im_array = []
lb_array = []
for i in range(batch_size):
im = Image.open(os.path.join(image_path,str(nowinx)+'.png'))
tmp_im_array = np.array(im) #图片转numpy数组
tmp_im_array = tmp_im_array / 255 #对数据进行归一化
tmp_im_array = tmp_im_array[np.newaxis,:,:] #numpy数组添加一维,为了把二维图片转成三维图片集
lb = Image.open(os.path.join(label_path,str(nowinx)+'.png'))
tmp_lb_array = np.array(lb) #图片转numpy数组
tmp_lb_array = tmp_lb_array / 255
tmp_lb_array[tmp_lb_array >