def single_gpu_test(model, dataset, show=False): # create a loader for this runner tf_dataset, num_examples = build_dataloader(dataset, 1, 1, num_gpus=1, dist=False) results = [] start = time.time() for i, data_batch in enumerate(tf_dataset): if i >= num_examples: break _, img_meta = data_batch print(dataset.img_ids[i]) outputs = model(data_batch, training=False) bboxes = outputs['bboxes'] # # map boxes back to original scale bboxes = transforms.bbox_mapping_back(bboxes, img_meta) # # print('>>>>', bboxes) labels = outputs['labels'] scores = outputs['scores'] result = transforms.bbox2result(bboxes, labels, scores, num_classes=81) #for b, l, s in zip(bboxes, labels, scores): # print(b, l, s) #print(result) results.append(result) print("Forward pass through test set took {}s".format(time.time() - start)) evaluate(dataset, results) return results
def _unmold_single_detection(self, detections, img_meta): zero_ix = tf.where(tf.not_equal(detections[:, 4], 0)) detections = tf.gather_nd(detections, zero_ix) # Extract boxes, class_ids, scores, and class-specific masks boxes = detections[:, :4] class_ids = tf.cast(detections[:, 4], tf.int32) scores = detections[:, 5] boxes = transforms.bbox_mapping_back(boxes, img_meta) return {'rois': boxes.numpy(), 'class_ids': class_ids.numpy(), 'scores': scores.numpy()}
def after_train_epoch(self, runner): if not self.every_n_epochs(runner, self.interval): return # 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)