def __init__(self,
                 inplanes,
                 planes,
                 stride=1,
                 downsample=None,
                 radix=1,
                 cardinality=1,
                 bottleneck_width=64,
                 avd=False,
                 avd_first=False,
                 dilation=1,
                 is_first=False,
                 rectified_conv=False,
                 rectify_avg=False,
                 norm_layer=None,
                 dropblock_prob=0.0,
                 last_gamma=False):
        super(Bottleneck, self).__init__()
        group_width = int(planes * (bottleneck_width / 64.)) * cardinality
        self.conv1 = nn.Conv2d(inplanes,
                               group_width,
                               kernel_size=1,
                               bias=False)
        self.bn1 = norm_layer(group_width)
        self.dropblock_prob = dropblock_prob
        self.radix = radix
        self.avd = avd and (stride > 1 or is_first)
        self.avd_first = avd_first

        if self.avd:
            self.avd_layer = nn.AvgPool2d(3, stride, padding=1)
            stride = 1

        if dropblock_prob > 0.0:
            self.dropblock1 = DropBlock2D(dropblock_prob, 3)
            if radix == 1:
                self.dropblock2 = DropBlock2D(dropblock_prob, 3)
            self.dropblock3 = DropBlock2D(dropblock_prob, 3)

        if radix >= 1:
            self.conv2 = SplAtConv2d(group_width,
                                     group_width,
                                     kernel_size=3,
                                     stride=stride,
                                     padding=dilation,
                                     dilation=dilation,
                                     groups=cardinality,
                                     bias=False,
                                     radix=radix,
                                     rectify=rectified_conv,
                                     rectify_avg=rectify_avg,
                                     norm_layer=norm_layer,
                                     dropblock_prob=dropblock_prob)
        elif rectified_conv:
            from rfconv import RFConv2d
            self.conv2 = RFConv2d(group_width,
                                  group_width,
                                  kernel_size=3,
                                  stride=stride,
                                  padding=dilation,
                                  dilation=dilation,
                                  groups=cardinality,
                                  bias=False,
                                  average_mode=rectify_avg)
            self.bn2 = norm_layer(group_width)
        else:
            self.conv2 = nn.Conv2d(group_width,
                                   group_width,
                                   kernel_size=3,
                                   stride=stride,
                                   padding=dilation,
                                   dilation=dilation,
                                   groups=cardinality,
                                   bias=False)
            self.bn2 = norm_layer(group_width)

        self.conv3 = nn.Conv2d(group_width,
                               planes * 4,
                               kernel_size=1,
                               bias=False)
        self.bn3 = norm_layer(planes * 4)

        if last_gamma:
            from torch.nn.init import zeros_
            zeros_(self.bn3.weight)
        self.relu = nn.ReLU(inplace=True)
        self.downsample = downsample
        self.dilation = dilation
        self.stride = stride
    def __init__(self,
                 in_channels,
                 channels,
                 kernel_size,
                 stride=(1, 1),
                 padding=(0, 0),
                 dilation=(1, 1),
                 groups=1,
                 bias=True,
                 radix=2,
                 reduction_factor=4,
                 rectify=False,
                 rectify_avg=False,
                 norm_layer=None,
                 num_splits=1,
                 dropblock_prob=0.0,
                 **kwargs):
        super(SplAtConv2d, self).__init__()
        padding = _pair(padding)
        self.rectify = rectify and (padding[0] > 0 or padding[1] > 0)
        self.rectify_avg = rectify_avg
        inter_channels = max(in_channels * radix // reduction_factor, 32)
        self.radix = radix
        self.cardinality = groups
        self.channels = channels
        self.dropblock_prob = dropblock_prob
        if self.rectify:
            from rfconv import RFConv2d
            self.conv = RFConv2d(in_channels,
                                 channels * radix,
                                 kernel_size,
                                 stride,
                                 padding,
                                 dilation,
                                 groups=groups * radix,
                                 bias=bias,
                                 average_mode=rectify_avg,
                                 **kwargs)
        else:
            self.conv = Conv2d(in_channels,
                               channels * radix,
                               kernel_size,
                               stride,
                               padding,
                               dilation,
                               groups=groups * radix,
                               bias=bias,
                               **kwargs)
        self.use_bn = norm_layer is not None
        if self.use_bn:
            self.bn0 = get_norm(norm_layer, channels * radix, num_splits)
        self.relu = ReLU(inplace=True)
        self.fc1 = Conv2d(channels, inter_channels, 1, groups=self.cardinality)
        if self.use_bn:
            self.bn1 = get_norm(norm_layer, inter_channels, num_splits)
        self.fc2 = Conv2d(inter_channels,
                          channels * radix,
                          1,
                          groups=self.cardinality)

        self.rsoftmax = rSoftMax(radix, groups)
Esempio n. 3
0
##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Esempio n. 4
0
 def __init__(self,
              in_channels,
              channels,
              kernel_size,
              stride=(1, 1),
              padding=(0, 0),
              dilation=(1, 1),
              groups=1,
              bias=True,
              radix=2,
              reduction_factor=4,
              rectify=False,
              rectify_avg=False,
              norm_layer=None,
              dropblock_prob=0.0,
              **kwargs):
     super(SplAtConv2d, self).__init__()
     #print("in_channels:{}.channels:{}".format(in_channels,channels))
     padding = _pair(padding)
     self.rectify = rectify and (padding[0] > 0 or padding[1] > 0)
     self.rectify_avg = rectify_avg
     inter_channels = max(in_channels * radix // reduction_factor, 32)
     self.radix = radix
     self.cardinality = groups
     self.channels = channels
     self.dropblock_prob = dropblock_prob
     if self.rectify:
         from rfconv import RFConv2d
         self.conv = RFConv2d(in_channels,
                              channels * radix,
                              kernel_size,
                              stride,
                              padding,
                              dilation,
                              groups=groups * radix,
                              bias=bias,
                              average_mode=rectify_avg,
                              **kwargs)
     else:
         self.conv = Conv2d(in_channels,
                            channels * radix,
                            kernel_size,
                            stride,
                            padding,
                            dilation,
                            groups=groups * radix,
                            bias=bias,
                            **kwargs)
     self.use_bn = norm_layer is not None
     if self.use_bn:
         self.bn0 = norm_layer(channels * radix)
     self.relu = ReLU(inplace=True)
     self.fc1 = Conv2d(channels, inter_channels, 1, groups=self.cardinality)
     if self.use_bn:
         self.bn1 = norm_layer(inter_channels)
     self.fc2 = Conv2d(inter_channels,
                       channels * radix,
                       1,
                       groups=self.cardinality)
     #print("inter_channels:{}.channels*radix:{}".format(inter_channels,channels*radix))
     if dropblock_prob > 0.0:
         self.dropblock = DropBlock2D(dropblock_prob, 3)
     self.rsoftmax = rSoftMax(radix, groups)
     #mid_features = int(3584/(rchannel//self.radix))
     #print(mid_features)
     self.sa_lxy = SpatialSKconv(2, 32, 3, 8, 2)
Esempio n. 5
0
    def __init__(
        self,
        inplanes,
        planes,
        stride=1,
        downsample=None,
        radix=1,
        cardinality=1,
        base_width=64,
        reduce_first=1,
        dilation=1,
        first_dilation=None,
        act_layer=nn.ReLU,
        norm_layer=nn.BatchNorm2d,
        drop_block=None,
        use_pooling=False,
        pool_type='avg',
        pool_first=False,
        rectified_conv=False,
        rectify_avg=False,
    ):
        super(ResNestBottleneck, self).__init__()
        assert reduce_first == 1  # not supported
        group_width = int(planes * (base_width / 64.)) * cardinality
        first_planes = group_width // reduce_first
        outplanes = planes * self.expansion
        first_dilation = first_dilation or dilation

        self.conv1 = nn.Conv2d(inplanes,
                               first_planes,
                               kernel_size=1,
                               bias=False)
        self.bn1 = norm_layer(first_planes)
        self.act1 = act_layer(inplace=True)

        self.pool_layer = None
        if stride > 1 and use_pooling:
            if pool_type == 'max':
                self.pool_layer = nn.MaxPool2d(kernel_size=3,
                                               stride=stride,
                                               padding=1)
                stride = 1
            elif pool_type == 'avg':
                self.pool_layer = nn.AvgPool2d(kernel_size=3,
                                               stride=stride,
                                               padding=1)
                stride = 1
        if radix >= 1:
            self.conv2 = SplAtConv2d(first_planes,
                                     group_width,
                                     kernel_size=3,
                                     stride=stride,
                                     padding=first_dilation,
                                     dilation=first_dilation,
                                     groups=cardinality,
                                     radix=radix,
                                     norm_layer=norm_layer,
                                     drop_block=drop_block)
            self.bn2 = None  # FIXME revisit, here to satisfy current torchscript fussyness
            self.act2 = None
        elif rectified_conv:
            from rfconv import RFConv2d
            self.conv2 = RFConv2d(first_planes,
                                  group_width,
                                  kernel_size=3,
                                  stride=stride,
                                  padding=first_dilation,
                                  dilation=first_dilation,
                                  groups=cardinality,
                                  bias=False,
                                  average_mode=rectify_avg)
            self.bn2 = norm_layer(group_width)
        else:
            self.conv2 = nn.Conv2d(first_planes,
                                   group_width,
                                   kernel_size=3,
                                   stride=stride,
                                   padding=first_dilation,
                                   dilation=first_dilation,
                                   groups=cardinality,
                                   bias=False)
            self.bn2 = norm_layer(group_width)
            self.act2 = act_layer(inplace=True)

        self.conv3 = nn.Conv2d(group_width,
                               outplanes,
                               kernel_size=1,
                               bias=False)
        self.bn3 = norm_layer(outplanes)
        self.act3 = act_layer(inplace=True)

        self.drop_block = drop_block
        self.radix = radix
        self.pool_first = pool_first
        self.downsample = downsample
        self.dilation = dilation
        self.stride = stride
Esempio n. 6
0
 def __init__(self,
              in_channels,
              channels,
              kernel_size,
              stride=(1, 1),
              padding=(0, 0),
              dilation=(1, 1),
              groups=1,
              bias=True,
              radix=2,
              reduction_factor=4,
              rectify=False,
              rectify_avg=False,
              norm_layer=None,
              dropblock_prob=0.0,
              **kwargs):
     super(SplAtConv2d, self).__init__()
     from torch.nn.modules.utils import _pair
     padding = _pair(padding)
     self.rectify = rectify and (padding[0] > 0 or padding[1] > 0)
     self.rectify_avg = rectify_avg
     inter_channels = max(in_channels * radix // reduction_factor, 32)
     self.radix = radix
     self.cardinality = groups
     self.channels = channels
     self.dropblock_prob = dropblock_prob
     if self.rectify:
         from rfconv import RFConv2d
         self.conv = RFConv2d(in_channels,
                              channels * radix,
                              kernel_size,
                              stride,
                              padding,
                              dilation,
                              groups=groups * radix,
                              bias=bias,
                              average_mode=rectify_avg,
                              **kwargs)
     else:
         self.conv = nn.Conv2d(in_channels,
                               channels * radix,
                               kernel_size,
                               stride,
                               padding,
                               dilation,
                               groups=groups * radix,
                               bias=bias,
                               **kwargs)
     self.use_bn = norm_layer is not None
     if self.use_bn:
         self.bn0 = norm_layer(channels * radix)
     self.relu = nn.ReLU(inplace=True)
     self.fc1 = nn.Conv2d(channels,
                          inter_channels,
                          1,
                          groups=self.cardinality)
     if self.use_bn:
         self.bn1 = norm_layer(inter_channels)
     self.fc2 = nn.Conv2d(inter_channels,
                          channels * radix,
                          1,
                          groups=self.cardinality)
     if dropblock_prob > 0.0:
         # pip install dropblock
         from dropblock import DropBlock2D
         self.dropblock = DropBlock2D(block_size=3,
                                      drop_prob=dropblock_prob)
     self.rsoftmax = rSoftMax(radix, groups)