示例#1
0
def net(model_name, pretrained, is_local, NUM_CLASS):

    if model_name == 'resnest50':
        if pretrained and not is_local:
            model = resnest50(pretrained=True)
        else:
            model = resnest50(pretrained=False)
    elif model_name == 'resnest101':
        if pretrained and not is_local:
            model = resnest101(pretrained=True)
        else:
            model = resnest101(pretrained=False)
    elif model_name == 'resnest200':
        if pretrained and not is_local:
            model = resnest200(pretrained=True)
        else:
            model = resnest200(pretrained=False)
    else:
        print('Error model name')

    if is_local:
        model_path = PATH[model_name]
        model.load_state_dict(torch.load(model_path), strict=False)

    model.fc = nn.Sequential(
        nn.Dropout(0.2),
        nn.Linear(in_features[model_name], NUM_CLASS)
    )

    return model
    def __init__(self, num_classes, pre_train=True):
        super(ResNest, self).__init__()

        if pre_train:
            original_model = resnest200(pretrained=True)
        else:
            original_model = resnest200(pretrained=False)
        self.features = nn.Sequential(*list(original_model.children())[:-1])
        self.GlobalAvgPool = nn.AdaptiveAvgPool2d(output_size=(1, 1))
        self.classifier = nn.Sequential(nn.Linear(2048, num_classes),
                                        nn.Sigmoid())
    def __init__(self, num_classes, pre_train=True):
        super(ResNest_unc_mask, self).__init__()

        if pre_train:
            original_model = resnest200(pretrained=True)
        else:
            original_model = resnest200(pretrained=False)

        #original_model = load_weights(original_model, '/extracephonline/medai_data_tronbian/eye/resnext50_32x4d-7cdf4587.pth')
        print()
        self.features = nn.Sequential(*list(original_model.children())[:-2])
        self.GlobalAvgPool = nn.AdaptiveAvgPool2d(output_size=(1, 1))
        self.classifier = nn.Sequential(nn.Linear(2048, num_classes),
                                        nn.Sigmoid())
        self.classifier2 = nn.Linear(2048, num_classes)
        #self.conv1 =  nn.Conv2d(2048, 1, 1)
        self.upsample_224 = nn.Upsample(size=(224), mode='bilinear')
示例#4
0
 def __init__(self,
              in_channels,
              pretrained=False,
              version='resnet101',
              clf=None):
     super(ResNet_BB, self).__init__()
     version = version.strip()
     if version == 'resnet18':
         resnet = models.resnet18(pretrained)
     elif version == 'resnet34':
         resnet = models.resnet34(pretrained)
     elif version == 'resnet50':
         resnet = models.resnet50(pretrained)
     elif version == 'resnet101':
         resnet = models.resnet101(pretrained)
     elif version == 'resnet152':
         resnet = models.resnet152(pretrained)
     elif version == 'resnext50_32x4d':
         resnet = models.resnext50_32x4d(pretrained)
     elif version == 'resnext101_32x8d':
         resnet = models.resnext101_32x8d(pretrained)
     elif version == 'wide_resnet50_2':
         resnet = models.wide_resnet50_2(pretrained)
     elif version == 'wide_resnet101_2':
         resnet = models.wide_resnet101_2(pretrained)
     elif version == 'resnest50':
         resnet = resnest50(pretrained)
     elif version == 'resnest101':
         resnet = resnest101(pretrained)
     elif version == 'resnest200':
         resnet = resnest200(pretrained)
     elif version == 'resnest269':
         resnet = resnest269(pretrained)
     else:
         raise NotImplementedError(
             'version {} is not supported as of now'.format(version))
     resnet.conv1 = nn.Conv2d(in_channels,
                              64,
                              kernel_size=(7, 7),
                              stride=(2, 2),
                              padding=(3, 3),
                              bias=False)
     if clf == 'deeplabv3Plus':
         return_layers = {'layer4': 'out', 'layer1': 'low_level'}
     elif clf == 'PointRend':
         return_layers = {'layer4': 'out', 'layer2': 'fine_grained'}
     else:
         return_layers = {'layer4': 'out'}
     self.backbone = IntermediateLayerGetter(resnet, return_layers)
     self.out_channels = 2048
     self.low_channels = 256
     self.fine_grained_channels = 512
