in tools/lfb_loader.py [0:0]
def get_lfb(params_file, is_train):
"""
Wrapper function for getting an LFB, which is either inferred given a
baseline model, or loaded from a file.
"""
if cfg.LFB.LOAD_LFB:
return load_lfb(is_train)
assert params_file, 'LFB.MODEL_PARAMS_FILE is not specified.'
logger.info('Inferring LFB from %s' % params_file)
cfg.GET_TRAIN_LFB = is_train
timer = Timer()
test_model = model_builder_video.ModelBuilder(
train=False,
use_cudnn=True,
cudnn_exhaustive_search=True,
split=cfg.TEST.DATA_TYPE,
)
suffix = 'infer_{}'.format('train' if is_train else 'test')
test_model.build_model(
lfb_infer_only=True,
suffix=suffix,
shift=1,
)
if cfg.PROF_DAG:
test_model.net.Proto().type = 'prof_dag'
else:
test_model.net.Proto().type = 'dag'
workspace.RunNetOnce(test_model.param_init_net)
workspace.CreateNet(test_model.net)
total_test_net_iters = misc.get_total_test_iters(test_model)
test_model.start_data_loader()
checkpoints.load_model_from_params_file_for_test(
test_model, params_file)
all_features = []
all_metadata = []
for test_iter in range(total_test_net_iters):
timer.tic()
workspace.RunNet(test_model.net.Proto().name)
timer.toc()
if test_iter == 0:
misc.print_net(test_model)
os.system('nvidia-smi')
if test_iter % 10 == 0:
logger.info("Iter {}/{} Time: {}".format(
test_iter, total_test_net_iters, timer.diff))
if cfg.DATASET == "ava":
all_features.append(get_features('box_pooled'))
all_metadata.append(get_features('metadata{}'.format(suffix)))
elif cfg.DATASET in ['charades', 'epic']:
all_features.append(get_features('pool5'))
lfb = construct_lfb(
all_features, all_metadata, test_model.input_db, is_train)
logger.info("Shutting down data loader...")
test_model.shutdown_data_loader()
workspace.ResetWorkspace()
logger.info("Done ResetWorkspace...")
cfg.GET_TRAIN_LFB = False
if cfg.LFB.WRITE_LFB:
write_lfb(lfb, is_train)
return lfb