Spaces:
Sleeping
Sleeping
| # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved | |
| import json | |
| import os | |
| import util.misc as utils | |
| try: | |
| from panopticapi.evaluation import pq_compute | |
| except ImportError: | |
| pass | |
| class PanopticEvaluator(object): | |
| def __init__(self, ann_file, ann_folder, output_dir="panoptic_eval"): | |
| self.gt_json = ann_file | |
| self.gt_folder = ann_folder | |
| if utils.is_main_process(): | |
| if not os.path.exists(output_dir): | |
| os.mkdir(output_dir) | |
| self.output_dir = output_dir | |
| self.predictions = [] | |
| def update(self, predictions): | |
| for p in predictions: | |
| with open(os.path.join(self.output_dir, p["file_name"]), "wb") as f: | |
| f.write(p.pop("png_string")) | |
| self.predictions += predictions | |
| def synchronize_between_processes(self): | |
| all_predictions = utils.all_gather(self.predictions) | |
| merged_predictions = [] | |
| for p in all_predictions: | |
| merged_predictions += p | |
| self.predictions = merged_predictions | |
| def summarize(self): | |
| if utils.is_main_process(): | |
| json_data = {"annotations": self.predictions} | |
| predictions_json = os.path.join(self.output_dir, "predictions.json") | |
| with open(predictions_json, "w") as f: | |
| f.write(json.dumps(json_data)) | |
| return pq_compute(self.gt_json, predictions_json, gt_folder=self.gt_folder, pred_folder=self.output_dir) | |
| return None | |