Exemple #1
0
def test():
    """
    Function to carry out the testing/validation loop for the Full Network for a single epoch.
    :return: None
    """
    running_recon_loss = 0.0

    model.eval()

    for batch_idx, (vp_diff, vid1, vid2) in enumerate(testloader):
        vp_diff = vp_diff.to(device)
        vid1, vid2 = vid1.to(device), vid2.to(device)
        img1, img2 = get_first_frame(vid1), get_first_frame(vid2)
        img1, img2 = img1.to(device), img2.to(device)

        with torch.no_grad():
            gen_v2, rep_v1 = model(vp_diff=vp_diff, vid1=vid1, img2=img2)

            # save videos
            convert_to_vid(tensor=vid1,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='input')
            convert_to_vid(tensor=vid2,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='input')
            convert_to_vid(tensor=gen_v2,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='output')
            convert_to_vid(tensor=rep_v1[-1],
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='rep')

            # loss
            recon_loss = criterion(gen_v2, vid2)
            # reconstruction losses for videos gen from features and same view
            # recon3_loss = criterion(recon_v1, vid1)
            # recon4_loss = criterion(recon_v2, vid2)
            loss = recon_loss

        running_recon_loss += recon_loss.item()
        if (batch_idx + 1) % 10 == 0:
            print('\tBatch {}/{} Recon Loss:{}'.format(
                batch_idx + 1, len(testloader), "{0:.5f}".format(recon_loss)))

    print('Testing Complete Recon Loss:{}'.format("{0:.5f}".format(
        (running_recon_loss / len(testloader)))))
Exemple #2
0
def test():
    """
    Function to carry out the testing/validation loop for the Full Network for a single epoch.
    :return: None
    """
    running_recon_loss = 0.0
    running_vp_loss = 0.0

    model.eval()

    for batch_idx, (vp_diff, vid1, vid2) in enumerate(testloader):
        vp_diff = vp_diff.type(torch.FloatTensor).to(device)
        vid1, vid2 = vid1.to(device), vid2.to(device)
        img1, img2 = get_first_frame(vid1), get_first_frame(vid2)
        img1, img2 = img1.to(device), img2.to(device)

        with torch.no_grad():
            gen_v2, vp_est, est_kp_v2 = model(vp_diff=vp_diff, vid1=vid1, img2=img2)

            # save videos
            convert_to_vid(tensor=vid1, output_dir=output_video_dir,
                           batch_num=batch_idx + 1, view=1, item_type='input')
            convert_to_vid(tensor=vid2, output_dir=output_video_dir,
                           batch_num=batch_idx + 1, view=2, item_type='input')
            convert_to_vid(tensor=gen_v2, output_dir=output_video_dir,
                           batch_num=batch_idx + 1, view=2, item_type='output')
            convert_to_vid(tensor=est_kp_v2, output_dir=output_video_dir,
                           batch_num=batch_idx + 1, view=2, item_type='kp')
            export_vps(vp_gt=vp_diff, vp_est=vp_est, output_dir=output_video_dir, batch_num=batch_idx + 1)

            # loss
            recon_loss = criterion(gen_v2, vid2)
            vp_loss = criterion(vp_est, vp_diff)
            loss = recon_loss + vp_loss

        running_recon_loss += recon_loss.item()
        running_vp_loss += vp_loss.item()
        if (batch_idx + 1) % 10 == 0:
            print('\tBatch {}/{} ReconLoss:{} VPLoss:{}'.format(
                batch_idx + 1,
                len(testloader),
                "{0:.5f}".format(recon_loss),
                "{0:.5f}".format(vp_loss)))

    print('Testing Complete ReconLoss:{} VPLoss:{}'.format(
        "{0:.5f}".format((running_recon_loss / len(testloader))),
        "{0:.5f}".format((running_vp_loss / len(testloader)))))
