Класс UpsamplingNearest2d
Класс UpsamplingNearest2d выполняет интерполяцию методом ближайшего соседа для двумерных данных, таких как изображения или карты признаков. Он увеличивает высоту и ширину тензора в заданное количество раз или до указанных размеров. Это один из базовых способов апскейлинга в нейронных сетях.
Синтаксис
torch.nn.UpsamplingNearest2d(size=None, scale_factor=None)
Параметры:
size (int или tuple) - целевой размер (высота, ширина). Если передан один int, то размер будет (size, size).
scale_factor (float или tuple) - множитель увеличения для высоты и ширины. Если передан один float, то коэффициент применяется к обоим измерениям.
Важно: один из параметров должен быть задан.
Пример
Создадим слой для увеличения изображения в 2 раза:
import torch
import torch.nn as nn
upsample = nn.UpsamplingNearest2d(scale_factor=2)
t = torch.randn(1, 3, 4, 4)
res = upsample(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 8, 8])
Пример
Зададим конкретный размер выходного тензора:
import torch
import torch.nn as nn
upsample = nn.UpsamplingNearest2d(size=(8, 10))
t = torch.randn(1, 3, 4, 4)
res = upsample(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 8, 10])
Пример
Используем разные коэффициенты по осям:
import torch
import torch.nn as nn
upsample = nn.UpsamplingNearest2d(scale_factor=(2, 3))
t = torch.randn(1, 3, 4, 4)
res = upsample(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 8, 12])
Пример
Сравним исходный и увеличенный тензоры:
import torch
import torch.nn as nn
torch.manual_seed(0)
t = torch.tensor([
[1, 2],
[3, 4]
]).float().view(1, 1, 2, 2)
upsample = nn.UpsamplingNearest2d(scale_factor=2)
res = upsample(t)
print(res.squeeze())
Результат выполнения кода:
tensor([
[1., 1., 2., 2.],
[1., 1., 2., 2.],
[3., 3., 4., 4.],
[3., 3., 4., 4.]
])
Смотрите также
-
класс
Upsample,
который предоставляет более общие возможности для апскейлинга -
класс
UpsamplingBilinear2d,
который использует билинейную интерполяцию вместо ближайшего соседа -
класс
ConvTranspose2d,
который выполняет увеличение разрешения с обучаемыми параметрами -
класс
PixelShuffle,
который переупорядочивает каналы для увеличения пространственного разрешения