in anticipation/anticipation/models/backbone/timeception.py [0:0]
def __define_temporal_convolutional_block(self, input_shape, n_channels_per_branch_out, kernel_sizes, dilation_rates, layer_num, group_num):
"""
Define 5 branches of convolutions that operate of channels of each group.
"""
n_channels_in = input_shape[1]
dw_input_shape = list(input_shape)
dw_input_shape[1] = n_channels_per_branch_out
# branch 1: dimension reduction only and no temporal conv
layer_name = 'conv_b1_g%d_tc%d' % (group_num, layer_num)
layer = Conv3d(n_channels_in, n_channels_per_branch_out, kernel_size=(1, 1, 1))
layer._name = layer_name
setattr(self, layer_name, layer)
layer_name = 'bn_b1_g%d_tc%d' % (group_num, layer_num)
layer = BatchNorm3d(n_channels_per_branch_out)
layer._name = layer_name
setattr(self, layer_name, layer)
# branch 2: dimension reduction followed by depth-wise temp conv (kernel-size 3)
layer_name = 'conv_b2_g%d_tc%d' % (group_num, layer_num)
layer = Conv3d(n_channels_in, n_channels_per_branch_out, kernel_size=(1, 1, 1))
layer._name = layer_name
setattr(self, layer_name, layer)
layer_name = 'convdw_b2_g%d_tc%d' % (group_num, layer_num)
layer = DepthwiseConv1DLayer(dw_input_shape, kernel_sizes[0], dilation_rates[0], layer_name)
setattr(self, layer_name, layer)
layer_name = 'bn_b2_g%d_tc%d' % (group_num, layer_num)
layer = BatchNorm3d(n_channels_per_branch_out)
layer._name = layer_name
setattr(self, layer_name, layer)
# branch 3: dimension reduction followed by depth-wise temp conv (kernel-size 5)
layer_name = 'conv_b3_g%d_tc%d' % (group_num, layer_num)
layer = Conv3d(n_channels_in, n_channels_per_branch_out, kernel_size=(1, 1, 1))
layer._name = layer_name
setattr(self, layer_name, layer)
layer_name = 'convdw_b3_g%d_tc%d' % (group_num, layer_num)
layer = DepthwiseConv1DLayer(dw_input_shape, kernel_sizes[1], dilation_rates[1], layer_name)
setattr(self, layer_name, layer)
layer_name = 'bn_b3_g%d_tc%d' % (group_num, layer_num)
layer = BatchNorm3d(n_channels_per_branch_out)
layer._name = layer_name
setattr(self, layer_name, layer)
# branch 4: dimension reduction followed by depth-wise temp conv (kernel-size 7)
layer_name = 'conv_b4_g%d_tc%d' % (group_num, layer_num)
layer = Conv3d(n_channels_in, n_channels_per_branch_out, kernel_size=(1, 1, 1))
layer._name = layer_name
setattr(self, layer_name, layer)
layer_name = 'convdw_b4_g%d_tc%d' % (group_num, layer_num)
layer = DepthwiseConv1DLayer(dw_input_shape, kernel_sizes[2], dilation_rates[2], layer_name)
setattr(self, layer_name, layer)
layer_name = 'bn_b4_g%d_tc%d' % (group_num, layer_num)
layer = BatchNorm3d(n_channels_per_branch_out)
layer._name = layer_name
setattr(self, layer_name, layer)
# branch 5: dimension reduction followed by temporal max pooling
layer_name = 'conv_b5_g%d_tc%d' % (group_num, layer_num)
layer = Conv3d(n_channels_in, n_channels_per_branch_out, kernel_size=(1, 1, 1))
layer._name = layer_name
setattr(self, layer_name, layer)
layer_name = 'maxpool_b5_g%d_tc%d' % (group_num, layer_num)
layer = MaxPool3d(kernel_size=(2, 1, 1), stride=(1, 1, 1))
layer._name = layer_name
setattr(self, layer_name, layer)
layer_name = 'padding_b5_g%d_tc%d' % (group_num, layer_num)
layer = torch.nn.ReplicationPad3d((0, 0, 0, 0, 1, 0)) # left, right, top, bottom, front, back
layer._name = layer_name
setattr(self, layer_name, layer)
layer_name = 'bn_b5_g%d_tc%d' % (group_num, layer_num)
layer = BatchNorm3d(n_channels_per_branch_out)
layer._name = layer_name
setattr(self, layer_name, layer)