def __init__(self, in_ch, out_ch, rates):
     super(_ASPP, self).__init__()
     self.stages = nn.Module()
     self.stages.add_module("c0", _ConvBnReLU(in_ch, out_ch, 1, 1, 0, 1))
     for i, rate in enumerate(rates):
         self.stages.add_module(
             "c{}".format(i + 1),
             _ConvBnReLU(in_ch, out_ch, 3, 1, padding=rate, dilation=rate),
         )
     self.stages.add_module("imagepool", _ImagePool(in_ch, out_ch))
Beispiel #2
0
    def __init__(self, n_classes, n_blocks, atrous_rates, multi_grids,
                 output_stride):
        super(DeepLabV3, self).__init__()

        # Stride and dilation
        if output_stride == 8:
            s = [1, 2, 1, 1]
            d = [1, 1, 2, 4]
        elif output_stride == 16:
            s = [1, 2, 2, 1]
            d = [1, 1, 1, 2]

        ch = [64 * 2**p for p in range(6)]
        self.add_module("layer1", _Stem(ch[0]))
        self.add_module("layer2",
                        _ResLayer(n_blocks[0], ch[0], ch[2], s[0], d[0]))
        self.add_module("layer3",
                        _ResLayer(n_blocks[1], ch[2], ch[3], s[1], d[1]))
        self.add_module("layer4",
                        _ResLayer(n_blocks[2], ch[3], ch[4], s[2], d[2]))
        self.add_module(
            "layer5",
            _ResLayer(n_blocks[3], ch[4], ch[5], s[3], d[3], multi_grids))
        self.add_module("aspp", _ASPP(ch[5], 256, atrous_rates))
        concat_ch = 256 * (len(atrous_rates) + 2)
        self.add_module("fc1", _ConvBnReLU(concat_ch, 256, 1, 1, 0, 1))
        self.add_module("fc2", nn.Conv2d(256, n_classes, kernel_size=1))
 def __init__(self, in_ch, out_ch):
     super().__init__()
     self.pool = nn.AdaptiveAvgPool2d(1)
     self.conv = _ConvBnReLU(in_ch, out_ch, 1, 1, 0, 1)