(config, data_loader, model, real_labels, amp_autocast=suppress)
| 537 | |
| 538 | @torch.no_grad() |
| 539 | def validate_real(config, data_loader, model, real_labels, amp_autocast=suppress): |
| 540 | # https://github.com/baaivision/EVA/blob/master/EVA-01/eva/engine_for_finetuning.py#L195 |
| 541 | criterion = torch.nn.CrossEntropyLoss() |
| 542 | model.eval() |
| 543 | |
| 544 | batch_time = AverageMeter() |
| 545 | loss_meter = AverageMeter() |
| 546 | acc1_meter = AverageMeter() |
| 547 | acc5_meter = AverageMeter() |
| 548 | |
| 549 | end = time.time() |
| 550 | amp_type = torch.float16 if config.AMP_TYPE == 'float16' else torch.bfloat16 |
| 551 | for idx, (images, target) in enumerate(data_loader): |
| 552 | images = images.cuda(non_blocking=True) |
| 553 | target = target.cuda(non_blocking=True) |
| 554 | if not obsolete_torch_version(TORCH_VERSION, (1, 9)) and config.AMP_OPT_LEVEL != 'O0': |
| 555 | with amp_autocast(dtype=amp_type): |
| 556 | output = model(images) |
| 557 | else: |
| 558 | with amp_autocast(): |
| 559 | output = model(images) |
| 560 | |
| 561 | # convert 22k to 1k to evaluate |
| 562 | if output.size(-1) == 21841: |
| 563 | convert_file = './meta_data/map22kto1k.txt' |
| 564 | with open(convert_file, 'r') as f: |
| 565 | convert_list = [int(line) for line in f.readlines()] |
| 566 | output = output[:, convert_list] |
| 567 | |
| 568 | real_labels.add_result(output) |
| 569 | |
| 570 | # measure accuracy and record loss |
| 571 | loss = criterion(output, target) |
| 572 | acc1, acc5 = accuracy(output, target, topk=(1, 5)) |
| 573 | |
| 574 | acc1 = reduce_tensor(acc1) |
| 575 | acc5 = reduce_tensor(acc5) |
| 576 | loss = reduce_tensor(loss) |
| 577 | |
| 578 | loss_meter.update(loss.item(), target.size(0)) |
| 579 | acc1_meter.update(acc1.item(), target.size(0)) |
| 580 | acc5_meter.update(acc5.item(), target.size(0)) |
| 581 | |
| 582 | # measure elapsed time |
| 583 | batch_time.update(time.time() - end) |
| 584 | end = time.time() |
| 585 | |
| 586 | if idx % config.PRINT_FREQ == 0: |
| 587 | memory_used = torch.cuda.max_memory_allocated() / (1024.0 * 1024.0) |
| 588 | logger.info(f'Test: [{idx}/{len(data_loader)}]\t' |
| 589 | f'Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t' |
| 590 | f'Loss {loss_meter.val:.4f} ({loss_meter.avg:.4f})\t' |
| 591 | f'Acc@1 {acc1_meter.val:.3f} ({acc1_meter.avg:.3f})\t' |
| 592 | f'Acc@5 {acc5_meter.val:.3f} ({acc5_meter.avg:.3f})\t' |
| 593 | f'Mem {memory_used:.0f}MB') |
| 594 | |
| 595 | # real labels mode replaces topk values at the end |
| 596 | top1a, top5a = real_labels.get_accuracy(k=1), real_labels.get_accuracy(k=5) |
no test coverage detected