Exemple #1
0
def make(args):
    nonlinearity, kwargs = nn.LeakyReLU, {"inplace": True}
    encoder_core = vgg.make_layers(vgg.vgg_cfg[args.model_type],
                                   nonlinearity=nonlinearity,
                                   nonlinearity_kwargs=kwargs)
    encoder = knn.Unit(args.model_in_channels, args.model_z_channels,
                       encoder_core)
    decoder_core = vgg.make_layers(vgg.decoder_cfg[args.model_type])
    decoder = knn.Unit(args.model_z_channels + args.model_keypoints,
                       args.model_in_channels, decoder_core)
    keypoint_core = vgg.make_layers(vgg.vgg_cfg[args.model_type],
                                    nonlinearity=nonlinearity,
                                    nonlinearity_kwargs=kwargs)
    keypoint = knn.Unit(args.model_in_channels, args.model_keypoints,
                        keypoint_core)
    keymapper = knn.GaussianLike(sigma=0.1)
    kp_network = KeyNet(encoder,
                        keypoint,
                        keymapper,
                        decoder,
                        init_weights=True)

    if args.load is not None:
        kp_network.load(args.load)
    if args.transfer_load is not None:
        kp_network.load_from_autoencoder(args.transfer_load)

    return kp_network
def make(type,
         in_channels,
         z_channels,
         keypoints,
         combine_mode='max',
         load=None,
         transfer_load=None,
         map_device=None,
         sigma=0.1):
    """
    :param type
    :param in_channels
    :param channels
    :param keypoints
    :param conbine_mode: max, sum_and_clamp, loop, pretrained-network
    :param map_device:
    :return:
    """
    nonlinearity, kwargs = nn.LeakyReLU, {"inplace": True}
    encoder_core = vgg.make_layers(vgg.vgg_cfg[type],
                                   nonlinearity=nonlinearity,
                                   nonlinearity_kwargs=kwargs)
    encoder = knn.Unit(in_channels, z_channels, encoder_core)
    decoder_core = vgg.make_layers(vgg.decoder_cfg[type])
    decoder = knn.Unit(z_channels, in_channels, decoder_core)
    keypoint_core = vgg.make_layers(vgg.vgg_cfg[type],
                                    nonlinearity=nonlinearity,
                                    nonlinearity_kwargs=kwargs)
    keypoint = knn.Unit(in_channels, keypoints, keypoint_core)
    keymapper = knn.GaussianLike(sigma=sigma)
    transporter_net = TransporterNet(encoder,
                                     keypoint,
                                     keymapper,
                                     decoder,
                                     init_weights=True,
                                     combine_method=combine_mode)

    if load is not None:
        transporter_net.load(load, map_device)
    if transfer_load is not None:
        transporter_net.load_from_autoencoder(transfer_load)

    return transporter_net
Exemple #3
0
        """ adds 2 channels that carry co-ordinate information """
        b, h, w = x.size(0), x.size(2), x.size(3)
        hm = torch.linspace(0, 1, h, dtype=x.dtype,
                            device=x.device).reshape(1, 1, h,
                                                     1).repeat(b, 1, 1, w)
        wm = torch.linspace(0, 1, w, dtype=x.dtype,
                            device=x.device).reshape(1, 1, 1,
                                                     w).repeat(b, 1, h, 1)
        return torch.cat((x, hm, wm), dim=1)

    """ model """
    nonlinearity, kwargs = nn.LeakyReLU, {"inplace": True}
    encoder_core = vgg.make_layers(vgg.vgg_cfg[args.model_type],
                                   nonlinearity=nonlinearity,
                                   nonlinearity_kwargs=kwargs)
    encoder = knn.Unit(args.model_in_channels, args.model_z_channels,
                       encoder_core)
    decoder_core = vgg.make_layers(vgg.decoder_cfg[args.model_type],
                                   nonlinearity=nonlinearity,
                                   nonlinearity_kwargs=kwargs)
    decoder = knn.Unit(args.model_z_channels, args.model_in_channels,
                       decoder_core)

    auto_encoder = autoencoder.AutoEncoder(encoder,
                                           decoder,
                                           init_weights=args.load is None).to(
                                               args.device)

    if args.load is not None:
        auto_encoder.load(args.load)
    """ optimizer """
    optim = Adam(auto_encoder.parameters(), lr=args.lr)
Exemple #4
0
    """ variables """
    best_loss = 100.0
    run_dir = f'data/models/mapper/{args.model_type}/run_{args.run_id}'
    writer = SummaryWriter(log_dir=run_dir)
    global_step = 0

    """ data """
    dataset = ds.MapperDataset(32, 32, args.model_keypoints, args.dataset_train_len + args.dataset_test_len)
    train, test = ds.random_split(dataset, [args.dataset_train_len, args.dataset_test_len])
    train_l = DataLoader(train, batch_size=args.batch_size, shuffle=True, drop_last=True, pin_memory=True, num_workers=4)
    test_l = DataLoader(test, batch_size=args.batch_size, shuffle=True, drop_last=True, pin_memory=True)

    """ model """
    encoder_core = vgg.make_layers(vgg.vgg_cfg[args.model_type])
    encoder = knn.Unit(args.model_keypoints, 1, encoder_core)
    mapper = transporter.TransporterMap(mapper=encoder, init_weights=args.load is None).to(args.device)

    if args.load is not None:
        mapper.load(args.load)

    """ optimizer """
    optim = Adam(mapper.parameters(), lr=1e-4)

    """ apex mixed precision """
    if args.device != 'cpu':
        model, optimizer = amp.initialize(mapper, optim, opt_level=args.opt_level)

    """ loss function """
    criterion = nn.MSELoss()