|
"""Frequently used convolution modules""" |
|
|
|
from torch import nn |
|
|
|
from typing import Tuple |
|
|
|
|
|
def conv2d( |
|
in_channels: int, |
|
out_channels: int, |
|
kernel_size: int = 3, |
|
stride: int = 1, |
|
padding: int = 1, |
|
) -> nn.Conv2d: |
|
""" |
|
Template convolution which is typically used throughout the project |
|
|
|
:param int in_channels: Number of input channels |
|
:param int out_channels: Number of output channels |
|
:param int kernel_size: Size of sliding kernel |
|
:param int stride: How many steps kernel does when sliding |
|
:param int padding: How many dimensions to pad |
|
:return: Convolution layer with parameters |
|
:rtype: nn.Conv2d |
|
""" |
|
return nn.Conv2d( |
|
in_channels=in_channels, |
|
out_channels=out_channels, |
|
kernel_size=kernel_size, |
|
stride=stride, |
|
padding=padding, |
|
) |
|
|
|
|
|
def conv1d( |
|
in_channels: int, |
|
out_channels: int, |
|
kernel_size: int = 1, |
|
stride: int = 1, |
|
padding: int = 0, |
|
) -> nn.Conv1d: |
|
""" |
|
Template 1d convolution which is typically used throughout the project |
|
|
|
:param int in_channels: Number of input channels |
|
:param int out_channels: Number of output channels |
|
:param int kernel_size: Size of sliding kernel |
|
:param int stride: How many steps kernel does when sliding |
|
:param int padding: How many dimensions to pad |
|
:return: Convolution layer with parameters |
|
:rtype: nn.Conv2d |
|
""" |
|
return nn.Conv1d( |
|
in_channels=in_channels, |
|
out_channels=out_channels, |
|
kernel_size=kernel_size, |
|
stride=stride, |
|
padding=padding, |
|
) |
|
|
|
|
|
def calc_out_conv( |
|
h_in: int, w_in: int, kernel_size: int = 3, stride: int = 1, padding: int = 0 |
|
) -> Tuple[int, int]: |
|
""" |
|
Calculate the dimensionalities of images propagated through conv layers |
|
|
|
:param h_in: Height of the image |
|
:param w_in: Width of the image |
|
:param kernel_size: Size of sliding kernel |
|
:param stride: How many steps kernel does when sliding |
|
:param padding: How many dimensions to pad |
|
:return: Height and width of image through convolution |
|
:rtype: tuple[int, int] |
|
""" |
|
h_out = int((h_in + 2 * padding - kernel_size) / stride + 1) |
|
w_out = int((w_in + 2 * padding - kernel_size) / stride + 1) |
|
return h_out, w_out |
|
|