(in_chs, out_chs, kernel_size, **kwargs)
| 51 | |
| 52 | |
| 53 | def conv2d_pad(in_chs, out_chs, kernel_size, **kwargs): |
| 54 | padding = kwargs.pop('padding', '') |
| 55 | kwargs.setdefault('bias', False) |
| 56 | if isinstance(padding, str): |
| 57 | # for any string padding, the padding will be calculated for you, one of three ways |
| 58 | padding = padding.lower() |
| 59 | if padding == 'same': |
| 60 | # TF compatible 'SAME' padding, has a performance and GPU memory allocation impact |
| 61 | if _is_static_pad(kernel_size, **kwargs): |
| 62 | # static case, no extra overhead |
| 63 | padding = _get_padding(kernel_size, **kwargs) |
| 64 | return nn.Conv2d(in_chs, out_chs, kernel_size, padding=padding, **kwargs) |
| 65 | else: |
| 66 | # dynamic padding |
| 67 | return Conv2dSame(in_chs, out_chs, kernel_size, **kwargs) |
| 68 | elif padding == 'valid': |
| 69 | # 'VALID' padding, same as padding=0 |
| 70 | return nn.Conv2d(in_chs, out_chs, kernel_size, padding=0, **kwargs) |
| 71 | else: |
| 72 | # Default to PyTorch style 'same'-ish symmetric padding |
| 73 | padding = _get_padding(kernel_size, **kwargs) |
| 74 | return nn.Conv2d(in_chs, out_chs, kernel_size, padding=padding, **kwargs) |
| 75 | else: |
| 76 | # padding was specified as a number or pair |
| 77 | return nn.Conv2d(in_chs, out_chs, kernel_size, padding=padding, **kwargs) |
| 78 | |
| 79 | |
| 80 | class MixedConv2d(nn.Module): |
no test coverage detected