Python torch.nn.modules.utils._pair() Examples
The following are 30
code examples of torch.nn.modules.utils._pair().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
torch.nn.modules.utils
, or try the search function
.
Example #1
Source File: modulated_deform_conv2d_func.py From ASFF with GNU General Public License v3.0 | 7 votes |
def forward(ctx, input, offset, mask, weight, bias, stride, padding, dilation, groups, deformable_groups, im2col_step): ctx.stride = _pair(stride) ctx.padding = _pair(padding) ctx.dilation = _pair(dilation) ctx.kernel_size = _pair(weight.shape[2:4]) ctx.groups = groups ctx.deformable_groups = deformable_groups ctx.im2col_step = im2col_step output = DCN.modulated_deform_conv2d_forward(input, weight, bias, offset, mask, ctx.kernel_size[0], ctx.kernel_size[1], ctx.stride[0], ctx.stride[1], ctx.padding[0], ctx.padding[1], ctx.dilation[0], ctx.dilation[1], ctx.groups, ctx.deformable_groups, ctx.im2col_step) ctx.save_for_backward(input, offset, mask, weight, bias) return output
Example #2
Source File: deform_conv_module.py From Clothing-Detection with GNU General Public License v3.0 | 6 votes |
def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, deformable_groups=1, bias=True): super(ModulatedDeformConvPack, self).__init__( in_channels, out_channels, kernel_size, stride, padding, dilation, groups, deformable_groups, bias) self.conv_offset_mask = nn.Conv2d( self.in_channels // self.groups, self.deformable_groups * 3 * self.kernel_size[0] * self.kernel_size[1], kernel_size=self.kernel_size, stride=_pair(self.stride), padding=_pair(self.padding), bias=True) self.init_offset()
Example #3
Source File: pac.py From openseg.pytorch with MIT License | 6 votes |
def forward(ctx, input, kernel_size, stride, padding, dilation, channel_wise): ctx.kernel_size = _pair(kernel_size) ctx.dilation = _pair(dilation) ctx.padding = _pair(padding) ctx.stride = _pair(stride) bs, ch, in_h, in_w = input.shape out_h = (in_h + 2 * ctx.padding[0] - ctx.dilation[0] * (ctx.kernel_size[0] - 1) - 1) // ctx.stride[0] + 1 out_w = (in_w + 2 * ctx.padding[1] - ctx.dilation[1] * (ctx.kernel_size[1] - 1) - 1) // ctx.stride[1] + 1 cols = F.unfold(input, ctx.kernel_size, ctx.dilation, ctx.padding, ctx.stride) cols = cols.view(bs, ch, ctx.kernel_size[0], ctx.kernel_size[1], out_h, out_w) center_y, center_x = ctx.kernel_size[0] // 2, ctx.kernel_size[1] // 2 feat_0 = cols.contiguous()[:, :, center_y:center_y + 1, center_x:center_x + 1, :, :] diff_sq = (cols - feat_0).pow(2) if not channel_wise: diff_sq = diff_sq.sum(dim=1, keepdim=True) output = torch.exp(-0.5 * diff_sq) ctx._backend = type2backend[input.type()] ctx.save_for_backward(input, output) return output
Example #4
Source File: roi_pool.py From mmdetection with Apache License 2.0 | 6 votes |
def forward(ctx, features, rois, out_size, spatial_scale): assert features.is_cuda out_h, out_w = _pair(out_size) assert isinstance(out_h, int) and isinstance(out_w, int) ctx.save_for_backward(rois) num_channels = features.size(1) num_rois = rois.size(0) out_size = (num_rois, num_channels, out_h, out_w) output = features.new_zeros(out_size) argmax = features.new_zeros(out_size, dtype=torch.int) roi_pool_ext.forward(features, rois, out_h, out_w, spatial_scale, output, argmax) ctx.spatial_scale = spatial_scale ctx.feature_size = features.size() ctx.argmax = argmax return output
Example #5
Source File: deform_pool.py From mmdetection with Apache License 2.0 | 6 votes |
def __init__(self, spatial_scale, out_size, out_channels, no_trans, group_size=1, part_size=None, sample_per_part=4, trans_std=.0): super(DeformRoIPooling, self).__init__() self.spatial_scale = spatial_scale self.out_size = _pair(out_size) self.out_channels = out_channels self.no_trans = no_trans self.group_size = group_size self.part_size = out_size if part_size is None else part_size self.sample_per_part = sample_per_part self.trans_std = trans_std
Example #6
Source File: pac.py From openseg.pytorch with MIT License | 6 votes |
def forward(ctx, input, kernel, kernel_size, stride=1, padding=0, dilation=1): (bs, ch), in_sz = input.shape[:2], input.shape[2:] if kernel.size(1) > 1 and kernel.size(1) != ch: raise ValueError('Incompatible input and kernel sizes.') ctx.input_size = in_sz ctx.kernel_size = _pair(kernel_size) ctx.kernel_ch = kernel.size(1) ctx.dilation = _pair(dilation) ctx.padding = _pair(padding) ctx.stride = _pair(stride) ctx.save_for_backward(input if ctx.needs_input_grad[1] else None, kernel if ctx.needs_input_grad[0] else None) ctx._backend = type2backend[input.type()] cols = F.unfold(input, ctx.kernel_size, ctx.dilation, ctx.padding, ctx.stride) output = cols.view(bs, ch, *kernel.shape[2:]) * kernel output = torch.einsum('ijklmn->ijmn', (output,)) return output.clone() # TODO check whether a .clone() is needed here
Example #7
Source File: pac.py From openseg.pytorch with MIT License | 6 votes |
def pacconv2d(input, kernel, weight, bias=None, stride=1, padding=0, dilation=1, shared_filters=False, native_impl=False): kernel_size = tuple(weight.shape[-2:]) stride = _pair(stride) padding = _pair(padding) dilation = _pair(dilation) if native_impl: # im2col on input im_cols = nd2col(input, kernel_size, stride=stride, padding=padding, dilation=dilation) # main computation if shared_filters: output = torch.einsum('ijklmn,zykl->ijmn', (im_cols * kernel, weight)) else: output = torch.einsum('ijklmn,ojkl->iomn', (im_cols * kernel, weight)) if bias is not None: output += bias.view(1, -1, 1, 1) else: output = PacConv2dFn.apply(input, kernel, weight, bias, stride, padding, dilation, shared_filters) return output
Example #8
Source File: test_config.py From mmdetection with Apache License 2.0 | 6 votes |
def _check_roi_extractor(config, roi_extractor, prev_roi_extractor=None): import torch.nn as nn if isinstance(roi_extractor, nn.ModuleList): if prev_roi_extractor: prev_roi_extractor = prev_roi_extractor[0] roi_extractor = roi_extractor[0] assert (len(config.featmap_strides) == len(roi_extractor.roi_layers)) assert (config.out_channels == roi_extractor.out_channels) from torch.nn.modules.utils import _pair assert (_pair( config.roi_layer.out_size) == roi_extractor.roi_layers[0].out_size) if 'use_torchvision' in config.roi_layer: assert (config.roi_layer.use_torchvision == roi_extractor.roi_layers[0].use_torchvision) elif 'aligned' in config.roi_layer: assert ( config.roi_layer.aligned == roi_extractor.roi_layers[0].aligned) if prev_roi_extractor: assert (roi_extractor.roi_layers[0].aligned == prev_roi_extractor.roi_layers[0].aligned) assert (roi_extractor.roi_layers[0].use_torchvision == prev_roi_extractor.roi_layers[0].use_torchvision)
Example #9
Source File: roi_pool.py From Res2Net-maskrcnn with MIT License | 6 votes |
def forward(ctx, input, roi, output_size, spatial_scale): ctx.output_size = _pair(output_size) ctx.spatial_scale = spatial_scale ctx.input_shape = input.size() output, argmax = _C.roi_pool_forward( input, roi, spatial_scale, output_size[0], output_size[1] ) ctx.save_for_backward(input, roi, argmax) return output
Example #10
Source File: dcn_v2.py From centerpose with MIT License | 6 votes |
def forward(ctx, input, offset, mask, weight, bias, stride, padding, dilation, deformable_groups): ctx.stride = _pair(stride) ctx.padding = _pair(padding) ctx.dilation = _pair(dilation) ctx.kernel_size = _pair(weight.shape[2:4]) ctx.deformable_groups = deformable_groups output = _backend.dcn_v2_forward(input, weight, bias, offset, mask, ctx.kernel_size[0], ctx.kernel_size[1], ctx.stride[0], ctx.stride[1], ctx.padding[0], ctx.padding[1], ctx.dilation[0], ctx.dilation[1], ctx.deformable_groups) ctx.save_for_backward(input, offset, mask, weight, bias) return output
Example #11
Source File: qconv.py From fairseq with MIT License | 6 votes |
def _conv_forward(self, input, weight): if self.padding_mode != "zeros": return F.conv2d( F.pad(input, self._padding_repeated_twice, mode=self.padding_mode), weight, self.bias, self.stride, _pair(0), self.dilation, self.groups, ) return F.conv2d( input, weight, self.bias, self.stride, self.padding, self.dilation, self.groups, )
Example #12
Source File: CustomLayers.py From BMSG-GAN with MIT License | 6 votes |
def __init__(self, c_in, c_out, k_size, stride=1, pad=0, bias=True): """ constructor for the class """ from torch.nn.modules.utils import _pair from numpy import sqrt, prod super().__init__() # define the weight and bias if to be used self.weight = th.nn.Parameter(th.nn.init.normal_( th.empty(c_out, c_in, *_pair(k_size)) )) self.use_bias = bias self.stride = stride self.pad = pad if self.use_bias: self.bias = th.nn.Parameter(th.FloatTensor(c_out).fill_(0)) fan_in = prod(_pair(k_size)) * c_in # value of fan_in self.scale = sqrt(2) / sqrt(fan_in)
Example #13
Source File: CustomLayers.py From BMSG-GAN with MIT License | 6 votes |
def __init__(self, c_in, c_out, k_size, stride=1, pad=0, bias=True): """ constructor for the class """ from torch.nn.modules.utils import _pair from numpy import sqrt super().__init__() # define the weight and bias if to be used self.weight = th.nn.Parameter(th.nn.init.normal_( th.empty(c_in, c_out, *_pair(k_size)) )) self.use_bias = bias self.stride = stride self.pad = pad if self.use_bias: self.bias = th.nn.Parameter(th.FloatTensor(c_out).fill_(0)) fan_in = c_in # value of fan_in for deconv self.scale = sqrt(2) / sqrt(fan_in)
Example #14
Source File: vcnn.py From Versatile-Filters with BSD 3-Clause "New" or "Revised" License | 6 votes |
def forward(self, x): x_list = [] s_num = self.s_num ch_ratio = (1+self.delta/self.g) ch_len = self.in_channels - self.delta for s in range(s_num): for start in range(0, self.delta+1, self.g): weight1 = self.weight[:, :ch_len, s:self.kernel_size[0]-s, s:self.kernel_size[0]-s] if self.padding[0]-s < 0: h = x.size(2) x1 = x[:,start:start+ch_len,s:h-s,s:h-s] padding1 = _pair(0) else: x1 = x[:,start:start+ch_len,:,:] padding1 = _pair(self.padding[0]-s) x_list.append(F.conv2d(x1, weight1, self.bias[int(self.out_channels*(s*ch_ratio+start)/s_num/ch_ratio):int(self.out_channels*(s*ch_ratio+start+1)/s_num/ch_ratio)], self.stride, padding1, self.dilation, self.groups)) x = torch.cat(x_list, 1) return x
Example #15
Source File: deform_conv_module.py From Parsing-R-CNN with MIT License | 6 votes |
def __init__( self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, deformable_groups=1, bias=False ): super(DeformConvPack, self).__init__( in_channels, out_channels, kernel_size, stride, padding, dilation, groups, deformable_groups, bias) self.conv_offset = nn.Conv2d( self.in_channels, self.deformable_groups * 2 * self.kernel_size[0] * self.kernel_size[1], kernel_size=self.kernel_size, stride=_pair(self.stride), padding=_pair(self.padding), bias=True) self.init_offset()
Example #16
Source File: deform_conv_module.py From Parsing-R-CNN with MIT License | 6 votes |
def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, deformable_groups=1, bias=True): super(ModulatedDeformConvPack, self).__init__( in_channels, out_channels, kernel_size, stride, padding, dilation, groups, deformable_groups, bias) self.conv_offset_mask = nn.Conv2d( self.in_channels, self.deformable_groups * 3 * self.kernel_size[0] * self.kernel_size[1], kernel_size=self.kernel_size, stride=_pair(self.stride), padding=_pair(self.padding), bias=True) self.init_offset()
Example #17
Source File: deform_pool.py From DenseMatchingBenchmark with MIT License | 6 votes |
def __init__(self, spatial_scale, out_size, out_channels, no_trans, group_size=1, part_size=None, sample_per_part=4, trans_std=.0): super(DeformRoIPooling, self).__init__() self.spatial_scale = spatial_scale self.out_size = _pair(out_size) self.out_channels = out_channels self.no_trans = no_trans self.group_size = group_size self.part_size = out_size if part_size is None else part_size self.sample_per_part = sample_per_part self.trans_std = trans_std
Example #18
Source File: deform_conv2d_naive.py From ASFF with GNU General Public License v3.0 | 6 votes |
def __init__(self, in_channels, out_channels, kernel_size, stride, padding, dilation=1, groups=1, deformable_groups=1, bias=True): super(deform_conv2d_naive, self).__init__() self.in_channels = in_channels self.out_channels = out_channels self.kernel_size = _pair(kernel_size) self.stride = _pair(stride) self.padding = _pair(padding) self.dilation = _pair(dilation) self.groups = groups self.deformable_groups = deformable_groups self.use_bias = bias self.weight = nn.Parameter(torch.Tensor( out_channels, in_channels//groups, *self.kernel_size)) self.bias = nn.Parameter(torch.Tensor(out_channels)) self.reset_parameters() if not self.use_bias: self.bias.requires_grad = False self.bias.data.zero_()
Example #19
Source File: deform_conv2d_func.py From ASFF with GNU General Public License v3.0 | 6 votes |
def forward(ctx, input, offset, weight, bias, stride, padding, dilation, group, deformable_groups, im2col_step): ctx.stride = _pair(stride) ctx.padding = _pair(padding) ctx.dilation = _pair(dilation) ctx.kernel_size = _pair(weight.shape[2:4]) ctx.group = group ctx.deformable_groups = deformable_groups ctx.im2col_step = im2col_step output = DCN.deform_conv2d_forward(input, weight, bias, offset, ctx.kernel_size[0], ctx.kernel_size[1], ctx.stride[0], ctx.stride[1], ctx.padding[0], ctx.padding[1], ctx.dilation[0], ctx.dilation[1], ctx.group, ctx.deformable_groups, ctx.im2col_step) ctx.save_for_backward(input, offset, weight, bias) return output
Example #20
Source File: rectify.py From PyTorch-Encoding with MIT License | 5 votes |
def _conv_forward(self, input, weight): if self.padding_mode != 'zeros': return F.conv2d(F.pad(input, self._padding_repeated_twice, mode=self.padding_mode), weight, self.bias, self.stride, _pair(0), self.dilation, self.groups) return F.conv2d(input, weight, self.bias, self.stride, self.padding, self.dilation, self.groups)
Example #21
Source File: deform_conv.py From DenseMatchingBenchmark with MIT License | 5 votes |
def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, deformable_groups=1, bias=False): super(DeformConv, self).__init__() assert not bias assert in_channels % groups == 0, \ 'in_channels {} cannot be divisible by groups {}'.format( in_channels, groups) assert out_channels % groups == 0, \ 'out_channels {} cannot be divisible by groups {}'.format( out_channels, groups) self.in_channels = in_channels self.out_channels = out_channels self.kernel_size = _pair(kernel_size) self.stride = _pair(stride) self.padding = _pair(padding) self.dilation = _pair(dilation) self.groups = groups self.deformable_groups = deformable_groups # enable compatibility with nn.Conv2d self.transposed = False self.output_padding = _single(0) self.weight = nn.Parameter( torch.Tensor(out_channels, in_channels // self.groups, *self.kernel_size)) self.reset_parameters()
Example #22
Source File: deform_conv.py From DenseMatchingBenchmark with MIT License | 5 votes |
def __init__(self, *args, **kwargs): super(ModulatedDeformConvPack, self).__init__(*args, **kwargs) self.conv_offset = nn.Conv2d( self.in_channels, self.deformable_groups * 3 * self.kernel_size[0] * self.kernel_size[1], kernel_size=self.kernel_size, stride=_pair(self.stride), padding=_pair(self.padding), bias=True) self.init_offset()
Example #23
Source File: roi_align.py From SlowFast-Network-pytorch with MIT License | 5 votes |
def forward(ctx, input, roi, output_size, spatial_scale, sampling_ratio): ctx.save_for_backward(roi) ctx.output_size = _pair(output_size) ctx.spatial_scale = spatial_scale ctx.sampling_ratio = sampling_ratio ctx.input_shape = input.size() output = _C.roi_align_forward( input, roi, spatial_scale, output_size[0], output_size[1], sampling_ratio ) return output
Example #24
Source File: pac.py From openseg.pytorch with MIT License | 5 votes |
def forward(ctx, input, kernel, weight, bias=None, stride=1, padding=0, output_padding=0, dilation=1, shared_filters=False): (bs, ch), in_sz = input.shape[:2], input.shape[2:] if kernel.size(1) > 1: raise ValueError('Non-singleton channel is not allowed for kernel.') ctx.in_ch = ch ctx.kernel_size = tuple(weight.shape[-2:]) ctx.dilation = _pair(dilation) ctx.padding = _pair(padding) ctx.output_padding = _pair(output_padding) ctx.stride = _pair(stride) ctx.shared_filters = shared_filters ctx.save_for_backward(input if (ctx.needs_input_grad[1] or ctx.needs_input_grad[2]) else None, kernel if (ctx.needs_input_grad[0] or ctx.needs_input_grad[2]) else None, weight if (ctx.needs_input_grad[0] or ctx.needs_input_grad[1]) else None) ctx._backend = type2backend[input.type()] w = input.new_ones((ch, 1, 1, 1)) x = F.conv_transpose2d(input, w, stride=stride, groups=ch) pad = [(k - 1) * d - p for (k, d, p) in zip(ctx.kernel_size, ctx.dilation, ctx.padding)] x = F.pad(x, (pad[1], pad[1] + ctx.output_padding[1], pad[0], pad[0] + ctx.output_padding[0])) cols = F.unfold(x, ctx.kernel_size, ctx.dilation, _pair(0), _pair(1)) in_mul_k = cols.view(bs, ch, *kernel.shape[2:]) * kernel # matrix multiplication, written as an einsum to avoid repeated view() and permute() if shared_filters: output = torch.einsum('ijklmn,jokl->iomn', (in_mul_k, weight)) else: output = torch.einsum('ijklmn,jokl->iomn', (in_mul_k, weight)) if bias is not None: output += bias.view(1, -1, 1, 1) return output.clone() # TODO understand why a .clone() is needed here
Example #25
Source File: modulated_deform_conv2d.py From ASFF with GNU General Public License v3.0 | 5 votes |
def __init__(self, in_channels, out_channels, kernel_size, stride, padding, dilation=1, groups=1, deformable_groups=1, im2col_step=64, bias=True): super(ModulatedDeformConv2d, self).__init__() if in_channels % groups != 0: raise ValueError('in_channels {} must be divisible by groups {}'.format(in_channels, groups)) if out_channels % groups != 0: raise ValueError('out_channels {} must be divisible by groups {}'.format(out_channels, groups)) self.in_channels = in_channels self.out_channels = out_channels self.kernel_size = _pair(kernel_size) self.stride = _pair(stride) self.padding = _pair(padding) self.dilation = _pair(dilation) self.groups = groups self.deformable_groups = deformable_groups self.im2col_step = im2col_step self.use_bias = bias self.weight = nn.Parameter(torch.Tensor( out_channels, in_channels//groups, *self.kernel_size)) self.bias = nn.Parameter(torch.Tensor(out_channels)) self.reset_parameters() if not self.use_bias: self.bias.requires_grad = False
Example #26
Source File: pac.py From openseg.pytorch with MIT License | 5 votes |
def forward(ctx, input, kernel, weight, bias=None, stride=1, padding=0, dilation=1, shared_filters=False): (bs, ch), in_sz = input.shape[:2], input.shape[2:] if kernel.size(1) > 1: raise ValueError('Non-singleton channel is not allowed for kernel.') ctx.input_size = in_sz ctx.in_ch = ch ctx.kernel_size = tuple(weight.shape[-2:]) ctx.dilation = _pair(dilation) ctx.padding = _pair(padding) ctx.stride = _pair(stride) ctx.shared_filters = shared_filters ctx.save_for_backward(input if (ctx.needs_input_grad[1] or ctx.needs_input_grad[2]) else None, kernel if (ctx.needs_input_grad[0] or ctx.needs_input_grad[2]) else None, weight if (ctx.needs_input_grad[0] or ctx.needs_input_grad[1]) else None) ctx._backend = type2backend[input.type()] cols = F.unfold(input, ctx.kernel_size, ctx.dilation, ctx.padding, ctx.stride) in_mul_k = cols.view(bs, ch, *kernel.shape[2:]) * kernel # matrix multiplication, written as an einsum to avoid repeated view() and permute() if shared_filters: output = torch.einsum('ijklmn,zykl->ijmn', (in_mul_k, weight)) else: output = torch.einsum('ijklmn,ojkl->iomn', (in_mul_k, weight)) if bias is not None: output += bias.view(1, -1, 1, 1) return output.clone() # TODO understand why a .clone() is needed here
Example #27
Source File: basic_layers.py From DenseMatchingBenchmark with MIT License | 5 votes |
def consistent_padding_with_dilation(padding, dilation, dim=2): assert dim == 2 or dim == 3, 'Convolution layer only support 2D and 3D' if dim == 2: padding = _pair(padding) dilation = _pair(dilation) else: # dim == 3 padding = _triple(padding) dilation = _triple(dilation) padding = list(padding) for d in range(dim): padding[d] = dilation[d] if dilation[d] > 1 else padding[d] padding = tuple(padding) return padding, dilation
Example #28
Source File: vcnn.py From Versatile-Filters with BSD 3-Clause "New" or "Revised" License | 5 votes |
def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, delta=0, g=1): kernel_size = _pair(kernel_size) stride = _pair(stride) padding = _pair(padding) dilation = _pair(dilation) super(VConv2d, self).__init__( in_channels, out_channels, kernel_size, stride, padding, dilation, False, _pair(0), groups, bias) self.s_num = int(np.ceil(self.kernel_size[0]/2)) # s in paper self.delta = delta # c-\hat{c} in paper self.g = g # g in paper self.weight = nn.Parameter(torch.Tensor( int(out_channels/self.s_num/(1+self.delta/self.g)), in_channels // groups, *kernel_size)) self.reset_parameters()
Example #29
Source File: pac.py From openseg.pytorch with MIT License | 5 votes |
def nd2col(input_nd, kernel_size, stride=1, padding=0, output_padding=0, dilation=1, transposed=False, use_pyinn_if_possible=False): """ Shape: - Input: :math:`(N, C, L_{in})` - Output: :math:`(N, C, *kernel_size, *L_{out})` where :math:`L_{out} = floor((L_{in} + 2 * padding - dilation * (kernel_size - 1) - 1) / stride + 1)` for non-transposed :math:`L_{out} = (L_{in} - 1) * stride - 2 * padding + dilation * (kernel_size - 1) + 1 + output_padding` for transposed """ n_dims = len(input_nd.shape[2:]) kernel_size = (kernel_size,) * n_dims if isinstance(kernel_size, Number) else kernel_size stride = (stride,) * n_dims if isinstance(stride, Number) else stride padding = (padding,) * n_dims if isinstance(padding, Number) else padding output_padding = (output_padding,) * n_dims if isinstance(output_padding, Number) else output_padding dilation = (dilation,) * n_dims if isinstance(dilation, Number) else dilation if transposed: assert n_dims == 2, 'Only 2D is supported for fractional strides.' w_one = input_nd.new_ones(1, 1, 1, 1) pad = [(k - 1) * d - p for (k, d, p) in zip(kernel_size, dilation, padding)] input_nd = F.conv_transpose2d(input_nd, w_one, stride=stride) input_nd = F.pad(input_nd, (pad[1], pad[1] + output_padding[1], pad[0], pad[0] + output_padding[0])) stride = _pair(1) padding = _pair(0) (bs, nch), in_sz = input_nd.shape[:2], input_nd.shape[2:] out_sz = tuple([((i + 2 * p - d * (k - 1) - 1) // s + 1) for (i, k, d, p, s) in zip(in_sz, kernel_size, dilation, padding, stride)]) # Use PyINN if possible (about 15% faster) TODO confirm the speed-up if n_dims == 2 and dilation == 1 and has_pyinn and torch.cuda.is_available() and use_pyinn_if_possible: output = P.im2col(input_nd, kernel_size, stride, padding) else: output = F.unfold(input_nd, kernel_size, dilation, padding, stride) out_shape = (bs, nch) + tuple(kernel_size) + out_sz output = output.view(*out_shape).contiguous() return output
Example #30
Source File: deform_conv.py From DenseMatchingBenchmark with MIT License | 5 votes |
def __init__(self, *args, **kwargs): super(DeformConvPack, self).__init__(*args, **kwargs) self.conv_offset = nn.Conv2d( self.in_channels, self.deformable_groups * 2 * self.kernel_size[0] * self.kernel_size[1], kernel_size=self.kernel_size, stride=_pair(self.stride), padding=_pair(self.padding), bias=True) self.init_offset()