|
32 | 32 |
|
33 | 33 |
|
34 | 34 | class SqueezeExcitation(nn.Module):
|
35 |
| - def __init__(self, input_channels: int, squeeze_channels: int): |
| 35 | + def __init__( |
| 36 | + self, |
| 37 | + input_channels: int, |
| 38 | + squeeze_channels: int, |
| 39 | + activation: Callable[..., nn.Module] = nn.ReLU, |
| 40 | + scale_activation: Callable[..., nn.Module] = nn.Sigmoid, |
| 41 | + ) -> None: |
36 | 42 | super().__init__()
|
37 | 43 | self.fc1 = nn.Conv2d(input_channels, squeeze_channels, 1)
|
38 | 44 | self.fc2 = nn.Conv2d(squeeze_channels, input_channels, 1)
|
| 45 | + self.activation = activation() |
| 46 | + self.scale_activation = scale_activation() |
39 | 47 |
|
40 | 48 | def _scale(self, input: Tensor) -> Tensor:
|
41 | 49 | scale = F.adaptive_avg_pool2d(input, 1)
|
42 | 50 | scale = self.fc1(scale)
|
43 |
| - scale = F.silu(scale, inplace=True) |
| 51 | + scale = self.activation(scale) |
44 | 52 | scale = self.fc2(scale)
|
45 |
| - return scale.sigmoid() |
| 53 | + return self.scale_activation(scale) |
46 | 54 |
|
47 | 55 | def forward(self, input: Tensor) -> Tensor:
|
48 | 56 | scale = self._scale(input)
|
@@ -108,7 +116,7 @@ def __init__(self, cnf: MBConvConfig, stochastic_depth_prob: float, norm_layer:
|
108 | 116 |
|
109 | 117 | # squeeze and excitation
|
110 | 118 | squeeze_channels = max(1, cnf.input_channels // 4)
|
111 |
| - layers.append(se_layer(expanded_channels, squeeze_channels)) |
| 119 | + layers.append(se_layer(expanded_channels, squeeze_channels, activation=partial(nn.SiLU, inplace=True))) |
112 | 120 |
|
113 | 121 | # project
|
114 | 122 | layers.append(ConvBNActivation(expanded_channels, cnf.out_channels, kernel_size=1, norm_layer=norm_layer,
|
|
0 commit comments