def BSN_Train_TEM(opt): writer = SummaryWriter() model = TEM(opt) model = torch.nn.DataParallel(model, device_ids=GPU_IDs).cuda() optimizer = optim.Adam(model.parameters(), lr=opt["tem_training_lr"], weight_decay=opt["tem_weight_decay"]) train_loader = torch.utils.data.DataLoader( VideoDataSet(opt, subset="train"), batch_size=model.module.batch_size, shuffle=True, num_workers=8, pin_memory=True, drop_last=True) test_loader = torch.utils.data.DataLoader( VideoDataSet(opt, subset="validation"), batch_size=model.module.batch_size, shuffle=False, num_workers=8, pin_memory=True, drop_last=True) scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=opt["tem_step_size"], gamma=opt["tem_step_gamma"]) for epoch in range(opt["tem_epoch"]): scheduler.step() train_TEM(train_loader, model, optimizer, epoch, writer, opt) test_TEM(test_loader, model, epoch, writer, opt) writer.close()
def BSN_Train_TEM(opt): writer = SummaryWriter() model = TEM(opt) model = torch.nn.DataParallel(model, device_ids=[0]).cuda() state_dict = torch.load('checkpoint/tem_best.pth.tar')['state_dict'] model.load_state_dict(state_dict) optimizer = optim.Adam(model.parameters(), lr=opt["tem_training_lr"], weight_decay=opt["tem_weight_decay"]) train_loader = torch.utils.data.DataLoader( VideoDataSet(opt, subset="train"), batch_size=model.module.batch_size, shuffle=True, num_workers=4, pin_memory=True, drop_last=True) test_loader = torch.utils.data.DataLoader( VideoDataSet(opt, subset="validation"), batch_size=model.module.batch_size, shuffle=False, num_workers=4, pin_memory=True, drop_last=True) scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=opt["tem_step_size"], gamma=opt["tem_step_gamma"]) for epoch in range(opt["tem_epoch"]): train_TEM(train_loader, model, optimizer, epoch, writer, opt) scheduler.step() if (epoch + 1) % 3 == 0: test_TEM(test_loader, model, epoch, writer, opt) writer.close()
def BSN_Train_TEM(opt): global_step = 0 epoch = 0 if opt['do_representation']: model = TEM(opt) optimizer = optim.Adam(model.parameters(), lr=opt["tem_training_lr"], weight_decay=opt["tem_weight_decay"]) global_step, epoch = _maybe_load_checkpoint( model, optimizer, global_step, epoch, os.path.join(opt["checkpoint_path"], opt['name'])) if opt['representation_checkpoint']: # print(model.representation_model.backbone.inception_5b_3x3.weight[0][0]) if opt['do_random_model']: print('DOING RANDOM MDOEL!!!') else: print('DOING Pretrianed modelll!!!') partial_load(opt['representation_checkpoint'], model) # print(model.representation_model.backbone.inception_5b_3x3.weight[0][0]) if not opt['no_freeze']: for param in model.representation_model.parameters(): param.requires_grad = False print(len([p for p in model.representation_model.parameters()])) else: model = TEM(opt) optimizer = optim.Adam(model.parameters(), lr=opt["tem_training_lr"], weight_decay=opt["tem_weight_decay"]) global_step, epoch = _maybe_load_checkpoint( model, optimizer, global_step, epoch, os.path.join(opt["checkpoint_path"], opt['name'])) model = torch.nn.DataParallel(model).cuda() # summary(model, (2, 3, 224, 224)) print(' Total params: %.2fM' % (sum(p.numel() for p in model.parameters()) / 1000000.0)) if opt['dataset'] == 'gymnastics': # default image_dir is '/checkpoint/cinjon/spaceofmotion/sep052019/rawframes.426x240.12' img_loading_func = get_img_loader(opt) train_data_set = GymnasticsImages(opt, subset='Train', img_loading_func=img_loading_func, image_dir=opt['gym_image_dir'], video_info_path=os.path.join( opt['video_info'], 'Train_Annotation.csv')) train_sampler = GymnasticsSampler(train_data_set, opt['sampler_mode']) test_data_set = GymnasticsImages(opt, subset="Val", img_loading_func=img_loading_func, image_dir=opt['gym_image_dir'], video_info_path=os.path.join( opt['video_info'], 'Val_Annotation.csv')) elif opt['dataset'] == 'gymnasticsfeatures': # feature_dirs should roughly look like: # /checkpoint/cinjon/spaceofmotion/sep052019/tsn.1024.426x240.12.no-oversample/csv/rgb,/checkpoint/cinjon/spaceofmotion/sep052019/tsn.1024.426x240.12.no-oversample/csv/flow feature_dirs = opt['feature_dirs'].split(',') train_data_set = GymnasticsFeatures(opt, subset='Train', feature_dirs=feature_dirs, video_info_path=os.path.join( opt['video_info'], 'Train_Annotation.csv')) test_data_set = GymnasticsFeatures(opt, subset='Val', feature_dirs=feature_dirs, video_info_path=os.path.join( opt['video_info'], 'Val_Annotation.csv')) train_sampler = None elif opt['dataset'] == 'thumosfeatures': feature_dirs = opt['feature_dirs'].split(',') train_data_set = ThumosFeatures(opt, subset='Val', feature_dirs=feature_dirs) test_data_set = ThumosFeatures(opt, subset="Test", feature_dirs=feature_dirs) train_sampler = None elif opt['dataset'] == 'thumosimages': img_loading_func = get_img_loader(opt) train_data_set = ThumosImages( opt, subset='Val', img_loading_func=img_loading_func, image_dir= '/checkpoint/cinjon/thumos/rawframes.TH14_validation_tal.30', video_info_path=os.path.join(opt['video_info'], 'Val_Annotation.csv')) test_data_set = ThumosImages( opt, subset='Test', img_loading_func=img_loading_func, image_dir='/checkpoint/cinjon/thumos/rawframes.TH14_test_tal.30', video_info_path=os.path.join(opt['video_info'], 'Test_Annotation.csv')) train_sampler = None elif opt['dataset'] == 'activitynet': train_sampler = None representation_module = opt['representation_module'] train_transforms = get_video_transforms(representation_module, opt['do_augment']) test_transforms = get_video_transforms(representation_module, False) train_data_set = VideoDataset(opt, train_transforms, subset='train', fraction=0.3) # We use val because we don't have annotations for test. test_data_set = VideoDataset(opt, test_transforms, subset='val', fraction=0.3) print('train_loader / val_loader sizes: ', len(train_data_set), len(test_data_set)) train_loader = torch.utils.data.DataLoader( train_data_set, batch_size=model.module.batch_size, shuffle=False if train_sampler else True, sampler=train_sampler, num_workers=opt['data_workers'], pin_memory=True, drop_last=False) test_loader = torch.utils.data.DataLoader( test_data_set, batch_size=model.module.batch_size, shuffle=False, num_workers=opt['data_workers'], pin_memory=True, drop_last=False) # test_loader = None milestones = [int(k) for k in opt['tem_lr_milestones'].split(',')] scheduler = torch.optim.lr_scheduler.MultiStepLR( optimizer, milestones=milestones, gamma=opt['tem_step_gamma']) if opt['log_to_comet']: comet_exp = CometExperiment(api_key="hIXq6lDzWzz24zgKv7RYz6blo", project_name="bsn", workspace="cinjon", auto_metric_logging=True, auto_output_logging=None, auto_param_logging=False) elif opt['local_comet_dir']: comet_exp = OfflineExperiment(api_key="hIXq6lDzWzz24zgKv7RYz6blo", project_name="bsn", workspace="cinjon", auto_metric_logging=True, auto_output_logging=None, auto_param_logging=False, offline_directory=opt['local_comet_dir']) else: comet_exp = None if comet_exp: comet_exp.log_parameters(opt) comet_exp.set_name(opt['name']) # test_TEM(test_loader, model, optimizer, 0, 0, comet_exp, opt) for epoch in range(epoch + 1, opt["tem_epoch"] + 1): global_step = train_TEM(train_loader, model, optimizer, epoch, global_step, comet_exp, opt) test_TEM(test_loader, model, optimizer, epoch, global_step, comet_exp, opt) if opt['dataset'] == 'activitynet': test_loader.dataset._subset_dataset(.3) train_loader.dataset._subset_dataset(.3) scheduler.step()