无法为图像分割keras创建数据集

时间:2018-12-09 10:21:44

标签: python tensorflow keras conv-neural-network image-segmentation

我有一个自定义数据集,其中包含RGB通道上的1100张视网膜图像及其对应的灰度蒙版,分辨率为1500x1500。工作是从这些图像中提取光盘。我一直在尝试根据这些图像创建训练集,以便可以将其适合到u-net模型中。我已经使用opencv将所有图像调整为256x256分辨率,并创建了这些图像的numpy数组。但是,当我将此数据拟合到模型中时,无论增加多少个历元,我都不会获得大于1的精度。我也尝试过骰子系数和损失函数。他们还给出了大于1的值。我想知道问题出在训练数据创建还是模型中。 下面是我用于训练集创建的代码。

train_data='train_image_folder'
label_data="mask_image_folder"
def training():
    train_images=[]
    for i in tqdm(os.listdir(train_data)):
        path=os.path.join(train_data,i)
        img=cv2.imread(path,-1)
        img=cv2.resize(img,(256,256))
        train_images.append(np.array(img))
    return train_images
training_images=training()
train_data=np.array([training_images]).reshape(-1,256,256,3)
def label():
    label_images=[]
    for i in tqdm(os.listdir(label_data)):
        path=os.path.join(label_data,i)
        img=cv2.imread(path,0)
        img=cv2.resize(img,(256,256))
        label_images.append(np.array(img))
    return label_images
label_images=label()
label_data=np.array([label_images]).reshape(-1,256,256,1)

下面是编译和拟合的代码。

model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy","binary_crossentropy",dice_coef])
model.fit(train_data,label_data,epochs=50,batch_size=20)

以及相应的骰子系数函数

def dice_coef(y_true, y_pred):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)

我不知道我在做什么错。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我可以请您输入代码(创建的模型)吗? 您要测试SGD或更改学习率吗?

from keras.optimizers import Adam, SGD
...
...
model.compile(loss="categorical_crossentropy", # Change to categorical
optimizer=Adam(lr = .1), # For exam, or use SGD(lr = .1) and change learning rate and momentum
    metrics=["accuracy",dice_coef])

请测试此零件代码