(
args,
curr_epoch,
model,
accelerator,
dataset_loader,
logout=print,
curr_train_iter=-1,
)
| 26 | |
| 27 | @torch.no_grad() |
| 28 | def evaluate( |
| 29 | args, |
| 30 | curr_epoch, |
| 31 | model, |
| 32 | accelerator, |
| 33 | dataset_loader, |
| 34 | logout=print, |
| 35 | curr_train_iter=-1, |
| 36 | ): |
| 37 | |
| 38 | net_device = next(model.parameters()).device |
| 39 | num_batches = len(dataset_loader) |
| 40 | |
| 41 | time_delta = SmoothedValue(window_size=10) |
| 42 | |
| 43 | storage_dir = os.path.join(args.checkpoint_dir, 'sampled') |
| 44 | if accelerator.is_main_process: |
| 45 | os.makedirs(storage_dir, exist_ok = True) |
| 46 | |
| 47 | model.eval() |
| 48 | accelerator.wait_for_everyone() |
| 49 | |
| 50 | # do sampling |
| 51 | curr_time = time.time() |
| 52 | |
| 53 | set_seed(accelerator.process_index) |
| 54 | |
| 55 | for sample_round in tqdm.tqdm(range(args.sample_rounds)): |
| 56 | |
| 57 | outputs = model(None, num_return_sequences=args.batchsize_per_gpu, is_eval=True, is_generate=True) |
| 58 | |
| 59 | batch_size = outputs['recon_faces'].shape[0] |
| 60 | generated_faces = outputs["recon_faces"] |
| 61 | |
| 62 | for batch_id in range(batch_size): |
| 63 | process_info = f'{accelerator.process_index:04d}' |
| 64 | sample_info = f'{sample_round:04d}' |
| 65 | batch_sample_info = f'{batch_id:04d}' |
| 66 | sample_id = '_'.join( |
| 67 | [ |
| 68 | process_info, |
| 69 | sample_info, |
| 70 | batch_sample_info |
| 71 | ] |
| 72 | ) |
| 73 | process_mesh( |
| 74 | generated_faces[batch_id], |
| 75 | os.path.join(storage_dir, f'{sample_id}_generated.ply') |
| 76 | ) |
| 77 | |
| 78 | # Memory intensive as it gathers point cloud GT tensor across all ranks |
| 79 | time_delta.update(time.time() - curr_time) |
| 80 | accelerator.wait_for_everyone() |
| 81 | |
| 82 | return {}, {} |
nothing calls this directly
no test coverage detected