示例#1
0
def get_official_model(name):
    if name == 'resnet152':
        model_path = 'resnet152-b121ed2d.pth'
        model = models.resnet152(pretrained=False)
    if name == 'resnext101_32x8d':
        model_path = 'resnext101_32x8d-8ba56ff5.pth'
        model = models.resnext101_32x8d(pretrained=False)
    #model = torch.hub.load('pytorch/vision:v0.4.2', 'resnet152', pretrained=True)
    #model = models.resnet152(pretrained=False)
    model.load_state_dict(
        torch.load('C:/Users/Administrator/.cache/torch/checkpoints/' +
                   model_path,
                   map_location='cpu'))
    model.eval()
    return model
示例#2
0
def createModel(num_classes=6, w_drop=True):

    model_ft = models.resnext101_32x8d(pretrained=True)
    num_ftrs = model_ft.fc.in_features

    if not w_drop:
        model_ft.fc = nn.Linear(num_ftrs, num_classes)

    else:
        model_ft.fc = nn.Sequential(
            nn.Dropout(0.5),
            nn.Linear(num_ftrs, num_classes)
        )

    return model_ft
 def __init__(self, resnet_layers, num_attributes=40):
     super(FaceAttrResNeXt, self).__init__()
     assert resnet_layers in [50, 101]
     if resnet_layers == 50:
         pt_model = tvmodels.resnext50_32x4d(pretrained=True, progress=False)
     elif resnet_layers == 101:
         pt_model = tvmodels.resnext101_32x8d(pretrained=True, progress=False)
     pt_out = pt_model.fc.out_features
     self.pretrained = pt_model
     self.num_attributes = num_attributes
     for i in range(num_attributes):
         setattr(self, 'classifier' + str(i).zfill(2),
                 nn.Sequential(FC_Block(pt_out, pt_out // 2),
                               nn.Linear(pt_out // 2, 2)))
     self.name = 'FaceAttrResNeXt_'+str(resnet_layers)
示例#4
0
def load_model(model_name):
    global MODEL_NAME
    # Detect if we have a GPU available
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    if model_name == 'ResNet':
        model = models.resnet152(pretrained=False)
        model.load_state_dict(torch.load(os.path.join(PRETRAINED_DEEP_MODEL_DIR, MODEL_NAME[model_name]), map_location=device))
    elif model_name == 'AlexNet':
        model = models.AlexNet()
        model.load_state_dict(torch.load(os.path.join(PRETRAINED_DEEP_MODEL_DIR, MODEL_NAME[model_name]), map_location=device))
    elif model_name == 'VGG':
        model = models.VGG(_vgg_make_layers(_vgg_cfg['E'], batch_norm=True), init_weights=False)
        model.load_state_dict(torch.load(os.path.join(PRETRAINED_DEEP_MODEL_DIR, MODEL_NAME[model_name]), map_location=device))
    elif model_name == 'DenseNet':
        model = models.DenseNet(num_init_features=64, growth_rate=32, block_config=(6, 12, 48, 32))
        pattern = re.compile(
            r'^(.*denselayer\d+\.(?:norm|relu|conv))\.((?:[12])\.(?:weight|bias|running_mean|running_var))$')
        state_dict = torch.load(os.path.join(PRETRAINED_DEEP_MODEL_DIR, MODEL_NAME[model_name]), map_location=device)
        for key in list(state_dict.keys()):
            res = pattern.match(key)
            if res:
                new_key = res.group(1) + res.group(2)
                state_dict[new_key] = state_dict[key]
                del state_dict[key]
        model.load_state_dict(state_dict)
    elif model_name == 'GoogleNet':
        # googlenet
        kwargs = dict()
        kwargs['transform_input'] = True
        kwargs['aux_logits'] = False
        # if kwargs['aux_logits']:
        #     warnings.warn('auxiliary heads in the pretrained googlenet model are NOT pretrained, '
        #                   'so make sure to train them')
        original_aux_logits = kwargs['aux_logits']
        kwargs['aux_logits'] = True
        kwargs['init_weights'] = False
        model = models.GoogLeNet(**kwargs)
        model.load_state_dict(torch.load(os.path.join(PRETRAINED_DEEP_MODEL_DIR, MODEL_NAME[model_name]), map_location=device))
        if not original_aux_logits:
            model.aux_logits = False
            del model.aux1, model.aux2
    elif model_name == 'ResNext101':
        model = models.resnext101_32x8d(pretrained=False)
        model.load_state_dict(torch.load(os.path.join(PRETRAINED_DEEP_MODEL_DIR, MODEL_NAME[model_name]), map_location=device))
    else:
        raise ValueError("Model name must be one of ['VGG', 'ResNet', 'DenseNet', 'AlexNet', 'GoogleNet', 'ResNext101']")

    return model
示例#5
0
 def __init__(self,
              num_classes: int,
              pretrained_model_name: str = "efficientnet-b7",
              backbone_freeze=True):
     super(ResNext, self).__init__()
     self.backbone = resnext101_32x8d(pretrained=True)
     self.backbone.requires_grad_(not backbone_freeze)
     self.backbone.fc = nn.Linear(in_features=2048,
                                  out_features=4096,
                                  bias=True)  # resnext fc
     self.classifier = nn.Sequential(
         nn.Linear(4096, 4096),
         nn.ReLU(inplace=True),
         nn.Dropout(),
         nn.Linear(4096, num_classes),
     )
示例#6
0
    def __init__(self, out_dim=14, in_dim=20, **kwargs):
        super().__init__()

        self.attn = Attention(embed_dim=1024, num_heads=4)

        self.main = tvm.resnext101_32x8d(pretrained=True)
        self.main.conv1 = nn.Conv2d(in_dim,
                                    64,
                                    kernel_size=7,
                                    stride=2,
                                    padding=3,
                                    bias=False)
        self.main.fc = nn.Linear(self.main.fc.in_features, out_dim)

        # dim between layer2 and layer3 = B x 512 x 32 x 32
        self.main.layer3 = nn.Sequential(self.attn, self.main.layer3)
示例#7
0
    def __init__(self, name, nclasses=40, pretraining=True, cnn_name='vgg11'):
        super(SVCNN, self).__init__(name)

        self.classnames = ['airplane', 'bathtub', 'bed', 'bench', 'bookshelf', 'bottle', 'bowl', 'car', 'chair',
                           'cone', 'cup', 'curtain', 'desk', 'door', 'dresser', 'flower_pot', 'glass_box',
                           'guitar', 'keyboard', 'lamp', 'laptop', 'mantel', 'monitor', 'night_stand',
                           'person', 'piano', 'plant', 'radio', 'range_hood', 'sink', 'sofa', 'stairs',
                           'stool', 'table', 'tent', 'toilet', 'tv_stand', 'vase', 'wardrobe', 'xbox']

        self.nclasses = nclasses
        self.pretraining = pretraining
        self.cnn_name = cnn_name
        self.use_resnet = cnn_name.startswith('resnet')
        self.use_densenet = cnn_name.startswith('desnet')

        self.mean = Variable(torch.FloatTensor([0.0142, 0.0142, 0.0142]), requires_grad=False).cuda()
        self.std = Variable(torch.FloatTensor([0.0818, 0.0818, 0.0818]), requires_grad=False).cuda()

        if self.use_resnet:
            if self.cnn_name == 'resnet18':
                self.net = models.resnet18(pretrained=self.pretraining)
                self.net.fc = nn.Linear(512, 40)
            elif self.cnn_name == 'resnet34':
                self.net = models.resnet34(pretrained=self.pretraining)
                self.net.fc = nn.Linear(512, 40)
            elif self.cnn_name == 'resnet50':
                self.net = models.resnet50(pretrained=self.pretraining)
                self.net.fc = nn.Linear(2048, 40)
            elif self.cnn_name == 'resnet50x':
                self.net = models.resnext50_32x4d(pretrained=self.pretraining)
                self.net.fc = nn.Linear(2048, 40)
            elif self.cnn_name == 'resnet101x':
                self.net = models.resnext101_32x8d(pretrained=self.pretraining)
                self.net.fc = nn.Linear(2048, 40)
        else:
            if self.cnn_name == 'alexnet':
                self.net_1 = models.alexnet(pretrained=self.pretraining).features
                self.net_2 = models.alexnet(pretrained=self.pretraining).classifier
            elif self.cnn_name == 'vgg11':
                self.net_1 = models.vgg11(pretrained=self.pretraining).features
                self.net_2 = models.vgg11(pretrained=self.pretraining).classifier
            elif self.cnn_name == 'vgg16':
                self.net_1 = models.vgg16(pretrained=self.pretraining).features
                self.net_2 = models.vgg16(pretrained=self.pretraining).classifier

            self.net_2._modules['6'] = nn.Linear(4096, 40)
示例#8
0
def get_backbone(name, pretrained=True):
    """ Loading backbone, defining names for skip-connections and encoder output. """

    # TODO: More backbones

    # loading backbone model
    if name == 'resnet18':
        backbone = models.resnet18(pretrained=pretrained)
    elif name == 'resnet34':
        backbone = models.resnet34(pretrained=pretrained)
    elif name == 'resnet50':
        backbone = models.resnet50(pretrained=pretrained)
    elif name == 'resnet101':
        backbone = models.resnet101(pretrained=pretrained)
    elif name == 'resnext50':
        backbone = models.resnext50_32x4d(pretrained=pretrained)
    elif name == 'resnext101':
        backbone = models.resnext101_32x8d(pretrained=pretrained)
    else:
        raise NotImplemented(
            '{} backbone model is not implemented so far.'.format(name))

    # specifying skip feature and output names
    if name.startswith('resnet18') or name.startswith('resnet34'):
        feature_sizes = [
            backbone.conv1.out_channels,
            backbone.layer1[-1].conv2.out_channels,
            backbone.layer2[-1].conv2.out_channels,
            backbone.layer3[-1].conv2.out_channels,
            backbone.layer4[-1].conv2.out_channels
        ]
        feature_names = ['relu', 'layer1', 'layer2', 'layer3', 'layer4']
    elif name.startswith('resnet') or name.startswith('resnext'):
        feature_sizes = [
            backbone.conv1.out_channels,
            backbone.layer1[-1].conv3.out_channels,
            backbone.layer2[-1].conv3.out_channels,
            backbone.layer3[-1].conv3.out_channels,
            backbone.layer4[-1].conv3.out_channels
        ]
        feature_names = ['relu', 'layer1', 'layer2', 'layer3', 'layer4']
    else:
        raise NotImplemented(
            '{} backbone model is not implemented so far.'.format(name))

    return backbone, feature_sizes, feature_names
def initialize_model(model_name="resnext101", use_pretrained=True):
    # Initialize these variables which will be set in this if statement. Each of these
    #   variables is model specific.
    model_ft = None
    input_size = 0

    num_classes = 1000

    if model_name == "resnext101":
        """ ResNext101
        """
        model_ft = models.resnext101_32x8d(pretrained=use_pretrained)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
        input_size = 224
    elif model_name == "resnest269":
        """ ResNest269
        """
        # model_ft = resnest269(pretrained=use_pretrained)
        model_ft = resnest269(pretrained=False)
        model_ft.load_state_dict(
            torch.load("/home/wangkai/pretrain_model/resnest269-0cc87c48.pth"))
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
        input_size = 416

    elif model_name == "resnext50":
        """ ResNext50
        """
        model_ft = models.resnext50_32x4d(pretrained=use_pretrained)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
        input_size = 224
    elif model_name == "resnet152":
        """ ResNet152
        """
        model_ft = models.resnet152(pretrained=use_pretrained)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs, num_classes)
        input_size = 224

    else:
        print("Invalid model name, exiting...")
        exit()

    return model_ft, input_size
示例#10
0
    def __init__(self, class_num):
        super(PCB_resnext, self).__init__()

        self.part = 6  # We cut the pool5 to 6 parts
        #model_ft = models.resnet50(pretrained=True)
        model_ft = models.resnext101_32x8d(pretrained=False)
        self.model = model_ft
        self.avgpool = nn.AdaptiveAvgPool2d((self.part, 1))
        self.avgpool_glo = nn.AdaptiveAvgPool2d((1, 1))
        self.dropout = nn.Dropout(p=0.3)
        self.bnneck = nn.BatchNorm1d(2048)
        # remove the final downsample
        self.model.layer4[0].downsample[0].stride = (1, 1)
        self.model.layer4[0].conv2.stride = (1, 1)
        # define 6 classifiers
        for i in range(self.part):
            name = 'classifier' + str(i)
            setattr(self, name, ClassBlock(2048, class_num, True, False, 512))
示例#11
0
    def __init__(self,
                 n_class=5,
                 pretrained=True,
                 use_fc_=True,
                 name="ResNext"):
        super(Resnet50_FC2, self).__init__()
        self.name = name
        #self.basemodel = models.resnet50(pretrained=pretrained)
        self.basemodel = models.resnext101_32x8d(pretrained=pretrained,
                                                 progress=True)
        self.basemodel.fc = torch.nn.Identity()
        self.fc = torch.nn.Linear(2048, n_class)

        for name, param in self.basemodel.named_parameters():
            if 'fc' not in name:  # and 'layer4' not in name
                param.requires_grad = False

        self.use_fc_ = use_fc_
示例#12
0
文件: util.py 项目: ReML-AI/MGTN
def load_model(model_name):
    if model_name == 'resnet18':
        return models.resnet18(pretrained=True)
    if model_name == 'resnet34':
        return models.resnet34(pretrained=True)
    if model_name == 'resnet50':
        return models.resnet50(pretrained=True)
    if model_name == 'resnet101':
        return models.resnet101(pretrained=True)
    if model_name == 'resnet152':
        return models.resnet152(pretrained=True)
    if model_name == 'resnext50_32x4d':
        return models.resnext50_32x4d(pretrained=True)
    if model_name == 'resnext101_32x8d':
        return models.resnext101_32x8d(pretrained=True)
    if model_name == 'wide_resnet50_2':
        return models.wide_resnet50_2(pretrained=True)
    if model_name == 'wide_resnet101_2':
        return models.wide_resnet101_2(pretrained=True)
    if model_name == 'resnet18_swsl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnet18_swsl')
    if model_name == 'resnet50_swsl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnet50_swsl')
    if model_name == 'resnext50_32x4d_swsl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext50_32x4d_swsl')
    if model_name == 'resnext101_32x4d_swsl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext101_32x4d_swsl')
    if model_name == 'resnext101_32x8d_swsl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext101_32x8d_swsl')
    if model_name == 'resnext101_32x16d_swsl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext101_32x16d_swsl')
    if model_name == 'resnet18_ssl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnet18_ssl')
    if model_name == 'resnet50_ssl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnet50_ssl')
    if model_name == 'resnext50_32x4d_ssl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext50_32x4d_ssl')
    if model_name == 'resnext101_32x4d_ssl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext101_32x4d_ssl')
    if model_name == 'resnext101_32x8d_ssl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext101_32x8d_ssl')
    if model_name == 'resnext101_32x16d_ssl':
        return torch.hub.load('facebookresearch/semi-supervised-ImageNet1K-models', 'resnext101_32x16d_ssl')
    return None
