Пример #1
0
def make_dataset(cfg):
    if cfg.folder:
        _dataset = torchvision.datasets.ImageFolder(
            root=cfg.img_dir,
            transform=get_transform(new_size=(cfg.resolution, cfg.resolution)))
        return _dataset
    else:
        Dataset = FlatDirectoryImageDataset

    _dataset = Dataset(data_dir=cfg.img_dir,
                       transform=get_transform(new_size=(cfg.resolution,
                                                         cfg.resolution)))

    return _dataset
Пример #2
0
def get_data_loader(cfg, batch_size, num_workers):
    """
    generate the data_loader from the given dataset
    :param dataset: dataset for training (Should be a PyTorch dataset)
                    Make sure every item is an Image
    :param batch_size: batch size of the data
    :param num_workers: num of parallel readers
    :return: dl => data_loader for the dataset
    """
    ''' 
    from torch.utils.data import DataLoader
    dl = DataLoader(
        dataset,
        batch_size=batch_size,
        shuffle=True,
        num_workers=num_workers,
        drop_last=True,
        pin_memory=True
    )
    ''' 
    if cfg.folder:
        # raise NotImplementedError
        Dataset = FoldersDistributedDataset
    else:
        Dataset = FlatDirectoryImageDataset

    dl = Dataset(data_dir=cfg.img_dir, transform=get_transform(new_size=(cfg.resolution, cfg.resolution))).set_attrs(
        batch_size=batch_size, 
        shuffle=True,
        num_workers=num_workers,
        drop_last=True,
        )
   

    return dl
Пример #3
0
def make_dataset(cfg):
    if cfg.folder:
        # raise NotImplementedError
        Dataset = FoldersDistributedDataset
    else:
        Dataset = FlatDirectoryImageDataset

    _dataset = Dataset(data_dir=cfg.img_dir, transform=get_transform(new_size=(cfg.resolution, cfg.resolution)))

    return _dataset
Пример #4
0
def make_caricatures(
    idx,
    video_dir,
    out_dir,
    amp=5,
    mode='full',
    size='Small',
    batch_size=1,
    basemodel_name='resnet18',
):

    os.makedirs(outdir, exist_ok=True)
    transform = transforms.get_transform(split='val',
                                         normalize=False,
                                         rescale=False)
    dataset = VideoFolder(datadir, step=1, transform=transform)
    dataset_orig = VideoFolder(datadir, step=1)

    # model = core.get_model(f'SeriesPretrainedFrozen{size}ManipulatorAttnDetector')

    # dataloader = torch.utils.data.DataLoader(
    #     dataset,
    #     batch_size=batch_size,
    #     shuffle=False,
    #     num_workers=4,
    #     pin_memory=False,
    #     drop_last=False,
    # )
    # dataloader_orig = torch.utils.data.DataLoader(
    #     dataset_orig,
    #     batch_size=batch_size,
    #     shuffle=False,
    #     num_workers=4,
    #     pin_memory=False,
    #     drop_last=False,
    # )

    # for i, ((names, frames, target), (_, frames_orig, _)) in enumerate(
    # zip(dataset, dataset_orig)
    # ):
    names, frames, target = dataset[idx]
    names, frames_orig, target = dataset_orig[idx]
    names = [names]
    frames = frames.unsqueeze(0)
    frames_orig = frames_orig.unsqueeze(0)
    print(f'Processing [{i} / {len(dataset)}]: {", ".join(names)}')
    process(i, frames, frames_orig, names, basemodel_name, size, amp, mode)
    del frames
    del frames_orig
    del names
    del target
    torch.cuda.empty_cache()
Пример #5
0
def make_dataset(cfg, conditional=False):

    if conditional:
        Dataset = ImageFolder
    else:
        if cfg.folder:
            Dataset = FoldersDistributedDataset
        else:
            Dataset = FlatDirectoryImageDataset

    transforms = get_transform(new_size=(cfg.resolution, cfg.resolution))
    _dataset = Dataset(cfg.img_dir, transform=transforms)

    return _dataset
