Повышение разрешения
Как мы видели, базовая архитектура сегментационной сети представляет собой кодировщик, постепенно снижающий пространственное разрешение, и декодировщик, возвращающий разрешение к исходному (источник):
Для уменьшения разрешения (downsampling) в кодировщике можно использовать свёртки с шагом (stride) больше единицы, а также операции пулинга.
Рассмотрим методы повышения пространственного разрешения (upsampling, unpooling, upscaling) в декодировщике.
Задачей повышения разрешения является перевод внутреннего представления изображения из низкого разрешения в высокое. Т.е. мы знаем значения активаций на грубой сетке значений, и нам нужно по ним восстановить недостающие значения на более мелкой сетке, как показано ниже:
Для этого нам нужно воспользоваться тем или иным методом интерполяции промежуточных значений по опорным значениям грубой сетки, выполняемой для каждого канала независимо. Поскольку интерполяция будет неточной, часто после интерполяции ставят обучаемую свёртку, которая настраивается немного уточнять результаты интерполяции.
Рассмотрим популярные методы повышения разрешения.
Bed of nails
Метод bed of nails просто заполняет детальную сетку значений нулями, а потом подставляет значения грубой сетки в соответствующие пространственные позиции (после перемасштабирования). Вот как выглядит результат работы при переводе сетки 2x2 в сетку 5x5:
В случае, если после перемасштабирования обновлённые координаты элементов грубой сетки не идеально соответствуют координатам в мелкой сетке, применяется округление координат, чтобы они всегда были целыми числами.
Интерполяция ближайшим соседом
В интерполяция ближайшим соседом (nearest neighbor interpolation) координаты элементов грубой сетки перемасштабируются под размер мелкой сетки, а элементы мелкой сетки заполняются значениями ближайших к ним элементов грубой сетки, как показано в примере ниже:
Например, координаты элемента были (1,1), а стали (1.5,1.5). В результате четыре ближайших элемента в мелкой сетке оказались к этой позиции ближайшими и тоже заполнились значением .
Билинейная интерполяция
Интерполяция ближайшим соседом приводит к резким перепадам значений. Билинейная интерполяция (bilinear interpolation) заставляет значения изменяться более плавно (по линейному закону) при приближении к тому или иному опорному значению грубой сетки.
Для этого
-
целевая точка проецируется на грубую сетку вверх и вниз вдоль оси Y;
-
линейной интерполяцией находится значение для обеих проекций;
-
значение целевой точки находится линейной интерполяцией между значениями для проекций.
Этот процесс проиллюстрирован ниже (источник):
Бикубическая интерполяция
В бикубической интерполяции (bicubic interpolation) промежуточные значения на мелкой сетке находятся с помощью локальной полиномиальной аппроксимации, полученной по опо рным элементам грубой стеки, а также из условий, чтобы соседние полиномы образовывали непрерывную поверхность с непрерывными производными на краях.
Визуально различные виды интерполяции показаны ниже (источник):
Транспонированная свёртка
Базовый вариант
Транспонированная свёртка (transposed convolution, fractionally-strided convolution, deconvolution) - альтернативный вариант повышения пространственного разрешения. От ранее перечисленных методов его отличает то, что этот метод имеет настраиваемые параметры (смещение и ядро свёртки), а также традиционные гиперпараметры для свёртки (padding, stride, dilation).
Транспонированная свёртка была придумана, как некоторый нестрогий аналог операции, обратной к свёртке, применяемой к одному каналу.
Зададимся вопросом, как понять, насколько высокая была входная активация в определённой позиции по выходным значениям свёртки? Эта активация была высокой, если оказались высокими выходные активации с поправкой на коэффициенты самой свёртки в соответствующих позициях.
Чтобы представить работу транспонированной свёртки, нужно представить распространение градиента обычной свёртки в режиме обратного прохода (backward pass) в методе обратного распространения ошибки. В этом режиме входной слой свёртки является выходным для транспонированной свёртки, а выходной слой, наоборот, является входным.
Если представить ядро транспонированной свёртки, как печать или штамп, в котором больше чернил в тех местах, где элементы ядра свёрт ки больше, то действие транспонированной свёртки можно представить как проставление этого штампа на выходной карте признаков с силой надавливания, равной соответствующим элементам входной карты признаков.
Иными словами, ядро свёртки ставится на каждую позицию выходной карты признаков, домноженное на входную активацию в центре постановки ядра. В позициях, где ядра пересекаются, осуществляется суммирование результатов.
Это продемонстрировано на рисунке ниже:
Многоканальный вариант
В случае нескольких выходных каналов транспонированная свёртка ставит уже трехмерные "штампы" с силой нажатия, равной активации входного канала.
Если входных каналов несколько, то результаты применения этих "штампов" суммируются для каждого входного канала.
Влияние смещения, шага и сдвига
Обучаемый параметр смещения (bias) оказывает то же влияние, что и в обычной свёртке - увеличивает значения всех выходов на величину смещения.
Гиперпараметр шага (stide) управляет тем, с каким смещением ядро свёртки ставится на выходную карту признаков. Ниже показана работа транспонированной свёртки с шагом 2:
Гиперпараметр сдвига (dilation) будет распылять значения "печати" (ядра свёртки), заполняя пропуски нулями, делая её более рассредоточенной.
Динамическую визуализацию работы обычной и транспонированной свёртки можно посмотреть здесь.