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])