def get_resnet(type, load_ckpt=True):
    """
    loading ResNet of trained on places365 as basenet
    """
    if type == 18:
        model_file = 'Place365/wideresnet18_places365.pth.tar'
        model_res_net = wideresnet.resnet18(num_classes=365)
    elif type == 34:
        model_file = 'Place365/resnet34-333f7ec4.pth'  # Pre-trained on ImageNet
        model_res_net = wideresnet.resnet34()
    elif type == 50:
        model_file = 'Place365/resnet50_places365.pth.tar'
        model_res_net = wideresnet.resnet50(num_classes=365)
    else:
        raise Exception('Unknown ResNet Type')
    if load_ckpt:
        try:
            checkpoint = torch.load(model_file,
                                    map_location=lambda storage, loc: storage)
        except IOError:
            print('Fail to load checkpoint, because no such file:', model_file)
        else:
            if type == 34:
                model_res_net.load_state_dict(checkpoint)
            else:
                state_dict = {
                    str.replace(k, 'module.', ''): v
                    for k, v in checkpoint['state_dict'].items()
                }
                model_res_net.load_state_dict(state_dict)
    return model_res_net
Example #2
0
def baseResNet(type=50):
    from Place365 import wideresnet
    if type == 18:
        model_res_net = wideresnet.resnet18(num_classes=365)
    elif type == 34:
        model_res_net = wideresnet.resnet34()
    elif type == 50:
        model_res_net = wideresnet.resnet50(num_classes=365)
    else:
        raise Exception('Unknown ResNet Type')
    layers = list(model_res_net.children())[:-2]  # children()只包括了第一代儿子模块,get rid of the last two layers: avepool & fc
    return layers
def get_resnet(type):
    """
    loading ResNet-18/34/50 of trained on places365 (ImageNet) as basenet
    """
    from Place365 import wideresnet
    if type == 18:
        model_file = 'Place365/wideresnet18_places365.pth.tar'
        model_res_net = wideresnet.resnet18(num_classes=365)
    elif type == 34:
        model_file = 'Place365/resnet34-333f7ec4.pth'  # Pre-trained on ImageNet
        model_res_net = wideresnet.resnet34()
    elif type == 50:
        model_file = 'Place365/resnet50_places365.pth.tar'
        model_res_net = wideresnet.resnet50(num_classes=365)
    else:
        raise Exception('Unknown ResNet Type')
    return model_res_net, model_file
def loadSceneRecognitionModel(trainedNetVLADLayers):
    # this model has a last conv feature map as 14x14
    model_file = 'Place365/wideresnet18_places365.pth.tar'
    model = wideresnet.resnet18(num_classes=365)
    state_dict = getPretrainedParams(model_file)
    model.load_state_dict(state_dict)
    model.eval()

    # hook the feature extractor
    features_names = ['layer4', 'avgpool'] # this is the last conv layer of the resnet
    for name in features_names:
        model._modules.get(name).register_forward_hook(hook_feature)

    # hook the layer for DataSet
    features_candidates = ['layer4', 'layer3', 'layer2', 'layer1', 'relu1']
    model._modules.get(features_candidates[trainedNetVLADLayers]).register_forward_hook(hook_layer)

    return model
        encoder_dim = 512
        encoder = models.vgg16(pretrained=pretrained)
        # capture only feature part and remove last relu and maxpool
        layers = list(encoder.features.children())[:-2]
        if pretrained:
            # if using pretrained then only train conv5_1, conv5_2, and conv5_3
            for l in layers[:-5]:
                for p in l.parameters():
                    p.requires_grad = False

    elif opt.arch.lower() == 'resnet18':
        encoder_dim = 512
        # loading resnet18 of trained on places365 as basenet
        from Place365 import wideresnet
        model_file = 'Place365/wideresnet18_places365.pth.tar'
        modelResNet = wideresnet.resnet18(num_classes=365)
        checkpoint = torch.load(model_file,
                                map_location=lambda storage, loc: storage)
        state_dict = {
            str.replace(k, 'module.', ''): v
            for k, v in checkpoint['state_dict'].items()
        }
        modelResNet.load_state_dict(state_dict)
        # get rid of the last two layers: avepool & fc
        layers = list(modelResNet.children())[:-2]
        # 让最后1\2个block参与netVLAD训练
        for l in layers[:-2]:
            for p in l.parameters():
                p.requires_grad = False

    if opt.mode.lower() == 'cluster':