Я использую сеть семантической сегментации (SegNet).Я пытаюсь уменьшить количество классов и, таким образом, переставить сеть.
Поэтому я также изменяю цветовое кодирование предсказаний.Моя проблема в том, что я не могу получить нужные цвета в выходном изображении.
Например,
pascal_palette = np.array([(0, 0, 0),
(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
(0, 0, 128), (0, 128, 0), (0, 0, 0), (0, 0, 0), (128, 0, 0),
(0, 0, 0), (0, 0, 0)
], dtype=np.uint8)
Приведенная выше строка дает отличные результаты для трех классов, поскольку пиксели находятся только в 1 канале.
Вывод выглядит следующим образом:
Однако, если я изменю строку и добавлю значения в разные каналы, это даст странный вывод,Вывод прилагается ниже:
pascal_palette = np.array([(0, 0, 0),
(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
(0, 0, 128), (124, 252, 0), (0, 0, 0), (0, 0, 0), (128, 0, 0),
(0, 0, 0), (0, 0, 0)
], dtype=np.uint8)
Изменен цветовой код на (124, 252, 0).Код должен быть для газона зеленого цвета.Я также проверил это на сайте, как коды RBG
Что мне здесь не хватает?Любое объяснение будет полезно.
Код прогноза:
prob = model.predict(net_in)[0]
# Reshape to 2d here since the networks outputs a flat array per channel
prob_edge = np.sqrt(prob.shape[0]).astype(np.int)
prob = prob.reshape((prob_edge, prob_edge, 13))
# Upsample
if args.zoom > 1:
prob = interp_map(prob, args.zoom, image_size[1], image_size[0])
# Recover the most likely prediction (actual segment class)
prediction = np.argmax(prob, axis=2)
# Apply the color palette to the segmented image
color_image = np.array(pascal_palette)[prediction.ravel()].reshape(
prediction.shape + (3,))
print('Saving results to: ', args.output_path)
with open(args.output_path, 'wb') as out_file:
Image.fromarray(np.multiply(color_image,255)).save(out_file)
Спасибо.PS.Я использовал одну и ту же модель для прогнозов в обоих случаях