Цветовые коды RGB в семантической сегментации - PullRequest
0 голосов
/ 18 мая 2018

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

Вывод выглядит следующим образом:

Gives results as expected

Однако, если я изменю строку и добавлю значения в разные каналы, это даст странный вывод,Вывод прилагается ниже:

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

All become red

Что мне здесь не хватает?Любое объяснение будет полезно.

Код прогноза:

 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 Ответ

0 голосов
/ 18 мая 2018

Скорее всего, проблема в np.multiply(color_image,255).

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

Используйте просто Image.fromarray(color_image).save(out_file).

...