Самостоятельное введение

Модули Spatial Transformer - популярный способ повысить пространственную инвариантность модели относительно пространственных преобразований, таких как перемещение, масштабирование, поворот, обрезка, а также нежесткие деформации. Их можно вставлять в существующие сверточные архитектуры: сразу после ввода или в более глубокие слои. Они достигают пространственной инвариантности, адаптивно преобразовывая вводимые данные в каноническую ожидаемую позу, что приводит к лучшей производительности классификации. Слово адаптивный указывает, что для каждой выборки производится соответствующее преобразование, зависящее от самого ввода. Сети пространственных преобразователей могут быть обучены от начала до конца с использованием стандартного обратного распространения.

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

Линейная интерполяция

В качестве разминки начнем с простого одномерного случая. Здесь мы имеем дело с последовательностью точек данных, которые лежат на равномерно распределенной сетке:

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

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

При линейной интерполяции мы просто подгоняем прямую линию только к (!) Двум соседним точкам 𝑥, а затем ищем желаемое значение:

Находим точки, соседние с, используя операции floor и ceil. Помните: floor () округляет 𝑥 до ближайшего целого числа ниже его значения, тогда как ceil () округляет его до ближайшего целого числа выше его значения.

Поскольку обе соседние точки лежат на сетке, нам известны их значения 𝑈 (показаны вверху справа от стрелки). Кроме того, для двух последовательных точек на сетке мы имеем следующее:

Затем мы должны провести следующую прямую к двум соседним точкам:

где 𝑚 - наклон, а 𝑏 - пересечение. Мы получаем 𝑏, подставляя левую соседнюю точку в уравнение:

Наклон 𝑚 получается подставкой правой соседней точки в уравнение:

Таким образом, наша предварительная формула:

Чтобы получить больше интуиции, давайте расширим вышеуказанный продукт и переставим:

Обозначим расстояние от точки отбора проб 𝑥 до ее правой соседней точки как:

который мы также можем переписать как:

Таким образом, мы приходим к нашей окончательной формуле:

Посмотрите, как линейную интерполяцию можно интерпретировать в терминах значений соседних точек, взвешенных на противоположных расстояниях:

Билинейная интерполяция

Далее мы расширим наш набег на двумерный случай. Здесь мы имеем дело с набором точек данных, которые лежат на равномерно распределенной двумерной сетке:

Как и в одномерном случае, значения в нецелочисленных позициях не определены и должны оцениваться с использованием методов интерполяции.

При билинейной интерполяции мы подбираем плоскость к ближайшим четырем (!) Соседним точкам, окружающим точку выборки (𝑦, 𝑥), а затем ищем желаемое значение:

К счастью, чтобы получить уравнение плоскости, нам не нужно решать сложную систему линейных уравнений, как это было сделано в предыдущем разделе. Вместо этого мы будем многократно применять линейную интерполяцию (1-D) к каждой из двух точек. Начнем с двух верхних точек и применим линейную интерполяцию по горизонтали. Далее делаем то же самое с двумя нижними точками. Наконец, чтобы получить желаемое значение, мы применяем линейную интерполяцию по вертикали к только что полученным промежуточным точкам, см. Анимацию ниже:

Линейная интерполяция в 𝑥-измерении:

Линейная интерполяция в 𝑦-измерении:

В совокупности получаем:

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

Билинейная интерполяция также имеет красивую геометрическую визуализацию: чтобы получить значение желаемой точки (синяя), мы должны просуммировать произведения значения в каждом углу и частичной площади по диагонали напротив угла:

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

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

использованная литература

Исходная статья
Линейная интерполяция
Билинейная интерполяция