Spaces:
Runtime error
Runtime error
| # coding=utf-8 | |
| # Copyright 2021 The Deeplab2 Authors. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| """Implementation of the Video Panoptic Quality metric. | |
| Video Panoptic Quality is an instance-based metric for evaluating the task | |
| of video panoptic segmentation. | |
| Please see the paper for details: | |
| Dahun Kim, Sanghyun Woo, Joon-Young Lee, and In So Kweon. | |
| "Video panoptic segmentation." In CVPR, 2020. | |
| """ | |
| from typing import List, Tuple | |
| import numpy as np | |
| import tensorflow as tf | |
| from deeplab2.evaluation import panoptic_quality | |
| class VideoPanopticQuality(panoptic_quality.PanopticQuality): | |
| """Metric class for Video Panoptic Quality. | |
| Dahun Kim, Sanghyun Woo, Joon-Young Lee, and In So Kweon. | |
| "Video panoptic segmentation." In CVPR, 2020. | |
| Video Panoptic Quality can be modeled as Image Panoptic Quality with the | |
| sequences of predictions and the ground-truth labels horizontally concatenated | |
| as two images, separately. Therefore, this class inherits the image panoptic | |
| quality class and changes the implementation to concatenated comparisons. | |
| Siyuan Qiao, Yukun Zhu, Hartwig Adam, Alan Yuille, and Liang-Chieh Chen. | |
| "ViP-DeepLab: Learning Visual Perception with Depth-aware Video Panoptic | |
| Segmentation." In CVPR, 2021. | |
| Stand-alone usage: | |
| vpq_obj = video_panoptic_quality.VideoPanopticQuality( | |
| num_classes, max_instances_per_category, ignored_label) | |
| vpq_obj.update_state(y_true_1, y_pred_1) | |
| vpq_obj.update_state(y_true_2, y_pred_2) | |
| ... | |
| result = vpq_obj.result().numpy() | |
| """ | |
| def __init__(self, | |
| num_classes: int, | |
| ignored_label: int, | |
| max_instances_per_category: int, | |
| offset: int, | |
| name: str = 'video_panoptic_quality', | |
| **kwargs): | |
| """Initialization of the VideoPanopticQuality metric. | |
| Args: | |
| num_classes: Number of classes in the dataset as an integer. | |
| ignored_label: The class id to be ignored in evaluation as an integer or | |
| integer tensor. | |
| max_instances_per_category: The maximum number of instances for each class | |
| as an integer or integer tensor. | |
| offset: The maximum number of unique labels as an integer or integer | |
| tensor. | |
| name: An optional variable_scope name. (default: 'video_panoptic_quality') | |
| **kwargs: The keyword arguments that are passed on to `fn`. | |
| """ | |
| super().__init__(num_classes, ignored_label, max_instances_per_category, | |
| offset, name, **kwargs) | |
| def compare_and_accumulate( | |
| self, gt_panoptic_labels: List[tf.Tensor], | |
| pred_panoptic_labels: List[tf.Tensor] | |
| ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: | |
| """Compares predicted segmentation with groundtruth, accumulates its metric. | |
| Args: | |
| gt_panoptic_labels: A list of tensors for the ground-truth | |
| video panoptic segmentation labels. | |
| pred_panoptic_labels: A list of tensors for video panoptic | |
| segmentation predictions. | |
| Returns: | |
| The value of the metrics (iou, tp, fn, fp) over all comparisons, as a | |
| float scalar. | |
| """ | |
| gt_panoptic_label = tf.concat(gt_panoptic_labels, axis=1) | |
| pred_panoptic_label = tf.concat(pred_panoptic_labels, axis=1) | |
| return super(VideoPanopticQuality, self).compare_and_accumulate( | |
| gt_panoptic_label, pred_panoptic_label) | |