Ejemplo n.º 1
0
def main():
    # os.makedirs('sample', exist_ok=True)
    opt = TestOptions().parse()

    data_loader = CreateDataLoader(opt)
    dataset = data_loader.load_data()
    dataset_size = len(data_loader)
    print('# Inference images = %d' % dataset_size)

    model = create_model(opt)
    print(dataset)

    for i, data in enumerate(dataset):
        # add gaussian noise channel
        # wash the label
        t_mask = torch.FloatTensor(
            (data['label'].cpu().numpy() == 7).astype(np.float))
        #
        # data['label'] = data['label'] * (1 - t_mask) + t_mask * 4
        mask_clothes = torch.FloatTensor(
            (data['label'].cpu().numpy() == 4).astype(np.int))
        mask_fore = torch.FloatTensor(
            (data['label'].cpu().numpy() > 0).astype(np.int))
        img_fore = data['image'] * mask_fore
        img_fore_wc = img_fore * mask_fore
        all_clothes_label = changearm(data['label'])

        ############## Forward Pass ######################
        fake_image, warped_cloth, refined_cloth = model(
            Variable(data['label'].cuda()), Variable(data['edge'].cuda()),
            Variable(img_fore.cuda()), Variable(mask_clothes.cuda()),
            Variable(data['color'].cuda()), Variable(all_clothes_label.cuda()),
            Variable(data['image'].cuda()), Variable(data['pose'].cuda()),
            Variable(data['image'].cuda()), Variable(mask_fore.cuda()))
        # Variable(im_data.cuda(), volatile=True) 처럼 volatile 옵션을 넣어서 기울기 계산을 안할 수 도 있음
        # 그러면 메모리가 덜 사용되겠지?

        # make output folders
        output_dir = os.path.join(opt.results_dir, opt.phase)
        fake_image_dir = os.path.join(output_dir, 'try_on')
        os.makedirs(fake_image_dir, exist_ok=True)
        warped_cloth_dir = os.path.join(output_dir, 'warped_cloth')
        os.makedirs(warped_cloth_dir, exist_ok=True)
        refined_cloth_dir = os.path.join(output_dir, 'refined_cloth')
        os.makedirs(refined_cloth_dir, exist_ok=True)

        # save output
        for j in range(opt.batchSize):
            print("Saving", data['name'][j])
            util.save_tensor_as_image(
                fake_image[j], os.path.join(fake_image_dir, data['name'][j]))
            util.save_tensor_as_image(
                warped_cloth[j], os.path.join(warped_cloth_dir,
                                              data['name'][j]))
            util.save_tensor_as_image(
                refined_cloth[j],
                os.path.join(refined_cloth_dir, data['name'][j]))
            util.save_tensor_as_image(
                fake_image[j],
                os.path.join("../static/images/results", data['name'][j]))
Ejemplo n.º 2
0
def main():
    opt = Options().parse()
    dataset = AlignedDataset(opt)
    dataloader = DataLoader(dataset,
                            batch_size=opt.batchSize,
                            shuffle=not opt.serial_batches,
                            num_workers=int(opt.nThreads))
    dataset_size = len(dataset)
    print(f'training images = {dataset_size}')

    model = Inference(opt)

    model = torch.nn.DataParallel(model, device_ids=opt.gpu_ids)
    for _, data in enumerate(dataloader):
        mask_clothes = torch.FloatTensor(
            (data['label'].cpu().numpy() == 4).astype(np.int))
        mask_fore = torch.FloatTensor(
            (data['label'].cpu().numpy() > 0).astype(np.int))
        img_fore = data['image'] * mask_fore
        all_clothes_label = changearm(data['label'])

        fake_image, warped_cloth, refined_cloth = model(
            data['label'].cuda(), data['edge'].cuda(), img_fore.cuda(),
            mask_clothes.cuda(), data['color'].cuda(),
            all_clothes_label.cuda(), data['image'].cuda(),
            data['pose'].cuda(), data['image'].cuda(), mask_fore.cuda())

        # make output folders
        output_dir = os.path.join(opt.results_dir, opt.phase)
        fake_image_dir = os.path.join(output_dir, 'try-on')
        os.makedirs(fake_image_dir, exist_ok=True)
        warped_cloth_dir = os.path.join(output_dir, 'warped_cloth')
        os.makedirs(warped_cloth_dir, exist_ok=True)
        refined_cloth_dir = os.path.join(output_dir, 'refined_cloth')
        os.makedirs(refined_cloth_dir, exist_ok=True)

        # save output
        for j in range(opt.batchSize):
            name = data['path'][j].split('/')[-1]
            print("Saving", name)
            util.save_tensor_as_image(fake_image[j],
                                      os.path.join(fake_image_dir, name))
            util.save_tensor_as_image(warped_cloth[j],
                                      os.path.join(warped_cloth_dir, name))
            util.save_tensor_as_image(refined_cloth[j],
                                      os.path.join(refined_cloth_dir, name))
Ejemplo n.º 3
0
def main():
    opt = Options().parse()
    dataset = AlignedDataset(opt)
    data = dataset.transform(
        '/home/dung/Project/AI/DeepFashion_Try_On/Data_preprocessing/ACGPN_traindata/train_img/000024_0.jpg',
        '/home/dung/Project/AI/DeepFashion_Try_On/Data_preprocessing/ACGPN_traindata/train_color/000052_1.jpg'
    )
    model = Inference(opt)
    model = torch.nn.DataParallel(model, device_ids=opt.gpu_ids)
    mask_clothes = torch.FloatTensor(
        (data['label'].cpu().numpy() == 4).astype(np.int))
    mask_fore = torch.FloatTensor(
        (data['label'].cpu().numpy() > 0).astype(np.int))
    img_fore = data['image'] * mask_fore
    all_clothes_label = changearm(data['label'])

    fake_image, warped_cloth, refined_cloth = model(
        data['label'].cuda(), data['edge'].cuda(), img_fore.cuda(),
        mask_clothes.cuda(), data['color'].cuda(), all_clothes_label.cuda(),
        data['image'].cuda(), data['pose'].cuda(), data['image'].cuda(),
        mask_fore.cuda())

    # make output folders
    output_dir = os.path.join(opt.results_dir, opt.phase)
    fake_image_dir = os.path.join(output_dir, 'try-on')
    os.makedirs(fake_image_dir, exist_ok=True)
    warped_cloth_dir = os.path.join(output_dir, 'warped_cloth')
    os.makedirs(warped_cloth_dir, exist_ok=True)
    refined_cloth_dir = os.path.join(output_dir, 'refined_cloth')
    os.makedirs(refined_cloth_dir, exist_ok=True)

    # save output
    for j in range(opt.batchSize):
        name = data['path'].split('/')[-1]
        print("Saving", name)
        util.save_tensor_as_image(fake_image[j],
                                  os.path.join(fake_image_dir, name))
        util.save_tensor_as_image(warped_cloth[j],
                                  os.path.join(warped_cloth_dir, name))
        util.save_tensor_as_image(refined_cloth[j],
                                  os.path.join(refined_cloth_dir, name))