示例#13
0
def prepareNetwork2(tipo=3):
    if tipo in [3, 4, 6]:
        if tipo == 3:
            encoder = models.inception_v3(pretrained=True)
        elif tipo == 4:
            encoder = models.resnext101_32x8d(pretrained=True)
        elif tipo == 6:
            encoder = models.resnet152(pretrained=True)
        encoder.fc = nn.Sequential()
    elif tipo == 5:
        encoder = models.densenet161(pretrained=True)
        encoder.classifier = nn.Sequential()

    encoder.eval()
    for param in encoder.parameters():
        param.requires_grad = False
    encoder = encoder.cuda()

    return encoder
示例#14
0
    def __init__(self, args, use_pretrained=True):

        super(ResNext, self).__init__()

        if use_pretrained:
            self.embedder = torch.hub.load("facebookresearch/WSL-Images",
                                           "resnext101_32x8d_wsl")
        else:
            self.embedder = tvmodels.resnext101_32x8d(pretrained=False)

        # elif args.encoder == "resnet50":
        #     self.embedder = tvmodels.resnet50_32x4d(pretrained=True)

        self.embedder.fc = nn.Linear(2048, args.num_classes)
        for m in self.embedder.fc.modules():
            if isinstance(m, nn.Linear):
                nn.init.kaiming_normal_(m.weight)
                if hasattr(m, "bias") and m.bias is not None:
                    nn.init.constant_(m.bias, 0)
