|
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