def get_test_result(a_jpg_path, b_jpg_path, model, opt):

    ### 1. 还要把val几个文件的JSON信息也储存到另外的文件,这样比直接读大JSON文件快。
    a_parsing_path = a_jpg_path.replace('.jpg', '.png').replace(
        'img/', 'img_parsing_all/')
    # b_parsing_path = b_jpg_path.replace('.jpg', '.png').replace('img/', 'img_parsing_all/')

    # a_json_path = a_jpg_path.replace('.jpg', '_keypoints.json').replace('img/', 'img_keypoint_json/')
    b_json_path = b_jpg_path.replace('.jpg', '_keypoints.json').replace(
        'img/', 'img_keypoint_json/')
    src = a_jpg_path.replace('.jpg', '_vis.png').replace(
        'img/', 'img_parsing_all/').split(os.sep)
    dst = b_jpg_path.replace('.jpg', '_vis.png').replace(
        'img/', 'img_parsing_all/').split(os.sep)

    theta_pair_key = src[-2] + '_' + src[-1] + "=" + dst[-2] + '_' + dst[-1]
    b_parsing_label_filename = theta_pair_key.replace('=', '_TO_')
    b_parsing_label_filename = b_parsing_label_filename.replace(
        '_vis.png', '') + '__fake_b_parsing.png'
    b_parsing_path = os.path.join(opt.joint_test_data_dir,
                                  b_parsing_label_filename)

    a_parsing_tensor = get_parsing_label_tensor(a_parsing_path, opt)
    b_parsing_tensor = get_parsing_label_tensor(b_parsing_path, opt)

    b_label_tensor, b_label_show_tensor = get_label_tensor(
        b_json_path, b_jpg_path, opt)
    a_image_tensor = get_image_tensor(a_jpg_path, opt)
    b_image_tensor = get_image_tensor(b_jpg_path, opt)

    a_parsing_rgb_tensor = parsingim_2_tensor(
        a_parsing_tensor, opt=opt, parsing_label_nc=opt.parsing_label_nc)
    b_parsing_rgb_tensor = parsingim_2_tensor(
        b_parsing_tensor, opt=opt, parsing_label_nc=opt.parsing_label_nc)

    theta_aff_tensor, theta_tps_tensor, theta_aff_tps_tensor = get_thetas_affgrid_tensor(
        data_loader.dataset.affTnf, data_loader.dataset.tpsTnf,
        data_loader.dataset.theta_json_data, theta_pair_key)


    input_tensor = torch.cat([a_image_tensor, b_image_tensor, b_label_tensor, a_parsing_tensor, b_parsing_tensor, \
                              theta_aff_tensor, theta_tps_tensor, theta_aff_tps_tensor], dim=0)
    input_var = Variable(input_tensor[None, :, :, :].type(
        torch.cuda.FloatTensor))
    model.eval()
    if opt.isTrain:
        fake_b = model.module.inference(input_var)
    else:
        fake_b = model.inference(input_var)

    return fake_b, a_image_tensor, b_image_tensor, b_label_show_tensor