示例#15
0
    def __init__(self):
        super().__init__()

        # load the pretrained VGG16 network
        self.model = resnext101_32x8d(pretrained=True)

        # dissect the network in order to get access to the feature maps of
        # the convolutional layers
        self.model.layer1.register_backward_hook(self.grad_hook)
        self.model.layer1.register_forward_hook(self.feature_hook)

        self.model.layer2.register_backward_hook(self.grad_hook)
        self.model.layer2.register_forward_hook(self.feature_hook)

        self.model.layer3.register_backward_hook(self.grad_hook)
        self.model.layer3.register_forward_hook(self.feature_hook)

        self.model.layer4.register_backward_hook(self.grad_hook)
        self.model.layer4.register_forward_hook(self.feature_hook)
示例#16
0
    def __init__(self, config):
        super().__init__()

        self.model = models.resnext101_32x8d(pretrained=True)

        for param in self.model.parameters():
            param.requires_grad = False

        self.model.fc = nn.Sequential(
            nn.Linear(self.model.fc.in_features, config["lin1_size"]),
            nn.BatchNorm1d(config["lin1_size"]),
            nn.ReLU(),
            nn.Dropout(p=0.25),
            nn.Linear(config["lin1_size"], config["lin2_size"]),
            nn.BatchNorm1d(config["lin2_size"]),
            nn.ReLU(),
            nn.Dropout(p=0.2),
            nn.Linear(config["lin2_size"], config["output_size"]),
            nn.LogSoftmax(dim=1)
        )
