Невозможно создать набор данных для кераса сегментации изображений

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

Я не знаю, что делаю не так. Любая помощь приветствуется

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
124
1

Ответы 1

Могу я попросить поставить свой код (Созданная модель)? Вы тестируете 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])

Пожалуйста, проверьте этот код детали

Другие вопросы по теме