def get_model(args): """ Create base model, and wrap it with an optional wrapper, useful for extending models """ model = generic_load(args.arch, args.pretrained, args.pretrained_weights, args) print("arch is ", args.arch) if args.replace_last_layer: print('replacing last layer') model = replace_last_layer(model, args) for module in model.modules(): if args.dropout != 0 and isinstance(module, torch.nn.modules.Dropout): print('setting Dropout p to {}'.format(args.dropout)) module.p = args.dropout wrapper = case_getattr(import_module('models.wrappers.' + args.wrapper), args.wrapper) model = wrapper(model, args) model = set_distributed_backend(model, args) # define loss function criterion = case_getattr( import_module('models.criteria.' + args.criterion), args.criterion) criterion = criterion(args).cuda() return model, criterion
def run(cls, model, criterion, epoch, args): model = ActorObserverClassifierWrapper(model, args) model = set_distributed_backend(model, args) criterion = DefaultCriterion(args) task = cls(model, epoch, args) loader, = get_dataset(args, splits=('val_video', ), dataset=args.actor_observer_classification_task_dataset) return task.validate_video(loader, model, criterion, epoch, args)
def alignment(self, loader, model, epoch, args, task=best_one_sec_moment): timer = Timer() abssec = MedianMeter() abssec0 = MedianMeter() randsec = MedianMeter() model = ActorObserverFC7Wrapper(model, args) model = set_distributed_backend(model, args) # switch to evaluate mode model.eval() def fc7_generator(): for i, (inputs, target, meta) in enumerate(loader): if not args.cpu: target = target.cuda(async=True) first_fc7, third_fc7, w_x, w_y = model(*inputs) timer.tic() if i % args.print_freq == 0: print('Alignment: [{0}/{1}]\t' 'Time {timer.val:.3f} ({timer.avg:.3f})'.format( i, len(loader), timer=timer)) for vid, o1, o2 in zip(meta['id'], first_fc7, third_fc7): yield vid, (o1.cpu().numpy(), o2.cpu().numpy()) for key, grp in groupby(fc7_generator(), key=lambda x: x[0]): print('processing id: {}'.format(key)) _, mat = fc7list2mat(grp) _, _, _, j, gt = task(mat, winsize=3) _, _, _, j0, gt0 = task(mat, winsize=0) _, _, _, jr, gtr = task(np.random.randn(*mat.shape), winsize=3) abssec.update(abs(j - gt)) abssec0.update(abs(j0 - gt0)) randsec.update(abs(jr - gtr)) print(self.name) print(' abs3: {abs3.val:.3f} ({abs3.avg:.3f}) [{abs3.med:.3f}]' ' abs0: {abs0.val:.3f} ({abs0.avg:.3f}) [{abs0.med:.3f}]' '\n' ' absr: {absr.val:.3f} ({absr.avg:.3f}) [{absr.med:.3f}]'. format(abs3=abssec, abs0=abssec0, absr=randsec)) scores = { self.name + '_1sec': abssec0.med, self.name + '_1sec_smooth': abssec.med, self.name + '_1sec_random': randsec.med } return scores
def run(cls, model, criterion, epoch, args): model = ActorObserverClassifierWrapper(model, args) model = set_distributed_backend(model, args) criterion = DefaultCriterion(args) task = cls(model, epoch, args) newargs = copy.deepcopy(args) if ';' in args.train_file: vars(newargs).update({ 'train_file': args.train_file.split(';')[1], 'val_file': args.val_file.split(';')[1], 'data': args.data.split(';')[1] }) if '3d' in args.arch: loader, = get_dataset(newargs, splits=('val_video', ), dataset='charades_video') else: loader, = get_dataset(newargs, splits=('val_video', ), dataset='charades') return task.validate_video(loader, model, criterion, epoch, args)