Пример #6
0
def _make_caricatures(
    video_dir,
    out_dir,
    amp=5,
    mode='full',
    size='Small',
    batch_size=1,
    basemodel_name='resnet18',
):

    os.makedirs(outdir, exist_ok=True)
    transform = transforms.get_transform(split='val',
                                         normalize=False,
                                         rescale=False)
    dataset = VideoFolder(datadir, step=1, transform=transform)
    dataset_orig = VideoFolder(datadir, step=1)

    # model = core.get_model(f'SeriesPretrainedFrozen{size}ManipulatorAttnDetector')
    model = core.get_model(f'SeriesPretrainedFrozen{size}ManipulatorDetector')

    ckpt_file = CHECKPOINTS[basemodel_name]
    ckpt = torch.load(ckpt_file)
    state_dict = mutils.remove_prefix(ckpt['state_dict'])
    model.detector_model.load_state_dict(state_dict, strict=False)

    model = model.to(device)
    model.eval()

    dataloader = torch.utils.data.DataLoader(
        dataset,
        batch_size=batch_size,
        shuffle=False,
        num_workers=4,
        pin_memory=False,
        drop_last=False,
    )
    dataloader_orig = torch.utils.data.DataLoader(
        dataset_orig,
        batch_size=batch_size,
        shuffle=False,
        num_workers=4,
        pin_memory=False,
        drop_last=False,
    )

    for i, ((names, frames, target),
            (_, frames_orig, _)) in enumerate(zip(dataloader,
                                                  dataloader_orig)):
        print(f'Processing [{i} / {len(dataloader)}]: {", ".join(names)}')
        if i == 0:
            continue

        model = model.cpu()
        model = model.to(device)
        frames = frames.to(device)

        attn_map = None
        model.zero_grad()
        if mode.lower() == 'gradcam':
            normalize_attn = True
            gcam_model = vutils.grad_cam.GradCAM(model.detector_model.model)
            out, attn_map = gcam_forward(gcam_model, frames)
            attn_map.detach_()
            attn_map = attn_map.cpu()
            del gcam_model

        with torch.no_grad():
            if mode == 'attn':
                normalize_attn = True
                out, attn_map = model.detector_model(frames)

            del frames
            frames_orig = frames_orig.to(device)
            cari = model.manipulate(
                frames_orig,
                amp=torch.tensor(amp),
                attn_map=attn_map,
                normalize_attn=normalize_attn,
            )
            cari = cari.cpu()
            del frames_orig
            torch.cuda.empty_cache()

        for n, (name, c) in enumerate(zip(names, cari)):
            c = c.permute(1, 2, 3, 0)
            outname = f'{name.replace(".mp4", "")}_cari_{size}_{mode}_amp{amp}' + '.mp4'
            outfile = os.path.join(outdir, outname)
            pretorched.data.utils.async_array_to_video(c, outfile)
            if attn_map is not None:
                am = normalize(attn_map[n]).cpu()
                attn_outname = (
                    f'{name.replace(".mp4", "")}_attn_{size}_{mode}_amp{amp}' +
                    '.mp4')
                attn_outfile = os.path.join(outdir, attn_outname)
                if mode not in ['gradcam']:
                    pretorched.data.utils.async_array_to_video(
                        255 * am.unsqueeze(-1).repeat(1, 1, 1, 3),
                        attn_outfile,
                    )
                heatmap_outname = (
                    f'{name.replace(".mp4", "")}_heatmap_{size}_{mode}_amp{amp}'
                    + '.mp4')

                heatmap = [
                    vutils.grad_cam.apply_heatmap(a, cc)
                    for a, cc in zip(am.numpy(), c.numpy())
                ]
                heatmap_outfile = os.path.join(outdir, heatmap_outname)
                pretorched.data.utils.async_array_to_video(
                    heatmap,
                    heatmap_outfile,
                )