예제 #1
0
def resnet152(pretrained=False, **kwargs):
    """Constructs a ResNet-152 model.

    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs)
    if pretrained:
        print("resnet_low_level: Loading image net weights...")
        utils_train.transfer_partial_weights(model_zoo.load_url(model_urls['resnet152']), model)
        print("resnet_low_level: Done loading image net weights...")
        #model.load_state_dict(model_zoo.load_url(model_urls['resnet152']))
    return model
예제 #2
0
def resnet101(pretrained=False, **kwargs):
    """Constructs a ResNet-101 model.

    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNetTwoStream(Bottleneck, [3, 4, 23, 1], **kwargs)
    if pretrained:
        print("Loading image net weights...")
        utils_train.transfer_partial_weights(
            model_zoo.load_url(model_urls['resnet101']), model)
        print("Done image net weights...")
        # model.load_state_dict(model_zoo.load_url(model_urls['resnet101']))
    return model
예제 #3
0
def load_network(config_dict):
        output_types= config_dict['output_types']
        
        use_billinear_upsampling = 'upsampling_bilinear' in config_dict.keys() and config_dict['upsampling_bilinear']
        lower_billinear = 'upsampling_bilinear' in config_dict.keys() and config_dict['upsampling_bilinear'] == 'half'
        upper_billinear = 'upsampling_bilinear' in config_dict.keys() and config_dict['upsampling_bilinear'] == 'upper'
        
        from_latent_hidden_layers = config_dict.get('from_latent_hidden_layers', 0)
        num_encoding_layers = config_dict.get('num_encoding_layers', 4)
        
        num_cameras = 4
        if config_dict['active_cameras']: # for H36M it is set to False
            num_cameras = len(config_dict['active_cameras'])
        
        if lower_billinear:
            use_billinear_upsampling = False
        network_single = unet_encode3D.unet(dimension_bg=config_dict['latent_bg'],
                                            dimension_fg=config_dict['latent_fg'],
                                            dimension_3d=config_dict['latent_3d'],
                                            feature_scale=config_dict['feature_scale'],
                                            shuffle_fg=config_dict['shuffle_fg'],
                                            shuffle_3d=config_dict['shuffle_3d'],
                                            latent_dropout=config_dict['latent_dropout'],
                                            in_resolution=config_dict['inputDimension'],
                                            encoderType=config_dict['encoderType'],
                                            is_deconv=not use_billinear_upsampling,
                                            upper_billinear=upper_billinear,
                                            lower_billinear=lower_billinear,
                                            from_latent_hidden_layers=from_latent_hidden_layers,
                                            n_hidden_to3Dpose=config_dict['n_hidden_to3Dpose'],
                                            num_encoding_layers=num_encoding_layers,
                                            output_types=output_types,
                                            subbatch_size=config_dict['useCamBatches'],
                                            implicit_rotation=config_dict['implicit_rotation'],
                                            skip_background=config_dict['skip_background'],
                                            num_cameras=num_cameras,
                                            )
        
        if 'pretrained_network_path' in config_dict.keys(): # automatic
            if config_dict['pretrained_network_path'] == 'MPII2Dpose':
                pretrained_network_path = '/cvlabdata1/home/rhodin/code/humanposeannotation/output_save/CVPR18_H36M/TransferLearning2DNetwork/h36m_23d_crop_relative_s1_s5_aug_from2D_2017-08-22_15-52_3d_resnet/models/network_000000.pth'
                print("Loading weights from MPII2Dpose")
                pretrained_states = torch.load(pretrained_network_path)
                utils_train.transfer_partial_weights(pretrained_states, network_single, submodule=0, add_prefix='encoder.') # last argument is to remove "network.single" prefix in saved network
            else:
                print("Loading weights from config_dict['pretrained_network_path']")
                pretrained_network_path = config_dict['pretrained_network_path']            
                pretrained_states = torch.load(pretrained_network_path)
                utils_train.transfer_partial_weights(pretrained_states, network_single, submodule=0) # last argument is to remove "network.single" prefix in saved network
                print("Done loading weights from config_dict['pretrained_network_path']")
        
        if 'pretrained_posenet_network_path' in config_dict.keys(): # automatic
            print("Loading weights from config_dict['pretrained_posenet_network_path']")
            pretrained_network_path = config_dict['pretrained_posenet_network_path']            
            pretrained_states = torch.load(pretrained_network_path)
            utils_train.transfer_partial_weights(pretrained_states, network_single.to_pose, submodule=0) # last argument is to remove "network.single" prefix in saved network
            print("Done loading weights from config_dict['pretrained_posenet_network_path']")
        return network_single