Esempio n. 2
0
def get_test_result(a_jpg_path, b_jpg_path, model, opt):

    ### 1. 还要把val几个文件的JSON信息也储存到另外的文件,这样比直接读大JSON文件快。

    a_parsing_path = a_jpg_path.replace('.jpg', '.png').replace('img/', 'img_parsing_all/')
    #b_parsing_path = b_jpg_path.replace('.jpg', '.png').replace('img/', 'img_parsing_all/')
    a_json_path = a_jpg_path.replace('.jpg', '_keypoints.json').replace('img/', 'img_keypoint_json/')
    b_json_path = b_jpg_path.replace('.jpg', '_keypoints.json').replace('img/', 'img_keypoint_json/')
    src = a_jpg_path.replace('.jpg', '_vis.png').replace('img/', 'img_parsing_all/').split(os.sep)
    dst = b_jpg_path.replace('.jpg', '_vis.png').replace('img/', 'img_parsing_all/').split(os.sep)
    theta_pair_key = src[-2] + '_' + src[-1] + "=" + dst[-2] + '_' + dst[-1]

    # "id_00000006_01_1_front_TO_id_00000006_01_2_side__fake_b_parsing.png"
    b_parsing_label_filename = theta_pair_key.replace('=', '_TO_')
    b_parsing_label_filename = b_parsing_label_filename.replace('_vis.png', '') + '__fake_b_parsing.png'
    b_parsing_path = os.path.join(opt.joint_test_data_dir, b_parsing_label_filename)

    # a_parsing_tensor = get_parsing_label_tensor(a_parsing_path, self.opt)
    b_parsing_tensor = get_parsing_label_tensor(b_parsing_path, opt)
    # b_parsing_tensor = get_parsing_tensor(b_parsing_path, opt)
    b_label_tensor, b_label_show_tensor = get_label_tensor(b_json_path, b_jpg_path, opt)
    a_image_tensor = get_image_tensor(a_jpg_path, opt)  # 这里的parsingRGB应该用20块好。本来就没采用10块计算。
    b_image_tensor = get_image_tensor(b_jpg_path, opt)
    # theta_aff_tensor, theta_tps_tensor, theta_aff_tps_tensor = get_thetas_tensor(theta_json_data, theta_pair_key)  ### [1,18] --> 1*256*256
    theta_aff_tensor, theta_aff_tps_tensor = get_thetas_affgrid_tensor(data_loader.dataset.affTnf, data_loader.dataset.tpsTnf, data_loader.dataset.theta_json_data, theta_pair_key)

    input_tensor = torch.cat([a_image_tensor, b_image_tensor, b_label_tensor, b_parsing_tensor, theta_aff_tensor, theta_aff_tps_tensor], dim=0)
    input_var = Variable(input_tensor[None, :, :, :].type(torch.cuda.FloatTensor))
    if opt.isTrain:
        fake_b = model.module.inference(input_var)
    else:
        fake_b = model.inference(input_var)

    return fake_b, a_image_tensor, b_image_tensor, b_label_show_tensor, b_parsing_tensor
Esempio n. 3
0
def get_test_result(a_jpg_path, b_jpg_path, model, opt):
    if 20 == opt.parsing_label_nc:
        a_parsing_path = a_jpg_path.replace('.jpg', '.png').replace(
            'img/', 'img_parsing_all/')
        b_parsing_path = b_jpg_path.replace('.jpg', '.png').replace(
            'img/', 'img_parsing_all/')
    elif 10 == opt.parsing_label_nc:
        a_parsing_path = a_jpg_path.replace('.jpg', '.png').replace(
            'img/', 'img_parsing_all_10channel/')
        b_parsing_path = b_jpg_path.replace('.jpg', '.png').replace(
            'img/', 'img_parsing_all_10channel/')

    b_json_path = b_jpg_path.replace('.jpg', '_keypoints.json').replace(
        'img/', 'img_keypoint_json/')

    # a_parsing_tensor = get_parsing_tensor(a_parsing_path)
    # b_parsing_tensor = get_parsing_tensor(b_parsing_path)
    a_parsing_tensor = get_parsing_label_tensor(a_parsing_path, opt)
    b_parsing_tensor = get_parsing_label_tensor(b_parsing_path, opt)

    b_label_tensor, b_label_show_tensor, _ = get_label_tensor(
        b_json_path, b_jpg_path, opt)

    input_dict = {
            'b_label_tensor': b_label_tensor, \
            'a_parsing_tensor': a_parsing_tensor, \
            'b_parsing_tensor': b_parsing_tensor, \
            'b_label_show_tensor': b_label_show_tensor}

    # input_tensors = torch.cat((a_parsing_tensor, b_parsing_tensor, b_label_tensor), dim=0)
    # input_var = Variable(input_tensors[None, :, :, :].type(torch.cuda.FloatTensor))  ##torch.FloatTensor of size (1,34,256,256)
    # pdb.set_trace()
    model.eval()
    if opt.isTrain:
        fake_b_parsing = model.module.inference(input_dict)
    else:
        fake_b_parsing = model.inference(input_var)

    return a_parsing_tensor, b_parsing_tensor, fake_b_parsing, b_label_show_tensor
