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)))))
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)))))
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)))))