예제 #4
0
    def load_network(self, config_dict):
        output_types = config_dict['output_types']

        use_billinear_upsampling = config_dict.get('upsampling_bilinear',
                                                   False)
        lower_billinear = 'upsampling_bilinear' in config_dict.keys(
        ) and config_dict['upsampling_bilinear'] == 'half'
        upper_billinear = 'upsampling_bilinear' in config_dict.keys(
        ) and config_dict['upsampling_bilinear'] == 'upper'

        if lower_billinear:
            use_billinear_upsampling = False
        network_single = detect_encode_decode.detect_encode_decode(
            dimension_bg=config_dict['latent_bg'],
            dimension_fg=config_dict['latent_fg'],
            dimension_3d=config_dict['latent_3d'],
            feature_scale=config_dict['feature_scale'],
            shuffle_fg=config_dict['shuffle_fg'],
            shuffle_3d=config_dict['shuffle_3d'],
            latent_dropout=config_dict['latent_dropout'],
            in_resolution=config_dict['inputDimension'],
            is_deconv=not use_billinear_upsampling,
            upper_billinear=upper_billinear,
            lower_billinear=lower_billinear,
            num_encoding_layers=config_dict.get('num_encoding_layers', 4),
            output_types=output_types,
            subbatch_size=config_dict['useCamBatches'],
            implicit_rotation=config_dict['implicit_rotation'],
            mode=config_dict['training_mode'],
            spatial_transformer=config_dict.get('spatial_transformer', False),
            ST_size=config_dict.get('spatial_transformer_num', 1),
            spatial_transformer_bounds=config_dict.get(
                'spatial_transformer_bounds', {
                    'border_factor': 1,
                    'min_size': 0.1,
                    'max_size': 1
                }),
            masked_blending=config_dict.get('masked_blending', True),
            scale_mask_max_to_1=config_dict.get('scale_mask_max_to_1', True),
            predict_transformer_depth=config_dict.get(
                'predict_transformer_depth', False),
            normalize_mask_density=config_dict.get('normalize_mask_density',
                                                   False),
            match_crops=config_dict.get('match_crops', False),
            offset_crop=config_dict.get('offset_crop', False),
            similarity_bandwidth=config_dict.get('similarity_bandwidth', 10),
            disable_detector=config_dict.get('disable_detector', False),
        )

        if 'pretrained_network_path' in config_dict.keys():  # automatic
            print(
                "Loading weights from config_dict['pretrained_network_path']")
            pretrained_network_path = config_dict['pretrained_network_path']
            pretrained_states = torch.load(pretrained_network_path,
                                           map_location=device)
            utils_train.transfer_partial_weights(
                pretrained_states, network_single, submodule=0
            )  # last argument is to remove "network.single" prefix in saved network
            print(
                "Done loading weights from config_dict['pretrained_network_path']"
            )

        if 'pretrained_detector_path' in config_dict.keys():  # automatic
            print(
                "Loading weights from config_dict['pretrained_detector_path']")
            pretrained_network_path = config_dict['pretrained_detector_path']
            pretrained_states = torch.load(pretrained_network_path,
                                           map_location=device)
            utils_train.transfer_partial_weights(
                pretrained_states,
                network_single,
                submodule=0,
                prefix='detector'
            )  # last argument is to remove "network.single" prefix in saved network
            print(
                "Done loading weights from config_dict['pretrained_detector_path']"
            )
        return network_single