|
1 | 1 | import torch |
2 | | -from torchbench.image_classification import ImageNet |
| 2 | +from sotabencheval.image_classification import ImageNetEvaluator |
| 3 | +from sotabencheval.utils import is_server |
3 | 4 | from timm import create_model |
4 | | -from timm.data import resolve_data_config, create_transform |
5 | | -from timm.models import TestTimePoolHead |
| 5 | +from timm.data import resolve_data_config, create_loader, DatasetTar |
| 6 | +from timm.models import apply_test_time_pool |
| 7 | +from tqdm import tqdm |
6 | 8 | import os |
7 | 9 |
|
8 | 10 | NUM_GPU = 1 |
@@ -148,6 +150,10 @@ def _entry(model_name, paper_model_name, paper_arxiv_id, batch_size=BATCH_SIZE, |
148 | 150 | _entry('ese_vovnet19b_dw', 'VoVNet-19-DW-V2', '1911.06667'), |
149 | 151 | _entry('ese_vovnet39b', 'VoVNet-39-V2', '1911.06667'), |
150 | 152 |
|
| 153 | + _entry('cspresnet50', 'CSPResNet-50', '1911.11929'), |
| 154 | + _entry('cspresnext50', 'CSPResNeXt-50', '1911.11929'), |
| 155 | + _entry('cspdarknet53', 'CSPDarkNet-53', '1911.11929'), |
| 156 | + |
151 | 157 | _entry('tf_efficientnet_b0', 'EfficientNet-B0 (AutoAugment)', '1905.11946', |
152 | 158 | model_desc='Ported from official Google AI Tensorflow weights'), |
153 | 159 | _entry('tf_efficientnet_b1', 'EfficientNet-B1 (AutoAugment)', '1905.11946', |
@@ -448,34 +454,81 @@ def _entry(model_name, paper_model_name, paper_arxiv_id, batch_size=BATCH_SIZE, |
448 | 454 | _entry('regnety_160', 'RegNetY-16GF', '2003.13678'), |
449 | 455 | _entry('regnety_320', 'RegNetY-32GF', '2003.13678', batch_size=BATCH_SIZE // 2), |
450 | 456 |
|
| 457 | + _entry('rexnet_100', 'ReXNet-1.0x', '2007.00992'), |
| 458 | + _entry('rexnet_130', 'ReXNet-1.3x', '2007.00992'), |
| 459 | + _entry('rexnet_150', 'ReXNet-1.5x', '2007.00992'), |
| 460 | + _entry('rexnet_200', 'ReXNet-2.0x', '2007.00992'), |
451 | 461 | ] |
452 | 462 |
|
| 463 | +if is_server(): |
| 464 | + DATA_ROOT = './.data/vision/imagenet' |
| 465 | +else: |
| 466 | + # local settings |
| 467 | + DATA_ROOT = './' |
| 468 | +DATA_FILENAME = 'ILSVRC2012_img_val.tar' |
| 469 | +TAR_PATH = os.path.join(DATA_ROOT, DATA_FILENAME) |
| 470 | + |
453 | 471 | for m in model_list: |
454 | 472 | model_name = m['model'] |
455 | 473 | # create model from name |
456 | 474 | model = create_model(model_name, pretrained=True) |
457 | 475 | param_count = sum([m.numel() for m in model.parameters()]) |
458 | 476 | print('Model %s, %s created. Param count: %d' % (model_name, m['paper_model_name'], param_count)) |
459 | 477 |
|
| 478 | + dataset = DatasetTar(TAR_PATH) |
| 479 | + filenames = [os.path.splitext(f)[0] for f in dataset.filenames()] |
| 480 | + |
460 | 481 | # get appropriate transform for model's default pretrained config |
461 | 482 | data_config = resolve_data_config(m['args'], model=model, verbose=True) |
| 483 | + test_time_pool = False |
462 | 484 | if m['ttp']: |
463 | | - model = TestTimePoolHead(model, model.default_cfg['pool_size']) |
| 485 | + model, test_time_pool = apply_test_time_pool(model, data_config) |
464 | 486 | data_config['crop_pct'] = 1.0 |
465 | | - input_transform = create_transform(**data_config) |
466 | 487 |
|
467 | | - # Run the benchmark |
468 | | - ImageNet.benchmark( |
469 | | - model=model, |
470 | | - model_description=m.get('model_description', None), |
471 | | - paper_model_name=m['paper_model_name'], |
| 488 | + batch_size = m['batch_size'] |
| 489 | + loader = create_loader( |
| 490 | + dataset, |
| 491 | + input_size=data_config['input_size'], |
| 492 | + batch_size=batch_size, |
| 493 | + use_prefetcher=True, |
| 494 | + interpolation=data_config['interpolation'], |
| 495 | + mean=data_config['mean'], |
| 496 | + std=data_config['std'], |
| 497 | + num_workers=6, |
| 498 | + crop_pct=data_config['crop_pct'], |
| 499 | + pin_memory=True) |
| 500 | + |
| 501 | + evaluator = ImageNetEvaluator( |
| 502 | + root=DATA_ROOT, |
| 503 | + model_name=m['paper_model_name'], |
472 | 504 | paper_arxiv_id=m['paper_arxiv_id'], |
473 | | - input_transform=input_transform, |
474 | | - batch_size=m['batch_size'], |
475 | | - num_gpu=NUM_GPU, |
476 | | - data_root=os.environ.get('IMAGENET_DIR', './.data/vision/imagenet') |
| 505 | + model_description=m.get('model_description', None), |
477 | 506 | ) |
478 | | - |
| 507 | + model.cuda() |
| 508 | + model.eval() |
| 509 | + with torch.no_grad(): |
| 510 | + # warmup |
| 511 | + input = torch.randn((batch_size,) + data_config['input_size']).cuda() |
| 512 | + model(input) |
| 513 | + |
| 514 | + bar = tqdm(desc="Evaluation", mininterval=5, total=50000) |
| 515 | + evaluator.reset_time() |
| 516 | + sample_count = 0 |
| 517 | + for input, target in loader: |
| 518 | + output = model(input) |
| 519 | + num_samples = len(output) |
| 520 | + image_ids = [filenames[i] for i in range(sample_count, sample_count + num_samples)] |
| 521 | + output = output.cpu().numpy() |
| 522 | + evaluator.add(dict(zip(image_ids, list(output)))) |
| 523 | + sample_count += num_samples |
| 524 | + bar.update(num_samples) |
| 525 | + bar.close() |
| 526 | + |
| 527 | + evaluator.save() |
| 528 | + for k, v in evaluator.results.items(): |
| 529 | + print(k, v) |
| 530 | + for k, v in evaluator.speed_mem_metrics.items(): |
| 531 | + print(k, v) |
479 | 532 | torch.cuda.empty_cache() |
480 | 533 |
|
481 | 534 |
|
0 commit comments