Цветовые коды RGB в семантической сегментации

Я использую сеть семантической сегментации ( 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. Я использовал ту же модель для прогнозов в обоих случаях

1 ответ

Проблема очень вероятно в np.multiply(color_image,255),

Поскольку вы уже создали палитру со значениями от 0 до 255 и просто собираете значения из этой палитры, вам не нужно умножать ее на 255.

Использовать просто Image.fromarray(color_image).save(out_file),

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