in eval-action-recg-linear.py [0:0]
def main_worker(gpu, ngpus, fold, args, cfg):
args.gpu = gpu
args.world_size = ngpus
# Prepare folder and logger
eval_dir, model_cfg, logger = eval_utils.prepare_environment(args, cfg, fold)
# Model
model, ckp_manager = eval_utils.build_model(model_cfg, cfg, eval_dir, args, logger)
# Optimizer
optimizer, scheduler = main_utils.build_optimizer(model.parameters(), cfg['optimizer'], logger)
# Datasets
train_loader, test_loader, dense_loader = eval_utils.build_dataloaders(
cfg['dataset'], fold, cfg['num_workers'], args.distributed, logger)
################################ Train ################################
start_epoch, end_epoch = 0, cfg['optimizer']['num_epochs']
if (cfg['resume'] or args.test_only) and ckp_manager.checkpoint_exists(last=True):
start_epoch = ckp_manager.restore(model, optimizer, scheduler, restore_last=True)
logger.add_line("Loaded checkpoint '{}' (epoch {})".format(ckp_manager.last_checkpoint_fn(), start_epoch))
if not cfg['test_only']:
logger.add_line("=" * 30 + " Training " + "=" * 30)
for epoch in range(start_epoch, end_epoch):
scheduler.step(epoch=epoch)
if args.distributed:
train_loader.sampler.set_epoch(epoch)
test_loader.sampler.set_epoch(epoch)
logger.add_line('='*30 + ' Epoch {} '.format(epoch) + '='*30)
logger.add_line('LR: {}'.format(scheduler.get_lr()))
run_phase('train', train_loader, model, optimizer, epoch, args, cfg, logger)
run_phase('test', test_loader, model, None, epoch, args, cfg, logger)
ckp_manager.save(model, optimizer, scheduler, epoch)
################################ Eval ################################
logger.add_line('\n' + '=' * 30 + ' Final evaluation ' + '=' * 30)
cfg['dataset']['test']['clips_per_video'] = 25
train_loader, test_loader, dense_loader = eval_utils.build_dataloaders(cfg['dataset'], fold, cfg['num_workers'], args.distributed, logger)
top1_dense, top5_dense = run_phase('test_dense', dense_loader, model, None, end_epoch, args, cfg, logger)
top1, top5 = run_phase('test', test_loader, model, None, end_epoch, args, cfg, logger)
logger.add_line('\n' + '=' * 30 + ' Evaluation done ' + '=' * 30)
for ft in top1:
logger.add_line('')
logger.add_line('[{}] Clip@1: {:6.2f}'.format(ft, top1[ft]))
logger.add_line('[{}] Clip@5: {:6.2f}'.format(ft, top5[ft]))
logger.add_line('[{}] Video@1: {:6.2f}'.format(ft, top1_dense[ft]))
logger.add_line('[{}] Video@5: {:6.2f}'.format(ft, top5_dense[ft]))