コード例 #1
0
ファイル: mpc_v1.py プロジェクト: xianpf/MaskPyramidCity
    def __init__(self, cfg):
        super(MaskPyramids, self).__init__()
        self.cfg = cfg
        # self.r50 = resnet.ResNet(cfg)
        self.resnet50 = ResNet50(cfg)
        num_classes = cfg.DATALOADER.NUM_CLASSES

        self.init_pyramid = nn.Sequential(
            resnet.Bottleneck(256, 256, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 256, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 256, 256, 1, True, 1, 1, nn.BatchNorm2d),
        )
        self.class_logits = nn.Sequential(
            resnet.Bottleneck(256, 64, 128, 1, True, 2, 1, nn.BatchNorm2d),
            resnet.Bottleneck(128, 64, 64, 1, True, 2, 1, nn.BatchNorm2d),
            resnet.Bottleneck(64, 32, 32, 1, True, 2, 1, nn.BatchNorm2d),
        )
        self.cls_score = nn.Linear(32 * 5 * 5, num_classes)

        self.chn256_6 = nn.Conv2d(512 + 2, 256, 1)
        self.chn256_5 = nn.Conv2d(256 + 2, 256, 1)
        self.chn256_4 = nn.Conv2d(512 + 2, 256, 1)
        self.chn256_3 = nn.Conv2d(256 + 2, 256, 1)
        self.chn256_2 = nn.Conv2d(512 + 2, 256, 1)
        self.chn256_s = [
            self.chn256_6, self.chn256_5, self.chn256_4, self.chn256_3,
            self.chn256_2
        ]

        self.conv_6 = resnet.Bottleneck(256, 64, 256, 1, True, 1, 1,
                                        nn.BatchNorm2d)
        self.conv_5 = resnet.Bottleneck(256, 64, 256, 1, True, 1, 1,
                                        nn.BatchNorm2d)
        self.conv_4 = resnet.Bottleneck(256, 64, 256, 1, True, 1, 1,
                                        nn.BatchNorm2d)
        self.conv_3 = resnet.Bottleneck(256, 64, 256, 1, True, 1, 1,
                                        nn.BatchNorm2d)
        self.conv_2 = resnet.Bottleneck(256, 64, 256, 1, True, 1, 1,
                                        nn.BatchNorm2d)
        self.conv_s = [
            self.conv_6, self.conv_5, self.conv_4, self.conv_3, self.conv_2
        ]

        self.out_6 = nn.Conv2d(256, 1, 1)
        self.out_5 = nn.Conv2d(256, 1, 1)
        self.out_4 = nn.Conv2d(256, 1, 1)
        self.out_3 = nn.Conv2d(256, 1, 1)
        self.out_2 = nn.Conv2d(256, 1, 1)
        self.out_s = [
            self.out_6, self.out_5, self.out_4, self.out_3, self.out_2
        ]

        self.bg_6 = nn.Conv2d(512, 1, 1)
        self.bg_5 = nn.Conv2d(256, 1, 1)
        self.bg_4 = nn.Conv2d(512, 1, 1)
        self.bg_3 = nn.Conv2d(256, 1, 1)
        self.bg_2 = nn.Conv2d(512, 1, 1)
        self.bg_s = [self.bg_6, self.bg_5, self.bg_4, self.bg_3, self.bg_2]

        self.upmix256_5 = nn.Conv2d(256 + 256 + 2, 256, 1)
        self.upmix256_4 = nn.Conv2d(512 + 256 + 2, 256, 1)
        self.upmix256_3 = nn.Conv2d(256 + 256 + 2, 256, 1)
        self.upmix256_2 = nn.Conv2d(512 + 256 + 2, 256, 1)
        self.upmix256_s = [
            None, self.upmix256_5, self.upmix256_4, self.upmix256_3,
            self.upmix256_2
        ]

        # self.sematic_conv_5 = resnet.Bottleneck(512+256, 64, 256, 1, True, 1, 1, nn.BatchNorm2d)
        self.sematic_conv_5 = resnet.Bottleneck(512 + 256, 64, 256, 1, True, 1,
                                                1, nn.BatchNorm2d)
        self.sematic_conv_4 = resnet.Bottleneck(512 + 256, 64, 256, 1, True, 1,
                                                1, nn.BatchNorm2d)
        self.sematic_conv_3 = resnet.Bottleneck(256 + 256, 64, 256, 1, True, 1,
                                                1, nn.BatchNorm2d)
        self.sematic_conv_2 = resnet.Bottleneck(512 + 256, 64, 256, 1, True, 1,
                                                1, nn.BatchNorm2d)
        self.sematic_conv_1 = resnet.Bottleneck(256 + 256, 64, 256, 1, True, 1,
                                                1, nn.BatchNorm2d)
        self.sematic_final = nn.Conv2d(256, num_classes, 1)

        self.cs_criteron = nn.CrossEntropyLoss()
        self.class_criteron = nn.CrossEntropyLoss()
        self.sematic_criteron = nn.CrossEntropyLoss(ignore_index=255)

        self.cs_loss_factor = 1.0
        self.miss_loss_factor = 1.0

        self.log_dict = {}

        self._init_weight()
コード例 #2
0
ファイル: mpc_v1.py プロジェクト: xianpf/MaskPyramidCity
    def __init__(self, cfg):
        super(ResNet50, self).__init__()
        self.stem = resnet.BaseStem(cfg, nn.BatchNorm2d)

        self.res_layer_1 = nn.Sequential(
            resnet.Bottleneck(64, 64, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 64, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 64, 256, 1, True, 1, 1, nn.BatchNorm2d),
        )

        self.res_layer_2 = nn.Sequential(
            resnet.Bottleneck(256, 128, 512, 1, True, 2, 1, nn.BatchNorm2d),
            resnet.Bottleneck(512, 128, 512, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(512, 128, 512, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(512, 128, 512, 1, True, 1, 1, nn.BatchNorm2d),
        )

        self.res_layer_3 = nn.Sequential(
            resnet.Bottleneck(512, 128, 256, 1, True, 2, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 128, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 128, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 128, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 128, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 128, 256, 1, True, 1, 1, nn.BatchNorm2d),
        )

        self.res_layer_4 = nn.Sequential(
            resnet.Bottleneck(256, 128, 512, 1, True, 2, 1, nn.BatchNorm2d),
            resnet.Bottleneck(512, 128, 512, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(512, 128, 512, 1, True, 1, 1, nn.BatchNorm2d),
        )
        self.res_layer_5 = nn.Sequential(
            resnet.Bottleneck(512, 128, 256, 1, True, 2, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 128, 256, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(256, 128, 256, 1, True, 1, 1, nn.BatchNorm2d),
        )
        self.res_layer_6 = nn.Sequential(
            resnet.Bottleneck(256, 128, 512, 1, True, 2, 1, nn.BatchNorm2d),
            resnet.Bottleneck(512, 128, 512, 1, True, 1, 1, nn.BatchNorm2d),
            resnet.Bottleneck(512, 128, 512, 1, True, 1, 1, nn.BatchNorm2d),
        )