Вопрос или проблема
У меня есть задача многовыходной сегментации, процесс обучения прошел хорошо, но когда я пытаюсь получить предсказание, я столкнулся с трудностями при разделении двух выходов на две разные папки. В моем наборе данных есть одно изображение и две соответствующие маски, я использовал этот генератор тестов:
def testGenerator(test_path= "data/membrane/test/image",num_image = 1584,target_size = (224,224),flag_multi_class = False,as_gray = False):
for i in range(num_image):
img = io.imread(os.path.join(test_path,"%d.jpg"%i),as_gray = as_gray)
img = img / 255.
img = trans.resize(img,target_size)
img = np.reshape(img,img.shape) if (not flag_multi_class) else img
img = np.reshape(img,(1,)+img.shape)
yield img
и вот код для model.test_generator
:
testGene = testGenerator("data/membrane/test/image")
model = new_model()
model.load_weights("new_model.hdf5")
(conv11, convc11) = model.predict_generator(testGene,10,verbose=1)
saveResult(conv11,"data/membrane/test/results/road")
saveResult(convc11,"data/membrane/test/results/cl")
Для визуализации я использовал это:
def labelVisualize(num_class,color_dict,img):
img = img[:,:,0] if len(img.shape) == 3 else img
img_out = np.zeros(img.shape + (3,))
for i in range(num_class):
img_out[img == i,:] = color_dict[i]
return img_out / 255
def saveResult(save_path,npyfile,flag_multi_class = False,num_class = 2):
for i,item in enumerate(npyfile):
img = labelVisualize(num_class,COLOR_DICT,item) if flag_multi_class else item[:,:,0]
io.imsave(os.path.join(save_path,"%d_predict.tif"%(i)),skimage.img_as_ubyte(img))
Решите это, я просто внес это изменение:
из:
saveResult(conv11,"data/membrane/test/results/road")
saveResult(convc11,"data/membrane/test/results/cl")
в:
saveResult("data/membrane/test/results/road", conv11)
saveResult("data/membrane/test/results/cl",convc11)
и у меня каждая выходная масса сохранена в разных папках
Ответ или решение
Для успешного сохранения предсказанных масок в разные папки после выполнения многоходового сегментационного задания необходимо правильно организовать код, ответственный за эту функцию. Вы уже предприняли важный шаг, изменив вызовы функции сохранения результатов, чтобы они ссылались на нужные папки. Рассмотрим более подробно, как организовать процесс сохранения предсказанных масок в два различных каталога по всем производимым данным.
1. Подготовка данных и генераторов
Вы использовали функцию testGenerator
для генерации изображений, которая корректно нормализует их и изменяет размер для подготовки к предсказанию. Убедитесь, что все изображения, прежде чем попадут в модель, обрабатываются именно так, как требуется:
def testGenerator(test_path= "data/membrane/test/image", num_image=1584, target_size=(224, 224), flag_multi_class=False, as_gray=False):
for i in range(num_image):
img = io.imread(os.path.join(test_path, "%d.jpg" % i), as_gray=as_gray)
img = img / 255.0
img = trans.resize(img, target_size)
img = np.reshape(img, img.shape) if (not flag_multi_class) else img
img = np.reshape(img, (1,) + img.shape)
yield img
2. Проведение предсказания
Вы правильно использовали метод predict_generator
для получения предсказаний от модели. Это позволяет извлечь две маски из модели с помощью:
testGene = testGenerator("data/membrane/test/image")
model = new_model()
model.load_weights("new_model.hdf5")
(conv11, convc11) = model.predict_generator(testGene, 10, verbose=1)
3. Сохранение результатов
Чтобы сохранить предсказанные маски в разные папки, достаточно изменить параметры функции saveResult
, как вы уже сделали. Важно, что в вызове функции теперь передаются не только пути для сохранения, но и соответствующие результаты:
saveResult("data/membrane/test/results/road", conv11)
saveResult("data/membrane/test/results/cl", convc11)
Ваша функция saveResult
уже настроена правильно, для сохранения изображений в нужные каталоги:
def saveResult(save_path, npyfile, flag_multi_class=False, num_class=2):
for i, item in enumerate(npyfile):
img = labelVisualize(num_class, COLOR_DICT, item) if flag_multi_class else item[:, :, 0]
io.imsave(os.path.join(save_path, "%d_predict.tif" % (i)), skimage.img_as_ubyte(img))
4. Визуализация меток
Функция labelVisualize
помогает визуализировать маски, добавляя цвета для каждой категории. Убедитесь, что COLOR_DICT
правильно инициализирован и соответствует количеству классов в вашей задаче:
def labelVisualize(num_class, color_dict, img):
img = img[:, :, 0] if len(img.shape) == 3 else img
img_out = np.zeros(img.shape + (3,))
for i in range(num_class):
img_out[img == i, :] = color_dict[i]
return img_out / 255
Заключение
Ваша реализация теперь корректно сохраняет предсказанные маски в отдельные папки, что обеспечивает более удобный доступ к результатам. Этот подход упрощает последующий анализ и визуализацию сегментированных изображений. Убедитесь, что вы внимательно проверяете пути к папкам, чтобы избежать ошибок при сохранении.
Следуя изложенным рекомендациям, вы сможете эффективно управлять предсказаниями и сохранять необходимые результаты в структурированном виде, что, безусловно, повысит продуктивность вашего рабочего процесса в задачах семантической сегментации.