23 dropblock_prob=0.0, **kwargs):
24 super(SplAtConv2d, self).__init__()
25 padding = _pair(padding)
26 self.rectify = rectify and (padding[0] > 0 or padding[1] > 0)
27 self.rectify_avg = rectify_avg
28 inter_channels = max(in_channels * radix // reduction_factor, 32)
29 self.radix = radix
30 self.cardinality = groups
31 self.channels = channels
32 self.dropblock_prob = dropblock_prob
33 if self.rectify:
34 from rfconv import RFConv2d
35 self.conv = RFConv2d(in_channels, channels * radix, kernel_size, stride, padding, dilation,
36 groups=groups * radix, bias=bias, average_mode=rectify_avg, **kwargs)
37 else:
38 self.conv = Conv2d(in_channels, channels * radix, kernel_size, stride, padding, dilation,
39 groups=groups * radix, bias=bias, **kwargs)
40 self.use_bn = norm_layer is not None
41 if self.use_bn:
42 self.bn0 = get_norm(norm_layer, channels * radix)
43 self.relu = ReLU(inplace=True)
44 self.fc1 = Conv2d(channels, inter_channels, 1, groups=self.cardinality)
45 if self.use_bn:
46 self.bn1 = get_norm(norm_layer, inter_channels)
47 self.fc2 = Conv2d(inter_channels, channels * radix, 1, groups=self.cardinality)
48
49 self.rsoftmax = rSoftMax(radix, groups)
50