示例#17
0
    def __init__(self, base_model, out_dim):
        super().__init__()
        self.resnet_dict = {"resnet18": models.resnet18(pretrained=False),
                            "resnet50": models.resnet50(pretrained=False),
                            "resnet101": models.resnet101(pretrained=False),
                            "resnet152": models.resnet152(pretrained=False),
                            "resnext50_wide": models.resnext50_32x4d(pretrained=False),
                            "resnext101_wide": models.resnext101_32x8d(pretrained=False),
                            }

        resnet = self._get_basemodel(base_model)
        num_ftrs = resnet.fc.in_features

        self.features = nn.Sequential(*list(resnet.children())[:-2])
        self.pool = nn.Sequential(*list(resnet.children())[-2:-1])

        # projection MLP
        self.l1 = nn.Linear(num_ftrs, num_ftrs)
        self.l2 = nn.Linear(num_ftrs, out_dim)
        self.weights_init()
def load_model():
    labels = []
    with open(label_path, 'r') as filehandle:
        for line in filehandle:
            currentPlace = line[:-1]
            labels.append(currentPlace)
    device = torch.device("cpu")
    model_ft = models.resnext101_32x8d(pretrained=False)
    num_ftrs = model_ft.fc.in_features
    nb_classes = len(labels)
    model_ft.fc = nn.Linear(num_ftrs, nb_classes)
    model_ft = model_ft.to(device)
    model_ft.load_state_dict(
        torch.load(model_path, map_location=torch.device('cpu')))
    model_ft.eval()

    to_return = list()
    to_return.append(model_ft)
    to_return.append(labels)
    return to_return
