SpatialTf

Описание

Info

Родительский класс: Module

Производные классы: -

Данный модуль выполняет операцию пространственной трансформации тензора заданным оператором. Она заключается в том, что происходит умножение координат элементов оригинального тензора на трансформирующий оператор, которое даёт координаты элемента в выходном тензоре:

\begin{bmatrix} \grave{x} \\ \grave{y} \end{bmatrix} = \begin{bmatrix} \theta_{11} & \theta_{12} & \theta_{13} \\ \theta_{21} & \theta_{22} & \theta_{23} \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

где

x, y - координаты элемента в оригинальном тензоре;
\theta_{ij} - коэффициенты оператора;
\grave{x}, \grave{y} - координаты элемента в выходном тензоре.

Значение перенесённого элемента находятся с помощью билинейной интерполяции.

Для получения коэффициентов оператора используется мини-нейронная сеть выходной слой которой имеет 6 элементов (по числу коэффициентов). Такая сеть обучается вместе с основной.

Дополнительные источники

Инициализация

def __init__(self, shape=None, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
shape tuple Размерность выходного тензора. Если None, то размерность тензора останется неизменной. None
name str Имя слоя. None

Пояснения

-

Примеры

Необходимые импорты.

>>> import numpy as np
>>> from PuzzleLib.Backend import gpuarray
>>> from PuzzleLib.Modules import SpatialTf
Сгенерируем тензор данных. Обратите внимание на формат.

Info

gpuarray необходим для правильного размещения тензора на GPU

>>> batchsize, maps, h, w = 1, 1, 4, 4
>>> data = gpuarray.to_gpu(np.random.randn(batchsize, maps, inh, inw).astype(np.float32))
>>> transform = gpuarray.to_gpu(np.tile(np.array([[1.0, 0.0, 0.001], [0, 1.0, 0.001]], dtype=np.float32), reps=(batchsize, 1, 1)))
>>> spatialtf = SpatialTf()
>>> spatialtf([data, transform])