Upsample
-
class torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)[source] -
Увеличивает размер заданных многоканальных данных 1D (временных), 2D (пространственных) или 3D (объёмных).
Входные данные предполагаются в форме
minibatch x channels x [optional depth] x [optional height] x width. Следовательно, для пространственных входных данных мы ожидаем тензор 4D, а для объёмных входных данных — тензор 5D.Доступные алгоритмы для увеличения размера — ближайший сосед и линейные, билинейные, бикубические и трилинейные для входных тензоров 3D, 4D и 5D соответственно.
Можно либо задать
scale_factorили целевой выходнойsizeразмер, чтобы рассчитать размер выходного тензора. (Нельзя задавать оба значения, так как это неоднозначно)- Параметры
-
- size (int или Кортеж[int] или Кортеж[int, int] или Кортеж[int, int, int], необязательно) – пространственные размеры вывода
- scale_factor (float или Кортеж[float] или Кортеж[float, float] или Кортеж[float, float, float], необязательно) – множитель для пространственных размеров. Должен соответствовать размеру входа, если это кортеж.
-
mode (str, необязательно) – алгоритм увеличения размера: один из
'nearest','linear','bilinear','bicubic'и'trilinear'. По умолчанию:'nearest' -
align_corners (bool, необязательно) – если
True, угловые пиксели входных и выходных тензоров выравниваются, сохраняя значения в этих пикселях. Это имеет эффект только когдаmodeравен'linear','bilinear','bicubic', или'trilinear'. По умолчанию:False -
recompute_scale_factor (bool, необязательно) – пересчитать scale_factor для использования в вычислении интерполяции. Если
recompute_scale_factorравенTrue, тоscale_factorдолжен быть передан, аscale_factorиспользуется для вычисления выходныхsize. Вычисленный выходнойsizeбудет использован для вывода новых масштабов для интерполяции. Обратите внимание, что когдаscale_factorявляется числом с плавающей запятой, он может отличаться от пересчитанногоscale_factorиз-за округления и проблем с точностью. Еслиrecompute_scale_factorравенFalse, тоsizeилиscale_factorбудут использованы непосредственно для интерполяции.
- Форма:
-
- Вход: , или
- Вывод: , или , где
Предупреждение
При
align_corners = True, линейные режимы интерполяции (linear,bilinear,bicubic, иtrilinear) не обеспечивают пропорционального выравнивания выходных и входных пикселей, и поэтому выходные значения могут зависеть от размера входных данных. Это было по умолчанию для этих режимов до версии 0.3.1. С тех пор поведение по умолчанию —align_corners = False. См. примеры ниже, чтобы понять, как это влияет на выходные данные.Примечание
Если вам нужна функция уменьшения размера/генерализованного изменения размера, используйте
interpolate().Примеры:
>>> input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2) >>> input tensor([[[[1., 2.], [3., 4.]]]]) >>> m = nn.Upsample(scale_factor=2, mode='nearest') >>> m(input) tensor([[[[1., 1., 2., 2.], [1., 1., 2., 2.], [3., 3., 4., 4.], [3., 3., 4., 4.]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bilinear') # align_corners=False >>> m(input) tensor([[[[1.0000, 1.2500, 1.7500, 2.0000], [1.5000, 1.7500, 2.2500, 2.5000], [2.5000, 2.7500, 3.2500, 3.5000], [3.0000, 3.2500, 3.7500, 4.0000]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True) >>> m(input) tensor([[[[1.0000, 1.3333, 1.6667, 2.0000], [1.6667, 2.0000, 2.3333, 2.6667], [2.3333, 2.6667, 3.0000, 3.3333], [3.0000, 3.3333, 3.6667, 4.0000]]]]) >>> # Try scaling the same data in a larger tensor >>> input_3x3 = torch.zeros(3, 3).view(1, 1, 3, 3) >>> input_3x3[:, :, :2, :2].copy_(input) tensor([[[[1., 2.], [3., 4.]]]]) >>> input_3x3 tensor([[[[1., 2., 0.], [3., 4., 0.], [0., 0., 0.]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bilinear') # align_corners=False >>> # Notice that values in top left corner are the same with the small input (except at boundary) >>> m(input_3x3) tensor([[[[1.0000, 1.2500, 1.7500, 1.5000, 0.5000, 0.0000], [1.5000, 1.7500, 2.2500, 1.8750, 0.6250, 0.0000], [2.5000, 2.7500, 3.2500, 2.6250, 0.8750, 0.0000], [2.2500, 2.4375, 2.8125, 2.2500, 0.7500, 0.0000], [0.7500, 0.8125, 0.9375, 0.7500, 0.2500, 0.0000], [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]]]]) >>> m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True) >>> # Notice that values in top left corner are now changed >>> m(input_3x3) tensor([[[[1.0000, 1.4000, 1.8000, 1.6000, 0.8000, 0.0000], [1.8000, 2.2000, 2.6000, 2.2400, 1.1200, 0.0000], [2.6000, 3.0000, 3.4000, 2.8800, 1.4400, 0.0000], [2.4000, 2.7200, 3.0400, 2.5600, 1.2800, 0.0000], [1.2000, 1.3600, 1.5200, 1.2800, 0.6400, 0.0000], [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]]]])
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.Upsample.html