def downsample2d(x, f, down=2, padding=0, flip_filter=False, gain=1, impl='cuda'): r"""Downsample a batch of 2D images using the given 2D FIR filter. By default, the result is padded so that its shape is a fraction of the input. User-specified padding is applied on top of that, with negative values indicating cropping. Pixels outside the image are assumed to be zero. Args: x: Float32/float64/float16 input tensor of the shape `[batch_size, num_channels, in_height, in_width]`. f: Float32 FIR filter of the shape `[filter_height, filter_width]` (non-separable), `[filter_taps]` (separable), or `None` (identity). down: Integer downsampling factor. Can be a single int or a list/tuple `[x, y]` (default: 1). padding: Padding with respect to the input. Can be a single number or a list/tuple `[x, y]` or `[x_before, x_after, y_before, y_after]` (default: 0). flip_filter: False = convolution, True = correlation (default: False). gain: Overall scaling factor for signal magnitude (default: 1). impl: Implementation to use. Can be `'ref'` or `'cuda'` (default: `'cuda'`). Returns: Tensor of the shape `[batch_size, num_channels, out_height, out_width]` """ downx, downy = _parse_scaling(down) padx0, padx1, pady0, pady1 = _parse_padding(padding) fw, fh = _get_filter_size(f) p = [ padx0 + (fw - downx + 1) // 2, padx1 + (fw - downx) // 2, pady0 + (fh - downy + 1) // 2, pady1 + (fh - downy) // 2, ] if flip_filter: f = f.flip(list(range(f.ndim))) if f.ndim == 1: x = upfirdn2d( x, f.unsqueeze(0), down=(downx, 1), pad=(p[0], p[1], 0, 0)) x = upfirdn2d( x, f.unsqueeze(1), down=(1, downy), pad=(0, 0, p[2], p[3])) return x
def forward(self, input): out = upfirdn2d(input, self.kernel, up=1, down=self.factor, pad=self.pad) return out
def forward(self, x): """Forward function. Args: x (Tensor): Input feature map with shape of (N, C, H, W). Returns: Tensor: Output feature map. """ return upfirdn2d(x, self.kernel, pad=self.pad)
def forward(self, x): """Forward function. Args: x (Tensor): Input feature map with shape of (N, C, H, W). Returns: Tensor: Output feature map. """ out = upfirdn2d(x, self.kernel, up=self.factor, down=1, pad=self.pad) return out
def forward(self, x): """Forward function. Args: x (Tensor): Input feature map with shape of (N, C, H, W). Returns: Tensor: Output feature map. """ # In Tero's implementation, he uses fp32 return upfirdn2d(x, self.kernel.to(x.dtype), pad=self.pad)
def forward(self, input): """Forward function. Args: input (Tensor): Input feature map with shape of (N, C, H, W). Returns: Tensor: Output feature map. """ out = upfirdn2d(input, self.kernel.to(input.dtype), up=1, down=self.factor, pad=self.pad) return out
def forward(self, x): return upfirdn2d(x, self.kernel, pad=self.pad)
def forward(self, x): out = upfirdn2d(x, self.kernel, up=self.factor, down=1, pad=self.pad) return out