示例#19
0
    def __init__(self, variant, num_classes, print_model=False):
        """
        variant -> defines the ResNet variant used for this experiment (18, 50, etc)
        num_classes -> the number of classes in the experiment
        """
        super().__init__()
        self.variant = variant
        self.num_classes = num_classes

        if variant == 50:
            self.model = models.resnext50_32x4d(pretrained=True)
            num_filters = self.model.fc.in_features
            self.model.fc = nn.Linear(num_filters, self.num_classes)
            self.input_size = 224

        if variant == 101:
            self.model = models.resnext101_32x8d(pretrained=True)
            num_filters = self.model.fc.in_features
            self.model.fc = nn.Linear(num_filters, self.num_classes)
            self.input_size = 224
示例#20
0
    def __init__(self, args, use_pretrained=True):

        super(ImageTransformer, self).__init__()
        from torch.nn import TransformerEncoder, TransformerEncoderLayer

        self.args = args
        # Embedding

        if args.encoder == "resnext101":
            if use_pretrained:
                self.embedder = torch.hub.load("facebookresearch/WSL-Images",
                                               "resnext101_32x8d_wsl")
            else:
                self.embedder = tvmodels.resnext101_32x8d(pretrained=False)

        if self.args.freeze_encoder:
            self.freeze_encoder()

        self.units = args.units
        if self.units == 2048:
            self.embedder.fc = nn.Identity()

        else:
            self.embedder.fc = nn.Linear(2048, self.units)
            for m in self.embedder.fc.modules():
                if isinstance(m, nn.Linear):
                    nn.init.kaiming_normal_(m.weight)
                    if hasattr(m, "bias") and m.bias is not None:
                        nn.init.constant_(m.bias, 0)

        # self.src_mask = None
        self.position_encoder = PositionalEncoding1D(
            self.units)  # (ninp, dropout)
        encoder_layer = TransformerEncoderLayer(d_model=self.units,
                                                nhead=8,
                                                dim_feedforward=2048,
                                                dropout=0.1)
        self.transformer_encoder = TransformerEncoder(
            encoder_layer=encoder_layer, num_layers=2)

        self.transformer_decoder = nn.Linear(self.units, self.args.num_classes)