Exemple #3
0
def test():
    """
    Function to carry out the testing/validation loop for the Full Network for a single epoch.
    :return: None
    """
    running_total_loss = 0.0
    running_con1_loss = 0.0
    running_con2_loss = 0.0
    running_con3_loss = 0.0
    running_con4_loss = 0.0
    running_recon1_loss = 0.0
    running_recon2_loss = 0.0

    model.eval()

    for batch_idx, (vp_diff, vid1, vid2) in enumerate(testloader):
        vp_diff = vp_diff.to(device)
        vid1, vid2 = vid1.to(device), vid2.to(device)
        img1, img2 = get_first_frame(vid1), get_first_frame(vid2)
        img1, img2 = img1.to(device), img2.to(device)

        with torch.no_grad():
            gen_v1, gen_v2, rep_v1, rep_v2, rep_v1_est, rep_v2_est, kp_v1, kp_v2, kp_v1_est, kp_v2_est = model(
                vp_diff=vp_diff, vid1=vid1, vid2=vid2, img1=img1, img2=img2)

            # save videos
            convert_to_vid(tensor=vid1,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='input')
            convert_to_vid(tensor=vid2,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='input')
            convert_to_vid(tensor=gen_v1,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='output')
            convert_to_vid(tensor=gen_v2,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='output')

            convert_to_vid(tensor=rep_v1,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='rep')
            convert_to_vid(tensor=rep_v2,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='rep')
            convert_to_vid(tensor=rep_v1_est,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='rep_est')
            convert_to_vid(tensor=rep_v2_est,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='rep_est')

            convert_to_vid(tensor=kp_v1,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='kp')
            convert_to_vid(tensor=kp_v2,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='kp')
            convert_to_vid(tensor=kp_v1_est,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=1,
                           item_type='kp_est')
            convert_to_vid(tensor=kp_v2_est,
                           output_dir=output_video_dir,
                           batch_num=batch_idx + 1,
                           view=2,
                           item_type='kp_est')

            # loss
            # consistency losses between video features
            con1_loss = criterion(rep_v1, rep_v1_est)
            con2_loss = criterion(rep_v2, rep_v2_est)
            con3_loss = criterion(kp_v1, kp_v1_est)
            con4_loss = criterion(kp_v2, kp_v2_est)
            # reconstruction losses for videos gen from new view
            recon1_loss = criterion(gen_v1, vid1)
            recon2_loss = criterion(gen_v2, vid2)
            loss = CON_LOSS_W * (con1_loss + con2_loss + con3_loss +
                                 con4_loss) + recon1_loss + recon2_loss

        running_total_loss += loss.item()
        running_con1_loss += con1_loss.item()
        running_con2_loss += con2_loss.item()
        running_con3_loss += con3_loss.item()
        running_con4_loss += con4_loss.item()
        running_recon1_loss += recon1_loss.item()
        running_recon2_loss += recon2_loss.item()
        if (batch_idx + 1) % 10 == 0:
            print(
                '\tBatch {}/{} Loss:{} con1:{} con2:{} con3:{} con4:{} recon1:{} recon2:{}'
                .format(batch_idx + 1, len(testloader), "{0:.5f}".format(loss),
                        "{0:.5f}".format(con1_loss),
                        "{0:.5f}".format(con2_loss),
                        "{0:.5f}".format(con3_loss),
                        "{0:.5f}".format(con4_loss),
                        "{0:.5f}".format(recon1_loss),
                        "{0:.5f}".format(recon2_loss)))

    print(
        'Testing Complete Loss:{} con1:{} con2:{} con3:{} con4:{} recon1:{} recon2:{}'
        .format("{0:.5f}".format(
            (running_total_loss / len(testloader))), "{0:.5f}".format(
                (running_con1_loss / len(testloader))), "{0:.5f}".format(
                    (running_con2_loss / len(testloader))), "{0:.5f}".format(
                        (running_con3_loss / len(testloader))),
                "{0:.5f}".format((running_con4_loss / len(testloader))),
                "{0:.5f}".format(
                    (running_recon1_loss / len(testloader))), "{0:.5f}".format(
                        (running_recon2_loss / len(testloader)))))