ultralytics 8.3.156__py3-none-any.whl → 8.3.157__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.
- tests/test_integrations.py +3 -3
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/datasets/Objects365.yaml +2 -2
- ultralytics/data/augment.py +3 -1
- ultralytics/data/dataset.py +37 -16
- ultralytics/engine/exporter.py +2 -4
- ultralytics/models/yolo/detect/val.py +18 -29
- ultralytics/models/yolo/pose/predict.py +1 -1
- ultralytics/models/yolo/pose/val.py +15 -15
- ultralytics/models/yolo/segment/val.py +25 -32
- ultralytics/solutions/similarity_search.py +1 -1
- ultralytics/utils/callbacks/comet.py +1 -1
- {ultralytics-8.3.156.dist-info → ultralytics-8.3.157.dist-info}/METADATA +3 -3
- {ultralytics-8.3.156.dist-info → ultralytics-8.3.157.dist-info}/RECORD +18 -18
- {ultralytics-8.3.156.dist-info → ultralytics-8.3.157.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.156.dist-info → ultralytics-8.3.157.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.156.dist-info → ultralytics-8.3.157.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.156.dist-info → ultralytics-8.3.157.dist-info}/top_level.txt +0 -0
tests/test_integrations.py
CHANGED
@@ -122,9 +122,9 @@ def test_triton():
|
|
122
122
|
subprocess.call(f"docker kill {container_id}", shell=True)
|
123
123
|
|
124
124
|
|
125
|
-
@pytest.mark.skipif(not check_requirements("
|
126
|
-
def
|
127
|
-
"""Validate YOLO model predictions on COCO dataset using
|
125
|
+
@pytest.mark.skipif(not check_requirements("faster-coco-eval", install=False), reason="faster-coco-eval not installed")
|
126
|
+
def test_faster_coco_eval():
|
127
|
+
"""Validate YOLO model predictions on COCO dataset using faster-coco-eval."""
|
128
128
|
from ultralytics.models.yolo.detect import DetectionValidator
|
129
129
|
from ultralytics.models.yolo.pose import PoseValidator
|
130
130
|
from ultralytics.models.yolo.segment import SegmentationValidator
|
ultralytics/__init__.py
CHANGED
@@ -393,8 +393,8 @@ download: |
|
|
393
393
|
from ultralytics.utils.downloads import download
|
394
394
|
from ultralytics.utils.ops import xyxy2xywhn
|
395
395
|
|
396
|
-
check_requirements(
|
397
|
-
from
|
396
|
+
check_requirements("faster-coco-eval")
|
397
|
+
from faster_coco_eval import COCO
|
398
398
|
|
399
399
|
# Make Directories
|
400
400
|
dir = Path(yaml["path"]) # dataset root dir
|
ultralytics/data/augment.py
CHANGED
@@ -2170,7 +2170,9 @@ class Format:
|
|
2170
2170
|
labels["cls"] = torch.from_numpy(cls) if nl else torch.zeros(nl)
|
2171
2171
|
labels["bboxes"] = torch.from_numpy(instances.bboxes) if nl else torch.zeros((nl, 4))
|
2172
2172
|
if self.return_keypoint:
|
2173
|
-
labels["keypoints"] =
|
2173
|
+
labels["keypoints"] = (
|
2174
|
+
torch.empty(0, 3) if instances.keypoints is None else torch.from_numpy(instances.keypoints)
|
2175
|
+
)
|
2174
2176
|
if self.normalize:
|
2175
2177
|
labels["keypoints"][..., 0] /= w
|
2176
2178
|
labels["keypoints"][..., 1] /= h
|
ultralytics/data/dataset.py
CHANGED
@@ -5,7 +5,7 @@ from collections import defaultdict
|
|
5
5
|
from itertools import repeat
|
6
6
|
from multiprocessing.pool import ThreadPool
|
7
7
|
from pathlib import Path
|
8
|
-
from typing import Dict, List, Optional, Tuple
|
8
|
+
from typing import Any, Dict, List, Optional, Tuple
|
9
9
|
|
10
10
|
import cv2
|
11
11
|
import numpy as np
|
@@ -460,21 +460,42 @@ class GroundingDataset(YOLODataset):
|
|
460
460
|
"""
|
461
461
|
return []
|
462
462
|
|
463
|
-
def verify_labels(self, labels: List[Dict]) -> None:
|
464
|
-
"""
|
463
|
+
def verify_labels(self, labels: List[Dict[str, Any]]) -> None:
|
464
|
+
"""
|
465
|
+
Verify the number of instances in the dataset matches expected counts.
|
466
|
+
|
467
|
+
This method checks if the total number of bounding box instances in the provided
|
468
|
+
labels matches the expected count for known datasets. It performs validation
|
469
|
+
against a predefined set of datasets with known instance counts.
|
470
|
+
|
471
|
+
Args:
|
472
|
+
labels (List[Dict[str, Any]]): List of label dictionaries, where each dictionary
|
473
|
+
contains dataset annotations. Each label dict must have a 'bboxes' key with
|
474
|
+
a numpy array or tensor containing bounding box coordinates.
|
475
|
+
|
476
|
+
Raises:
|
477
|
+
AssertionError: If the actual instance count doesn't match the expected count
|
478
|
+
for a recognized dataset.
|
479
|
+
|
480
|
+
Note:
|
481
|
+
For unrecognized datasets (those not in the predefined expected_counts),
|
482
|
+
a warning is logged and verification is skipped.
|
483
|
+
"""
|
484
|
+
expected_counts = {
|
485
|
+
"final_mixed_train_no_coco_segm": 3662344,
|
486
|
+
"final_mixed_train_no_coco": 3681235,
|
487
|
+
"final_flickr_separateGT_train_segm": 638214,
|
488
|
+
"final_flickr_separateGT_train": 640704,
|
489
|
+
}
|
490
|
+
|
465
491
|
instance_count = sum(label["bboxes"].shape[0] for label in labels)
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
assert instance_count == 638214
|
472
|
-
elif "final_flickr_separateGT_train" in self.json_file:
|
473
|
-
assert instance_count == 640704
|
474
|
-
else:
|
475
|
-
assert False
|
492
|
+
for data_name, count in expected_counts.items():
|
493
|
+
if data_name in self.json_file:
|
494
|
+
assert instance_count == count, f"'{self.json_file}' has {instance_count} instances, expected {count}."
|
495
|
+
return
|
496
|
+
LOGGER.warning(f"Skipping instance count verification for unrecognized dataset '{self.json_file}'")
|
476
497
|
|
477
|
-
def cache_labels(self, path: Path = Path("./labels.cache")) -> Dict:
|
498
|
+
def cache_labels(self, path: Path = Path("./labels.cache")) -> Dict[str, Any]:
|
478
499
|
"""
|
479
500
|
Load annotations from a JSON file, filter, and normalize bounding boxes for each image.
|
480
501
|
|
@@ -482,7 +503,7 @@ class GroundingDataset(YOLODataset):
|
|
482
503
|
path (Path): Path where to save the cache file.
|
483
504
|
|
484
505
|
Returns:
|
485
|
-
(
|
506
|
+
(Dict[str, Any]): Dictionary containing cached labels and related information.
|
486
507
|
"""
|
487
508
|
x = {"labels": []}
|
488
509
|
LOGGER.info("Loading annotation file...")
|
@@ -581,7 +602,7 @@ class GroundingDataset(YOLODataset):
|
|
581
602
|
cache, _ = self.cache_labels(cache_path), False # run cache ops
|
582
603
|
[cache.pop(k) for k in ("hash", "version")] # remove items
|
583
604
|
labels = cache["labels"]
|
584
|
-
|
605
|
+
self.verify_labels(labels)
|
585
606
|
self.im_files = [str(label["im_file"]) for label in labels]
|
586
607
|
if LOCAL_RANK in {-1, 0}:
|
587
608
|
LOGGER.info(f"Load {self.json_file} from cache file {cache_path}")
|
ultralytics/engine/exporter.py
CHANGED
@@ -630,10 +630,8 @@ class Exporter:
|
|
630
630
|
@try_export
|
631
631
|
def export_openvino(self, prefix=colorstr("OpenVINO:")):
|
632
632
|
"""Export YOLO model to OpenVINO format."""
|
633
|
-
|
634
|
-
|
635
|
-
check_version(MACOS_VERSION, "<15.4", name="macOS ", hard=True, msg=msg)
|
636
|
-
check_requirements("openvino>=2024.0.0")
|
633
|
+
# OpenVINO <= 2025.1.0 error on macOS 15.4+: https://github.com/openvinotoolkit/openvino/issues/30023"
|
634
|
+
check_requirements("openvino>=2025.2.0" if MACOS and MACOS_VERSION >= "15.4" else "openvino>=2024.0.0")
|
637
635
|
import openvino as ov
|
638
636
|
|
639
637
|
LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...")
|
@@ -185,8 +185,6 @@ class DetectionValidator(BaseValidator):
|
|
185
185
|
|
186
186
|
cls = pbatch["cls"].cpu().numpy()
|
187
187
|
no_pred = len(predn["cls"]) == 0
|
188
|
-
if no_pred and len(cls) == 0:
|
189
|
-
continue
|
190
188
|
self.metrics.update_stats(
|
191
189
|
{
|
192
190
|
**self._process_batch(predn, pbatch),
|
@@ -401,40 +399,31 @@ class DetectionValidator(BaseValidator):
|
|
401
399
|
/ "annotations"
|
402
400
|
/ ("instances_val2017.json" if self.is_coco else f"lvis_v1_{self.args.split}.json")
|
403
401
|
) # annotations
|
404
|
-
|
405
|
-
LOGGER.info(f"\nEvaluating
|
406
|
-
try:
|
402
|
+
|
403
|
+
LOGGER.info(f"\nEvaluating faster-coco-eval mAP using {pred_json} and {anno_json}...")
|
404
|
+
try:
|
407
405
|
for x in pred_json, anno_json:
|
408
406
|
assert x.is_file(), f"{x} file not found"
|
409
|
-
check_requirements("
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
pred = anno.loadRes(str(pred_json)) # init predictions api (must pass string, not Path)
|
416
|
-
val = COCOeval(anno, pred, "bbox")
|
417
|
-
else:
|
418
|
-
from lvis import LVIS, LVISEval
|
419
|
-
|
420
|
-
anno = LVIS(str(anno_json)) # init annotations api
|
421
|
-
pred = anno._load_json(str(pred_json)) # init predictions api (must pass string, not Path)
|
422
|
-
val = LVISEval(anno, pred, "bbox")
|
407
|
+
check_requirements("faster-coco-eval>=1.6.7")
|
408
|
+
from faster_coco_eval import COCO, COCOeval_faster
|
409
|
+
|
410
|
+
anno = COCO(anno_json)
|
411
|
+
pred = anno.loadRes(pred_json)
|
412
|
+
val = COCOeval_faster(anno, pred, iouType="bbox", lvis_style=self.is_lvis, print_function=LOGGER.info)
|
423
413
|
val.params.imgIds = [int(Path(x).stem) for x in self.dataloader.dataset.im_files] # images to eval
|
424
414
|
val.evaluate()
|
425
415
|
val.accumulate()
|
426
416
|
val.summarize()
|
427
|
-
|
428
|
-
val.print_results() # explicitly call print_results
|
417
|
+
|
429
418
|
# update mAP50-95 and mAP50
|
430
|
-
stats[self.metrics.keys[-1]]
|
431
|
-
|
432
|
-
|
419
|
+
stats[self.metrics.keys[-1]] = val.stats_as_dict["AP_all"]
|
420
|
+
stats[self.metrics.keys[-2]] = val.stats_as_dict["AP_50"]
|
421
|
+
|
433
422
|
if self.is_lvis:
|
434
|
-
stats["metrics/APr(B)"] = val.
|
435
|
-
stats["metrics/APc(B)"] = val.
|
436
|
-
stats["metrics/APf(B)"] = val.
|
437
|
-
stats["fitness"] = val.
|
423
|
+
stats["metrics/APr(B)"] = val.stats_as_dict["APr"]
|
424
|
+
stats["metrics/APc(B)"] = val.stats_as_dict["APc"]
|
425
|
+
stats["metrics/APf(B)"] = val.stats_as_dict["APf"]
|
426
|
+
stats["fitness"] = val.stats_as_dict["AP_all"]
|
438
427
|
except Exception as e:
|
439
|
-
LOGGER.warning(f"
|
428
|
+
LOGGER.warning(f"faster-coco-eval unable to run: {e}")
|
440
429
|
return stats
|
@@ -73,7 +73,7 @@ class PosePredictor(DetectionPredictor):
|
|
73
73
|
"""
|
74
74
|
result = super().construct_result(pred, img, orig_img, img_path)
|
75
75
|
# Extract keypoints from prediction and reshape according to model's keypoint shape
|
76
|
-
pred_kpts = pred[:, 6:].view(len(pred), *self.model.kpt_shape)
|
76
|
+
pred_kpts = pred[:, 6:].view(len(pred), *self.model.kpt_shape)
|
77
77
|
# Scale keypoints coordinates to match the original image dimensions
|
78
78
|
pred_kpts = ops.scale_coords(img.shape[2:], pred_kpts, orig_img.shape)
|
79
79
|
result.update(keypoints=pred_kpts)
|
@@ -144,7 +144,7 @@ class PoseValidator(DetectionValidator):
|
|
144
144
|
"""
|
145
145
|
preds = super().postprocess(preds)
|
146
146
|
for pred in preds:
|
147
|
-
pred["keypoints"] = pred.pop("extra").
|
147
|
+
pred["keypoints"] = pred.pop("extra").view(-1, *self.kpt_shape) # remove extra if exists
|
148
148
|
return preds
|
149
149
|
|
150
150
|
def _prepare_batch(self, si: int, batch: Dict[str, Any]) -> Dict[str, Any]:
|
@@ -292,26 +292,26 @@ class PoseValidator(DetectionValidator):
|
|
292
292
|
if self.args.save_json and self.is_coco and len(self.jdict):
|
293
293
|
anno_json = self.data["path"] / "annotations/person_keypoints_val2017.json" # annotations
|
294
294
|
pred_json = self.save_dir / "predictions.json" # predictions
|
295
|
-
LOGGER.info(f"\nEvaluating
|
296
|
-
try:
|
297
|
-
check_requirements("
|
298
|
-
from
|
299
|
-
from pycocotools.cocoeval import COCOeval # noqa
|
295
|
+
LOGGER.info(f"\nEvaluating faster-coco-eval mAP using {pred_json} and {anno_json}...")
|
296
|
+
try:
|
297
|
+
check_requirements("faster-coco-eval>=1.6.7")
|
298
|
+
from faster_coco_eval import COCO, COCOeval_faster
|
300
299
|
|
301
300
|
for x in anno_json, pred_json:
|
302
301
|
assert x.is_file(), f"{x} file not found"
|
303
|
-
anno = COCO(
|
304
|
-
pred = anno.loadRes(
|
305
|
-
|
306
|
-
|
307
|
-
|
302
|
+
anno = COCO(anno_json) # init annotations api
|
303
|
+
pred = anno.loadRes(pred_json) # init predictions api (must pass string, not Path)
|
304
|
+
kwargs = dict(cocoGt=anno, cocoDt=pred, print_function=LOGGER.info)
|
305
|
+
for i, eval in enumerate(
|
306
|
+
[COCOeval_faster(iouType="bbox", **kwargs), COCOeval_faster(iouType="keypoints", **kwargs)]
|
307
|
+
):
|
308
|
+
eval.params.imgIds = [int(Path(x).stem) for x in self.dataloader.dataset.im_files] # im to eval
|
308
309
|
eval.evaluate()
|
309
310
|
eval.accumulate()
|
310
311
|
eval.summarize()
|
311
312
|
idx = i * 4 + 2
|
312
|
-
|
313
|
-
|
314
|
-
] # update mAP50-95 and mAP50
|
313
|
+
# update mAP50-95 and mAP50
|
314
|
+
stats[self.metrics.keys[idx + 1]], stats[self.metrics.keys[idx]] = eval.stats[:2]
|
315
315
|
except Exception as e:
|
316
|
-
LOGGER.warning(f"
|
316
|
+
LOGGER.warning(f"faster-coco-eval unable to run: {e}")
|
317
317
|
return stats
|
@@ -73,7 +73,7 @@ class SegmentationValidator(DetectionValidator):
|
|
73
73
|
"""
|
74
74
|
super().init_metrics(model)
|
75
75
|
if self.args.save_json:
|
76
|
-
check_requirements("
|
76
|
+
check_requirements("faster-coco-eval>=1.6.7")
|
77
77
|
# More accurate vs faster
|
78
78
|
self.process = ops.process_mask_native if self.args.save_json or self.args.save_txt else ops.process_mask
|
79
79
|
|
@@ -111,7 +111,11 @@ class SegmentationValidator(DetectionValidator):
|
|
111
111
|
pred["masks"] = (
|
112
112
|
self.process(proto[i], coefficient, pred["bboxes"], shape=imgsz)
|
113
113
|
if len(coefficient)
|
114
|
-
else torch.zeros(
|
114
|
+
else torch.zeros(
|
115
|
+
(0, *(imgsz if self.process is ops.process_mask_native else proto.shape[2:])),
|
116
|
+
dtype=torch.uint8,
|
117
|
+
device=pred["bboxes"].device,
|
118
|
+
)
|
115
119
|
)
|
116
120
|
return preds
|
117
121
|
|
@@ -240,7 +244,7 @@ class SegmentationValidator(DetectionValidator):
|
|
240
244
|
Examples:
|
241
245
|
>>> result = {"image_id": 42, "category_id": 18, "bbox": [258.15, 41.29, 348.26, 243.78], "score": 0.236}
|
242
246
|
"""
|
243
|
-
from
|
247
|
+
from faster_coco_eval.core.mask import encode # noqa
|
244
248
|
|
245
249
|
def single_encode(x):
|
246
250
|
"""Encode predicted masks as RLE and append results to jdict."""
|
@@ -270,54 +274,43 @@ class SegmentationValidator(DetectionValidator):
|
|
270
274
|
"""Return COCO-style instance segmentation evaluation metrics."""
|
271
275
|
if self.args.save_json and (self.is_lvis or self.is_coco) and len(self.jdict):
|
272
276
|
pred_json = self.save_dir / "predictions.json" # predictions
|
273
|
-
|
274
277
|
anno_json = (
|
275
278
|
self.data["path"]
|
276
279
|
/ "annotations"
|
277
280
|
/ ("instances_val2017.json" if self.is_coco else f"lvis_v1_{self.args.split}.json")
|
278
281
|
) # annotations
|
279
282
|
|
280
|
-
|
281
|
-
|
282
|
-
try: # https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoEvalDemo.ipynb
|
283
|
+
LOGGER.info(f"\nEvaluating faster-coco-eval mAP using {pred_json} and {anno_json}...")
|
284
|
+
try:
|
283
285
|
for x in anno_json, pred_json:
|
284
286
|
assert x.is_file(), f"{x} file not found"
|
285
|
-
check_requirements("
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
from lvis import LVIS, LVISEval
|
295
|
-
|
296
|
-
anno = LVIS(str(anno_json))
|
297
|
-
pred = anno._load_json(str(pred_json))
|
298
|
-
vals = [LVISEval(anno, pred, "bbox"), LVISEval(anno, pred, "segm")]
|
299
|
-
|
300
|
-
for i, eval in enumerate(vals):
|
287
|
+
check_requirements("faster-coco-eval>=1.6.7")
|
288
|
+
from faster_coco_eval import COCO, COCOeval_faster
|
289
|
+
|
290
|
+
anno = COCO(anno_json) # init annotations api
|
291
|
+
pred = anno.loadRes(pred_json) # init predictions api (must pass string, not Path)
|
292
|
+
kwargs = dict(cocoGt=anno, cocoDt=pred, lvis_style=self.is_lvis, print_function=LOGGER.info)
|
293
|
+
for i, eval in enumerate(
|
294
|
+
[COCOeval_faster(iouType="bbox", **kwargs), COCOeval_faster(iouType="segm", **kwargs)]
|
295
|
+
):
|
301
296
|
eval.params.imgIds = [int(Path(x).stem) for x in self.dataloader.dataset.im_files] # im to eval
|
302
297
|
eval.evaluate()
|
303
298
|
eval.accumulate()
|
304
299
|
eval.summarize()
|
305
|
-
if self.is_lvis:
|
306
|
-
eval.print_results()
|
307
300
|
idx = i * 4 + 2
|
308
301
|
# update mAP50-95 and mAP50
|
309
|
-
stats[self.metrics.keys[idx + 1]]
|
310
|
-
|
311
|
-
|
302
|
+
stats[self.metrics.keys[idx + 1]] = eval.stats_as_dict["AP_all"]
|
303
|
+
stats[self.metrics.keys[idx]] = eval.stats_as_dict["AP_50"]
|
304
|
+
|
312
305
|
if self.is_lvis:
|
313
306
|
tag = "B" if i == 0 else "M"
|
314
|
-
stats[f"metrics/APr({tag})"] = eval.
|
315
|
-
stats[f"metrics/APc({tag})"] = eval.
|
316
|
-
stats[f"metrics/APf({tag})"] = eval.
|
307
|
+
stats[f"metrics/APr({tag})"] = eval.stats_as_dict["APr"]
|
308
|
+
stats[f"metrics/APc({tag})"] = eval.stats_as_dict["APc"]
|
309
|
+
stats[f"metrics/APf({tag})"] = eval.stats_as_dict["APf"]
|
317
310
|
|
318
311
|
if self.is_lvis:
|
319
312
|
stats["fitness"] = stats["metrics/mAP50-95(B)"]
|
320
313
|
|
321
314
|
except Exception as e:
|
322
|
-
LOGGER.warning(f"
|
315
|
+
LOGGER.warning(f"faster-coco-eval unable to run: {e}")
|
323
316
|
return stats
|
@@ -203,7 +203,7 @@ class SearchApp:
|
|
203
203
|
data (str, optional): Path to directory containing images to index and search.
|
204
204
|
device (str, optional): Device to run inference on (e.g. 'cpu', 'cuda').
|
205
205
|
"""
|
206
|
-
check_requirements("flask")
|
206
|
+
check_requirements("flask>=3.0.1")
|
207
207
|
from flask import Flask, render_template, request
|
208
208
|
|
209
209
|
self.render_template = render_template
|
@@ -256,7 +256,7 @@ def _format_prediction_annotations(image_path, metadata, class_label_map=None, c
|
|
256
256
|
class_label_map = {class_map[k]: v for k, v in class_label_map.items()}
|
257
257
|
try:
|
258
258
|
# import pycotools utilities to decompress annotations for various tasks, e.g. segmentation
|
259
|
-
from
|
259
|
+
from faster_coco_eval.core.mask import decode # noqa
|
260
260
|
except ImportError:
|
261
261
|
decode = None
|
262
262
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.157
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -69,7 +69,7 @@ Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
|
69
69
|
Provides-Extra: solutions
|
70
70
|
Requires-Dist: shapely>=2.0.0; extra == "solutions"
|
71
71
|
Requires-Dist: streamlit>=1.29.0; extra == "solutions"
|
72
|
-
Requires-Dist: flask; extra == "solutions"
|
72
|
+
Requires-Dist: flask>=3.0.1; extra == "solutions"
|
73
73
|
Provides-Extra: logging
|
74
74
|
Requires-Dist: wandb; extra == "logging"
|
75
75
|
Requires-Dist: tensorboard; extra == "logging"
|
@@ -78,7 +78,7 @@ Provides-Extra: extra
|
|
78
78
|
Requires-Dist: hub-sdk>=0.0.12; extra == "extra"
|
79
79
|
Requires-Dist: ipython; extra == "extra"
|
80
80
|
Requires-Dist: albumentations>=1.4.6; extra == "extra"
|
81
|
-
Requires-Dist:
|
81
|
+
Requires-Dist: faster-coco-eval>=1.6.7; extra == "extra"
|
82
82
|
Dynamic: license-file
|
83
83
|
|
84
84
|
<div align="center">
|
@@ -4,10 +4,10 @@ tests/test_cli.py,sha256=Kpfxq_RlbKK1Z8xNScDUbre6GB7neZhXZAYGI1tiDS8,5660
|
|
4
4
|
tests/test_cuda.py,sha256=-nQsfF3lGfqLm6cIeu_BCiXqLj7HzpL7R1GzPEc6z2I,8128
|
5
5
|
tests/test_engine.py,sha256=Jpt2KVrltrEgh2-3Ykouz-2Z_2fza0eymL5ectRXadM,4922
|
6
6
|
tests/test_exports.py,sha256=HmMKOTCia9ZDC0VYc_EPmvBTM5LM5eeI1NF_pKjLpd8,9677
|
7
|
-
tests/test_integrations.py,sha256=
|
7
|
+
tests/test_integrations.py,sha256=kl_AKmE_Qs1GB0_91iVwbzNxofm_hFTt0zzU6JF-pg4,6323
|
8
8
|
tests/test_python.py,sha256=nOoaPDg-0j7ZPRz9-uGFny3uocxjUM1ze5wA3BpGxKQ,27865
|
9
9
|
tests/test_solutions.py,sha256=tuf6n_fsI8KvSdJrnc-cqP2qYdiYqCWuVrx0z9dOz3Q,13213
|
10
|
-
ultralytics/__init__.py,sha256=
|
10
|
+
ultralytics/__init__.py,sha256=2mwBem7xtvNmrW5pBkCtYV3rgq4UvYlvOHu6FkTIDKs,730
|
11
11
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
12
12
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
13
13
|
ultralytics/cfg/__init__.py,sha256=ds63URbbeRj5UxkCSyl62OrNw6HQy7xeit5-0wGDEKg,39699
|
@@ -18,7 +18,7 @@ ultralytics/cfg/datasets/DOTAv1.yaml,sha256=j_DvXVQzZ4dQmf8I7oPX4v9xO3WZXztxV4Xo
|
|
18
18
|
ultralytics/cfg/datasets/GlobalWheat2020.yaml,sha256=TgPAhAnQAwviZcWRkuVTEww3u9VJ86rBlJvjj58ENu4,2157
|
19
19
|
ultralytics/cfg/datasets/HomeObjects-3K.yaml,sha256=-7HrCmBkKVzfp5c7LCHg-nBZYMZ4j58QVHXz_4V6daQ,990
|
20
20
|
ultralytics/cfg/datasets/ImageNet.yaml,sha256=6F1GXJg80iS8PJTcbAVbZX7Eb25NdJAAZ4UIS8mmrhk,42543
|
21
|
-
ultralytics/cfg/datasets/Objects365.yaml,sha256=
|
21
|
+
ultralytics/cfg/datasets/Objects365.yaml,sha256=tAIb6zXQrGo48I9V5reoWeWIJT6ywJmvhg0ZCt0JX9s,9367
|
22
22
|
ultralytics/cfg/datasets/SKU-110K.yaml,sha256=EmYFUdlxmF4SnijaifO3dHaP_uf95Vgz4FdckHeEVEM,2558
|
23
23
|
ultralytics/cfg/datasets/VOC.yaml,sha256=xQOx67XQaYCgUjHxp4HjY94zx7ZOphDGlwgzxYfaed0,3800
|
24
24
|
ultralytics/cfg/datasets/VisDrone.yaml,sha256=jONp3ws_RL1Iccnp81ho-zVhLUE63QfcvdUJ395h-GY,3263
|
@@ -105,11 +105,11 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=TpRaK5kH_-QbjCQ7ekM4s_7j8I8ti3q8Hs7
|
|
105
105
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypgv26LGCtPDg,886
|
106
106
|
ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
|
107
107
|
ultralytics/data/annotator.py,sha256=uAgd7K-yudxiwdNqHz0ubfFg5JsfNlae4cgxdvCMyuY,3030
|
108
|
-
ultralytics/data/augment.py,sha256=
|
108
|
+
ultralytics/data/augment.py,sha256=yAUn0P7z9dQ37DwoIXF6Tz2PvTxxHMMj54311mOSWP8,129050
|
109
109
|
ultralytics/data/base.py,sha256=mRcuehK1thNuuzQGL6D1AaZkod71oHRdYTod_zdQZQg,19688
|
110
110
|
ultralytics/data/build.py,sha256=13gPxCJIZRjgcNh7zbzanCgtyK6_oZM0ho9KQhHcM6c,11153
|
111
111
|
ultralytics/data/converter.py,sha256=oKW8ODtvFOKBx9Un8n87xUUm3b5GStU4ViIBH5UDylM,27200
|
112
|
-
ultralytics/data/dataset.py,sha256=
|
112
|
+
ultralytics/data/dataset.py,sha256=eXADBdtj9gj0s2JEa9MJz7E3XmkHk_PmvHHXNQ1UJQM,36463
|
113
113
|
ultralytics/data/loaders.py,sha256=kTGO1P-HntpQk078i1ASyXYckDx9Z7Pe7o1YbePcjC4,31657
|
114
114
|
ultralytics/data/split.py,sha256=qOHZwsHi3I1IKLgLfcz7jH3CTibeJUDyjo7HwNtB_kk,5121
|
115
115
|
ultralytics/data/split_dota.py,sha256=RJHxwOX2Z9CfSX_h7L7mO-aLQ4Ap_ZpZanQdno10oSA,12893
|
@@ -119,7 +119,7 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
|
|
119
119
|
ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
|
120
120
|
ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
|
121
121
|
ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
122
|
-
ultralytics/engine/exporter.py,sha256=
|
122
|
+
ultralytics/engine/exporter.py,sha256=Q3y4yo0h8zLuCWE_FEvGV_eUwMfKjDrdZsmN_bc24R8,73041
|
123
123
|
ultralytics/engine/model.py,sha256=DwugtVxUbCGzpY2pStFMcEloim0ai6LrT6kTbwskSJ8,53302
|
124
124
|
ultralytics/engine/predictor.py,sha256=88zrgZP91ehwdeGl8BM_cQ_caeuwKIPDy3OzxcRBjTU,22474
|
125
125
|
ultralytics/engine/results.py,sha256=Mb8pBTOrBtQh0PQtGVbhRZ_C1VyqYFumjLggiKCRIJs,72295
|
@@ -172,19 +172,19 @@ ultralytics/models/yolo/classify/val.py,sha256=YakPxBVZCd85Kp4wFKx8KH6JJFiU7nkFS
|
|
172
172
|
ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
|
173
173
|
ultralytics/models/yolo/detect/predict.py,sha256=ySUsdIf8dw00bzWhcxN1jZwLWKPRT2M7-N7TNL3o4zo,5387
|
174
174
|
ultralytics/models/yolo/detect/train.py,sha256=HlaCoHJ6Y2TpCXXWabMRZApAYqBvjuM_YQJUV5JYCvw,9907
|
175
|
-
ultralytics/models/yolo/detect/val.py,sha256=
|
175
|
+
ultralytics/models/yolo/detect/val.py,sha256=nY3NhT50fMLk0wMwQBv3AnLAVoPMI6mx37OJw9-QT5A,18541
|
176
176
|
ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
|
177
177
|
ultralytics/models/yolo/obb/predict.py,sha256=4r1eSld6TNJlk9JG56e-DX6oPL8uBBqiuztyBpxWlHE,2888
|
178
178
|
ultralytics/models/yolo/obb/train.py,sha256=bnYFAMur7Uvbw5Dc09-S2ge7B05iGX-t37Ksgc0ef6g,3921
|
179
179
|
ultralytics/models/yolo/obb/val.py,sha256=nT82lKXewUw3bgX45Ms045rzcYn2A1j8g3Dxig2c-FU,14844
|
180
180
|
ultralytics/models/yolo/pose/__init__.py,sha256=63xmuHZLNzV8I76HhVXAq4f2W0KTk8Oi9eL-Y204LyQ,227
|
181
|
-
ultralytics/models/yolo/pose/predict.py,sha256=
|
181
|
+
ultralytics/models/yolo/pose/predict.py,sha256=M0C7ZfVXx4QXgv-szjnaXYEPas76ZLGAgDNNh1GG0vI,3743
|
182
182
|
ultralytics/models/yolo/pose/train.py,sha256=GyvNnDPJ3UFq_90HN8_FJ0dbwRkw3JJTVpkMFH0vC0o,5457
|
183
|
-
ultralytics/models/yolo/pose/val.py,sha256=
|
183
|
+
ultralytics/models/yolo/pose/val.py,sha256=8d7AthoJYUK8BK01ptxpANdcR9_-REEMKicB1hCYgio,15330
|
184
184
|
ultralytics/models/yolo/segment/__init__.py,sha256=3IThhZ1wlkY9FvmWm9cE-5-ZyE6F1FgzAtQ6jOOFzzw,275
|
185
185
|
ultralytics/models/yolo/segment/predict.py,sha256=qlprQCZn4_bpjpI08U0MU9Q9_1gpHrw_7MXwtXE1l1Y,5377
|
186
186
|
ultralytics/models/yolo/segment/train.py,sha256=XrPkXUiNu1Jvhn8iDew_RaLLjZA3un65rK-QH9mtNIw,3802
|
187
|
-
ultralytics/models/yolo/segment/val.py,sha256=
|
187
|
+
ultralytics/models/yolo/segment/val.py,sha256=Iai-oK1XeD6y23WWq7FouiE_Az7o4C24E770OPCO2WY,14168
|
188
188
|
ultralytics/models/yolo/world/__init__.py,sha256=nlh8I6t8hMGz_vZg8QSlsUW1R-2eKvn9CGUoPPQEGhA,131
|
189
189
|
ultralytics/models/yolo/world/train.py,sha256=94_hgCluzsv39JkBVDmR2gjuycYjeJC8wVrCfrjpENk,7806
|
190
190
|
ultralytics/models/yolo/world/train_world.py,sha256=YJm37ZTgr0CoE_sYrjxN45w9mICr2RMWfWZrriiHqbM,9022
|
@@ -218,7 +218,7 @@ ultralytics/solutions/parking_management.py,sha256=IfPUn15aelxz6YZNo9WYkVEl5IOVS
|
|
218
218
|
ultralytics/solutions/queue_management.py,sha256=u0VFzRqa0OxIWY7xXItsXEm073CzkQGFhhXG-6VK3SI,4393
|
219
219
|
ultralytics/solutions/region_counter.py,sha256=j6f5VAaE1JWGdWOecZpWMFp6yF1GdCnHjftN6CRybjQ,5967
|
220
220
|
ultralytics/solutions/security_alarm.py,sha256=U6FTbg3cthKLfWeLunsFhOJvB6GGmwYDDxZ3K0GCx-Q,6351
|
221
|
-
ultralytics/solutions/similarity_search.py,sha256=
|
221
|
+
ultralytics/solutions/similarity_search.py,sha256=Tx5R_IVzQjUVLrraS0oJkoJLkx8dJCyaf_Nwbu_4yyo,9982
|
222
222
|
ultralytics/solutions/solutions.py,sha256=N5t1DgZpuFBbDvLVZ7wRkafmgu8SS1VC9VNjuupglwQ,37532
|
223
223
|
ultralytics/solutions/speed_estimation.py,sha256=chg_tBuKFw3EnFiv_obNDaUXLAo-FypxC7gsDeB_VUI,5878
|
224
224
|
ultralytics/solutions/streamlit_inference.py,sha256=lqHh0UDCVmWIeh3yzpvoV7j9K6Ipx7pJBkOsb0ZpZes,10034
|
@@ -257,7 +257,7 @@ ultralytics/utils/tuner.py,sha256=bHr09Fz-0-t0ei55gX5wJh-obyiAQoicP7HUVM2I8qA,68
|
|
257
257
|
ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
|
258
258
|
ultralytics/utils/callbacks/base.py,sha256=OJ6z4AYVCtXO-w6PSDRiwo1Tc2RYes-BzwKTsr9g_h0,6821
|
259
259
|
ultralytics/utils/callbacks/clearml.py,sha256=2_Iv-aJFD6oAlq2N3hOf1OhCQ7aAMpa5tBkSs1ZkruQ,6031
|
260
|
-
ultralytics/utils/callbacks/comet.py,sha256=
|
260
|
+
ultralytics/utils/callbacks/comet.py,sha256=VwIjpEqYDfcyvAMzBG1XAbcyy6lo45dNQRVlnO8VmSg,23924
|
261
261
|
ultralytics/utils/callbacks/dvc.py,sha256=NV0DXMQ1B5Sk5fmh60QFUGkifrAz-vwit5qhdfsyqXc,7511
|
262
262
|
ultralytics/utils/callbacks/hub.py,sha256=1RmGiCaog1GoTya9OAyGELbQ2Lk5X3EWh7RYMxns0so,4177
|
263
263
|
ultralytics/utils/callbacks/mlflow.py,sha256=6K8I5zij1yq3TUW9c5BBQNqdzz3IXugQjwKoBOvV6ag,5344
|
@@ -265,9 +265,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=j8pecmlcsM8FGzLKWoBw5xUsi5t8E5HuxY
|
|
265
265
|
ultralytics/utils/callbacks/raytune.py,sha256=S6Bq16oQDQ8BQgnZzA0zJHGN_BBr8iAM_WtGoLiEcwg,1283
|
266
266
|
ultralytics/utils/callbacks/tensorboard.py,sha256=MDPBW7aDes-66OE6YqKXXvqA_EocjzEMHWGM-8z9vUQ,5281
|
267
267
|
ultralytics/utils/callbacks/wb.py,sha256=Tm_-aRr2CN32MJkY9tylpMBJkb007-MSRNSQ7rDJ5QU,7521
|
268
|
-
ultralytics-8.3.
|
269
|
-
ultralytics-8.3.
|
270
|
-
ultralytics-8.3.
|
271
|
-
ultralytics-8.3.
|
272
|
-
ultralytics-8.3.
|
273
|
-
ultralytics-8.3.
|
268
|
+
ultralytics-8.3.157.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
269
|
+
ultralytics-8.3.157.dist-info/METADATA,sha256=vZ9QsDSUEX148oGlo6qNsbooXGnT_pK-mlPBdc0k-L4,37212
|
270
|
+
ultralytics-8.3.157.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
271
|
+
ultralytics-8.3.157.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
272
|
+
ultralytics-8.3.157.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
273
|
+
ultralytics-8.3.157.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|