예제 #1
0
def resnet34_cls(input_channels=6,
                 num_classes=5,
                 dropout=0.0,
                 pretrained=True):
    encoder = E.Resnet34Encoder(pretrained=pretrained, layers=[1, 2, 3, 4])
    return DamageTypeClassificationModel(encoder,
                                         damage_type_classes=len(DAMAGE_TYPES),
                                         dropout=dropout)
예제 #2
0
def fpn128_resnet34(num_classes=1, num_channels=3):
    assert num_channels == 3
    encoder = E.Resnet34Encoder()
    decoder = D.FPNDecoder(features=encoder.output_filters,
                           prediction_block=DoubleConvRelu,
                           bottleneck=FPNBottleneckBlockBN,
                           fpn_features=128)

    return SegmentationModel(encoder, decoder, num_classes)
예제 #3
0
def resnet34_unet32(input_channels=3,
                    num_classes=1,
                    dropout=0.0,
                    pretrained=True):
    encoder = E.Resnet34Encoder(pretrained=pretrained, layers=[0, 1, 2, 3, 4])
    if input_channels != 3:
        encoder.change_input_channels(input_channels)

    return UnetSegmentationModel(encoder,
                                 num_classes=num_classes,
                                 unet_channels=[32, 64, 128, 256],
                                 dropout=dropout)
예제 #4
0
def resnet34_fpncatv2_256(num_classes=5,
                          dropout=0.0,
                          pretrained=True,
                          classifiers=True):
    encoder = E.Resnet34Encoder(pretrained=pretrained)
    return FPNCatSegmentationModelV2(
        encoder,
        num_classes=num_classes,
        disaster_type_classes=len(DISASTER_TYPES) if classifiers else None,
        damage_type_classes=len(DAMAGE_TYPES) if classifiers else None,
        fpn_channels=256,
        dropout=dropout,
        abn_block=partial(ABN, activation=ACT_RELU),
    )
예제 #5
0
def resnet34_unet64_s4(input_channels=3,
                       num_classes=1,
                       dropout=0.2,
                       pretrained=True):
    encoder = E.Resnet34Encoder(pretrained=pretrained, layers=[1, 2, 3, 4])
    if input_channels != 3:
        encoder.change_input_channels(input_channels)
    return UnetSegmentationModel(
        encoder,
        num_classes=num_classes,
        unet_channels=[64, 128, 256],
        activation=ACT_SWISH,
        dropout=dropout,
    )
예제 #6
0
def resnet34_unet_v2(input_channels=6,
                     num_classes=5,
                     dropout=0.0,
                     pretrained=True,
                     classifiers=True):
    encoder = E.Resnet34Encoder(pretrained=pretrained, layers=[0, 1, 2, 3, 4])
    return UnetV2SegmentationModel(
        encoder,
        num_classes=num_classes,
        disaster_type_classes=len(DISASTER_TYPES) if classifiers else None,
        damage_type_classes=len(DAMAGE_TYPES) if classifiers else None,
        unet_channels=[64, 128, 256, 256],
        dropout=dropout,
        abn_block=partial(ABN, activation=ACT_RELU),
    )
예제 #7
0
    def __init__(self, num_classes, in_channels=3):
        super().__init__()
        model = encoders.Resnet34Encoder()

        self.conv1_ = model.layer0[0]
        # if in_channels == 3 else nn.Conv2d(in_channels,
        #                                    64, 7, 2, 3)
        self.bn1 = model.layer0[1]
        self.act = nn.ReLU(inplace=True)
        self.pool = nn.MaxPool2d(2, 2)

        self.enc1 = model.layer1  # 64
        self.enc2 = model.layer2  # 128
        self.enc3 = model.layer3  # 256
        self.enc4 = model.layer4  # 512

        self.up = nn.Upsample(scale_factor=2,
                              mode='bilinear',
                              align_corners=True)

        self.dec3 = DecoderBlockGated(512, 256, 256)
        self.conv3 = Conv2dBn(512 + 256, 256, 3, 1, 1)  # 256
        self.dec2 = DecoderBlockGated(256, 128, 128)
        self.conv2 = Conv2dBn(256 + 128, 128, 3, 1, 1)  # 128
        self.dec1 = DecoderBlockGated(128, 64, 64)
        self.conv1 = Conv2dBn(128 + 64, 64, 3, 1, 1)  # 64

        self.full_conv = DecoderBlockGated(64, 64, 32)

        self.convbn3 = Conv2dBn(32 + 64, 16, 3, 1, 1)
        self.out = nn.Sequential(
            nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True),
            nn.Conv2d(16, num_classes, 2, stride=2, bias=False))

        for (name, m) in self.named_modules():
            if 'enc' not in name and 'conv1_' not in name:
                if isinstance(m, nn.Conv2d) or isinstance(
                        m, nn.ConvTranspose2d):
                    n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                    m.weight.data.normal_(0, math.sqrt(2.0 / n))
                elif isinstance(m, nn.BatchNorm2d):
                    m.weight.data.fill_(1)
                    m.bias.data.zero_()
예제 #8
0
def resnet34_fpn(num_classes=1, fpn_features=128):
    encoder = E.Resnet34Encoder()
    return FPNSegmentationModel(encoder, num_classes, fpn_features)
예제 #9
0
def resnet34_fpncat128(num_classes=5, dropout=0.0, pretrained=True):
    encoder = E.Resnet34Encoder(pretrained=pretrained)
    return FPNCatSegmentationModel(encoder, num_classes=num_classes, fpn_channels=128, dropout=dropout)
예제 #10
0
def resnet34_deeplab128(num_classes=1, dropout=0.0):
    encoder = E.Resnet34Encoder()
    return DeeplabV3SegmentationModel(encoder,
                                      num_classes=num_classes,
                                      high_level_bottleneck=128,
                                      dropout=dropout)