Spaces:
Running
Running
Fix modules
Browse files- detection_metrics/__init__.py β __init__.py +0 -0
- detection_metrics/pycocotools/coco.py β coco.py +1 -0
- detection_metrics/coco_evaluate.py β coco_evaluate.py +8 -5
- detection_metrics/pycocotools/cocoeval.py β cocoeval.py +0 -0
- detection_metrics.py +18 -14
- detection_metrics/pycocotools/mask.py β mask.py +11 -7
- detection_metrics/pycocotools/mask_utils.py β mask_utils.py +0 -0
- detection_metrics/utils.py β utils.py +2 -2
detection_metrics/__init__.py β __init__.py
RENAMED
File without changes
|
detection_metrics/pycocotools/coco.py β coco.py
RENAMED
@@ -54,6 +54,7 @@ __version__ = "2.0"
|
|
54 |
import copy
|
55 |
import itertools
|
56 |
import json
|
|
|
57 |
# from . import mask as maskUtils
|
58 |
import os
|
59 |
import sys
|
|
|
54 |
import copy
|
55 |
import itertools
|
56 |
import json
|
57 |
+
|
58 |
# from . import mask as maskUtils
|
59 |
import os
|
60 |
import sys
|
detection_metrics/coco_evaluate.py β coco_evaluate.py
RENAMED
@@ -6,10 +6,14 @@ from typing import Dict, List, Union
|
|
6 |
import numpy as np
|
7 |
import torch
|
8 |
|
9 |
-
from
|
10 |
-
from
|
11 |
-
from
|
12 |
-
|
|
|
|
|
|
|
|
|
13 |
|
14 |
_SUPPORTED_TYPES = ["bbox"]
|
15 |
|
@@ -64,7 +68,6 @@ class COCOEvaluator(object):
|
|
64 |
eval_imgs = coco_eval.evaluate()
|
65 |
self.eval_imgs[iou_type].append(eval_imgs)
|
66 |
|
67 |
-
|
68 |
def synchronize_between_processes(self) -> None:
|
69 |
"""
|
70 |
Synchronizes evaluation images between processes.
|
|
|
6 |
import numpy as np
|
7 |
import torch
|
8 |
|
9 |
+
from .coco import COCO
|
10 |
+
from .cocoeval import COCOeval
|
11 |
+
from .utils import (
|
12 |
+
_TYPING_BOX,
|
13 |
+
_TYPING_PREDICTIONS,
|
14 |
+
convert_to_xywh,
|
15 |
+
create_common_coco_eval,
|
16 |
+
)
|
17 |
|
18 |
_SUPPORTED_TYPES = ["bbox"]
|
19 |
|
|
|
68 |
eval_imgs = coco_eval.evaluate()
|
69 |
self.eval_imgs[iou_type].append(eval_imgs)
|
70 |
|
|
|
71 |
def synchronize_between_processes(self) -> None:
|
72 |
"""
|
73 |
Synchronizes evaluation images between processes.
|
detection_metrics/pycocotools/cocoeval.py β cocoeval.py
RENAMED
File without changes
|
detection_metrics.py
CHANGED
@@ -4,10 +4,9 @@ import datasets
|
|
4 |
import torch
|
5 |
import evaluate
|
6 |
import json
|
7 |
-
from
|
8 |
-
from
|
9 |
-
from
|
10 |
-
from detection_metrics.utils import _TYPING_PREDICTION, _TYPING_REFERENCE
|
11 |
|
12 |
_DESCRIPTION = "This class evaluates object detection models using the COCO dataset \
|
13 |
and its evaluation metrics."
|
@@ -37,6 +36,7 @@ Args:
|
|
37 |
**kwargs: Additional keyword arguments forwarded to evaluate.Metrics.
|
38 |
"""
|
39 |
|
|
|
40 |
class EvaluateObjectDetection(evaluate.Metric):
|
41 |
"""
|
42 |
Class for evaluating object detection models.
|
@@ -73,8 +73,10 @@ class EvaluateObjectDetection(evaluate.Metric):
|
|
73 |
self.coco_evaluator.coco_eval["bbox"].cocoGt.cats = cats
|
74 |
self.coco_evaluator.coco_gt.cats = cats
|
75 |
self.coco_evaluator.coco_gt.dataset["categories"] = list(cats.values())
|
76 |
-
self.coco_evaluator.coco_eval["bbox"].params.catIds = [
|
77 |
-
|
|
|
|
|
78 |
def _info(self):
|
79 |
"""
|
80 |
Returns the MetricInfo object with information about the module.
|
@@ -147,15 +149,15 @@ class EvaluateObjectDetection(evaluate.Metric):
|
|
147 |
for prediction in predictions:
|
148 |
ret.append({k: v for k, v in prediction.items() if k in required})
|
149 |
return ret
|
150 |
-
|
151 |
def _clear_references(self, references):
|
152 |
required = [""]
|
153 |
ret = []
|
154 |
for ref in references:
|
155 |
ret.append({k: v for k, v in ref.items() if k in required})
|
156 |
return ret
|
157 |
-
|
158 |
-
def add(self, *, prediction
|
159 |
"""
|
160 |
Preprocesses the predictions and references and calls the parent class function.
|
161 |
|
@@ -167,13 +169,15 @@ class EvaluateObjectDetection(evaluate.Metric):
|
|
167 |
if prediction is not None:
|
168 |
prediction = self._clear_predictions(prediction)
|
169 |
prediction = self._preprocess(prediction)
|
170 |
-
|
171 |
res = {} # {image_id} : prediction
|
172 |
for output, target in zip(prediction, reference):
|
173 |
res[target["image_id"][0]] = output
|
174 |
self.coco_evaluator.update(res)
|
175 |
|
176 |
-
super(evaluate.Metric, self).add(
|
|
|
|
|
177 |
|
178 |
def _compute(
|
179 |
self,
|
@@ -192,12 +196,12 @@ class EvaluateObjectDetection(evaluate.Metric):
|
|
192 |
"""
|
193 |
print("Synchronizing processes")
|
194 |
self.coco_evaluator.synchronize_between_processes()
|
195 |
-
|
196 |
print("Accumulating values")
|
197 |
self.coco_evaluator.accumulate()
|
198 |
-
|
199 |
print("Summarizing results")
|
200 |
self.coco_evaluator.summarize()
|
201 |
-
|
202 |
stats = self.coco_evaluator.get_results()
|
203 |
return stats
|
|
|
4 |
import torch
|
5 |
import evaluate
|
6 |
import json
|
7 |
+
from .coco import COCO
|
8 |
+
from .coco_evaluate import COCOEvaluator
|
9 |
+
from .utils import _TYPING_PREDICTION, _TYPING_REFERENCE
|
|
|
10 |
|
11 |
_DESCRIPTION = "This class evaluates object detection models using the COCO dataset \
|
12 |
and its evaluation metrics."
|
|
|
36 |
**kwargs: Additional keyword arguments forwarded to evaluate.Metrics.
|
37 |
"""
|
38 |
|
39 |
+
|
40 |
class EvaluateObjectDetection(evaluate.Metric):
|
41 |
"""
|
42 |
Class for evaluating object detection models.
|
|
|
73 |
self.coco_evaluator.coco_eval["bbox"].cocoGt.cats = cats
|
74 |
self.coco_evaluator.coco_gt.cats = cats
|
75 |
self.coco_evaluator.coco_gt.dataset["categories"] = list(cats.values())
|
76 |
+
self.coco_evaluator.coco_eval["bbox"].params.catIds = [
|
77 |
+
c["id"] for c in cats.values()
|
78 |
+
]
|
79 |
+
|
80 |
def _info(self):
|
81 |
"""
|
82 |
Returns the MetricInfo object with information about the module.
|
|
|
149 |
for prediction in predictions:
|
150 |
ret.append({k: v for k, v in prediction.items() if k in required})
|
151 |
return ret
|
152 |
+
|
153 |
def _clear_references(self, references):
|
154 |
required = [""]
|
155 |
ret = []
|
156 |
for ref in references:
|
157 |
ret.append({k: v for k, v in ref.items() if k in required})
|
158 |
return ret
|
159 |
+
|
160 |
+
def add(self, *, prediction=None, reference=None, **kwargs):
|
161 |
"""
|
162 |
Preprocesses the predictions and references and calls the parent class function.
|
163 |
|
|
|
169 |
if prediction is not None:
|
170 |
prediction = self._clear_predictions(prediction)
|
171 |
prediction = self._preprocess(prediction)
|
172 |
+
|
173 |
res = {} # {image_id} : prediction
|
174 |
for output, target in zip(prediction, reference):
|
175 |
res[target["image_id"][0]] = output
|
176 |
self.coco_evaluator.update(res)
|
177 |
|
178 |
+
super(evaluate.Metric, self).add(
|
179 |
+
prediction=prediction, references=reference, **kwargs
|
180 |
+
)
|
181 |
|
182 |
def _compute(
|
183 |
self,
|
|
|
196 |
"""
|
197 |
print("Synchronizing processes")
|
198 |
self.coco_evaluator.synchronize_between_processes()
|
199 |
+
|
200 |
print("Accumulating values")
|
201 |
self.coco_evaluator.accumulate()
|
202 |
+
|
203 |
print("Summarizing results")
|
204 |
self.coco_evaluator.summarize()
|
205 |
+
|
206 |
stats = self.coco_evaluator.get_results()
|
207 |
return stats
|
detection_metrics/pycocotools/mask.py β mask.py
RENAMED
@@ -1,6 +1,6 @@
|
|
1 |
-
__author__ =
|
2 |
|
3 |
-
from
|
4 |
|
5 |
# Interface for manipulating masks stored in RLE format.
|
6 |
#
|
@@ -73,22 +73,25 @@ from detection_metrics.pycocotools import _mask
|
|
73 |
# Code written by Piotr Dollar and Tsung-Yi Lin, 2015.
|
74 |
# Licensed under the Simplified BSD License [see coco/license.txt]
|
75 |
|
76 |
-
iou
|
77 |
-
merge
|
78 |
frPyObjects = _mask.frPyObjects
|
79 |
|
|
|
80 |
def encode(bimask):
|
81 |
if len(bimask.shape) == 3:
|
82 |
return _mask.encode(bimask)
|
83 |
elif len(bimask.shape) == 2:
|
84 |
h, w = bimask.shape
|
85 |
-
return _mask.encode(bimask.reshape((h, w, 1), order=
|
|
|
86 |
|
87 |
def decode(rleObjs):
|
88 |
if type(rleObjs) == list:
|
89 |
return _mask.decode(rleObjs)
|
90 |
else:
|
91 |
-
return _mask.decode([rleObjs])[
|
|
|
92 |
|
93 |
def area(rleObjs):
|
94 |
if type(rleObjs) == list:
|
@@ -96,8 +99,9 @@ def area(rleObjs):
|
|
96 |
else:
|
97 |
return _mask.area([rleObjs])[0]
|
98 |
|
|
|
99 |
def toBbox(rleObjs):
|
100 |
if type(rleObjs) == list:
|
101 |
return _mask.toBbox(rleObjs)
|
102 |
else:
|
103 |
-
return _mask.toBbox([rleObjs])[0]
|
|
|
1 |
+
__author__ = "tsungyi"
|
2 |
|
3 |
+
from pycocotools import _mask
|
4 |
|
5 |
# Interface for manipulating masks stored in RLE format.
|
6 |
#
|
|
|
73 |
# Code written by Piotr Dollar and Tsung-Yi Lin, 2015.
|
74 |
# Licensed under the Simplified BSD License [see coco/license.txt]
|
75 |
|
76 |
+
iou = _mask.iou
|
77 |
+
merge = _mask.merge
|
78 |
frPyObjects = _mask.frPyObjects
|
79 |
|
80 |
+
|
81 |
def encode(bimask):
|
82 |
if len(bimask.shape) == 3:
|
83 |
return _mask.encode(bimask)
|
84 |
elif len(bimask.shape) == 2:
|
85 |
h, w = bimask.shape
|
86 |
+
return _mask.encode(bimask.reshape((h, w, 1), order="F"))[0]
|
87 |
+
|
88 |
|
89 |
def decode(rleObjs):
|
90 |
if type(rleObjs) == list:
|
91 |
return _mask.decode(rleObjs)
|
92 |
else:
|
93 |
+
return _mask.decode([rleObjs])[:, :, 0]
|
94 |
+
|
95 |
|
96 |
def area(rleObjs):
|
97 |
if type(rleObjs) == list:
|
|
|
99 |
else:
|
100 |
return _mask.area([rleObjs])[0]
|
101 |
|
102 |
+
|
103 |
def toBbox(rleObjs):
|
104 |
if type(rleObjs) == list:
|
105 |
return _mask.toBbox(rleObjs)
|
106 |
else:
|
107 |
+
return _mask.toBbox([rleObjs])[0]
|
detection_metrics/pycocotools/mask_utils.py β mask_utils.py
RENAMED
File without changes
|
detection_metrics/utils.py β utils.py
RENAMED
@@ -1,13 +1,12 @@
|
|
1 |
import copy
|
2 |
import pickle
|
3 |
from typing import Dict, List, Tuple, Union
|
4 |
-
from tqdm import tqdm
|
5 |
import numpy as np
|
6 |
import torch
|
7 |
import torch.distributed as dist
|
8 |
from datasets import Dataset
|
9 |
|
10 |
-
from
|
11 |
|
12 |
# Typings
|
13 |
_TYPING_BOX = Tuple[float, float, float, float]
|
@@ -19,6 +18,7 @@ _TYPING_PREDICTION = Dict[str, _TYPING_PRED_REF]
|
|
19 |
_TYPING_REFERENCE = Dict[str, _TYPING_PRED_REF]
|
20 |
_TYPING_PREDICTIONS = Dict[int, _TYPING_PREDICTION]
|
21 |
|
|
|
22 |
def convert_to_xywh(boxes: torch.Tensor) -> torch.Tensor:
|
23 |
"""
|
24 |
Convert bounding boxes from (xmin, ymin, xmax, ymax) format to (x, y, width, height) format.
|
|
|
1 |
import copy
|
2 |
import pickle
|
3 |
from typing import Dict, List, Tuple, Union
|
|
|
4 |
import numpy as np
|
5 |
import torch
|
6 |
import torch.distributed as dist
|
7 |
from datasets import Dataset
|
8 |
|
9 |
+
from .cocoeval import COCOeval
|
10 |
|
11 |
# Typings
|
12 |
_TYPING_BOX = Tuple[float, float, float, float]
|
|
|
18 |
_TYPING_REFERENCE = Dict[str, _TYPING_PRED_REF]
|
19 |
_TYPING_PREDICTIONS = Dict[int, _TYPING_PREDICTION]
|
20 |
|
21 |
+
|
22 |
def convert_to_xywh(boxes: torch.Tensor) -> torch.Tensor:
|
23 |
"""
|
24 |
Convert bounding boxes from (xmin, ymin, xmax, ymax) format to (x, y, width, height) format.
|