У меня есть собственный набор данных, который содержит 1100 изображений сетчатки по каналам RGB и соответствующие им маски в градациях серого с разрешением 1500x1500.Работа состоит в том, чтобы извлечь оптический диск из этих изображений.Я пытался создать тренировочный набор из этих изображений, чтобы я мог вписать его в сетевую модель.Я изменил размеры всех изображений до разрешения 256x256, используя opencv, и создал массивы этих изображений.Но когда я вписываю эти данные в модель, я не получаю точность выше 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)
Я не знаю, что я делаю неправильно.Любая помощь будет высоко ценится