Run validation for one epoch :val_loader: data loader for validation :net: the network :criterion: loss fn :optimizer: optimizer :epoch: current epoch :calc_metrics: calculate validation score :dump_assets: dump attention prediction(s) images :dump_all_images: d
(val_loader, net, criterion, optim, epoch,
calc_metrics=True,
dump_assets=False,
dump_all_images=False)
| 534 | |
| 535 | |
| 536 | def validate(val_loader, net, criterion, optim, epoch, |
| 537 | calc_metrics=True, |
| 538 | dump_assets=False, |
| 539 | dump_all_images=False): |
| 540 | """ |
| 541 | Run validation for one epoch |
| 542 | |
| 543 | :val_loader: data loader for validation |
| 544 | :net: the network |
| 545 | :criterion: loss fn |
| 546 | :optimizer: optimizer |
| 547 | :epoch: current epoch |
| 548 | :calc_metrics: calculate validation score |
| 549 | :dump_assets: dump attention prediction(s) images |
| 550 | :dump_all_images: dump all images, not just N |
| 551 | """ |
| 552 | dumper = ImageDumper(val_len=len(val_loader), |
| 553 | dump_all_images=dump_all_images, |
| 554 | dump_assets=dump_assets, |
| 555 | dump_for_auto_labelling=args.dump_for_auto_labelling, |
| 556 | dump_for_submission=args.dump_for_submission) |
| 557 | |
| 558 | net.eval() |
| 559 | val_loss = AverageMeter() |
| 560 | iou_acc = 0 |
| 561 | |
| 562 | for val_idx, data in enumerate(val_loader): |
| 563 | input_images, labels, img_names, _ = data |
| 564 | if args.dump_for_auto_labelling or args.dump_for_submission: |
| 565 | submit_fn = '{}.png'.format(img_names[0]) |
| 566 | if val_idx % 20 == 0: |
| 567 | logx.msg(f'validating[Iter: {val_idx + 1} / {len(val_loader)}]') |
| 568 | if os.path.exists(os.path.join(dumper.save_dir, submit_fn)): |
| 569 | continue |
| 570 | |
| 571 | # Run network |
| 572 | assets, _iou_acc = \ |
| 573 | eval_minibatch(data, net, criterion, val_loss, calc_metrics, |
| 574 | args, val_idx) |
| 575 | |
| 576 | iou_acc += _iou_acc |
| 577 | |
| 578 | input_images, labels, img_names, _ = data |
| 579 | |
| 580 | dumper.dump({'gt_images': labels, |
| 581 | 'input_images': input_images, |
| 582 | 'img_names': img_names, |
| 583 | 'assets': assets}, val_idx) |
| 584 | |
| 585 | if val_idx > 5 and args.test_mode: |
| 586 | break |
| 587 | |
| 588 | if val_idx % 20 == 0: |
| 589 | logx.msg(f'validating[Iter: {val_idx + 1} / {len(val_loader)}]') |
| 590 | |
| 591 | was_best = False |
| 592 | if calc_metrics: |
| 593 | was_best = eval_metrics(iou_acc, args, net, optim, val_loss, epoch) |
no test coverage detected