Exemple #1
0
    def CreateDecoderMetrics(self):
        """Decoder metrics for WaymoOpenDataset."""
        p = self.params

        waymo_metric_p = p.ap_metric.Copy().Set(
            cls=waymo_ap_metric.WaymoAPMetrics)
        waymo_metrics = waymo_metric_p.Instantiate()
        class_names = waymo_metrics.metadata.ClassNames()

        # TODO(bencaine,vrv): There's some code smell with this ap_metrics params
        # usage. We create local copies of the params to then instantiate them.
        # Failing to do this risks users editing the params after construction of
        # the object, making each object method call have the potential for side
        # effects.
        # Create a new dictionary with copies of the params converted to objects
        # so we can then add these to the decoder metrics.
        extra_ap_metrics = {}
        for k, metric_p in p.extra_ap_metrics.items():
            extra_ap_metrics[k] = metric_p.Instantiate()

        waymo_metric_bev_p = waymo_metric_p.Copy()
        waymo_metric_bev_p.box_type = '2d'
        waymo_metrics_bev = waymo_metric_bev_p.Instantiate()
        # Convert the list of class names to a dictionary mapping class_id -> name.
        class_id_to_name = dict(enumerate(class_names))

        # TODO(vrv): This uses the same top down transform as for KITTI;
        # re-visit these settings since detections can happen all around
        # the car.
        top_down_transform = transform_util.MakeCarToImageTransform(
            pixels_per_meter=32.,
            image_ref_x=512.,
            image_ref_y=1408.,
            flip_axes=True)
        decoder_metrics = py_utils.NestedMap({
            'top_down_visualization':
            (detection_3d_metrics.TopDownVisualizationMetric(
                top_down_transform,
                image_height=1536,
                image_width=1024,
                class_id_to_name=class_id_to_name)),
            'num_samples_in_batch':
            metrics.AverageMetric(),
            'waymo_metrics':
            waymo_metrics,
            'waymo_metrics_bev':
            waymo_metrics_bev,
        })
        self._update_metrics_class_keys = [
            'waymo_metrics_bev', 'waymo_metrics'
        ]
        for k, metric in extra_ap_metrics.items():
            decoder_metrics[k] = metric
            self._update_metrics_class_keys.append(k)

        decoder_metrics.mesh = detection_3d_metrics.WorldViewer()
        return decoder_metrics
Exemple #2
0
    def CreateDecoderMetrics(self):
        """Decoder metrics for WaymoOpenDataset."""
        p = self.params

        waymo_metric_p = p.ap_metric.Copy().Set(
            cls=waymo_ap_metric.WaymoAPMetrics)
        waymo_metrics = waymo_metric_p.Instantiate()
        class_names = waymo_metrics.metadata.ClassNames()

        for k, v in p.extra_ap_metrics.items():
            p.extra_ap_metrics[k] = v.Instantiate()

        waymo_metric_bev_p = waymo_metric_p.Copy()
        waymo_metric_bev_p.box_type = '2d'
        waymo_metrics_bev = waymo_metric_bev_p.Instantiate()
        # Convert the list of class names to a dictionary mapping class_id -> name.
        class_id_to_name = dict(enumerate(class_names))

        # TODO(vrv): This uses the same top down transform as for KITTI;
        # re-visit these settings since detections can happen all around
        # the car.
        top_down_transform = transform_util.MakeCarToImageTransform(
            pixels_per_meter=32.,
            image_ref_x=512.,
            image_ref_y=1408.,
            flip_axes=True)
        decoder_metrics = py_utils.NestedMap({
            'top_down_visualization':
            (detection_3d_metrics.TopDownVisualizationMetric(
                top_down_transform,
                image_height=1536,
                image_width=1024,
                class_id_to_name=class_id_to_name)),
            'num_samples_in_batch':
            metrics.AverageMetric(),
            'waymo_metrics':
            waymo_metrics,
            'waymo_metrics_bev':
            waymo_metrics_bev,
        })
        self._update_metrics_class_keys = [
            'waymo_metrics_bev', 'waymo_metrics'
        ]
        for k, v in p.extra_ap_metrics.items():
            decoder_metrics[k] = v
            self._update_metrics_class_keys.append(k)

        decoder_metrics.mesh = detection_3d_metrics.WorldViewer()
        return decoder_metrics
Exemple #3
0
    def testTopDownVisualizationMetric(self):
        top_down_transform = transform_util.MakeCarToImageTransform(
            pixels_per_meter=32.,
            image_ref_x=512.,
            image_ref_y=1408.,
            flip_axes=True)
        metric = detection_3d_metrics.TopDownVisualizationMetric(
            top_down_transform)

        batch_size = 4
        num_preds = 10
        num_gt = 12
        num_points = 128

        visualization_labels = np.random.randint(0, 2, (batch_size, num_preds))
        predicted_bboxes = np.random.rand(batch_size, num_preds, 5)
        visualization_weights = np.abs(np.random.rand(batch_size, num_preds))

        labels = np.random.randint(0, 2, (batch_size, num_gt))
        gt_bboxes_2d = np.random.rand(batch_size, num_gt, 5)
        gt_bboxes_2d_weights = np.abs(np.random.rand(batch_size, num_gt))
        difficulties = np.random.randint(0, 3, (batch_size, num_gt))

        points_xyz = np.random.rand(batch_size, num_points, 3)
        points_padding = np.random.randint(0, 2, (batch_size, num_points))
        source_ids = np.full([batch_size], '012346')

        metric.Update(
            py_utils.NestedMap({
                'visualization_labels': visualization_labels,
                'predicted_bboxes': predicted_bboxes,
                'visualization_weights': visualization_weights,
                'labels': labels,
                'gt_bboxes_2d': gt_bboxes_2d,
                'gt_bboxes_2d_weights': gt_bboxes_2d_weights,
                'points_xyz': points_xyz,
                'points_padding': points_padding,
                'difficulties': difficulties,
                'source_ids': source_ids,
            }))

        _ = metric.Summary('test')
Exemple #4
0
    def CreateDecoderMetrics(self):
        """Decoder metrics for KITTI."""
        p = self.params

        kitti_metric_p = p.ap_metric.Copy().Set(
            cls=kitti_ap_metric.KITTIAPMetrics)
        apm = kitti_metric_p.Instantiate()
        class_names = apm.metadata.ClassNames()

        # Convert the list of class names to a dictionary mapping class_id -> name.
        class_id_to_name = dict(enumerate(class_names))

        top_down_transform = transform_util.MakeCarToImageTransform(
            pixels_per_meter=32.,
            image_ref_x=512.,
            image_ref_y=1408.,
            flip_axes=True)

        decoder_metrics = py_utils.NestedMap({
            'top_down_visualization':
            (detection_3d_metrics.TopDownVisualizationMetric(
                top_down_transform,
                image_height=1536,
                image_width=1024,
                class_id_to_name=class_id_to_name)),
            'num_samples_in_batch':
            metrics.AverageMetric(),
            'kitti_AP_v2':
            apm,
        })

        decoder_metrics.mesh = detection_3d_metrics.WorldViewer()

        if p.summarize_boxes_on_image:
            decoder_metrics.camera_visualization = (
                detection_3d_metrics.CameraVisualization(
                    bbox_score_threshold=p.
                    visualization_classification_threshold))

        return decoder_metrics