Esempio n. 4
0
def generate_fake_B(a_image_tensor, b_image_tensor, b_label_tensor,
                    a_parsing_tensor):
    ##### stage I #################
    input_1_tensor = torch.cat([a_parsing_tensor, b_label_tensor], dim=1)
    input_1_var = Variable(input_1_tensor.type(torch.cuda.FloatTensor))
    model_1.eval()
    fake_b_parsing = model_1.inference_2(input_1_var)

    a_parsing_tensor_RGB_numpy = util.parsing2im(
        util.label_2_onhot(a_parsing_tensor[0],
                           parsing_label_nc=opt.parsing_label_nc))
    fake_b_parsing_RGB_numpy = util.parsing2im(fake_b_parsing.data[0])
    fake_b_parsing_label = util.parsing_2_onechannel(fake_b_parsing.data[0])

    a_parsing_RGB_path = './a_parsing_RGB.png'
    fake_b_parsing_RGB_path = './fake_b_parsing_RGB.png'
    fake_b_parsing_label_path = './fake_b_parsing_label.png'
    util.save_image(a_parsing_tensor_RGB_numpy, a_parsing_RGB_path)
    util.save_image(fake_b_parsing_RGB_numpy, fake_b_parsing_RGB_path)
    cv.imwrite(fake_b_parsing_label_path, fake_b_parsing_label)

    ##### GEO ######################

    theta_json = generate_theta(a_parsing_RGB_path, fake_b_parsing_RGB_path,
                                geo)
    theta_aff_tensor, theta_tps_tensor, theta_aff_tps_tensor = get_thetas_affgrid_tensor_by_json(
        affTnf, tpsTnf, theta_json)
    theta_aff_tensor = theta_aff_tensor.unsqueeze_(0)
    theta_tps_tensor = theta_tps_tensor.unsqueeze_(0)
    theta_aff_tps_tensor = theta_aff_tps_tensor.unsqueeze_(0)

    #### stage II #################
    fake_b_parsing_label_tensor = get_parsing_label_tensor(
        fake_b_parsing_label_path, opt)
    fake_b_parsing_label_tensor = fake_b_parsing_label_tensor.unsqueeze_(0)

    input_2_tensor = torch.cat([a_image_tensor, b_image_tensor, b_label_tensor, a_parsing_tensor, fake_b_parsing_label_tensor, \
         theta_aff_tensor, theta_tps_tensor, theta_aff_tps_tensor], dim=1)
    input_2_var = Variable(input_2_tensor.type(torch.cuda.FloatTensor))
    model_2.eval()
    fake_b = model_2.inference(input_2_var)

    return fake_b, fake_b_parsing_label_tensor
