FBAGSTM's picture
STM32 AI Experimentation Hub
747451d
# /*---------------------------------------------------------------------------------------------
#  * Copyright (c) 2025 STMicroelectronics.
#  * All rights reserved.
#  *
#  * This software is licensed under terms that can be found in the LICENSE file in
#  * the root directory of this software component.
#  * If no LICENSE file comes with this software, it is provided AS-IS.
#  *--------------------------------------------------------------------------------------------*/
import torch.nn as nn
from common.utils import LOGGER
# Mish is removed from this list
ST_ACT_TYPES = {
'relu': nn.ReLU(inplace=True),
'relu6': nn.ReLU6(inplace=True),
'hswish': nn.Hardswish(inplace=True),
'hardswish': nn.Hardswish(inplace=True),
'silu': nn.SiLU(inplace=True),
'lrelu': nn.LeakyReLU(0.1, inplace=True),
'hsigmoid': nn.Hardsigmoid(inplace=True),
'sigmoid': nn.Sigmoid(),
'leakyrelu': nn.LeakyReLU(negative_slope=0.1, inplace=True),
'leakyrelu_0.1': nn.LeakyReLU(negative_slope=0.1, inplace=True),
'gelu': nn.GELU(),
}
def get_activation(activation_name):
if activation_name:
return ST_ACT_TYPES[activation_name]
LOGGER.debug('No activation specified for get_activation. Returning nn.Identity()')
return nn.Identity()
def autopad(k, p=None, d=1): # kernel, padding, dilation
# Pad to 'same' shape outputs
if d > 1:
k = (
d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]
) # actual kernel-size
if p is None:
p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad
return p
def round_channels(channels, divisor=8):
rounded_channels = max(int(channels + divisor / 2.0) // divisor * divisor, divisor)
if float(rounded_channels) < 0.9 * channels:
rounded_channels += divisor
return rounded_channels