Вот чего я пытаюсь достичь: у меня есть изображение (256,512,3), в левой половине которого находится входное изображение, а в правой половине — соответствующая ему маска сегментации. Я использую набор данных городских пейзажей Парижа. Я сопоставляю пиксель с идентификатором класса, проверяя, к какому значению RGB класса он ближе всего.
Пример ввода:

Чтобы преобразовать маску сегментации в изображение с соответствующими метками классов (всего 31 класс), я делаю следующее:
def TransformMask(input): глобальный х input = np.expand_dims(input, axis= 2) #x.shape -> 1,1,31,3 | input.shape -> 256,256,1,3 (после расширения_dims)) вывод = np.argmin(np.linalg.norm(x - вход, ось= -1), ось= -1) если np.sum(выход > 31) > 0: выход(0) return np.broadcast_to(np.expand_dims(output, axis= -1), (256,256,3)) Здесь x — это массив, содержащий значения RGB 31 класса. Логично, что размеры после np.linalg.norm(x - input, axis= -1) будут (256,256,31) и, следовательно, размеры после np.argmin(np.linalg.norm(x - input, axis= -1), axis= -1) будет (256,256).
Однако при дальнейшем рассмотрении преобразованные маски содержат значения больше 31, но это не должно быть возможно, потому что как индекс минимального значения может быть больше 31, когда количество индексов на конечной оси равно 31? ?
Я пробовал выполнить эту трансформацию отдельно (т.е. только для одного изображения), но никаких проблем не возникло.
Почему/как это происходит? Вот как вызывается transformMask:
target_mask = TransformMask(image[:,256:,:]).astype(dtype= np.uint8)