示例#5
0
def initialize_model(model_name,
                     num_classes,
                     feature_extract,
                     use_pretrained=True):
    # 初始化将在此if语句中设置的这些变量。
    # 每个变量都是模型特定的。
    model_ft = None
    input_size = 0
    if model_name.split('-')[0] == "resnet":
        if model_name.split('-')[1] == "18":
            """ 
            Resnet18
            """
            model_ft = models.resnet18(pretrained=use_pretrained)
            set_parameter_requires_grad(model_ft, feature_extract)
            num_ftrs = model_ft.fc.in_features
            model_ft.fc = nn.Linear(num_ftrs, num_classes)
            input_size = 224
        elif model_name.split('-')[1] == "34":
            """ 
            Resnet34
            """
            model_ft = models.resnet34(pretrained=use_pretrained)
            set_parameter_requires_grad(model_ft, feature_extract)
            num_ftrs = model_ft.fc.in_features
            model_ft.fc = nn.Linear(num_ftrs, num_classes)
            input_size = 224
        elif model_name.split('-')[1] == "50":
            """ 
            Resnet50
            """
            model_ft = models.resnet50(pretrained=use_pretrained)
            set_parameter_requires_grad(model_ft, feature_extract)
            num_ftrs = model_ft.fc.in_features
            model_ft.fc = nn.Linear(num_ftrs, num_classes)
            input_size = 224
        elif model_name.split('-')[1] == "152":
            """ 
            Resnet152
            """
            model_ft = models.resnet152(pretrained=use_pretrained)
            set_parameter_requires_grad(model_ft, feature_extract)
            num_ftrs = model_ft.fc.in_features
            model_ft.fc = nn.Linear(num_ftrs, num_classes)
            input_size = 224
        else:
            print("Invalid resnet model name, exiting...")
            exit()
    elif model_name == "resnest50":
        model_ft = resnest50(pretrained=True)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
        input_size = 224
    elif model_name == "resnest101":
        model_ft = resnest101(pretrained=True)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
    elif model_name == "resnest200":
        model_ft = resnest200(pretrained=True)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
    elif model_name == "resnest269":
        model_ft = resnest269(pretrained=True)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
    elif model_name == "alexnet":
        """ Alexnet
        """
        model_ft = models.alexnet(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.classifier[6].in_features
        model_ft.classifier[6] = nn.Linear(num_ftrs, num_classes)
        input_size = 224
    elif model_name == "vgg":
        """ VGG11_bn
        """
        model_ft = models.vgg11_bn(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.classifier[6].in_features
        model_ft.classifier[6] = nn.Linear(num_ftrs, num_classes)
        input_size = 224
    elif model_name == "squeezenet":
        """ Squeezenet
        """
        model_ft = models.squeezenet1_0(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        model_ft.classifier[1] = nn.Conv2d(512,
                                           num_classes,
                                           kernel_size=(1, 1),
                                           stride=(1, 1))
        model_ft.num_classes = num_classes
        input_size = 224
    elif model_name == "densenet":
        """ Densenet
        """
        model_ft = models.densenet161(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.classifier.in_features
        model_ft.classifier = nn.Linear(num_ftrs, num_classes)
        input_size = 224
    elif model_name == "inception":
        """ Inception v3
        Be careful, expects (299,299) sized images and has auxiliary output
        """
        model_ft = models.inception_v3(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        # 处理辅助网络
        num_ftrs = model_ft.AuxLogits.fc.in_features
        model_ft.AuxLogits.fc = nn.Linear(num_ftrs, num_classes)
        # 处理主要网络
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
        input_size = 299
    elif model_name.split('-')[0] == "efficientnet":
        model_ft = EfficientNet.from_pretrained(model_name)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft._fc.in_features
        model_ft._fc = nn.Sequential(nn.Linear(num_ftrs, 1000, bias=True),
                                     nn.ReLU(), nn.Dropout(p=0.5),
                                     nn.Linear(1000, num_classes, bias=True))
        input_size = 299
    else:
        print("Invalid model name, exiting...")
        exit()
    return model_ft, input_size
示例#6
0
    elif args.model == "res_cbam":
        model = resnext101_32x8d(pretrained=True, progress=True)
        model.fc = nn.Sequential(nn.Dropout(0.5), nn.Linear(2048, 3))
    elif args.model == "res_wsl":
        model = resnext101_32x8d_wsl(progress=True)
        # model = resnext101_32x16d_wsl(progress=True)
        model.fc = nn.Sequential(nn.Dropout(0.5), nn.Linear(2048, 3))
    elif args.model == "res_18":
        model = resnet18(pretrained=True, progress=True)
        model.fc = nn.Sequential(nn.Dropout(0.5), nn.Linear(512, 3))
    elif args.model == "senet":
        model = se_resnext101(num_classes=3)
    elif args.model == "efficient":
        model = efficientnet(size='b4', num_classes=3)  # too big
    elif args.model == "resnest":
        model = resnest200(pretrained=True)  # 50, 101, 200, 269
        model.fc = nn.Sequential(nn.Dropout(0.5), nn.Linear(2048, 3))
    else:
        raise ValueError
    model.cuda()

    if args.mode == "train":
        train_dataset = data_loader.build_dataset_train(
            args.data_path, (args.h, args.w))
        train_loader = torch.utils.data.DataLoader(
            train_dataset,
            batch_size=args.batch_size,
            num_workers=args.num_workers,
            shuffle=True,
            drop_last=True)
        eval_dataset = data_loader.build_dataset_eval(args.data_path,