board_train.add_scalar('D/loss_D', loss_D.item(), step) print( "step={}, loss_G={:.5f}, loss_l1={:.5f}, loss_vgg={:.5f}". format(step, loss_G.item(), loss_l1.item(), loss_vgg.item(), loss_adv.item())) print( "step={}, loss_D={:.5f}, loss_D_real={:.5f}, loss_D_fake={:.5f}" .format(step, loss_D.item(), loss_D_real.item(), loss_D_fake.item())) # visual images visuals = [ [pose_parse_onehot_vis, pose_gt, output], ] board_add_images(board_train, 'train', visuals, step + 1) #==================================================== # valid データでの処理 #==================================================== if (step % args.n_display_valid_step == 0): loss_G_total, loss_l1_total, loss_vgg_total, loss_adv_total = 0, 0, 0, 0 loss_D_total, loss_D_real_total, loss_D_fake_total = 0, 0, 0 n_valid_loop = 0 for iter, inputs in enumerate(tqdm(dloader_valid, desc="valid")): model_G.eval() model_D.eval() # 一番最後のミニバッチループで、バッチサイズに満たない場合は無視する(後の計算で、shape の不一致をおこすため) if inputs["pose_parse_onehot"].shape[
loss_rec.item())) print( "step={}, loss_D={:.5f}, loss_D_real={:.5f}, loss_D_fake={:.5f}" .format(step, loss_D.item(), loss_D_real.item(), loss_D_fake.item())) # visual images """ visuals = [ [ noize_image_z, image_gt, output ], ] """ visuals = [ [image_gt, output], ] board_add_images(board_train, 'train', visuals, step + 1) for i in range(len(output_list)): visuals = [ [image_gt_list[i], output_list[i]], ] board_add_images(board_train, 'train_progress_{}'.format(i), visuals, step + 1) #==================================================== # valid データでの処理 #==================================================== """ if( step != 0 and ( step % args.n_display_valid_step == 0 ) ): loss_G_total, loss_l1_total, loss_vgg_total, loss_adv_total = 0, 0, 0, 0
image_name = inputs["image_name"] image = inputs["image"].to(device) if (args.debug and n_print > 0): print("image.shape : ", image.shape) #---------------------------------------------------- # 生成器の推論処理 #---------------------------------------------------- with torch.no_grad(): output = model_G(image) if (args.debug and n_print > 0): print("output.shape : ", output.shape) #==================================================== # 推論結果の保存 #==================================================== save_image_w_norm( output, os.path.join(args.results_dir, args.exper_name, "output", image_name[0])) # tensorboard visuals = [ [image, output], ] board_add_images(board_test, 'test', visuals, step + 1) n_print -= 1 if (step >= args.n_samplings): break
materials=materials) * 2.0 - 1.0 save_image( mesh_img_tsr.transpose(1, 3).transpose(2, 3), os.path.join(args.results_dir, args.exper_name, "mesh.png")) save_image( mesh_ffd_img_tsr.transpose(1, 3).transpose(2, 3), os.path.join(args.results_dir, args.exper_name, "mesh_ffd.png")) # visual images visuals = [ [ mesh_img_tsr.transpose(1, 3).transpose(2, 3), mesh_ffd_img_tsr.transpose(1, 3).transpose(2, 3) ], ] board_add_images(board_train, 'render_ffd', visuals, step + 1) #----------------------------- # カメラの移動&再レンダリング #----------------------------- camera_dist += 0.0 camera_elev += 0.0 camera_azim += 5.0 rot_matrix, trans_matrix = look_at_view_transform(dist=camera_dist, elev=camera_elev, azim=camera_azim) new_cameras = OpenGLPerspectiveCameras(device=device, R=rot_matrix, T=trans_matrix) # メッシュのレンダリング
mesh_img_tsr[:,1,:,:] = mesh_img_tsr[:,1,:,:] * mesh_img_tsr[:,-1,:,:] mesh_img_tsr[:,2,:,:] = mesh_img_tsr[:,2,:,:] * mesh_img_tsr[:,-1,:,:] mesh_img_tsr = mesh_img_tsr[:,0:3,:,:] mesh_img_tsr = torch.from_numpy( (mesh_img_tsr.detach().cpu().numpy() > 0).astype(np.float32) * 2.0 ).to(device) - 1.0 """ save_image( mesh_img_tsr, os.path.join(args.results_dir, args.exper_name, "mesh_render_light.png")) # visual images visuals = [ [mesh_img_tsr], ] board_add_images(board_train, 'render_light', visuals, step + 1) #----------------------------- # カメラの移動&再レンダリング #----------------------------- camera_dist += 0.1 camera_elev += 5.0 camera_azim += 5.0 rot_matrix, trans_matrix = look_at_view_transform(dist=camera_dist, elev=camera_elev, azim=camera_azim) new_cameras = OpenGLPerspectiveCameras(device=device, R=rot_matrix, T=trans_matrix) # メッシュのレンダリング
output[:, i, :, :].unsqueeze(1) for i in range(args.n_classes // 4 + 1, args.n_classes // 2) ], [ output[:, i, :, :].unsqueeze(1) for i in range( args.n_classes // 2 + 1, args.n_classes // 2 + args.n_classes // 4) ], [ output[:, i, :, :].unsqueeze(1) for i in range( args.n_classes // 2 + args.n_classes // 4 + 1, args.n_classes) ], ] board_add_images(board_train, 'train', visuals, step + 1) # visual deeplab v3+ output visuals = [ [ embedded[:, i, :, :].unsqueeze(1) for i in range(0, args.n_classes // 4) ], [ embedded[:, i, :, :].unsqueeze(1) for i in range(args.n_classes // 4 + 1, args.n_classes // 2) ], [ embedded[:, i, :, :].unsqueeze(1) for i in range( args.n_classes // 2 + 1, args.n_classes // 2 +
"source_mesh_step{}.png".format(step)), "source mesh") mesh_s_img = get_plot3d_mesh_img(mesh_s, "source mesh") mesh_t_img = get_plot3d_mesh_img(mesh_t, "target mesh") mesh_s_new_img = get_plot3d_mesh_img(mesh_s_new, "source mesh") mesh_s_tsr = torchvision.transforms.functional.to_tensor( mesh_s_img).unsqueeze(0) mesh_s_new_tsr = torchvision.transforms.functional.to_tensor( mesh_s_new_img).unsqueeze(0) mesh_t_tsr = torchvision.transforms.functional.to_tensor( mesh_t_img).unsqueeze(0) visuals = [ [mesh_s_tsr, mesh_t_tsr, mesh_s_new_tsr], ] board_add_images(board_train, 'train', visuals, step + 1) step += 1 n_print -= 1 #==================================================== # モデルの保存 #==================================================== if (epoch % args.n_save_epoches == 0): print("saved mesh") # Fetch the verts and faces of the final predicted mesh final_verts, final_faces = mesh_s_new.get_mesh_verts_faces(0) # Scale normalize back to the original target size final_verts = final_verts * scale + center
[image, target, output], ] else: visuals = [ [image, target_rgb, output_vis_rgb], [ output[:, i, :, :].unsqueeze(1) for i in range(0, args.n_classes_target // 2) ], [ output[:, i, :, :].unsqueeze(1) for i in range(args.n_classes_target // 2 + 1, args.n_classes_target) ], ] board_add_images(board_train, 'train', visuals, step + 1) # visual deeplab v3+ output visuals = [ [ embedded[:, i, :, :].unsqueeze(1) for i in range(0, args.n_classes_target // 2) ], [ embedded[:, i, :, :].unsqueeze(1) for i in range(args.n_classes_target // 2 + 1, args.n_classes_target) ], ] board_add_images(board_train, 'train_deeplab_embedded', visuals, step + 1)