Esempio n. 5
0
def main():
    web_dir = os.path.join(
        opt.results_dir, opt.name,
        '%s_%s_%s' % (opt.phase, opt.which_epoch, "I_and_II"))
    webpage = html.HTML(
        web_dir, 'Experiment = %s, Phase = %s, Epoch = %s' %
        (opt.name, opt.phase, opt.which_epoch))

    for i, data in enumerate(dataset):
        if i >= opt.how_many:
            break

        a_image_tensor = data['a_image_tensor']  # 3
        b_image_tensor = data['b_image_tensor']  # 3
        b_label_tensor = data['b_label_tensor']  # 18
        a_parsing_tensor = data['a_parsing_tensor']  # 1
        b_label_show_tensor = data['b_label_show_tensor']
        a_jpg_path = data['a_jpg_path']
        b_jpg_path = data['b_jpg_path']

        ##### stage I #################
        input_1_tensor = torch.cat([a_parsing_tensor, b_label_tensor], dim=1)
        input_1_var = Variable(input_1_tensor.type(torch.cuda.FloatTensor))
        model_1.eval()
        fake_b_parsing = model_1.inference_2(input_1_var)

        a_parsing_tensor_RGB_numpy = util.parsing2im(
            util.label_2_onhot(a_parsing_tensor[0],
                               parsing_label_nc=opt.parsing_label_nc))
        fake_b_parsing_RGB_numpy = util.parsing2im(fake_b_parsing.data[0])
        fake_b_parsing_label = util.parsing_2_onechannel(
            fake_b_parsing.data[0])

        a_parsing_RGB_path = './a_parsing_RGB.png'
        fake_b_parsing_RGB_path = './fake_b_parsing_RGB.png'
        fake_b_parsing_label_path = './fake_b_parsing_label.png'
        util.save_image(a_parsing_tensor_RGB_numpy, a_parsing_RGB_path)
        util.save_image(fake_b_parsing_RGB_numpy, fake_b_parsing_RGB_path)
        cv.imwrite(fake_b_parsing_label_path, fake_b_parsing_label)

        ##### GEO ######################

        theta_json = generate_theta(a_parsing_RGB_path,
                                    fake_b_parsing_RGB_path, geo)
        theta_aff_tensor, theta_tps_tensor, theta_aff_tps_tensor = get_thetas_affgrid_tensor_by_json(
            affTnf, tpsTnf, theta_json)
        theta_aff_tensor = theta_aff_tensor.unsqueeze_(0)
        theta_tps_tensor = theta_tps_tensor.unsqueeze_(0)
        theta_aff_tps_tensor = theta_aff_tps_tensor.unsqueeze_(0)

        #### stage II #################
        fake_b_parsing_label_tensor = get_parsing_label_tensor(
            fake_b_parsing_label_path, opt)
        fake_b_parsing_label_tensor = fake_b_parsing_label_tensor.unsqueeze_(0)

        input_2_tensor = torch.cat([a_image_tensor, b_image_tensor, b_label_tensor, a_parsing_tensor, fake_b_parsing_label_tensor, \
                                    theta_aff_tensor, theta_tps_tensor, theta_aff_tps_tensor], dim=1)
        input_2_var = Variable(input_2_tensor.type(torch.cuda.FloatTensor))
        model_2.eval()
        fake_b = model_2.inference(input_2_var)

        a_parsing_rgb_tensor = parsingim_2_tensor(
            a_parsing_tensor[0],
            opt=opt,
            parsing_label_nc=opt.parsing_label_nc)
        b_parsing_rgb_tensor = parsingim_2_tensor(
            fake_b_parsing_label_tensor[0],
            opt=opt,
            parsing_label_nc=opt.parsing_label_nc)

        show_image_tensor_1 = torch.cat(
            (a_image_tensor, b_label_show_tensor, b_image_tensor), dim=3)
        show_image_tensor_2 = torch.cat(
            (a_parsing_rgb_tensor, b_parsing_rgb_tensor,
             fake_b.data[0:1, :, :, :].cpu()),
            dim=3)
        show_image_tensor = torch.cat(
            (show_image_tensor_1[0:1, :, :, :], show_image_tensor_2), dim=2)
        test_list = [('a-b-fake_b', tensor2im(show_image_tensor[0])),
                     ('fake_image', util.tensor2im(fake_b.data[0])),
                     ('b_image', util.tensor2im(b_image_tensor[0]))]

        ### save image
        visuals = OrderedDict(test_list)
        visualizer.save_images(webpage, visuals, a_jpg_path[0], b_jpg_path[0])

        if i % 1 == 0:
            print('[%s]process image... %s' % (i, a_jpg_path[0]))

    webpage.save()

    image_dir = webpage.get_image_dir()
    print image_dir