Source code for easycv.models.utils.activation

# Copyright (c) Alibaba, Inc. and its affiliates.
import torch
import torch.nn as nn

from easycv.utils.registry import Registry, build_from_cfg

ACTIVATION_LAYERS = Registry('activation layer')

for module in [
        nn.ReLU, nn.LeakyReLU, nn.PReLU, nn.RReLU, nn.ReLU6, nn.ELU,
        nn.Sigmoid, nn.Tanh
]:
    ACTIVATION_LAYERS.register_module(module)


[docs]@ACTIVATION_LAYERS.register_module() class FReLU(nn.Module):
[docs] def __init__(self, in_channel): super().__init__() self.depthwise_conv_bn = nn.Sequential( nn.Conv2d( in_channel, in_channel, 3, padding=1, groups=in_channel, bias=False), nn.BatchNorm2d(in_channel))
[docs] def forward(self, x): funnel_x = self.depthwise_conv_bn(x) return torch.max(x, funnel_x)
[docs]def build_activation_layer(cfg): """Build activation layer. Args: cfg (dict): The activation layer config, which should contain: - type (str): Layer type. - layer args: Args needed to instantiate an activation layer. Returns: nn.Module: Created activation layer. """ return build_from_cfg(cfg, ACTIVATION_LAYERS)