示例#21
0
    def __init__(self, slug='r50', pretrained=True):
        super().__init__()
        if not pretrained:
            print("Caution, not loading pretrained weights.")

        if slug == 'r18':
            self.resnet = models.resnet18(pretrained=pretrained)
            num_bottleneck_filters = 512
        elif slug == 'r34':
            self.resnet = models.resnet34(pretrained=pretrained)
            num_bottleneck_filters = 512
        elif slug == 'r50':
            self.resnet = models.resnet50(pretrained=pretrained)
            num_bottleneck_filters = 2048
        elif slug == 'r101':
            self.resnet = models.resnet101(pretrained=pretrained)
            num_bottleneck_filters = 2048
        elif slug == 'r152':
            self.resnet = models.resnet152(pretrained=pretrained)
            num_bottleneck_filters = 2048
        elif slug == 'rx50':
            self.resnet = models.resnext50_32x4d(pretrained=pretrained)
            num_bottleneck_filters = 2048
        elif slug == 'rx101':
            self.resnet = models.resnext101_32x8d(pretrained=pretrained)
            num_bottleneck_filters = 2048
        elif slug == 'r50d':
            self.resnet = timm.create_model('gluon_resnet50_v1d',
                                            pretrained=pretrained)
            convert_to_inplace_relu(self.resnet)
            num_bottleneck_filters = 2048
        elif slug == 'r101d':
            self.resnet = timm.create_model('gluon_resnet101_v1d',
                                            pretrained=pretrained)
            convert_to_inplace_relu(self.resnet)
            num_bottleneck_filters = 2048

        else:
            assert False, "Bad slug: %s" % slug

        self.outplanes = num_bottleneck_filters
示例#22
0
    def __init__(self, network, num_joints):
        super(ResNet, self).__init__()
        
        # load pretrained resnet model
        if network == 'resnet50':
            pretrained = models.resnet50(pretrained=True)
        elif network == 'resnet101':
            pretrained = models.resnet101(pretrained=True)
        elif network == 'resnet152':
            pretrained = models.resnet152(pretrained=True)
        elif network == 'resnext101':
            pretrained = models.resnext101_32x8d(pretrained=True)
        else:
            raise ValueError('unsupported network %s' % network)
        
        # remove last 2 layers
        modules = list(pretrained.children())[:-2]
        
        # add 1st deconv block (stride = 16)
        modules.append(nn.Sequential(nn.ConvTranspose2d(2048, 256, kernel_size=4, stride=2, padding=1, bias=False),
                                     nn.BatchNorm2d(256),
                                     nn.ReLU(inplace=True)))

        # add 2nd deconv block (stride = 32)
        modules.append(nn.Sequential(nn.ConvTranspose2d(256, 256, kernel_size=4, stride=2, padding=1, bias=False),
                                     nn.BatchNorm2d(256),
                                     nn.ReLU(inplace=True)))

        # add 3rd deconv block (stride = 64)
        modules.append(nn.Sequential(nn.ConvTranspose2d(256, 256, kernel_size=4, stride=2, padding=1, bias=False),
                                     nn.BatchNorm2d(256),
                                     nn.ReLU(inplace=True)))

        # add regression layer
        modules.append(nn.Conv2d(256, num_joints, 1))

        self.module = nn.ModuleList(modules)

        self.network = network
        self.num_joints = num_joints
        self.fliptest = False
def load_model(name,
               num_classes,
               input_height=64,
               input_width=64,
               num_of_channels=3):
    if name == 'COAPModNet':
        net = COAPModNet(num_classes=num_classes)
    elif name == 'COAPNet':
        net = COAPNet(num_classes=num_classes)
    elif name == 'SimpleNet':
        net = SimpleNet(num_classes=num_classes)
    elif name == 'AlexNet':
        net = models.AlexNet(num_classes=num_classes)
    elif name == 'PlanktonNet':
        net = PlanktonNet(num_classes=num_classes)
    elif name == 'ResNet18':
        net = models.resnet18(num_of_channels, num_classes)
    elif name == 'ResNet34':
        net = models.resnet34(num_of_channels, num_classes)
    elif name == 'ResNet50':
        net = models.resnet50(num_of_channels, num_classes)
    elif name == 'ResNet101':
        net = models.resnet101(num_of_channels, num_classes)
    elif name == 'ResNet152':
        net = models.resnet152(num_of_channels, num_classes)
    elif name == 'VGGNet11':
        net = models.vgg11(num_classes=num_classes)
    elif name == 'VGGNet13':
        net = models.vgg13(num_classes=num_classes)
    elif name == 'VGGNet16':
        net = models.vgg16(num_classes=num_classes)
    elif name == 'VGGNet19':
        net = models.vgg19(num_classes=num_classes)
    elif name == 'ResNext50':
        net = models.resnext50_32x4d(num_classes=num_classes)
    elif name == 'ResNext101':
        net = models.resnext101_32x8d(num_classes=num_classes)
    elif name == 'GoogLeNet':
        net = models.GoogLeNet(num_classes=num_classes)

    return net
