valor-lite 0.36.3__py3-none-any.whl → 0.36.5__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.
- valor_lite/classification/manager.py +54 -32
- valor_lite/object_detection/manager.py +106 -42
- valor_lite/semantic_segmentation/annotation.py +28 -20
- valor_lite/semantic_segmentation/manager.py +51 -28
- {valor_lite-0.36.3.dist-info → valor_lite-0.36.5.dist-info}/METADATA +1 -1
- {valor_lite-0.36.3.dist-info → valor_lite-0.36.5.dist-info}/RECORD +8 -8
- {valor_lite-0.36.3.dist-info → valor_lite-0.36.5.dist-info}/WHEEL +0 -0
- {valor_lite-0.36.3.dist-info → valor_lite-0.36.5.dist-info}/top_level.txt +0 -0
|
@@ -144,18 +144,18 @@ class Evaluator:
|
|
|
144
144
|
|
|
145
145
|
def create_filter(
|
|
146
146
|
self,
|
|
147
|
-
|
|
148
|
-
labels: list[str] | None = None,
|
|
147
|
+
datums: list[str] | NDArray[np.int32] | None = None,
|
|
148
|
+
labels: list[str] | NDArray[np.int32] | None = None,
|
|
149
149
|
) -> Filter:
|
|
150
150
|
"""
|
|
151
151
|
Creates a filter object.
|
|
152
152
|
|
|
153
153
|
Parameters
|
|
154
154
|
----------
|
|
155
|
-
|
|
156
|
-
An optional list of string uids representing datums.
|
|
157
|
-
labels : list[str], optional
|
|
158
|
-
An optional list of labels.
|
|
155
|
+
datums : list[str] | NDArray[int32], optional
|
|
156
|
+
An optional list of string uids or integer indices representing datums.
|
|
157
|
+
labels : list[str] | NDArray[int32], optional
|
|
158
|
+
An optional list of strings or integer indices representing labels.
|
|
159
159
|
|
|
160
160
|
Returns
|
|
161
161
|
-------
|
|
@@ -165,50 +165,72 @@ class Evaluator:
|
|
|
165
165
|
# create datum mask
|
|
166
166
|
n_pairs = self._detailed_pairs.shape[0]
|
|
167
167
|
datum_mask = np.ones(n_pairs, dtype=np.bool_)
|
|
168
|
-
if
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
if datums is not None:
|
|
169
|
+
# convert to array of valid datum indices
|
|
170
|
+
if isinstance(datums, list):
|
|
171
|
+
datums = np.array(
|
|
172
|
+
[self.datum_id_to_index[uid] for uid in datums],
|
|
173
|
+
dtype=np.int32,
|
|
174
174
|
)
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
)
|
|
175
|
+
|
|
176
|
+
# return early if all data removed
|
|
177
|
+
if datums.size == 0:
|
|
178
|
+
raise EmptyFilterError("filter removes all datums")
|
|
179
|
+
|
|
180
|
+
# validate indices
|
|
181
|
+
if datums.max() >= len(self.index_to_datum_id):
|
|
182
|
+
raise ValueError(
|
|
183
|
+
f"datum index '{datums.max()}' exceeds total number of datums"
|
|
184
|
+
)
|
|
185
|
+
elif datums.min() < 0:
|
|
186
|
+
raise ValueError(
|
|
187
|
+
f"datum index '{datums.min()}' is a negative value"
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
# create datum mask
|
|
191
|
+
datum_mask = np.isin(self._detailed_pairs[:, 0], datums)
|
|
182
192
|
|
|
183
193
|
# collect valid label indices
|
|
184
|
-
valid_label_indices = None
|
|
185
194
|
if labels is not None:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
metadata=Metadata(),
|
|
195
|
+
# convert to array of valid label indices
|
|
196
|
+
if isinstance(labels, list):
|
|
197
|
+
labels = np.array(
|
|
198
|
+
[self.label_to_index[label] for label in labels]
|
|
191
199
|
)
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
200
|
+
|
|
201
|
+
# return early if all data removed
|
|
202
|
+
if labels.size == 0:
|
|
203
|
+
raise EmptyFilterError("filter removes all labels")
|
|
204
|
+
|
|
205
|
+
# validate indices
|
|
206
|
+
if labels.max() >= len(self.index_to_label):
|
|
207
|
+
raise ValueError(
|
|
208
|
+
f"label index '{labels.max()}' exceeds total number of labels"
|
|
209
|
+
)
|
|
210
|
+
elif labels.min() < 0:
|
|
211
|
+
raise ValueError(
|
|
212
|
+
f"label index '{labels.min()}' is a negative value"
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
# add -1 to represent null labels which should not be filtered
|
|
216
|
+
labels = np.concatenate([labels, np.array([-1])])
|
|
195
217
|
|
|
196
218
|
filtered_detailed_pairs, _ = filter_cache(
|
|
197
219
|
detailed_pairs=self._detailed_pairs,
|
|
198
220
|
datum_mask=datum_mask,
|
|
199
|
-
valid_label_indices=
|
|
221
|
+
valid_label_indices=labels,
|
|
200
222
|
n_labels=self.metadata.number_of_labels,
|
|
201
223
|
)
|
|
202
224
|
|
|
203
225
|
number_of_datums = (
|
|
204
|
-
|
|
205
|
-
if
|
|
226
|
+
datums.size
|
|
227
|
+
if datums is not None
|
|
206
228
|
else self.metadata.number_of_datums
|
|
207
229
|
)
|
|
208
230
|
|
|
209
231
|
return Filter(
|
|
210
232
|
datum_mask=datum_mask,
|
|
211
|
-
valid_label_indices=
|
|
233
|
+
valid_label_indices=labels,
|
|
212
234
|
metadata=Metadata.create(
|
|
213
235
|
detailed_pairs=filtered_detailed_pairs,
|
|
214
236
|
number_of_datums=number_of_datums,
|
|
@@ -173,38 +173,52 @@ class Evaluator:
|
|
|
173
173
|
|
|
174
174
|
def create_filter(
|
|
175
175
|
self,
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
labels: list[str] | None = None,
|
|
176
|
+
datums: list[str] | NDArray[np.int32] | None = None,
|
|
177
|
+
groundtruths: list[str] | NDArray[np.int32] | None = None,
|
|
178
|
+
predictions: list[str] | NDArray[np.int32] | None = None,
|
|
179
|
+
labels: list[str] | NDArray[np.int32] | None = None,
|
|
180
180
|
) -> Filter:
|
|
181
181
|
"""
|
|
182
182
|
Creates a filter object.
|
|
183
183
|
|
|
184
184
|
Parameters
|
|
185
185
|
----------
|
|
186
|
-
|
|
187
|
-
An optional list of string
|
|
188
|
-
|
|
189
|
-
An optional list of string
|
|
190
|
-
|
|
191
|
-
An optional list of string
|
|
192
|
-
labels : list[str], optional
|
|
193
|
-
An optional list of labels to keep.
|
|
186
|
+
datum : list[str] | NDArray[int32], optional
|
|
187
|
+
An optional list of string ids or indices representing datums to keep.
|
|
188
|
+
groundtruth : list[str] | NDArray[int32], optional
|
|
189
|
+
An optional list of string ids or indices representing ground truth annotations to keep.
|
|
190
|
+
prediction : list[str] | NDArray[int32], optional
|
|
191
|
+
An optional list of string ids or indices representing prediction annotations to keep.
|
|
192
|
+
labels : list[str] | NDArray[int32], optional
|
|
193
|
+
An optional list of labels or indices to keep.
|
|
194
194
|
"""
|
|
195
195
|
mask_datums = np.ones(self._detailed_pairs.shape[0], dtype=np.bool_)
|
|
196
196
|
|
|
197
197
|
# filter datums
|
|
198
|
-
if
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
198
|
+
if datums is not None:
|
|
199
|
+
# convert to indices
|
|
200
|
+
if isinstance(datums, list):
|
|
201
|
+
datums = np.array(
|
|
202
|
+
[self.datum_id_to_index[uid] for uid in datums],
|
|
203
|
+
dtype=np.int32,
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
# validate indices
|
|
207
|
+
if datums.size == 0:
|
|
208
|
+
raise EmptyFilterError(
|
|
209
|
+
"filter removes all datums"
|
|
210
|
+
) # validate indices
|
|
211
|
+
elif datums.min() < 0:
|
|
212
|
+
raise ValueError(
|
|
213
|
+
f"datum index cannot be negative '{datums.min()}'"
|
|
214
|
+
)
|
|
215
|
+
elif datums.max() >= len(self.index_to_datum_id):
|
|
216
|
+
raise ValueError(
|
|
217
|
+
f"datum index cannot exceed total number of datums '{datums.max()}'"
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# apply to mask
|
|
221
|
+
mask_datums = np.isin(self._detailed_pairs[:, 0], datums)
|
|
208
222
|
|
|
209
223
|
filtered_detailed_pairs = self._detailed_pairs[mask_datums]
|
|
210
224
|
n_pairs = self._detailed_pairs[mask_datums].shape[0]
|
|
@@ -212,43 +226,93 @@ class Evaluator:
|
|
|
212
226
|
mask_predictions = np.zeros_like(mask_groundtruths)
|
|
213
227
|
|
|
214
228
|
# filter by ground truth annotation ids
|
|
215
|
-
if
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
229
|
+
if groundtruths is not None:
|
|
230
|
+
# convert to indices
|
|
231
|
+
if isinstance(groundtruths, list):
|
|
232
|
+
groundtruths = np.array(
|
|
233
|
+
[
|
|
234
|
+
self.groundtruth_id_to_index[uid]
|
|
235
|
+
for uid in groundtruths
|
|
236
|
+
],
|
|
237
|
+
dtype=np.int32,
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
# validate indices
|
|
241
|
+
if groundtruths.size == 0:
|
|
242
|
+
warnings.warn("filter removes all ground truths")
|
|
243
|
+
elif groundtruths.min() < 0:
|
|
244
|
+
raise ValueError(
|
|
245
|
+
f"groundtruth annotation index cannot be negative '{groundtruths.min()}'"
|
|
246
|
+
)
|
|
247
|
+
elif groundtruths.max() >= len(self.index_to_groundtruth_id):
|
|
248
|
+
raise ValueError(
|
|
249
|
+
f"groundtruth annotation index cannot exceed total number of groundtruths '{groundtruths.max()}'"
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
# apply to mask
|
|
220
253
|
mask_groundtruths[
|
|
221
254
|
~np.isin(
|
|
222
255
|
filtered_detailed_pairs[:, 1],
|
|
223
|
-
|
|
256
|
+
groundtruths,
|
|
224
257
|
)
|
|
225
258
|
] = True
|
|
226
259
|
|
|
227
260
|
# filter by prediction annotation ids
|
|
228
|
-
if
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
261
|
+
if predictions is not None:
|
|
262
|
+
# convert to indices
|
|
263
|
+
if isinstance(predictions, list):
|
|
264
|
+
predictions = np.array(
|
|
265
|
+
[self.prediction_id_to_index[uid] for uid in predictions],
|
|
266
|
+
dtype=np.int32,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
# validate indices
|
|
270
|
+
if predictions.size == 0:
|
|
271
|
+
warnings.warn("filter removes all predictions")
|
|
272
|
+
elif predictions.min() < 0:
|
|
273
|
+
raise ValueError(
|
|
274
|
+
f"prediction annotation index cannot be negative '{predictions.min()}'"
|
|
275
|
+
)
|
|
276
|
+
elif predictions.max() >= len(self.index_to_prediction_id):
|
|
277
|
+
raise ValueError(
|
|
278
|
+
f"prediction annotation index cannot exceed total number of predictions '{predictions.max()}'"
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
# apply to mask
|
|
233
282
|
mask_predictions[
|
|
234
283
|
~np.isin(
|
|
235
284
|
filtered_detailed_pairs[:, 2],
|
|
236
|
-
|
|
285
|
+
predictions,
|
|
237
286
|
)
|
|
238
287
|
] = True
|
|
239
288
|
|
|
240
289
|
# filter by labels
|
|
241
290
|
if labels is not None:
|
|
242
|
-
|
|
291
|
+
# convert to indices
|
|
292
|
+
if isinstance(labels, list):
|
|
293
|
+
labels = np.array(
|
|
294
|
+
[self.label_to_index[label] for label in labels]
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
# validate indices
|
|
298
|
+
if labels.size == 0:
|
|
243
299
|
raise EmptyFilterError("filter removes all labels")
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
300
|
+
elif labels.min() < 0:
|
|
301
|
+
raise ValueError(
|
|
302
|
+
f"label index cannot be negative '{labels.min()}'"
|
|
303
|
+
)
|
|
304
|
+
elif labels.max() >= len(self.index_to_label):
|
|
305
|
+
raise ValueError(
|
|
306
|
+
f"label index cannot exceed total number of labels '{labels.max()}'"
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
# apply to mask
|
|
310
|
+
labels = np.concatenate([labels, np.array([-1])]) # add null label
|
|
247
311
|
mask_groundtruths[
|
|
248
|
-
~np.isin(filtered_detailed_pairs[:, 3],
|
|
312
|
+
~np.isin(filtered_detailed_pairs[:, 3], labels)
|
|
249
313
|
] = True
|
|
250
314
|
mask_predictions[
|
|
251
|
-
~np.isin(filtered_detailed_pairs[:, 4],
|
|
315
|
+
~np.isin(filtered_detailed_pairs[:, 4], labels)
|
|
252
316
|
] = True
|
|
253
317
|
|
|
254
318
|
filtered_detailed_pairs, _, _ = filter_cache(
|
|
@@ -260,8 +324,8 @@ class Evaluator:
|
|
|
260
324
|
)
|
|
261
325
|
|
|
262
326
|
number_of_datums = (
|
|
263
|
-
|
|
264
|
-
if
|
|
327
|
+
datums.size
|
|
328
|
+
if datums is not None
|
|
265
329
|
else np.unique(filtered_detailed_pairs[:, 0]).size
|
|
266
330
|
)
|
|
267
331
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import warnings
|
|
1
2
|
from dataclasses import dataclass, field
|
|
2
3
|
|
|
3
4
|
import numpy as np
|
|
@@ -79,30 +80,37 @@ class Segmentation:
|
|
|
79
80
|
)
|
|
80
81
|
self.size = self.shape[0] * self.shape[1]
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if self.shape != groundtruth.mask.shape:
|
|
85
|
-
raise ValueError(
|
|
86
|
-
f"ground truth masks for datum '{self.uid}' should have shape '{self.shape}'. Received mask with shape '{groundtruth.mask.shape}'"
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
if mask_accumulation is None:
|
|
90
|
-
mask_accumulation = groundtruth.mask.copy()
|
|
91
|
-
elif np.logical_and(mask_accumulation, groundtruth.mask).any():
|
|
92
|
-
raise ValueError("ground truth masks cannot overlap")
|
|
93
|
-
else:
|
|
94
|
-
mask_accumulation = mask_accumulation | groundtruth.mask
|
|
83
|
+
self._validate_bitmasks(self.groundtruths, "ground truth")
|
|
84
|
+
self._validate_bitmasks(self.predictions, "prediction")
|
|
95
85
|
|
|
86
|
+
def _validate_bitmasks(self, bitmasks: list[Bitmask], key: str):
|
|
96
87
|
mask_accumulation = None
|
|
97
|
-
|
|
98
|
-
|
|
88
|
+
mask_overlap_accumulation = None
|
|
89
|
+
for idx, bitmask in enumerate(bitmasks):
|
|
90
|
+
if not isinstance(bitmask, Bitmask):
|
|
91
|
+
raise ValueError(f"expected 'Bitmask', got '{bitmask}'")
|
|
92
|
+
if self.shape != bitmask.mask.shape:
|
|
99
93
|
raise ValueError(
|
|
100
|
-
f"
|
|
94
|
+
f"{key} masks for datum '{self.uid}' should have shape '{self.shape}'. Received mask with shape '{bitmask.mask.shape}'"
|
|
101
95
|
)
|
|
102
96
|
|
|
103
97
|
if mask_accumulation is None:
|
|
104
|
-
mask_accumulation =
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
mask_accumulation = bitmask.mask.copy()
|
|
99
|
+
mask_overlap_accumulation = np.zeros_like(mask_accumulation)
|
|
100
|
+
elif np.logical_and(mask_accumulation, bitmask.mask).any():
|
|
101
|
+
mask_overlap = np.logical_and(mask_accumulation, bitmask.mask)
|
|
102
|
+
bitmasks[idx].mask[mask_overlap] = False
|
|
103
|
+
mask_overlap_accumulation = (
|
|
104
|
+
mask_overlap_accumulation | mask_overlap
|
|
105
|
+
)
|
|
107
106
|
else:
|
|
108
|
-
mask_accumulation = mask_accumulation |
|
|
107
|
+
mask_accumulation = mask_accumulation | bitmask.mask
|
|
108
|
+
if (
|
|
109
|
+
mask_overlap_accumulation is not None
|
|
110
|
+
and mask_overlap_accumulation.any()
|
|
111
|
+
):
|
|
112
|
+
count = mask_overlap_accumulation.sum()
|
|
113
|
+
total = mask_overlap_accumulation.size
|
|
114
|
+
warnings.warn(
|
|
115
|
+
f"{key} masks for datum '{self.uid}' had {count} / {total} pixels overlapped."
|
|
116
|
+
)
|
|
@@ -127,18 +127,18 @@ class Evaluator:
|
|
|
127
127
|
|
|
128
128
|
def create_filter(
|
|
129
129
|
self,
|
|
130
|
-
|
|
131
|
-
labels: list[str] | None = None,
|
|
130
|
+
datums: list[str] | NDArray[np.int64] | None = None,
|
|
131
|
+
labels: list[str] | NDArray[np.int64] | None = None,
|
|
132
132
|
) -> Filter:
|
|
133
133
|
"""
|
|
134
134
|
Creates a filter for use with the evaluator.
|
|
135
135
|
|
|
136
136
|
Parameters
|
|
137
137
|
----------
|
|
138
|
-
|
|
139
|
-
An optional list of string
|
|
140
|
-
labels : list[str], optional
|
|
141
|
-
An optional list of labels.
|
|
138
|
+
datums : list[str] | NDArray[int64], optional
|
|
139
|
+
An optional list of string ids or array of indices representing datums.
|
|
140
|
+
labels : list[str] | NDArray[int64], optional
|
|
141
|
+
An optional list of labels or array of indices.
|
|
142
142
|
|
|
143
143
|
Returns
|
|
144
144
|
-------
|
|
@@ -150,38 +150,61 @@ class Evaluator:
|
|
|
150
150
|
self.metadata.number_of_labels + 1, dtype=np.bool_
|
|
151
151
|
)
|
|
152
152
|
|
|
153
|
-
if
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
if datums is not None:
|
|
154
|
+
# convert to indices
|
|
155
|
+
if isinstance(datums, list):
|
|
156
|
+
datums = np.array(
|
|
157
|
+
[self.datum_id_to_index[uid] for uid in datums],
|
|
158
|
+
dtype=np.int64,
|
|
159
159
|
)
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
160
|
+
|
|
161
|
+
# validate indices
|
|
162
|
+
if datums.size == 0:
|
|
163
|
+
raise EmptyFilterError(
|
|
164
|
+
"filter removes all datums"
|
|
165
|
+
) # validate indices
|
|
166
|
+
elif datums.min() < 0:
|
|
167
|
+
raise ValueError(
|
|
168
|
+
f"datum index cannot be negative '{datums.min()}'"
|
|
169
|
+
)
|
|
170
|
+
elif datums.max() >= len(self.index_to_datum_id):
|
|
171
|
+
raise ValueError(
|
|
172
|
+
f"datum index cannot exceed total number of datums '{datums.max()}'"
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# apply to mask
|
|
176
|
+
datums.sort()
|
|
165
177
|
mask_valid_datums = (
|
|
166
178
|
np.arange(self._confusion_matrices.shape[0]).reshape(-1, 1)
|
|
167
|
-
==
|
|
179
|
+
== datums.reshape(1, -1)
|
|
168
180
|
).any(axis=1)
|
|
169
181
|
datum_mask[~mask_valid_datums] = False
|
|
170
182
|
|
|
171
183
|
if labels is not None:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
184
|
+
# convert to indices
|
|
185
|
+
if isinstance(labels, list):
|
|
186
|
+
labels = np.array(
|
|
187
|
+
[self.label_to_index[label] for label in labels],
|
|
188
|
+
dtype=np.int64,
|
|
177
189
|
)
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
190
|
+
|
|
191
|
+
# validate indices
|
|
192
|
+
if labels.size == 0:
|
|
193
|
+
raise EmptyFilterError("filter removes all labels")
|
|
194
|
+
elif labels.min() < 0:
|
|
195
|
+
raise ValueError(
|
|
196
|
+
f"label index cannot be negative '{labels.min()}'"
|
|
197
|
+
)
|
|
198
|
+
elif labels.max() >= len(self.index_to_label):
|
|
199
|
+
raise ValueError(
|
|
200
|
+
f"label index cannot exceed total number of labels '{labels.max()}'"
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
# apply to mask
|
|
204
|
+
labels = np.concatenate([labels, np.array([-1])])
|
|
182
205
|
label_range = np.arange(self.metadata.number_of_labels + 1) - 1
|
|
183
206
|
mask_valid_labels = (
|
|
184
|
-
label_range.reshape(-1, 1) ==
|
|
207
|
+
label_range.reshape(-1, 1) == labels.reshape(1, -1)
|
|
185
208
|
).any(axis=1)
|
|
186
209
|
label_mask[~mask_valid_labels] = True
|
|
187
210
|
|
|
@@ -6,21 +6,21 @@ valor_lite/schemas.py,sha256=pB0MrPx5qFLbwBWDiOUUm-vmXdWvbJLFCBmKgbcbI5g,198
|
|
|
6
6
|
valor_lite/classification/__init__.py,sha256=KXaVwyqAbeeeEq7bzNPyt4GTpbxhrABjV7lR58KR6Y4,440
|
|
7
7
|
valor_lite/classification/annotation.py,sha256=0aUOvcwBAZgiNOJuyh-pXyNTG7vP7r8CUfnU3OmpUwQ,1113
|
|
8
8
|
valor_lite/classification/computation.py,sha256=kB5n-RHzDsKG75Guvgg25xAOeLEQCq1TgjwHwfwbQ60,12010
|
|
9
|
-
valor_lite/classification/manager.py,sha256=
|
|
9
|
+
valor_lite/classification/manager.py,sha256=JZwA9sf-OG7p7uK5qIo-D711kSpBDDeTcXsPr1uuIBI,16884
|
|
10
10
|
valor_lite/classification/metric.py,sha256=nSNWjoxQ1ou7gxTPOYxLNoUYf7avKQzJq3NHR9jzM48,11693
|
|
11
11
|
valor_lite/classification/numpy_compatibility.py,sha256=roqtTetsm1_HxuaejrthQdydjsRIy-FpXpGb86cLh_E,365
|
|
12
12
|
valor_lite/classification/utilities.py,sha256=jAcir7dW-o4I2gk_NEmlRr8j8Iniyyq9QT5j3PMxVHk,6435
|
|
13
13
|
valor_lite/object_detection/__init__.py,sha256=eSrVAOpSykk1CfHXIKy1necplonUGxjyVKyDQ5UZoBQ,343
|
|
14
14
|
valor_lite/object_detection/annotation.py,sha256=LVec-rIk408LuFxcOoIkPk0QZMWSSxbmsady4wapC1s,7007
|
|
15
15
|
valor_lite/object_detection/computation.py,sha256=njLN-1_yql56NSVxY4KGKohxJUIStPYczVTpEpj5geA,24478
|
|
16
|
-
valor_lite/object_detection/manager.py,sha256
|
|
16
|
+
valor_lite/object_detection/manager.py,sha256=HfSbq4vfKv2Q3kBRIqpBbq7VCrOxCl7_Pd80yUl6TKQ,30053
|
|
17
17
|
valor_lite/object_detection/metric.py,sha256=sUYSZwXYfIyfmXG6_7Tje1_ZL_QwvecPq85jrGmwOWE,22739
|
|
18
18
|
valor_lite/object_detection/utilities.py,sha256=tNdv5dL7JhzOamGQkZ8x3ocZoTwPI6K8rcRAGMhp2nc,11217
|
|
19
19
|
valor_lite/semantic_segmentation/__init__.py,sha256=3YdItCThY_tW23IChCBm-R0zahnbZ06JDVjs-gQLVes,293
|
|
20
|
-
valor_lite/semantic_segmentation/annotation.py,sha256=
|
|
20
|
+
valor_lite/semantic_segmentation/annotation.py,sha256=KrDqmSVzBsutxEdh0Kl8VqcEpTe4S68UdkVg-nyxcFg,4025
|
|
21
21
|
valor_lite/semantic_segmentation/benchmark.py,sha256=uxd0SiDY3npsgU5pdeT4HvNP_au9GVRWzoqT6br9DtM,5961
|
|
22
22
|
valor_lite/semantic_segmentation/computation.py,sha256=ZO0qAFmq8lN73UjCyiynSv18qQDtn35FNOmvuXY4rOw,7380
|
|
23
|
-
valor_lite/semantic_segmentation/manager.py,sha256=
|
|
23
|
+
valor_lite/semantic_segmentation/manager.py,sha256=h5w8Xl-O9gZxAzqT-ESofVE2th7d3cYahx4hHBic3pw,14256
|
|
24
24
|
valor_lite/semantic_segmentation/metric.py,sha256=T9RfPJf4WgqGQTXYvSy08vJG5bjXXJnyYZeW0mlxMa8,7132
|
|
25
25
|
valor_lite/semantic_segmentation/utilities.py,sha256=zgVmV8nyKWQK-T4Ov8cZFQzOmTKc5EL7errKFvc2H0g,2957
|
|
26
26
|
valor_lite/text_generation/__init__.py,sha256=pGhpWCSZjLM0pPHCtPykAfos55B8ie3mi9EzbNxfj-U,356
|
|
@@ -35,7 +35,7 @@ valor_lite/text_generation/llm/instructions.py,sha256=fz2onBZZWcl5W8iy7zEWkPGU9N
|
|
|
35
35
|
valor_lite/text_generation/llm/integrations.py,sha256=-rTfdAjq1zH-4ixwYuMQEOQ80pIFzMTe0BYfroVx3Pg,6974
|
|
36
36
|
valor_lite/text_generation/llm/utilities.py,sha256=bjqatGgtVTcl1PrMwiDKTYPGJXKrBrx7PDtzIblGSys,1178
|
|
37
37
|
valor_lite/text_generation/llm/validators.py,sha256=Wzr5RlfF58_2wOU-uTw7C8skan_fYdhy4Gfn0jSJ8HM,2700
|
|
38
|
-
valor_lite-0.36.
|
|
39
|
-
valor_lite-0.36.
|
|
40
|
-
valor_lite-0.36.
|
|
41
|
-
valor_lite-0.36.
|
|
38
|
+
valor_lite-0.36.5.dist-info/METADATA,sha256=Ttur0Z2wqHuaN6cOYousNZUqBL9A9qZFEnZejPSFRdo,5071
|
|
39
|
+
valor_lite-0.36.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
40
|
+
valor_lite-0.36.5.dist-info/top_level.txt,sha256=9ujykxSwpl2Hu0_R95UQTR_l07k9UUTSdrpiqmq6zc4,11
|
|
41
|
+
valor_lite-0.36.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|