Как визуализировать вывод сегментации - мультиклассовая карта объектов в изображение RGB? - PullRequest
0 голосов
/ 10 октября 2018

Для выходов семантической сегментации, как мы визуализируем карту выходных объектов, тензор формы от <B x Number_of_Classes x H x W> до <B X 3 X H X W> с учетом палитры цветовой карты, соответствующей каждому из классов:

`` `

labels = ['unlabeled',  'ego vehicle',  'rectification border', 'out of roi',   'static',   'dynamic',  'ground',   'road', 'sidewalk', 'parking',  'rail track',   'building', 'wall', 'fence',    'guard rail',   'bridge',   'tunnel',   'pole', 'polegroup',    'traffic light',    'traffic sign', 'vegetation',   'terrain',  'sky',  'person',   'rider',    'car',  'truck',    'bus',  'caravan',  'trailer',  'train',    'motorcycle',   'bicycle',  'license plate']
cityscapes_map = 
np.array([[0.        , 0.        , 0.        ],
           [0.        , 0.        , 0.        ],
           [0.        , 0.        , 0.        ],
           [0.        , 0.        , 0.        ],
           [0.07843137, 0.07843137, 0.07843137],
           [0.43529412, 0.29019608, 0.        ],
           [0.31764706, 0.        , 0.31764706],
           [0.50196078, 0.25098039, 0.50196078],
           [0.95686275, 0.1372549 , 0.90980392],
           [0.98039216, 0.66666667, 0.62745098],
           [0.90196078, 0.58823529, 0.54901961],
           [0.2745098 , 0.2745098 , 0.2745098 ],
           [0.4       , 0.4       , 0.61176471],
           [0.74509804, 0.6       , 0.6       ],
           [0.70588235, 0.64705882, 0.70588235],
           [0.58823529, 0.39215686, 0.39215686],
           [0.58823529, 0.47058824, 0.35294118],
           [0.6       , 0.6       , 0.6       ],
           [0.6       , 0.6       , 0.6       ],
           [0.98039216, 0.66666667, 0.11764706],
           [0.8627451 , 0.8627451 , 0.        ],
           [0.41960784, 0.55686275, 0.1372549 ],
           [0.59607843, 0.98431373, 0.59607843],
           [0.2745098 , 0.50980392, 0.70588235],
           [0.8627451 , 0.07843137, 0.23529412],
           [1.        , 0.        , 0.        ],
           [0.        , 0.        , 0.55686275],
           [0.        , 0.        , 0.2745098 ],
           [0.        , 0.23529412, 0.39215686],
           [0.        , 0.        , 0.35294118],
           [0.        , 0.        , 0.43137255],
           [0.        , 0.31372549, 0.39215686],
           [0.        , 0.        , 0.90196078],
           [0.46666667, 0.04313725, 0.1254902 ],
           [0.        , 0.        , 0.55686275]])
```

В этом случае выходные классы = 35, и у меня есть список из 35 имен классов и матрица из значений 35X3, которые, как я полагаю, являются значениями пикселей r, g, b для каждого класса.Результат моего окончательного слоя классификации: <B x 35 x H x W>

Это обычная модель сегментации изображения с (множественным * conv2d) -> (множественным * convTranspose2d) -> сверткой 1x1 (с фильтрами = числом классов)

Так наивно я мог бы написать функцию для циклического перебора 35 фильтров и для каждой двумерной матрицы сохранить эти значения, соответствующие пикселям в выходной карте объектов, с соответствующими значениями r, g, b из палитры в один тензор.Но как узнать, какой индекс фильтра соответствует исходному списку классов?

Есть ли лучший способ сделать это.

В общем, как визуализируются такие результаты?

...