def main():
    model = models.resnext101_32x8d(pretrained=True)
    model.eval()

    batch_size = 32

    x = torch.randn(batch_size, 3, 224, 224, requires_grad=True)

    # set export_params=True to export model params
    torch.onnx.export(
        model,  # model being run
        x,  # model input (or a tuple for multiple inputs)
        "resnext101_32x8d.onnx",  # where to save the model (can be a file or file-like object)
        export_params=
        False,  # store the trained parameter weights inside the model file
        opset_version=10,  # the ONNX version to export the model to
        do_constant_folding=
        True,  # whether to execute constant folding for optimization
        input_names=['input'],  # the model's input names
        output_names=['output'],  # the model's output names
    )
示例#25
0
def read_model(model_path):
    checkpoint = torch.load(model_path, map_location=torch.device(
        'cpu'))  # seems to work despite warning, returns a dict
    classes = checkpoint["classes"]
    resnet = models.resnext101_32x8d()
    x = checkpoint.get('state_dict')

    #remove 'module' string from key, necessary for CPU based model
    from collections import OrderedDict
    new_state_dict = OrderedDict()
    for k, v in x.items():
        name = k[7:]  # remove `module.`
        new_state_dict[name] = v

    # load params
    #set number of classes
    num_ftrs = resnet.fc.in_features
    resnet.fc = torch.nn.Linear(num_ftrs, len(classes))
    resnet.load_state_dict(new_state_dict)
    resnet.eval()
    return classes, resnet
示例#26
0
def init_net(embed_dim: int, dropout: float = 0.1, freeze: bool = False, depth: int = 1, use_obj: bool = True):
    if depth == 1:
        model = models.resnet18(pretrained=True)
    elif depth == 2:
        model = models.resnet34(pretrained=True)
    elif depth == 3:
        model = models.resnet50(pretrained=True)
    elif depth == 4:
        model = models.resnet101(pretrained=True)
    elif depth == 5:
        model = models.resnet152(pretrained=True)
    elif depth == 6:
        model = models.resnext101_32x8d(pretrained=True)

    model.__class__ = ModifiedResnet
    model.dropout = dropout
    model.layer_norm = torch.nn.LayerNorm(embed_dim, eps=1e-12)

    if freeze:
        for param in model.parameters():
            param.requires_grad = False

    current_weight = model.state_dict()["fc.weight"]
    model.fc = torch.nn.Linear(in_features=current_weight.size()[1], out_features=embed_dim, bias=False)
    model.fc.train()

    model.object_feat_fc = torch.nn.Linear(in_features=1024 + 7 + embed_dim, out_features=embed_dim, bias=False)
    model.object_feat_fc.train()

    # Learning embedding of each CNN region.
    model.location_embedding = nn.Embedding(49, embed_dim)
    model.location_embedding.train(True)
    model.object_embedding = nn.Embedding(91, embed_dim)
    model.object_embedding.train(True)
    model.fcnn = None
    if use_obj:
        model.fcnn = fasterrcnn_resnet50_fpn(pretrained=True)
        model.fcnn.eval()

    return model
