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()
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), )