Как изменить размер маски сегментации изображения?

У меня есть бинарная маска для каждого изображения, причем каждый пиксель маски имеет значение 0 или 255. Теперь, поскольку для сегментации моего изображения требуются изображения фиксированного размера, мне придется изменить размер изображений и масок. Однако, когда я изменяю размер изображения, в маске будут места, где значение больше 0, но меньше 255. Как мне узнать, какое из них оставить? Потому что библиотека требует, чтобы было только 0 или 255. Пожалуйста, помогите мне, большое спасибо.


person Dang Manh Truong    schedule 04.06.2020    source источник


Ответы (2)


Если вы хотите изменить размер изображения и хотите, чтобы в результирующем изображении были только значения из исходного диапазона, вы можете использовать интерполяцию ближайшего соседа.

person Amitay Nachmani    schedule 04.06.2020

Если вы измените размер с помощью интерполяции, отличной от ближайшего соседа, вы действительно получите значения в диапазоне [0, 255]. Это не обязательно плохо. Если ваша функция потерь является кросс-энтропийной, вы можете рассматривать эти значения как мягкие метки. То есть этот пиксель не имеет жесткого назначения ни одной из целей, а скорее мягкого, вероятностного назначения обоим.

Обобщая это для масок сегментации с несколькими метками и для более сложных геометрических дополнений (например, вращения, аффинности, ...). Возникает вопрос
Как правильно применять аугментацию к дискретным целевым изображениям?

Например, у вас есть маска семантической сегментации с 81 классом (то есть каждый пиксель имеет значение в {0, 1, ..., 80}, указывающее класс этого пикселя. Эти целевые маски хранятся как проиндексированные изображения RGB. Вы хотите применить геометрическое увеличение к входному изображению и целевой маске.

Быстрый и грязный способ - использовать интерполяцию ближайшего соседа, предложенную Амитаем Нахмани.

Более точным и правильным способом было бы преобразование целевой маски из HxW дискретной (целочисленной) маски в CxHxW карту вероятности: то есть каждый канал будет соответствовать вероятности принадлежности каждого пикселя к каждого из 81 класса.
Обратите внимание, что это не прогнозируемая сегментация (выход сети), а скорее цели, которые должна прогнозировать сеть. Таким образом, вы представляете каждый целевой пиксель в виде вектора 1-hot 81-dim.
В этом представлении вы можете применить увеличение к каждому каналу отдельно, используя тот же метод интерполяции, который вы используете для самого входного изображения (обычно бикубического).
Теперь у вас есть для каждого целевого пикселя его вероятность принадлежать каждому из 81 класса, эти векторы больше не являются 1-горячими (из-за интерполяции и преобразования ). Вы можете использовать argmax, чтобы преобразовать эту карту обратно в жесткие присвоения классов на пиксели, или изменить функцию потерь для работы с этими мягкими метками, чтобы лучше фиксировать границы между различными областями изображения.

person Shai    schedule 20.07.2021