示例#27
0
 def __init__(self, params):
     super(encoder, self).__init__()
     self.params = params
     import torchvision.models as models
     if params.encoder == 'densenet121_bts':
         self.base_model = models.densenet121(pretrained=True).features
         self.feat_names = [
             'relu0', 'pool0', 'transition1', 'transition2', 'norm5'
         ]
         self.feat_out_channels = [64, 64, 128, 256, 1024]
     elif params.encoder == 'densenet161_bts':
         self.base_model = models.densenet161(pretrained=True).features
         self.feat_names = [
             'relu0', 'pool0', 'transition1', 'transition2', 'norm5'
         ]
         self.feat_out_channels = [96, 96, 192, 384, 2208]
     elif params.encoder == 'resnet50_bts':
         self.base_model = models.resnet50(pretrained=True)
         self.feat_names = ['relu', 'layer1', 'layer2', 'layer3', 'layer4']
         self.feat_out_channels = [64, 256, 512, 1024, 2048]
     elif params.encoder == 'resnet101_bts':
         self.base_model = models.resnet101(pretrained=True)
         self.feat_names = ['relu', 'layer1', 'layer2', 'layer3', 'layer4']
         self.feat_out_channels = [64, 256, 512, 1024, 2048]
     elif params.encoder == 'resnext50_bts':
         self.base_model = models.resnext50_32x4d(pretrained=True)
         self.feat_names = ['relu', 'layer1', 'layer2', 'layer3', 'layer4']
         self.feat_out_channels = [64, 256, 512, 1024, 2048]
     elif params.encoder == 'resnext101_bts':
         self.base_model = models.resnext101_32x8d(pretrained=True)
         self.feat_names = ['relu', 'layer1', 'layer2', 'layer3', 'layer4']
         self.feat_out_channels = [64, 256, 512, 1024, 2048]
     elif params.encoder == 'mobilenetv2_bts':
         self.base_model = models.mobilenet_v2(pretrained=True).features
         self.feat_inds = [2, 4, 7, 11, 19]
         self.feat_out_channels = [16, 24, 32, 64, 1280]
         self.feat_names = []
     else:
         print('Not supported encoder: {}'.format(params.encoder))
示例#28
0
def make_model(n_classes=2):
    if MODEL == 'vgg16':
        model = models.vgg16(pretrained=True, progress=True)
    elif MODEL == 'mobilenet':
        model = models.mobilenet_v2(pretrained=True, progress=True)
    elif MODEL == 'resnet50':
        model = models.resnet50(pretrained=True, progress=True)
    elif MODEL == 'resnext101':
        model = models.resnext101_32x8d(pretrained=True, progress=True)
    else:
        raise ValueError('Invalid pretrained model.')

    model.n_classes = n_classes
    if FROZEN:
        for param in model.parameters():
            param.requires_grad = False

    final = nn.Sequential(nn.ReLU(), nn.Dropout(0.5), nn.Linear(1000, 1000),
                          nn.ReLU(), nn.Dropout(0.5), nn.Linear(1000, 750),
                          nn.ReLU(), nn.Dropout(0.5), nn.Linear(750, 750),
                          nn.ReLU(), nn.Dropout(0.5), nn.Linear(750, 500),
                          nn.ReLU(), nn.Dropout(0.5),
                          nn.Linear(500, model.n_classes))

    if MODEL == 'vgg16':
        model.classifier[6] = nn.Sequential(nn.Linear(4096, model.n_classes))
    elif MODEL == 'mobilenet':
        model.classifier = nn.Sequential(nn.Linear(1280, 1000), final)
    elif MODEL in ['resnet50', 'resnext101']:
        model.fc = nn.Sequential(nn.Linear(model.fc.in_features, 1000), final)

    print(f'Transfer learning from {MODEL}.')
    total_params = sum(p.numel() for p in model.parameters())
    print(f'{total_params:,} total parameters.')
    total_trainable_params = sum(p.numel() for p in model.parameters()
                                 if p.requires_grad)
    print(f'{total_trainable_params:,} training parameters.')

    return model
示例#29
0
def initialize_model(model_name, num_classes, feature_extract, use_pretrained=True):
    # Initialize these variables which will be set in this if statement. Each of these
    #   variables is model specific.
    model_ft = None
    input_size = 0

    if model_name == "resnet18":
        """ 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 == "resnet152":
        """ Resnet18
        """
        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

    elif model_name == "ResNeXt-101-32x8d":
        """ ResNeXt-101-32x8d
        """
        model_ft = models.resnext101_32x8d(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 model name, exiting...")
        exit()

    return model_ft, input_size
示例#30
0
    def __init__(self, model_name, n_frozen_layers):
        super(Pretrained_model, self).__init__()

        if model_name == "resnet50":
            from torchvision.models import resnet50

            self.pretrained = resnet50(pretrained=True)
        elif model_name == "resnet18":
            from torchvision.models import resnet18
            self.pretrained = resnet18(pretrained=True)
        elif model_name == "resnext101":
            from torchvision.models import resnext101_32x8d
            self.pretrained = resnext101_32x8d(pretrained=True)
        #freeze the first n_frozen_layers
        ct = 0
        for child in self.pretrained.children():
            ct += 1
            if ct <= n_frozen_layers:
                for param in child.parameters():
                    param.requires_grad = False

        #the last fc layers n_classes outputs
        self.fc = nn.Linear(self.pretrained.fc.out_features, nclasses)