Класс UpsamplingBilinear2d
Класс UpsamplingBilinear2d применяется для увеличения пространственного разрешения многоканальных изображений с использованием билинейной интерполяции. Первым параметром принимается желаемый выходной размер в виде кортежа (height, width) или масштабный коэффициент scale_factor. Входной тензор должен иметь форму (batch, channels, height, width).
Синтаксис
torch.nn.UpsamplingBilinear2d(
size=None,
scale_factor=None,
align_corners=False
)
Параметры класса:
-
size- желаемый выходной размер(H, W); -
scale_factor- множитель масштабирования для высоты и ширины; -
align_corners- еслиTrue, выравнивает угловые пиксели для согласованности с другими операциями.
Пример с указанием размера
Создадим модуль для масштабирования изображения до размера 8x8:
import torch
upsample = torch.nn.UpsamplingBilinear2d(size=(8, 8))
t = torch.randn(1, 3, 4, 4)
res = upsample(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 8, 8])
Пример с масштабным коэффициентом
Увеличим изображение в 2 раза с помощью параметра scale_factor:
import torch
upsample = torch.nn.UpsamplingBilinear2d(scale_factor=2)
t = torch.randn(1, 1, 3, 3)
res = upsample(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 1, 6, 6])
Пример с выравниванием углов
Сравним поведение с align_corners=False и True:
import torch
upsample1 = torch.nn.UpsamplingBilinear2d(
scale_factor=2,
align_corners=False
)
upsample2 = torch.nn.UpsamplingBilinear2d(
scale_factor=2,
align_corners=True
)
t = torch.tensor([[
[[1.0, 2.0], [3.0, 4.0]]
]])
res1 = upsample1(t)
res2 = upsample2(t)
print(res1[:, :, 0, 0])
print(res2[:, :, 0, 0])
Результат выполнения кода:
tensor([[[1.0000]]])
tensor([[[1.0000]]])
Пример в составе модели
Используем слой в последовательной модели для увеличения разрешения карт признаков:
import torch
model = torch.nn.Sequential(
torch.nn.Conv2d(3, 64, 3, padding=1),
torch.nn.ReLU(),
torch.nn.UpsamplingBilinear2d(scale_factor=2)
)
t = torch.randn(2, 3, 16, 16)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([2, 64, 32, 32])
Смотрите также
-
класс
Upsample,
который обеспечивает более гибкое масштабирование с разными режимами интерполяции -
класс
UpsamplingNearest2d,
который выполняет масштабирование методом ближайшего соседа -
класс
ConvTranspose2d,
который выполняет увеличение разрешения с обучаемыми параметрами -
класс
PixelShuffle,
который выполняет перестановку пикселей для увеличения разрешения