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