Я использую архитектуру U-Net для обучения модели сегментации. У меня есть изображения в градациях серого в качестве входных данных и изображения в двоичной маске для соответствующих меток, которые сохраняются в виде пустых массивов.
Они оба имеют форму (total_imgs, rows, cols, 1)
Так же, как в архитектуре согласно этой статье https://arxiv.org/abs/1505.04597 Я хочу, чтобы было два выходных класса - один для переднего плана и один для фона. Кажется, что бумага делает это, чтобы изменить последний конвойный слой модели, чтобы он имел форму (нет, строки, столбцы, 2).
Я пытался сделать это в моей модели. Моя модель архитектуры выглядит так:
input_1 (InputLayer) (None, 256, 256, 1) 0
_______________________________________________________________________________
conv2d_21 (Conv2D) (None, 256, 256, 64) 73792 concatenate_4[0][0]
_______________________________________________________________________________
conv2d_22 (Conv2D) (None, 256, 256, 64) 36928 conv2d_21[0][0]
_______________________________________________________________________________
conv2d_23 (Conv2D) (None, 256, 256, 2) 130 conv2d_22[0][0]
==================================================================
Total params: 31,034,498
Trainable params: 31,032,578
Non-trainable params: 1,920
Однако, поскольку мои входные данные являются оттенками серого, я получаю эту ошибку
Error when checking target expected conv2d_23 to have shape (256, 256, 2) but got array with shape (256, 256, 1)
Как я могу изменить свои входные данные, чтобы удовлетворить это требование и, следовательно, обучаться в два класса?
Я попытался изменить свои входы, чтобы маски имели 2 канала, чтобы соответствовать количеству выходных классов.
imgdatas = np.ndarray((len(imgs), 256, 256 ,1), dtype=np.uint8) #grascale
imglabels = np.ndarray((len(imgs), 256, 256, 2), dtype=np.uint8) #if I change channels to 2 the model runs
Но, хотя это позволяет модели работать, я все еще сталкиваюсь с проблемами:
- Результаты не те, которые я ожидаю - кривые «точность / потери по сравнению с эпохой» очень плавные, и у них нет шаткого колебательного поведения, которое вы наблюдаете при обучении в нескольких классах.
- Я получаю еще одну ошибку при сохранении результатов после запуска модели поверх моих тестовых данных, поскольку, конечно, 2 канала не являются допустимым числом каналов для формата изображения.