Hi @Felipe_bivort_haiek, I managed to find a workaround before. You can achieve symmetric padding by manually making the index arrays. For example, this function will do 2d padding for you:
import torch
import numpy as np
from typing import Tuple
def symm_pad(im: torch.Tensor, padding: Tuple[int, int, int, int]):
h, w = im.shape[-2:]
left, right, top, bottom = padding
x_idx = np.arange(-left, w+right)
y_idx = np.arange(-top, h+bottom)
def reflect(x, minx, maxx):
""" Reflects an array around two points making a triangular waveform that ramps up
and down, allowing for pad lengths greater than the input length """
rng = maxx - minx
double_rng = 2*rng
mod = np.fmod(x - minx, double_rng)
normed_mod = np.where(mod < 0, mod+double_rng, mod)
out = np.where(normed_mod >= rng, double_rng - normed_mod, normed_mod) + minx
return np.array(out, dtype=x.dtype)
x_pad = reflect(x_idx, -0.5, w-0.5)
y_pad = reflect(y_idx, -0.5, h-0.5)
xx, yy = np.meshgrid(x_pad, y_pad)
return im[..., yy, xx]