SDK Core ML Core API
Modules
Reusable building blocks for neural networks.
- class metavision_core_ml.core.modules.ConvLayer(in_channels, out_channels, kernel_size=3, stride=1, padding=1, dilation=1, bias=True, norm='BatchNorm2d', activation='ReLU', separable=False, **kwargs)
Building Block Convolution Layer
- Parameters
in_channels (int) – number of input channels
out_channels (int) – number of output channels
kernel_size (int) – conv receptive field
stride (int) – conv stride
dilation (int) – conv dilation
bias (bool) – whether or not to add a bias
norm (str) – type of the normalization
activation (str) – type of non-linear activation
separable (bool) – whether to use separable convolution
**kwargs – Additional keyword arguments passed to the convolution operator.
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- class metavision_core_ml.core.modules.DepthWiseSeparableConv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0, dilation=1, bias=False, depth_multiplier=1, **kwargs)
Depthwise Separable Convolution followed by pointwise 1x1 Convolution.
A convolution is called depthwise separable when the normal convolution is split into two convolutions: depthwise convolution and pointwise convolution.
- Parameters
in_channels (int) – number of input channels
out_channels (int) – number of output channels
kernel_size (int) – separable conv receptive field
stride (int) – separable conv stride.
padding (int) – separable conv padding.
depth_multiplier (int) – Factor by which we multiply the in_channels to get the number of output_channels in the depthwise convolution.
**kwargs – Additional keyword arguments passed to the first convolution operator.
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- class metavision_core_ml.core.modules.PreActBlock(in_channels, out_channels, stride=1)
Squeeze-Excite Block from: Squeeze-and-Excitation Networks (Hu et al.)
- Parameters
in_channels (int) – number of input channels.
out_channels (int) – number of output channels.
stride (int) – convolution stride.
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- forward(x)
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
- class metavision_core_ml.core.modules.ResBlock(in_channels, out_channels, stride=1, norm='BatchNorm2d')
Residual Convolutional Block
- Parameters
in_channels (int) – number of input channels
out_channels (int) – number of output channels
stride (int) – convolutional stride
norm (str) – type of normalization
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- forward(x)
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
Temporal Modules
Layers involving recursion or temporal aspects.
- class metavision_core_ml.core.temporal_modules.ConvGRUCell(in_channels, out_channels, kernel_size=3, padding=1, conv_func=<class 'torch.nn.modules.conv.Conv2d'>, hard=False, stride=1, dilation=1)
ConvGRUCell module, applies sequential part of the Gated Recurrent Unit.
GRU with matrix multiplication replaced by convolution See Chung, Junyoung, et al. “Empirical evaluation of gated recurrent neural networks on sequence modeling.
- Parameters
in_channels (int) – number of input channels.
out_channels (int) – number of output_channels of hidden state.
kernel_size (int) – internal convolution receptive field.
padding (int) – padding parameter for the convolution
conv_func (fun) – functional that you can replace if you want to interact with your 2D state differently.
hard (bool) – applies hard gates.
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- forward(xt)
xt size: (T, B,C,H,W) return size: (T, B,C’,H,W)
- reset(mask)
Sets the memory (or hidden state to zero), normally at the beginning of a new sequence.
reset() needs to be called at the beginning of a new sequence. The mask is here to indicate which elements of the batch are indeed new sequences.
- class metavision_core_ml.core.temporal_modules.ConvLSTMCell(hidden_dim, kernel_size, conv_func=<class 'torch.nn.modules.conv.Conv2d'>, hard=False)
ConvLSTMCell module, applies sequential part of LSTM.
LSTM with matrix multiplication replaced by convolution See Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting (Shi et al.)
- Parameters
hidden_dim (int) – number of output_channels of hidden state.
kernel_size (int) – internal convolution receptive field.
conv_func (fun) – functional that you can replace if you want to interact with your 2D state differently.
hard (bool) – applies hard gates.
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- forward(x)
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
- reset(mask)
Sets the memory (or hidden state to zero), normally at the beginning of a new sequence.
reset() needs to be called at the beginning of a new sequence. The mask is here to indicate which elements of the batch are indeed new sequences.
- reset_all()
Resets memory for all sequences in one batch.
- class metavision_core_ml.core.temporal_modules.ConvRNN(in_channels, out_channels, kernel_size=3, stride=1, padding=1, dilation=1, cell='lstm', separable=False, separable_hidden=False, **kwargs)
ConvRNN module. ConvLSTM cell followed by a feed forward convolution layer.
- Parameters
in_channels (int) – number of input channels
out_channels (int) – number of output channels
kernel_size (int) – separable conv receptive field
stride (int) – separable conv stride.
padding (int) – padding.
separable (boolean) – if True, uses depthwise separable convolution for the forward convolutional layer.
separable_hidden (boolean) – if True, uses depthwise separable convolution for the hidden convolutional layer.
cell (string) – RNN cell type, currently gru and lstm only are supported.
**kwargs – additional parameters for the feed forward convolutional layer.
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- forward(x)
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
- reset(mask=tensor([0.]))
Resets memory of the network.
- class metavision_core_ml.core.temporal_modules.RNNCell(hard)
Abstract class that has memory. serving as a base class to memory layers.
- Parameters
hard (bool) – Applies hard gates to memory updates function.
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- class metavision_core_ml.core.temporal_modules.SequenceWise(module, ndims=5)
Wrapper Module that allows the wrapped Module to be applied on sequential Tensors of shape 5 (num_time_bins, batch_size, channel_count, height, width)
- module
Module to wrap to be able to apply non sequential model on tensor of 5 dimensions.
- Type
torch.nn.Module
- Parameters
module (torch.nn.Module) – Module to wrap to be able to apply non sequential model on tensor of 5 dimensions.
- forward(x)
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
- class metavision_core_ml.core.temporal_modules.VideoSequential(*args)
Wrapper Module that allows to call a torch.nn.Sequential object on shape 5 (num_time_bins, batch_size, channel_count, height, width)
Difference with SequenceWise is that this handles a list of module. You can build this like a Sequential Object.
Example
- >> video_net = VideoSequential(nn.Conv2d(3,16,3,1,1),
nn.ReLU())
>> t,b,c,h,w = 3,2,3,128,128 >> x = torch.randn(t,b,c,h,w) >> y = video_net(x)
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- forward(x)
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
- metavision_core_ml.core.temporal_modules.batch_to_time(x: torch.Tensor, n: int) torch.Tensor
Reverts a 5 dimensional Tensor that has been collapsed with time_to_batch to its original form
- Parameters
x (torch.Tensor) – shape (num_time_bins * batch_size, channel_count, height, width)
batch_size (int) – number of separate sequences part of the Tensor.
- Returns
shape (num_time_bins, batch_size, channel_count, height, width)
- Return type
x (torch.Tensor)
- metavision_core_ml.core.temporal_modules.seq_wise(function)
Decorator to apply 4 dimensional tensor functions on 5 dimensional temporal tensor input.
- metavision_core_ml.core.temporal_modules.time_to_batch(x: torch.Tensor) Tuple[torch.Tensor, int]
Collapses a five dimensional Tensor to four dimensional tensor by putting sequence samples in the batch dimension.
- Parameters
x (torch.Tensor) – (num_time_bins, batch_size, channel_count, height, width)
- Returns
shape (num_time_bins * batch_size, channel_count, height, width) batch_size (int): number of separate sequences part of the Tensor.
- Return type
x (torch.Tensor)
Unet
Base unet code U-Net: Convolutional Networks for Biomedical Image Segmentation Olaf Ronneberger, Philipp Fischer, Thomas Brox
Notes: - User is responsible for creating the layers, they should have in_channels, out_channels in argument (they must be pre-filled) - User is responsible for making sure spatial sizes agree.
- class metavision_core_ml.core.unet.Unet(encoders, decoders, down, up)
Ultra-Generic Unet
- Parameters
encoders – list of encoder layers
decoders – list of decoder layers
down_layer – layer to resize input
up_layer – layer to resize + merge
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- forward(x)
Define the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
- metavision_core_ml.core.unet.unet_layers(down_block, middle_block, up_block, input_size=5, down_filter_sizes=[32, 64], middle_filter_size=128, up_filter_sizes=[64, 32, 8])
Builds unet layers can be used to build unet layers (but you are not forced to)
Here we make sure to connect the last upsampled feature-map to the input!
- X - Y = Conv([X,Up(U2)])
- /
- D1 - U2 = Conv([D1,Up(U1)])
- /
- D2 - U1 = Conv([D2,Up(M)])
- /
D3 - M
All block types are partial functions expecting in_channels, out_channels as first two parameters.
- Parameters
down_block – encoder’s block type
middle_block – bottleneck’s block type
up_block – decoder’s block type
input_size – in_channels
down_filter_sizes – out_channels per encoder
middle_filter_size – bottleneck’s channels
up_fitler_sizes – decoder’s channels