コード例 #1
0
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
コード例 #2
0
 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)
コード例 #3
0
    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
コード例 #4
0
 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)