in models/vision/detection/awsdet/core/evaluation/eval_hooks.py [0:0]
def after_train_epoch(self, runner):
if not self.every_n_epochs(runner, self.interval):
return
self.start_time = time.time()
# create a loader for this runner
tf_dataset, num_examples = build_dataloader(self.dataset, 1, 1, num_gpus=runner.local_size, dist=True)
# num_examples=8
results = [None for _ in range(num_examples*runner.local_size)] # REVISIT - may require a lot of memory
#if runner.model.mask:
if self.dataset.mask:
masks = [None for _ in range(num_examples*runner.local_size)]
if runner.rank == 0:
prog_bar = ProgressBar(num_examples)
for i, data_batch in enumerate(tf_dataset):
if i >= num_examples:
break
_, img_meta = data_batch
outputs = runner.model(data_batch, training=False)
assert isinstance(outputs, dict)
bboxes = outputs['bboxes']
# map boxes back to original scale
bboxes = transforms.bbox_mapping_back(bboxes, img_meta)
labels = outputs['labels']
scores = outputs['scores']
result = transforms.bbox2result(bboxes, labels, scores, num_classes=self.dataset.CLASSES+1) # add background class
#if runner.model.mask:
if self.dataset.mask:
mask = mask2result(outputs['masks'], labels, img_meta[0])
results[i*runner.local_size+runner.local_rank] = (result, mask)
else:
results[i*runner.local_size+runner.local_rank] = result
if runner.rank == 0:
prog_bar.update()
# write to a file
tmp_file = osp.join(runner.work_dir, 'temp_{}.pkl'.format(runner.rank))
if runner.rank != 0:
dump(results, tmp_file)
# open(tmp_file+'.done', 'w').close()
# MPI barrier through horovod
_ = get_barrier()
self._accumulate_results(runner, results, num_examples)
del tf_dataset