dataeval 0.86.1__py3-none-any.whl → 0.86.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dataeval/__init__.py +1 -1
- dataeval/data/__init__.py +0 -2
- dataeval/data/_metadata.py +183 -199
- dataeval/data/_split.py +2 -2
- dataeval/data/selections/_classfilter.py +2 -2
- dataeval/metadata/_distance.py +10 -7
- dataeval/metadata/_ood.py +11 -103
- dataeval/metadata/_utils.py +4 -2
- dataeval/metrics/bias/_balance.py +23 -33
- dataeval/metrics/bias/_diversity.py +16 -14
- dataeval/metrics/bias/_parity.py +11 -7
- dataeval/metrics/stats/_labelstats.py +24 -28
- dataeval/outputs/_base.py +1 -1
- dataeval/outputs/_bias.py +26 -67
- dataeval/outputs/_estimators.py +2 -1
- dataeval/outputs/_linters.py +17 -17
- dataeval/outputs/_stats.py +20 -20
- dataeval/outputs/_utils.py +3 -2
- dataeval/outputs/_workflows.py +9 -7
- dataeval/typing.py +4 -4
- dataeval/utils/_plot.py +4 -4
- dataeval/utils/data/_dataset.py +22 -8
- dataeval/utils/datasets/_milco.py +3 -1
- {dataeval-0.86.1.dist-info → dataeval-0.86.3.dist-info}/METADATA +2 -1
- {dataeval-0.86.1.dist-info → dataeval-0.86.3.dist-info}/RECORD +27 -28
- dataeval/data/_targets.py +0 -89
- {dataeval-0.86.1.dist-info → dataeval-0.86.3.dist-info}/LICENSE.txt +0 -0
- {dataeval-0.86.1.dist-info → dataeval-0.86.3.dist-info}/WHEEL +0 -0
dataeval/utils/data/_dataset.py
CHANGED
@@ -19,7 +19,7 @@ def _validate_data(
|
|
19
19
|
images: Array | Sequence[Array],
|
20
20
|
labels: Array | Sequence[int] | Sequence[Array] | Sequence[Sequence[int]],
|
21
21
|
bboxes: Array | Sequence[Array] | Sequence[Sequence[Array]] | Sequence[Sequence[Sequence[float]]] | None,
|
22
|
-
metadata: Sequence[dict[str, Any]] | None,
|
22
|
+
metadata: Sequence[dict[str, Any]] | dict[str, Sequence[Any]] | None,
|
23
23
|
) -> None:
|
24
24
|
# Validate inputs
|
25
25
|
dataset_len = len(images)
|
@@ -30,7 +30,13 @@ def _validate_data(
|
|
30
30
|
raise ValueError(f"Number of labels ({len(labels)}) does not match number of images ({dataset_len}).")
|
31
31
|
if bboxes is not None and len(bboxes) != dataset_len:
|
32
32
|
raise ValueError(f"Number of bboxes ({len(bboxes)}) does not match number of images ({dataset_len}).")
|
33
|
-
if metadata is not None and
|
33
|
+
if metadata is not None and (
|
34
|
+
len(metadata) != dataset_len
|
35
|
+
if isinstance(metadata, Sequence)
|
36
|
+
else any(
|
37
|
+
not isinstance(metadatum, Sequence) or len(metadatum) != dataset_len for metadatum in metadata.values()
|
38
|
+
)
|
39
|
+
):
|
34
40
|
raise ValueError(f"Number of metadata ({len(metadata)}) does not match number of images ({dataset_len}).")
|
35
41
|
|
36
42
|
if datum_type == "ic":
|
@@ -56,6 +62,14 @@ def _validate_data(
|
|
56
62
|
raise ValueError(f"Unknown datum type '{datum_type}'. Must be 'ic' or 'od'.")
|
57
63
|
|
58
64
|
|
65
|
+
def _listify_metadata(
|
66
|
+
metadata: Sequence[dict[str, Any]] | dict[str, Sequence[Any]] | None,
|
67
|
+
) -> Sequence[dict[str, Any]] | None:
|
68
|
+
if isinstance(metadata, dict):
|
69
|
+
return [{k: v[i] for k, v in metadata.items()} for i in range(len(next(iter(metadata.values()))))]
|
70
|
+
return metadata
|
71
|
+
|
72
|
+
|
59
73
|
def _find_max(arr: ArrayLike) -> Any:
|
60
74
|
if not isinstance(arr, (bytes, str)) and isinstance(arr, (Iterable, Sequence, Array)):
|
61
75
|
if isinstance(arr[0], (Iterable, Sequence, Array)):
|
@@ -175,7 +189,7 @@ class CustomObjectDetectionDataset(BaseAnnotatedDataset[Sequence[Sequence[int]]]
|
|
175
189
|
def to_image_classification_dataset(
|
176
190
|
images: Array | Sequence[Array],
|
177
191
|
labels: Array | Sequence[int],
|
178
|
-
metadata: Sequence[dict[str, Any]] | None,
|
192
|
+
metadata: Sequence[dict[str, Any]] | dict[str, Sequence[Any]] | None,
|
179
193
|
classes: Sequence[str] | None,
|
180
194
|
name: str | None = None,
|
181
195
|
) -> ImageClassificationDataset:
|
@@ -188,7 +202,7 @@ def to_image_classification_dataset(
|
|
188
202
|
The images to use in the dataset.
|
189
203
|
labels : Array | Sequence[int]
|
190
204
|
The labels to use in the dataset.
|
191
|
-
metadata : Sequence[dict[str, Any]] | None
|
205
|
+
metadata : Sequence[dict[str, Any]] | dict[str, Sequence[Any]] | None
|
192
206
|
The metadata to use in the dataset.
|
193
207
|
classes : Sequence[str] | None
|
194
208
|
The classes to use in the dataset.
|
@@ -198,14 +212,14 @@ def to_image_classification_dataset(
|
|
198
212
|
ImageClassificationDataset
|
199
213
|
"""
|
200
214
|
_validate_data("ic", images, labels, None, metadata)
|
201
|
-
return CustomImageClassificationDataset(images, labels, metadata, classes, name)
|
215
|
+
return CustomImageClassificationDataset(images, labels, _listify_metadata(metadata), classes, name)
|
202
216
|
|
203
217
|
|
204
218
|
def to_object_detection_dataset(
|
205
219
|
images: Array | Sequence[Array],
|
206
220
|
labels: Array | Sequence[Array] | Sequence[Sequence[int]],
|
207
221
|
bboxes: Array | Sequence[Array] | Sequence[Sequence[Array]] | Sequence[Sequence[Sequence[float]]],
|
208
|
-
metadata: Sequence[dict[str, Any]] | None,
|
222
|
+
metadata: Sequence[dict[str, Any]] | dict[str, Sequence[Any]] | None,
|
209
223
|
classes: Sequence[str] | None,
|
210
224
|
name: str | None = None,
|
211
225
|
) -> ObjectDetectionDataset:
|
@@ -220,7 +234,7 @@ def to_object_detection_dataset(
|
|
220
234
|
The labels to use in the dataset.
|
221
235
|
bboxes : Array | Sequence[Array] | Sequence[Sequence[Array]] | Sequence[Sequence[Sequence[float]]]
|
222
236
|
The bounding boxes (x0,y0,x1,y0) to use in the dataset.
|
223
|
-
metadata : Sequence[dict[str, Any]] | None
|
237
|
+
metadata : Sequence[dict[str, Any]] | dict[str, Sequence[Any]] | None
|
224
238
|
The metadata to use in the dataset.
|
225
239
|
classes : Sequence[str] | None
|
226
240
|
The classes to use in the dataset.
|
@@ -230,4 +244,4 @@ def to_object_detection_dataset(
|
|
230
244
|
ObjectDetectionDataset
|
231
245
|
"""
|
232
246
|
_validate_data("od", images, labels, bboxes, metadata)
|
233
|
-
return CustomObjectDetectionDataset(images, labels, bboxes, metadata, classes, name)
|
247
|
+
return CustomObjectDetectionDataset(images, labels, bboxes, _listify_metadata(metadata), classes, name)
|
@@ -183,9 +183,11 @@ class MILCO(BaseODDataset[NDArray[Any]], BaseDatasetNumpyMixin):
|
|
183
183
|
boxes: list[list[float]] = []
|
184
184
|
with open(annotation) as f:
|
185
185
|
for line in f.readlines():
|
186
|
-
out = line.strip().split(
|
186
|
+
out = line.strip().split()
|
187
187
|
labels.append(int(out[0]))
|
188
|
+
|
188
189
|
xcenter, ycenter, width, height = [float(out[1]), float(out[2]), float(out[3]), float(out[4])]
|
190
|
+
|
189
191
|
x0 = xcenter - width / 2
|
190
192
|
x1 = x0 + width
|
191
193
|
y0 = ycenter - height / 2
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dataeval
|
3
|
-
Version: 0.86.
|
3
|
+
Version: 0.86.3
|
4
4
|
Summary: DataEval provides a simple interface to characterize image data and its impact on model performance across classification and object-detection tasks
|
5
5
|
Home-page: https://dataeval.ai/
|
6
6
|
License: MIT
|
@@ -29,6 +29,7 @@ Requires-Dist: numba (>=0.59.1)
|
|
29
29
|
Requires-Dist: numpy (>=1.24.2)
|
30
30
|
Requires-Dist: pandas (>=2.0)
|
31
31
|
Requires-Dist: pillow (>=10.3.0)
|
32
|
+
Requires-Dist: polars (>=1.0.0)
|
32
33
|
Requires-Dist: requests
|
33
34
|
Requires-Dist: scikit-learn (>=1.5.0)
|
34
35
|
Requires-Dist: scipy (>=1.10)
|
@@ -1,16 +1,15 @@
|
|
1
|
-
dataeval/__init__.py,sha256=
|
1
|
+
dataeval/__init__.py,sha256=Z_VUOb2gf--uAtqeXyzIPUm11noNeEj16OSfkc6H6-Y,1636
|
2
2
|
dataeval/_log.py,sha256=C7AGkIRzymvYJ0LQXtnShiy3i5Xrp8T58JzIHHguk_Q,365
|
3
3
|
dataeval/config.py,sha256=hjad0TK1UmaKQlUuxqxt64_OAUqZkHjicBf06cvTyrQ,4082
|
4
|
-
dataeval/data/__init__.py,sha256=
|
4
|
+
dataeval/data/__init__.py,sha256=wzQ6uUFLNB3VJR0a2QnRBYwEmwXT93q0WpHu7FmFW1E,486
|
5
5
|
dataeval/data/_embeddings.py,sha256=PFjpdV9bfusCB4taTIYSzx1hP8nJb_KCkZTN8kMw-Hs,12885
|
6
6
|
dataeval/data/_images.py,sha256=3d4Cv-xg5z6_LVtw1eL_QdFwzbDI1cwvPNQblkrMEMk,2622
|
7
|
-
dataeval/data/_metadata.py,sha256=
|
7
|
+
dataeval/data/_metadata.py,sha256=jEfGZhhvry7qtjU47VifL8ZO1hqXg1jntR3CztkaoWU,14462
|
8
8
|
dataeval/data/_selection.py,sha256=r06xeiyK8nTWPLyItkoPQRWZI1i6LATSue_cuEbCdc4,4463
|
9
|
-
dataeval/data/_split.py,sha256=
|
10
|
-
dataeval/data/_targets.py,sha256=pXrHBwT4Pi8DauaOxDVnIMwowWWlXuvSb07ShW7O2zk,3119
|
9
|
+
dataeval/data/_split.py,sha256=nQABR05vxil2Qx7-uX4Fm0_DWpibskBGDJOYj_b1u3I,16737
|
11
10
|
dataeval/data/selections/__init__.py,sha256=2m8ZB53wXzqLcqmc6p5atO6graB6ZyiRSNJFxf11X_g,613
|
12
11
|
dataeval/data/selections/_classbalance.py,sha256=7v8ApoL3X8eCZ6fGDNTehE_bZ1loaP3TlhsJLaICVWg,1458
|
13
|
-
dataeval/data/selections/_classfilter.py,sha256=
|
12
|
+
dataeval/data/selections/_classfilter.py,sha256=bXfoYnWnAfUGsAQSlLufJeF2PfgRKekFHfBx8hv1r3w,4351
|
14
13
|
dataeval/data/selections/_indices.py,sha256=RFsR9z10aM3N0gJSfKrukFpi-LkiQGXoOwXhmOQ5cpg,630
|
15
14
|
dataeval/data/selections/_limit.py,sha256=JG4GmEiNKt3sk4PbOUbBnGGzNlyz72H-kQrt8COMm4Y,512
|
16
15
|
dataeval/data/selections/_prioritize.py,sha256=4dGUvgR7m6NGzzPU0N_bw0Xhujo8b72Wo8L4PGHbvBo,11233
|
@@ -39,16 +38,16 @@ dataeval/detectors/ood/ae.py,sha256=fTrUfFxv6xUqzKpwMC8rW3JrizA16M_bgzqLuBKMrS0,
|
|
39
38
|
dataeval/detectors/ood/base.py,sha256=9b-Ljznf0lB1SXF4F_Aj3eJ4Y3ijGEDPMjucUsWOGJM,3051
|
40
39
|
dataeval/detectors/ood/mixin.py,sha256=0_o-1HPvgf3-Lf1MSOIfjj5UB8LTLEBGYtJJfyCCzwc,5431
|
41
40
|
dataeval/metadata/__init__.py,sha256=XDDmJbOZBNM6pL0r6Nbu6oMRoyAh22IDkPYGndNlkZU,316
|
42
|
-
dataeval/metadata/_distance.py,sha256=
|
43
|
-
dataeval/metadata/_ood.py,sha256=
|
44
|
-
dataeval/metadata/_utils.py,sha256=
|
41
|
+
dataeval/metadata/_distance.py,sha256=AABrGoQyD13z9Fqlz3NyfX0Iow_vjBwAugIv6OSRTTE,4187
|
42
|
+
dataeval/metadata/_ood.py,sha256=lNPHouj_9WfM_uTtsaiRaPn46RcVy3YebD1c32vDj-c,8981
|
43
|
+
dataeval/metadata/_utils.py,sha256=BcGoYVfA4AkAWpInY5txOc3QBpsGf6cnnUAsHOQTJAE,1210
|
45
44
|
dataeval/metrics/__init__.py,sha256=8VC8q3HuJN3o_WN51Ae2_wXznl3RMXIvA5GYVcy7vr8,225
|
46
45
|
dataeval/metrics/bias/__init__.py,sha256=329S1_3WnWqeU4-qVcbe0fMy4lDrj9uKslWHIQf93yg,839
|
47
|
-
dataeval/metrics/bias/_balance.py,sha256=
|
46
|
+
dataeval/metrics/bias/_balance.py,sha256=L5TR8Twwodulk8xkhE-L7PR-isPGw4LusIjL3ZHIH8c,5525
|
48
47
|
dataeval/metrics/bias/_completeness.py,sha256=BysXU2Jpw33n5dl3acJFEqF3mFGiJLsfG4n5Q2fkTaY,4608
|
49
48
|
dataeval/metrics/bias/_coverage.py,sha256=PeUoOiaghUEdn6Ov8z2-am7-fnBVIPcFbJK7Ty5JObA,3647
|
50
|
-
dataeval/metrics/bias/_diversity.py,sha256=
|
51
|
-
dataeval/metrics/bias/_parity.py,sha256=
|
49
|
+
dataeval/metrics/bias/_diversity.py,sha256=25udDKmel9IjeVT5nM4dOa1apda66QdRxBc922yuUvI,5830
|
50
|
+
dataeval/metrics/bias/_parity.py,sha256=Kmzr9-NXxGzGtj6A-qUa88FTGaRyJU2xQj7tsplXJH4,11427
|
52
51
|
dataeval/metrics/estimators/__init__.py,sha256=Pnds8uIyAovt2fKqZjiHCIP_kVoBWlVllekYuK5UmmU,568
|
53
52
|
dataeval/metrics/estimators/_ber.py,sha256=C30E5LiGGTAfo31zWFYDptDg0R7CTJGJ-a60YgzSkYY,5382
|
54
53
|
dataeval/metrics/estimators/_clusterer.py,sha256=1HrpihGTJ63IkNSOy4Ibw633Gllkm1RxKmoKT5MOgt0,1434
|
@@ -60,22 +59,22 @@ dataeval/metrics/stats/_boxratiostats.py,sha256=ROZrlqgbowkGfCR5PJ5TL7Og40iMOdUq
|
|
60
59
|
dataeval/metrics/stats/_dimensionstats.py,sha256=EVO-BlxrZl8qrP09lwPbyWdrG1ZeDtgj4LiswDwEZ1I,2896
|
61
60
|
dataeval/metrics/stats/_hashstats.py,sha256=qa1CYRgOebkxqkALfffaPM-kJ074ZbyfpWbfOfuObSs,4758
|
62
61
|
dataeval/metrics/stats/_imagestats.py,sha256=gUPNgN5Zwzdr7WnSwbve1NXNsyxd5dy3cSnlR_7guCg,3007
|
63
|
-
dataeval/metrics/stats/_labelstats.py,sha256=
|
62
|
+
dataeval/metrics/stats/_labelstats.py,sha256=bOLH4FEBN4JZ5njdRVjEK7GUb47XBMq9eqYUgXSLmCY,3071
|
64
63
|
dataeval/metrics/stats/_pixelstats.py,sha256=5RCQh0OQkHiCkn3DgCPVxKoFfifX_FOtwsnotADSZ0I,3265
|
65
64
|
dataeval/metrics/stats/_visualstats.py,sha256=0k6bvAL_d66nQMfG7bydCOFJb7B0dhgG7fqCjVTp1sg,3707
|
66
65
|
dataeval/outputs/__init__.py,sha256=geHB5M3QOiFFaQGV4ZwDTTKpqZPvPePbqG7lzaPhaXQ,1741
|
67
|
-
dataeval/outputs/_base.py,sha256
|
68
|
-
dataeval/outputs/_bias.py,sha256=
|
66
|
+
dataeval/outputs/_base.py,sha256=-Wa0gFcBVLbfWPMZyCql7x4vGsnkLP4pecsQIeUZ2_Y,5904
|
67
|
+
dataeval/outputs/_bias.py,sha256=1OZpKncYTryjPLRHb4d6NlhE27uPT57gCob_5jtjKDI,10456
|
69
68
|
dataeval/outputs/_drift.py,sha256=rKn5vqMR6XNujgSqfHsH76oFkoGsUusquZL2Qy4Ae6Y,4581
|
70
|
-
dataeval/outputs/_estimators.py,sha256=
|
71
|
-
dataeval/outputs/_linters.py,sha256=
|
69
|
+
dataeval/outputs/_estimators.py,sha256=mh-R08CgYtmq9ffANDMYR-V4vrZnSjOjEyOMiMDZ2Ic,3091
|
70
|
+
dataeval/outputs/_linters.py,sha256=ZClITD4XY99TunS_9ABTl7eauppoUdpCZU1pCVvD0cI,6700
|
72
71
|
dataeval/outputs/_metadata.py,sha256=ffZgpX8KWURPHXpOWjbvJ2KRqWQkS2nWuIjKUzoHhMI,1710
|
73
72
|
dataeval/outputs/_ood.py,sha256=suLKVXULGtXH0rq9eXHI1d3d2jhGmItJtz4QiQd47A4,1718
|
74
|
-
dataeval/outputs/_stats.py,sha256=
|
75
|
-
dataeval/outputs/_utils.py,sha256=
|
76
|
-
dataeval/outputs/_workflows.py,sha256=
|
73
|
+
dataeval/outputs/_stats.py,sha256=KIghl-glm9A_h1eVQDKqdTQg8o2zedltWyX4NkCsv2U,15226
|
74
|
+
dataeval/outputs/_utils.py,sha256=NfhYaGT2PZlhIs8ICKUsPWHZXjhWYDkEJqBDdqMeaOM,929
|
75
|
+
dataeval/outputs/_workflows.py,sha256=K786mOgegxVi81diUA-qpbwGEkwa8YA7Fk4ttgjJeaY,10831
|
77
76
|
dataeval/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
|
-
dataeval/typing.py,sha256=
|
77
|
+
dataeval/typing.py,sha256=W8rqFFkAqE5a5ar3MmB-O5gcMJqvoDKXC8Y0ggBqAKo,7216
|
79
78
|
dataeval/utils/__init__.py,sha256=hRvyUK7b3d6JBEV5u47rFcOHEcmDYqAvZQw_T5pDAWw,264
|
80
79
|
dataeval/utils/_array.py,sha256=ftX8S6HKAIUOuc1xd30VC3Pz5yUzRglDpCLisWY_tHs,5888
|
81
80
|
dataeval/utils/_bin.py,sha256=w3eJ2Szw5eapqQ0cGv731rhNgLFGW0cCz2pXo9I6CuY,7296
|
@@ -84,9 +83,9 @@ dataeval/utils/_fast_mst.py,sha256=pv42flr1Uf5RBa9qDG0YLDXWH7Mr7a9zpauO1HqZXaY,8
|
|
84
83
|
dataeval/utils/_image.py,sha256=4uxTIOYZZlRJOfNmdA3ek3no3FrLWCK5un48kStMDt8,3578
|
85
84
|
dataeval/utils/_method.py,sha256=9B9JQbgqWJBRhQJb7glajUtWaQzUTIUuvrZ9_bisxsM,394
|
86
85
|
dataeval/utils/_mst.py,sha256=bLmJmu_1Dtj3hC5gQp3oAiJ_7TKtEjahTqusVRRU4eI,2168
|
87
|
-
dataeval/utils/_plot.py,sha256=
|
86
|
+
dataeval/utils/_plot.py,sha256=3yn5UGL2xUeayPNws2bkvxm9ZCURsVUkpvSrwOqUE7g,7145
|
88
87
|
dataeval/utils/data/__init__.py,sha256=xGzrjrOxOP2DP1tU84AWMKPnSxFvSjM81CTlDg4rNM8,331
|
89
|
-
dataeval/utils/data/_dataset.py,sha256=
|
88
|
+
dataeval/utils/data/_dataset.py,sha256=CFK9h-XPN7J-iF2nXol6keMDbGm6VIweFAMAjXRUlhg,9527
|
90
89
|
dataeval/utils/data/collate.py,sha256=5egEEKhNNCGeNLChO1p6dZ4Wg6x51VEaMNHz7hEZUxI,3936
|
91
90
|
dataeval/utils/data/metadata.py,sha256=L1c2bCiMj0aR0QCoKkjwBujIftJDEMgW_3ZbgeS8WHo,14703
|
92
91
|
dataeval/utils/datasets/__init__.py,sha256=pAXqHX76yAoBI8XB3m6zGuW-u3s3PCoIXG5GDzxH7Zs,572
|
@@ -94,7 +93,7 @@ dataeval/utils/datasets/_antiuav.py,sha256=kA_ia1fYNcJiz9SpCvh-Z8iSc7iJrdogjBI3s
|
|
94
93
|
dataeval/utils/datasets/_base.py,sha256=pyfpJda3ku469M3TFRsJn9S2oAiQODOGTlLcdcoEW9U,9031
|
95
94
|
dataeval/utils/datasets/_cifar10.py,sha256=hZc_A30yKYBbv2kvVdEkZ9egyEe6XBUnmksoIAoJ-5Y,8265
|
96
95
|
dataeval/utils/datasets/_fileio.py,sha256=OASFA9uX3KgfyPb5vza12BlZyAi9Y8Al9lUR_IYPcsM,5449
|
97
|
-
dataeval/utils/datasets/_milco.py,sha256=
|
96
|
+
dataeval/utils/datasets/_milco.py,sha256=iXf4C1I3Eg_3gHKUe4XPi21yFMBO51zxTIqAkGf9bYg,7869
|
98
97
|
dataeval/utils/datasets/_mixin.py,sha256=S8iii-SoYUsFFYNXjw2thlZkpBvRLnZ4XI8wTqOKXgU,1729
|
99
98
|
dataeval/utils/datasets/_mnist.py,sha256=uz46sE1Go3TgGjG6x2cXckSVQ0mSg2mhgk8BUvLWjb0,8149
|
100
99
|
dataeval/utils/datasets/_ships.py,sha256=6U04HAoM3jgLl1qv-NnxjZeSsBipcqWJBMhBMn5iIUY,5115
|
@@ -108,7 +107,7 @@ dataeval/utils/torch/models.py,sha256=1idpXyjrYcCBSsbxxRUOto8xr4MJNjDEqQHiIXVU5Z
|
|
108
107
|
dataeval/utils/torch/trainer.py,sha256=Oc2lK13uPGhmLYbmAqlPWyKxgG4YJFlnSXCqFHUZbdA,5528
|
109
108
|
dataeval/workflows/__init__.py,sha256=ou8y0KO-d6W5lgmcyLjKlf-J_ckP3vilW7wHkgiDlZ4,255
|
110
109
|
dataeval/workflows/sufficiency.py,sha256=j-R8dg4XE6a66p_oTXG2GNzgg3vGk85CTblxhFXaxog,8513
|
111
|
-
dataeval-0.86.
|
112
|
-
dataeval-0.86.
|
113
|
-
dataeval-0.86.
|
114
|
-
dataeval-0.86.
|
110
|
+
dataeval-0.86.3.dist-info/LICENSE.txt,sha256=uAooygKWvX6NbU9Ran9oG2msttoG8aeTeHSTe5JeCnY,1061
|
111
|
+
dataeval-0.86.3.dist-info/METADATA,sha256=1zOfOabm9w57nxAWZw5InEzmqyWRRko10btPqT0h64o,5353
|
112
|
+
dataeval-0.86.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
113
|
+
dataeval-0.86.3.dist-info/RECORD,,
|
dataeval/data/_targets.py
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from typing import Iterator
|
4
|
-
|
5
|
-
__all__ = []
|
6
|
-
|
7
|
-
from dataclasses import dataclass
|
8
|
-
|
9
|
-
import numpy as np
|
10
|
-
from numpy.typing import NDArray
|
11
|
-
|
12
|
-
|
13
|
-
def _len(arr: NDArray, dim: int) -> int:
|
14
|
-
return 0 if len(arr) == 0 else len(np.atleast_1d(arr) if dim == 1 else np.atleast_2d(arr))
|
15
|
-
|
16
|
-
|
17
|
-
@dataclass(frozen=True)
|
18
|
-
class Targets:
|
19
|
-
"""
|
20
|
-
Dataclass defining targets for image classification or object detection.
|
21
|
-
|
22
|
-
Attributes
|
23
|
-
----------
|
24
|
-
labels : NDArray[np.intp]
|
25
|
-
Labels (N,) for N images or objects
|
26
|
-
scores : NDArray[np.float32]
|
27
|
-
Probability scores (N, M) for N images of M classes or confidence score (N,) of objects
|
28
|
-
bboxes : NDArray[np.float32] | None
|
29
|
-
Bounding boxes (N, 4) for N objects in (x0, y0, x1, y1) format
|
30
|
-
source : NDArray[np.intp] | None
|
31
|
-
Source image index (N,) for N objects
|
32
|
-
size : int
|
33
|
-
Count of objects
|
34
|
-
"""
|
35
|
-
|
36
|
-
labels: NDArray[np.intp]
|
37
|
-
scores: NDArray[np.float32]
|
38
|
-
bboxes: NDArray[np.float32] | None
|
39
|
-
source: NDArray[np.intp] | None
|
40
|
-
|
41
|
-
def __post_init__(self) -> None:
|
42
|
-
if (self.bboxes is None) != (self.source is None):
|
43
|
-
raise ValueError("Either both bboxes and source must be provided or neither.")
|
44
|
-
|
45
|
-
labels = _len(self.labels, 1)
|
46
|
-
scores = _len(self.scores, 2) if self.bboxes is None else _len(self.scores, 1)
|
47
|
-
bboxes = labels if self.bboxes is None else _len(self.bboxes, 2)
|
48
|
-
source = labels if self.source is None else _len(self.source, 1)
|
49
|
-
|
50
|
-
if labels != scores or labels != bboxes or labels != source:
|
51
|
-
raise ValueError(
|
52
|
-
"Labels, scores, bboxes and source must be the same length (if provided).\n"
|
53
|
-
+ f" labels: {self.labels.shape}\n"
|
54
|
-
+ f" scores: {self.scores.shape}\n"
|
55
|
-
+ f" bboxes: {None if self.bboxes is None else self.bboxes.shape}\n"
|
56
|
-
+ f" source: {None if self.source is None else self.source.shape}\n"
|
57
|
-
)
|
58
|
-
|
59
|
-
if self.bboxes is not None and len(self.bboxes) > 0 and self.bboxes.shape[-1] != 4:
|
60
|
-
raise ValueError("Bounding boxes must be in (x0, y0, x1, y1) format.")
|
61
|
-
|
62
|
-
@property
|
63
|
-
def size(self) -> int:
|
64
|
-
return len(self.labels)
|
65
|
-
|
66
|
-
def __len__(self) -> int:
|
67
|
-
if self.source is None:
|
68
|
-
return len(self.labels)
|
69
|
-
return len(np.unique(self.source))
|
70
|
-
|
71
|
-
def __getitem__(self, idx: int, /) -> Targets:
|
72
|
-
if self.source is None or self.bboxes is None:
|
73
|
-
return Targets(
|
74
|
-
np.atleast_1d(self.labels[idx]),
|
75
|
-
np.atleast_2d(self.scores[idx]),
|
76
|
-
None,
|
77
|
-
None,
|
78
|
-
)
|
79
|
-
mask = np.where(self.source == idx, True, False)
|
80
|
-
return Targets(
|
81
|
-
np.atleast_1d(self.labels[mask]),
|
82
|
-
np.atleast_1d(self.scores[mask]),
|
83
|
-
np.atleast_2d(self.bboxes[mask]),
|
84
|
-
np.atleast_1d(self.source[mask]),
|
85
|
-
)
|
86
|
-
|
87
|
-
def __iter__(self) -> Iterator[Targets]:
|
88
|
-
for i in range(len(self.labels)) if self.source is None else np.unique(self.source):
|
89
|
-
yield self[i]
|
File without changes
|
File without changes
|