ultralytics 8.3.209__py3-none-any.whl → 8.3.211__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 +4 -7
- tests/test_python.py +7 -11
- ultralytics/__init__.py +1 -1
- ultralytics/data/converter.py +2 -4
- ultralytics/data/utils.py +2 -2
- ultralytics/engine/trainer.py +30 -21
- ultralytics/nn/tasks.py +16 -0
- ultralytics/utils/benchmarks.py +38 -24
- ultralytics/utils/checks.py +2 -1
- ultralytics/utils/downloads.py +6 -8
- {ultralytics-8.3.209.dist-info → ultralytics-8.3.211.dist-info}/METADATA +1 -1
- {ultralytics-8.3.209.dist-info → ultralytics-8.3.211.dist-info}/RECORD +16 -16
- {ultralytics-8.3.209.dist-info → ultralytics-8.3.211.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.209.dist-info → ultralytics-8.3.211.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.209.dist-info → ultralytics-8.3.211.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.209.dist-info → ultralytics-8.3.211.dist-info}/top_level.txt +0 -0
tests/test_integrations.py
CHANGED
@@ -10,7 +10,7 @@ import pytest
|
|
10
10
|
|
11
11
|
from tests import MODEL, SOURCE, TMP
|
12
12
|
from ultralytics import YOLO, download
|
13
|
-
from ultralytics.utils import DATASETS_DIR, SETTINGS
|
13
|
+
from ultralytics.utils import ASSETS_URL, DATASETS_DIR, SETTINGS
|
14
14
|
from ultralytics.utils.checks import check_requirements
|
15
15
|
|
16
16
|
|
@@ -129,26 +129,23 @@ def test_faster_coco_eval():
|
|
129
129
|
from ultralytics.models.yolo.pose import PoseValidator
|
130
130
|
from ultralytics.models.yolo.segment import SegmentationValidator
|
131
131
|
|
132
|
-
# Download annotations after each dataset downloads first
|
133
|
-
url = "https://github.com/ultralytics/assets/releases/download/v0.0.0/"
|
134
|
-
|
135
132
|
args = {"model": "yolo11n.pt", "data": "coco8.yaml", "save_json": True, "imgsz": 64}
|
136
133
|
validator = DetectionValidator(args=args)
|
137
134
|
validator()
|
138
135
|
validator.is_coco = True
|
139
|
-
download(f"{
|
136
|
+
download(f"{ASSETS_URL}/instances_val2017.json", dir=DATASETS_DIR / "coco8/annotations")
|
140
137
|
_ = validator.eval_json(validator.stats)
|
141
138
|
|
142
139
|
args = {"model": "yolo11n-seg.pt", "data": "coco8-seg.yaml", "save_json": True, "imgsz": 64}
|
143
140
|
validator = SegmentationValidator(args=args)
|
144
141
|
validator()
|
145
142
|
validator.is_coco = True
|
146
|
-
download(f"{
|
143
|
+
download(f"{ASSETS_URL}/instances_val2017.json", dir=DATASETS_DIR / "coco8-seg/annotations")
|
147
144
|
_ = validator.eval_json(validator.stats)
|
148
145
|
|
149
146
|
args = {"model": "yolo11n-pose.pt", "data": "coco8-pose.yaml", "save_json": True, "imgsz": 64}
|
150
147
|
validator = PoseValidator(args=args)
|
151
148
|
validator()
|
152
149
|
validator.is_coco = True
|
153
|
-
download(f"{
|
150
|
+
download(f"{ASSETS_URL}/person_keypoints_val2017.json", dir=DATASETS_DIR / "coco8-pose/annotations")
|
154
151
|
_ = validator.eval_json(validator.stats)
|
tests/test_python.py
CHANGED
@@ -20,6 +20,7 @@ from ultralytics.data.utils import check_det_dataset
|
|
20
20
|
from ultralytics.utils import (
|
21
21
|
ARM64,
|
22
22
|
ASSETS,
|
23
|
+
ASSETS_URL,
|
23
24
|
DEFAULT_CFG,
|
24
25
|
DEFAULT_CFG_PATH,
|
25
26
|
LINUX,
|
@@ -125,9 +126,7 @@ def test_predict_img(model_name):
|
|
125
126
|
batch = [
|
126
127
|
str(SOURCE), # filename
|
127
128
|
Path(SOURCE), # Path
|
128
|
-
"
|
129
|
-
if ONLINE
|
130
|
-
else SOURCE, # URI
|
129
|
+
f"{ASSETS_URL}/zidane.jpg?token=123" if ONLINE else SOURCE, # URI
|
131
130
|
im, # OpenCV
|
132
131
|
Image.open(SOURCE), # PIL
|
133
132
|
np.zeros((320, 640, channels), dtype=np.uint8), # numpy
|
@@ -190,7 +189,7 @@ def test_track_stream(model):
|
|
190
189
|
"""
|
191
190
|
if model == "yolo11n-cls.pt": # classification model not supported for tracking
|
192
191
|
return
|
193
|
-
video_url = "
|
192
|
+
video_url = f"{ASSETS_URL}/decelera_portrait_min.mov"
|
194
193
|
model = YOLO(model)
|
195
194
|
model.track(video_url, imgsz=160, tracker="bytetrack.yaml")
|
196
195
|
model.track(video_url, imgsz=160, tracker="botsort.yaml", save_frames=True) # test frame saving also
|
@@ -229,9 +228,7 @@ def test_train_scratch():
|
|
229
228
|
def test_train_ndjson():
|
230
229
|
"""Test training the YOLO model using NDJSON format dataset."""
|
231
230
|
model = YOLO(WEIGHTS_DIR / "yolo11n.pt")
|
232
|
-
model.train(
|
233
|
-
data="https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-ndjson.ndjson", epochs=1, imgsz=32
|
234
|
-
)
|
231
|
+
model.train(data=f"{ASSETS_URL}/coco8-ndjson.ndjson", epochs=1, imgsz=32)
|
235
232
|
|
236
233
|
|
237
234
|
@pytest.mark.parametrize("scls", [False, True])
|
@@ -290,8 +287,8 @@ def test_predict_callback_and_setup():
|
|
290
287
|
@pytest.mark.parametrize("model", MODELS)
|
291
288
|
def test_results(model: str):
|
292
289
|
"""Test YOLO model results processing and output in various formats."""
|
293
|
-
|
294
|
-
results = YOLO(WEIGHTS_DIR / model)([
|
290
|
+
im = f"{ASSETS_URL}/boats.jpg" if model == "yolo11n-obb.pt" else SOURCE
|
291
|
+
results = YOLO(WEIGHTS_DIR / model)([im, im], imgsz=160)
|
295
292
|
for r in results:
|
296
293
|
assert len(r), f"'{model}' results should not be empty!"
|
297
294
|
r = r.cpu().numpy()
|
@@ -357,8 +354,7 @@ def test_data_converter():
|
|
357
354
|
"""Test dataset conversion functions from COCO to YOLO format and class mappings."""
|
358
355
|
from ultralytics.data.converter import coco80_to_coco91_class, convert_coco
|
359
356
|
|
360
|
-
|
361
|
-
download(f"https://github.com/ultralytics/assets/releases/download/v0.0.0/{file}", dir=TMP)
|
357
|
+
download(f"{ASSETS_URL}/instances_val2017.json", dir=TMP)
|
362
358
|
convert_coco(labels_dir=TMP, save_dir=TMP / "yolo_labels", use_segments=True, use_keypoints=False, cls91to80=True)
|
363
359
|
coco80_to_coco91_class()
|
364
360
|
|
ultralytics/__init__.py
CHANGED
ultralytics/data/converter.py
CHANGED
@@ -14,7 +14,7 @@ import cv2
|
|
14
14
|
import numpy as np
|
15
15
|
from PIL import Image
|
16
16
|
|
17
|
-
from ultralytics.utils import DATASETS_DIR, LOGGER, NUM_THREADS, TQDM, YAML
|
17
|
+
from ultralytics.utils import ASSETS_URL, DATASETS_DIR, LOGGER, NUM_THREADS, TQDM, YAML
|
18
18
|
from ultralytics.utils.checks import check_file, check_requirements
|
19
19
|
from ultralytics.utils.downloads import download, zip_directory
|
20
20
|
from ultralytics.utils.files import increment_path
|
@@ -678,9 +678,7 @@ def create_synthetic_coco_dataset():
|
|
678
678
|
|
679
679
|
# Download labels
|
680
680
|
dir = DATASETS_DIR / "coco"
|
681
|
-
|
682
|
-
label_zip = "coco2017labels-segments.zip"
|
683
|
-
download([url + label_zip], dir=dir.parent)
|
681
|
+
download([f"{ASSETS_URL}/coco2017labels-segments.zip"], dir=dir.parent)
|
684
682
|
|
685
683
|
# Create synthetic images
|
686
684
|
shutil.rmtree(dir / "labels" / "test2017", ignore_errors=True) # Remove test2017 directory as not needed
|
ultralytics/data/utils.py
CHANGED
@@ -19,6 +19,7 @@ from PIL import Image, ImageOps
|
|
19
19
|
|
20
20
|
from ultralytics.nn.autobackend import check_class_names
|
21
21
|
from ultralytics.utils import (
|
22
|
+
ASSETS_URL,
|
22
23
|
DATASETS_DIR,
|
23
24
|
LOGGER,
|
24
25
|
NUM_THREADS,
|
@@ -523,8 +524,7 @@ def check_cls_dataset(dataset: str | Path, split: str = "") -> dict[str, Any]:
|
|
523
524
|
if str(dataset) == "imagenet":
|
524
525
|
subprocess.run(["bash", str(ROOT / "data/scripts/get_imagenet.sh")], check=True)
|
525
526
|
else:
|
526
|
-
|
527
|
-
download(url, dir=data_dir.parent)
|
527
|
+
download(f"{ASSETS_URL}/{dataset}.zip", dir=data_dir.parent)
|
528
528
|
LOGGER.info(f"Dataset download success ✅ ({time.time() - t:.1f}s), saved to {colorstr('bold', data_dir)}\n")
|
529
529
|
train_set = data_dir / "train"
|
530
530
|
if not train_set.is_dir():
|
ultralytics/engine/trainer.py
CHANGED
@@ -44,6 +44,7 @@ from ultralytics.utils.dist import ddp_cleanup, generate_ddp_command
|
|
44
44
|
from ultralytics.utils.files import get_latest_run
|
45
45
|
from ultralytics.utils.plotting import plot_results
|
46
46
|
from ultralytics.utils.torch_utils import (
|
47
|
+
TORCH_1_9,
|
47
48
|
TORCH_2_4,
|
48
49
|
EarlyStopping,
|
49
50
|
ModelEMA,
|
@@ -420,27 +421,26 @@ class BaseTrainer:
|
|
420
421
|
self.loss = loss.sum()
|
421
422
|
if RANK != -1:
|
422
423
|
self.loss *= self.world_size
|
423
|
-
self.tloss = (
|
424
|
-
(self.tloss * i + self.loss_items) / (i + 1) if self.tloss is not None else self.loss_items
|
425
|
-
)
|
424
|
+
self.tloss = self.loss_items if self.tloss is None else (self.tloss * i + self.loss_items) / (i + 1)
|
426
425
|
|
427
426
|
# Backward
|
428
|
-
self.
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
self.stop
|
442
|
-
|
443
|
-
|
427
|
+
if self.loss.isfinite():
|
428
|
+
self.scaler.scale(self.loss).backward()
|
429
|
+
if ni - last_opt_step >= self.accumulate:
|
430
|
+
self.optimizer_step()
|
431
|
+
last_opt_step = ni
|
432
|
+
|
433
|
+
# Timed stopping
|
434
|
+
if self.args.time:
|
435
|
+
self.stop = (time.time() - self.train_time_start) > (self.args.time * 3600)
|
436
|
+
if RANK != -1: # if DDP training
|
437
|
+
broadcast_list = [self.stop if RANK == 0 else None]
|
438
|
+
dist.broadcast_object_list(broadcast_list, 0) # broadcast 'stop' to all ranks
|
439
|
+
self.stop = broadcast_list[0]
|
440
|
+
if self.stop: # training time exceeded
|
441
|
+
break
|
442
|
+
else:
|
443
|
+
LOGGER.warning(f"Non-finite forward pass (loss={self.loss}), skipping backwards pass...")
|
444
444
|
|
445
445
|
# Log
|
446
446
|
if RANK in {-1, 0}:
|
@@ -665,8 +665,17 @@ class BaseTrainer:
|
|
665
665
|
def optimizer_step(self):
|
666
666
|
"""Perform a single step of the training optimizer with gradient clipping and EMA update."""
|
667
667
|
self.scaler.unscale_(self.optimizer) # unscale gradients
|
668
|
-
|
669
|
-
|
668
|
+
try:
|
669
|
+
if TORCH_1_9:
|
670
|
+
torch.nn.utils.clip_grad_norm_(self.model.parameters(), max_norm=10.0, error_if_nonfinite=True)
|
671
|
+
self.scaler.step(self.optimizer)
|
672
|
+
except RuntimeError as e:
|
673
|
+
if "finite" in str(e).lower():
|
674
|
+
LOGGER.warning("Non-finite gradients, skipping optimizer updates")
|
675
|
+
self.scaler.update()
|
676
|
+
self.optimizer.zero_grad()
|
677
|
+
return
|
678
|
+
raise
|
670
679
|
self.scaler.update()
|
671
680
|
self.optimizer.zero_grad()
|
672
681
|
if self.ema:
|
ultralytics/nn/tasks.py
CHANGED
@@ -743,6 +743,22 @@ class RTDETRDetectionModel(DetectionModel):
|
|
743
743
|
"""
|
744
744
|
super().__init__(cfg=cfg, ch=ch, nc=nc, verbose=verbose)
|
745
745
|
|
746
|
+
def _apply(self, fn):
|
747
|
+
"""
|
748
|
+
Apply a function to all tensors in the model that are not parameters or registered buffers.
|
749
|
+
|
750
|
+
Args:
|
751
|
+
fn (function): The function to apply to the model.
|
752
|
+
|
753
|
+
Returns:
|
754
|
+
(RTDETRDetectionModel): An updated BaseModel object.
|
755
|
+
"""
|
756
|
+
self = super()._apply(fn)
|
757
|
+
m = self.model[-1]
|
758
|
+
m.anchors = fn(m.anchors)
|
759
|
+
m.valid_mask = fn(m.valid_mask)
|
760
|
+
return self
|
761
|
+
|
746
762
|
def init_criterion(self):
|
747
763
|
"""Initialize the loss criterion for the RTDETRDetectionModel."""
|
748
764
|
from ultralytics.models.utils.loss import RTDETRDetectionLoss
|
ultralytics/utils/benchmarks.py
CHANGED
@@ -43,7 +43,7 @@ import torch.cuda
|
|
43
43
|
from ultralytics import YOLO, YOLOWorld
|
44
44
|
from ultralytics.cfg import TASK2DATA, TASK2METRIC
|
45
45
|
from ultralytics.engine.exporter import export_formats
|
46
|
-
from ultralytics.utils import ARM64, ASSETS, IS_JETSON, LINUX, LOGGER, MACOS, TQDM, WEIGHTS_DIR, YAML
|
46
|
+
from ultralytics.utils import ARM64, ASSETS, ASSETS_URL, IS_JETSON, LINUX, LOGGER, MACOS, TQDM, WEIGHTS_DIR, YAML
|
47
47
|
from ultralytics.utils.checks import IS_PYTHON_3_13, check_imgsz, check_requirements, check_yolo, is_rockchip
|
48
48
|
from ultralytics.utils.downloads import safe_download
|
49
49
|
from ultralytics.utils.files import file_size
|
@@ -281,7 +281,7 @@ class RF100Benchmark:
|
|
281
281
|
(shutil.rmtree("rf-100"), os.mkdir("rf-100")) if os.path.exists("rf-100") else os.mkdir("rf-100")
|
282
282
|
os.chdir("rf-100")
|
283
283
|
os.mkdir("ultralytics-benchmarks")
|
284
|
-
safe_download("
|
284
|
+
safe_download(f"{ASSETS_URL}/datasets_links.txt")
|
285
285
|
|
286
286
|
with open(ds_link_txt, encoding="utf-8") as file:
|
287
287
|
for line in file:
|
@@ -583,6 +583,11 @@ class ProfileModels:
|
|
583
583
|
run_times = self.iterative_sigma_clipping(np.array(run_times), sigma=2, max_iters=3) # sigma clipping
|
584
584
|
return np.mean(run_times), np.std(run_times)
|
585
585
|
|
586
|
+
@staticmethod
|
587
|
+
def check_dynamic(tensor_shape):
|
588
|
+
"""Check whether the tensor shape in the ONNX model is dynamic."""
|
589
|
+
return not all(isinstance(dim, int) and dim >= 0 for dim in tensor_shape)
|
590
|
+
|
586
591
|
def profile_onnx_model(self, onnx_file: str, eps: float = 1e-3):
|
587
592
|
"""
|
588
593
|
Profile an ONNX model, measuring average inference time and standard deviation across multiple runs.
|
@@ -604,27 +609,36 @@ class ProfileModels:
|
|
604
609
|
sess_options.intra_op_num_threads = 8 # Limit the number of threads
|
605
610
|
sess = ort.InferenceSession(onnx_file, sess_options, providers=["CPUExecutionProvider"])
|
606
611
|
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
612
|
+
input_data_dict = dict()
|
613
|
+
for input_tensor in sess.get_inputs():
|
614
|
+
input_type = input_tensor.type
|
615
|
+
if self.check_dynamic(input_tensor.shape):
|
616
|
+
if len(input_tensor.shape) != 4 and self.check_dynamic(input_tensor.shape[1:]):
|
617
|
+
raise ValueError(f"Unsupported dynamic shape {input_tensor.shape} of {input_tensor.name}")
|
618
|
+
input_shape = (
|
619
|
+
(1, 3, self.imgsz, self.imgsz) if len(input_tensor.shape) == 4 else (1, *input_tensor.shape[1:])
|
620
|
+
)
|
621
|
+
else:
|
622
|
+
input_shape = input_tensor.shape
|
623
|
+
|
624
|
+
# Mapping ONNX datatype to numpy datatype
|
625
|
+
if "float16" in input_type:
|
626
|
+
input_dtype = np.float16
|
627
|
+
elif "float" in input_type:
|
628
|
+
input_dtype = np.float32
|
629
|
+
elif "double" in input_type:
|
630
|
+
input_dtype = np.float64
|
631
|
+
elif "int64" in input_type:
|
632
|
+
input_dtype = np.int64
|
633
|
+
elif "int32" in input_type:
|
634
|
+
input_dtype = np.int32
|
635
|
+
else:
|
636
|
+
raise ValueError(f"Unsupported ONNX datatype {input_type}")
|
637
|
+
|
638
|
+
input_data = np.random.rand(*input_shape).astype(input_dtype)
|
639
|
+
input_name = input_tensor.name
|
640
|
+
input_data_dict.update({input_name: input_data})
|
625
641
|
|
626
|
-
input_data = np.random.rand(*input_shape).astype(input_dtype)
|
627
|
-
input_name = input_tensor.name
|
628
642
|
output_name = sess.get_outputs()[0].name
|
629
643
|
|
630
644
|
# Warmup runs
|
@@ -632,7 +646,7 @@ class ProfileModels:
|
|
632
646
|
for _ in range(3):
|
633
647
|
start_time = time.time()
|
634
648
|
for _ in range(self.num_warmup_runs):
|
635
|
-
sess.run([output_name],
|
649
|
+
sess.run([output_name], input_data_dict)
|
636
650
|
elapsed = time.time() - start_time
|
637
651
|
|
638
652
|
# Compute number of runs as higher of min_time or num_timed_runs
|
@@ -642,7 +656,7 @@ class ProfileModels:
|
|
642
656
|
run_times = []
|
643
657
|
for _ in TQDM(range(num_runs), desc=onnx_file):
|
644
658
|
start_time = time.time()
|
645
|
-
sess.run([output_name],
|
659
|
+
sess.run([output_name], input_data_dict)
|
646
660
|
run_times.append((time.time() - start_time) * 1000) # Convert to milliseconds
|
647
661
|
|
648
662
|
run_times = self.iterative_sigma_clipping(np.array(run_times), sigma=2, max_iters=5) # sigma clipping
|
ultralytics/utils/checks.py
CHANGED
@@ -23,6 +23,7 @@ import torch
|
|
23
23
|
from ultralytics.utils import (
|
24
24
|
ARM64,
|
25
25
|
ASSETS,
|
26
|
+
ASSETS_URL,
|
26
27
|
AUTOINSTALL,
|
27
28
|
GIT,
|
28
29
|
IS_COLAB,
|
@@ -336,7 +337,7 @@ def check_font(font="Arial.ttf"):
|
|
336
337
|
return matches[0]
|
337
338
|
|
338
339
|
# Download to USER_CONFIG_DIR if missing
|
339
|
-
url = f"
|
340
|
+
url = f"{ASSETS_URL}/{name}"
|
340
341
|
if downloads.is_url(url, check=True):
|
341
342
|
downloads.safe_download(url=url, file=file)
|
342
343
|
return file
|
ultralytics/utils/downloads.py
CHANGED
@@ -10,7 +10,7 @@ from multiprocessing.pool import ThreadPool
|
|
10
10
|
from pathlib import Path
|
11
11
|
from urllib import parse, request
|
12
12
|
|
13
|
-
from ultralytics.utils import LOGGER, TQDM, checks, clean_url, emojis, is_online, url2file
|
13
|
+
from ultralytics.utils import ASSETS_URL, LOGGER, TQDM, checks, clean_url, emojis, is_online, url2file
|
14
14
|
|
15
15
|
# Define Ultralytics GitHub assets maintained at https://github.com/ultralytics/assets
|
16
16
|
GITHUB_ASSETS_REPO = "ultralytics/assets"
|
@@ -60,10 +60,11 @@ def is_url(url: str | Path, check: bool = False) -> bool:
|
|
60
60
|
try:
|
61
61
|
url = str(url)
|
62
62
|
result = parse.urlparse(url)
|
63
|
-
|
63
|
+
if not (result.scheme and result.netloc):
|
64
|
+
return False
|
64
65
|
if check:
|
65
|
-
|
66
|
-
|
66
|
+
r = request.urlopen(request.Request(url, method="HEAD"), timeout=3)
|
67
|
+
return 200 <= r.getcode() < 400
|
67
68
|
return True
|
68
69
|
except Exception:
|
69
70
|
return False
|
@@ -323,10 +324,7 @@ def safe_download(
|
|
323
324
|
if "://" not in str(url) and Path(url).is_file(): # URL exists ('://' check required in Windows Python<3.10)
|
324
325
|
f = Path(url) # filename
|
325
326
|
elif not f.is_file(): # URL and file do not exist
|
326
|
-
uri = (url if gdrive else clean_url(url)).replace( #
|
327
|
-
"https://github.com/ultralytics/assets/releases/download/v0.0.0/",
|
328
|
-
"https://ultralytics.com/assets/", # assets alias
|
329
|
-
)
|
327
|
+
uri = (url if gdrive else clean_url(url)).replace(ASSETS_URL, "https://ultralytics.com/assets") # clean
|
330
328
|
desc = f"Downloading {uri} to '{f}'"
|
331
329
|
f.parent.mkdir(parents=True, exist_ok=True) # make directory if missing
|
332
330
|
curl_installed = shutil.which("curl")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.211
|
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>
|
@@ -4,10 +4,10 @@ tests/test_cli.py,sha256=0jqS6RfzmJeqgjozUqfT4AoP2d_IhUR0Ej-5ToQBK7A,5463
|
|
4
4
|
tests/test_cuda.py,sha256=6zUSwu3xaYiO3RRNyDkNsuyeq47b1e9f6JNhPZVeDL4,8142
|
5
5
|
tests/test_engine.py,sha256=8W4_D48ZBUp-DsUlRYxHTXzougycY8yggvpbVwQDLPg,5025
|
6
6
|
tests/test_exports.py,sha256=3o-qqPrPqjD1a_U6KBvwAusZ_Wy6S1WzmuvgRRUXmcA,11099
|
7
|
-
tests/test_integrations.py,sha256=
|
8
|
-
tests/test_python.py,sha256=
|
7
|
+
tests/test_integrations.py,sha256=ehRcYMpGvUI3KvgsaT1pkN1rXkr7tDSlYYMqIcXyGbg,6220
|
8
|
+
tests/test_python.py,sha256=L0yIWfXo1Ar3NuRi8r6cYBC0-WLDucf0TCbEi27YFeA,27950
|
9
9
|
tests/test_solutions.py,sha256=oaTz5BttPDIeHkQh9oEaw-O73L4iYDP3Lfe82V7DeKM,13416
|
10
|
-
ultralytics/__init__.py,sha256=
|
10
|
+
ultralytics/__init__.py,sha256=iewnwHiT24VbcGnpzCwE7CPRnyEmZfAa6MUgQD6AdNQ,1302
|
11
11
|
ultralytics/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
12
12
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
13
13
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
@@ -110,12 +110,12 @@ ultralytics/data/annotator.py,sha256=f15TCDEM8SuuzHiFB8oyhTy9vfywKmPTLSPAgsZQP9I
|
|
110
110
|
ultralytics/data/augment.py,sha256=7NsRCYu_uM6KkpU0F03NC9Ra_GQVGp2dRO1RksrrU38,132897
|
111
111
|
ultralytics/data/base.py,sha256=gWoGFifyNe1TCwtGdGp5jzKOQ9sh4b-XrfyN0PPvRaY,19661
|
112
112
|
ultralytics/data/build.py,sha256=cdhD1Z4Gv9KLi5n9OchDRBH8rfMQ1NyDja_D7DmAS00,11879
|
113
|
-
ultralytics/data/converter.py,sha256=
|
113
|
+
ultralytics/data/converter.py,sha256=HMJ5H7nvHkeeSYNEwcWrSDkPJykVVg3kLmTC_V8adqg,31967
|
114
114
|
ultralytics/data/dataset.py,sha256=GL6J_fvluaF2Ck1in3W5q3Xm7lRcUd6Amgd_uu6r_FM,36772
|
115
115
|
ultralytics/data/loaders.py,sha256=sfQ0C86uBg9QQbN3aU0W8FIjGQmMdJTQAMK4DA1bjk8,31748
|
116
116
|
ultralytics/data/split.py,sha256=5ubnL_wsEutFQOj4I4K01L9UpZrrO_vO3HrydSLJyIY,5107
|
117
117
|
ultralytics/data/split_dota.py,sha256=Lz04qVufTvHn4cTyo3VkqoIM93rb-Ymr8uOIXeSsaJI,12910
|
118
|
-
ultralytics/data/utils.py,sha256=
|
118
|
+
ultralytics/data/utils.py,sha256=uXnt0yo0kUSIKS1uR6_vSjuVRIijdLxPmnDmiPevKUA,36923
|
119
119
|
ultralytics/data/scripts/download_weights.sh,sha256=0y8XtZxOru7dVThXDFUXLHBuICgOIqZNUwpyL4Rh6lg,595
|
120
120
|
ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J3jKrnPw,1768
|
121
121
|
ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
|
@@ -125,7 +125,7 @@ ultralytics/engine/exporter.py,sha256=BFzmv7tn2e9zUPwFspb677o1QzzJlOfcVyl3gXmVGW
|
|
125
125
|
ultralytics/engine/model.py,sha256=uX6cTFdlLllGRbz8Lr90IZGb4OrtMDIHQEg7DxUqwe8,53449
|
126
126
|
ultralytics/engine/predictor.py,sha256=4lfw2RbBDE7939011FcSCuznscrcnMuabZtc8GXaKO4,22735
|
127
127
|
ultralytics/engine/results.py,sha256=uQ_tgvdxKAg28pRgb5WCHiqx9Ktu7wYiVbwZy_IJ5bo,71499
|
128
|
-
ultralytics/engine/trainer.py,sha256=
|
128
|
+
ultralytics/engine/trainer.py,sha256=jgDpYIRDUQpw5_WI4j-x1tbgEvPKgh1LPP4nMS06ojk,41619
|
129
129
|
ultralytics/engine/tuner.py,sha256=8uiZ9DSYdjHmbhfiuzbMPw--1DLS3cpfZPeSzJ9dGEA,21664
|
130
130
|
ultralytics/engine/validator.py,sha256=s7cKMqj2HgVm-GL9bUc76QBeue2jb4cKPk-uQQG5nck,16949
|
131
131
|
ultralytics/hub/__init__.py,sha256=xCF02lzlPKbdmGfO3NxLuXl5Kb0MaBZp_-fAWDHZ8zw,6698
|
@@ -197,7 +197,7 @@ ultralytics/models/yolo/yoloe/train_seg.py,sha256=aCV7M8oQOvODFnU4piZdJh3tIrBJYA
|
|
197
197
|
ultralytics/models/yolo/yoloe/val.py,sha256=5Gd9EoFH0FmKKvWXBl4J7gBe9DVxIczN-s3ceHwdUDo,9458
|
198
198
|
ultralytics/nn/__init__.py,sha256=PJgOn2phQTTBR2P3s_JWvGeGXQpvw1znsumKow4tCuE,545
|
199
199
|
ultralytics/nn/autobackend.py,sha256=Fs4gjgfCzR9mSpvZpnNXh1V1WWaUEap6oEZeSg5R4Hw,41270
|
200
|
-
ultralytics/nn/tasks.py,sha256=
|
200
|
+
ultralytics/nn/tasks.py,sha256=r01JGRa9bgGdOHXycN6TSK30I_Ip4GHO9dZ8LtpkmYk,70846
|
201
201
|
ultralytics/nn/text_model.py,sha256=pHqnKe8UueR1MuwJcIE_IvrnYIlt68QL796xjcRJs2A,15275
|
202
202
|
ultralytics/nn/modules/__init__.py,sha256=BPMbEm1daI7Tuds3zph2_afAX7Gq1uAqK8BfiCfKTZs,3198
|
203
203
|
ultralytics/nn/modules/activation.py,sha256=75JcIMH2Cu9GTC2Uf55r_5YLpxcrXQDaVoeGQ0hlUAU,2233
|
@@ -239,11 +239,11 @@ ultralytics/trackers/utils/matching.py,sha256=I8SX0sBaBgr4GBJ9uDGOy5LnotgNZHpB2p
|
|
239
239
|
ultralytics/utils/__init__.py,sha256=whSIuj-0lV0SAp4YjOeBJZ2emP1Qa8pqLnrhRiwl2Qs,53503
|
240
240
|
ultralytics/utils/autobatch.py,sha256=i6KYLLSItKP1Q2IUlTPHrZhjcxl7UOjs0Seb8bF8pvM,5124
|
241
241
|
ultralytics/utils/autodevice.py,sha256=d9yq6eEn05fdfzfpxeSECd0YEO61er5f7T-0kjLdofg,8843
|
242
|
-
ultralytics/utils/benchmarks.py,sha256=
|
243
|
-
ultralytics/utils/checks.py,sha256=
|
242
|
+
ultralytics/utils/benchmarks.py,sha256=wZQBGfQdIUcTSzz9jV8iGeRY6QGA1H_YUnbhoZCLV1E,32118
|
243
|
+
ultralytics/utils/checks.py,sha256=X9UpXHPaMjqX37CGVdtK1ZsT25yszWc1s7eIRuqxZzU,36270
|
244
244
|
ultralytics/utils/cpu.py,sha256=OPlVxROWhQp-kEa9EkeNRKRQ-jz0KwySu5a-h91JZjk,3634
|
245
245
|
ultralytics/utils/dist.py,sha256=5xQhWK0OLORvseAL08UmG1LYdkiDVLquxmaGSnqiSqo,4151
|
246
|
-
ultralytics/utils/downloads.py,sha256=
|
246
|
+
ultralytics/utils/downloads.py,sha256=VmWgrcywhnIUcZYZOeZW0maksh0veo5WjorG7HwWKeE,22928
|
247
247
|
ultralytics/utils/errors.py,sha256=XT9Ru7ivoBgofK6PlnyigGoa7Fmf5nEhyHtnD-8TRXI,1584
|
248
248
|
ultralytics/utils/events.py,sha256=v2RmLlx78_K6xQfOAuUTJMOexAgNdiuiOvvnsH65oDA,4679
|
249
249
|
ultralytics/utils/files.py,sha256=kxE2rkBuZL288nSN7jxLljmDnBgc16rekEXeRjhbUoo,8213
|
@@ -275,9 +275,9 @@ ultralytics/utils/callbacks/tensorboard.py,sha256=_4nfGK1dDLn6ijpvphBDhc-AS8qhS3
|
|
275
275
|
ultralytics/utils/callbacks/wb.py,sha256=ngQO8EJ1kxJDF1YajScVtzBbm26jGuejA0uWeOyvf5A,7685
|
276
276
|
ultralytics/utils/export/__init__.py,sha256=jQtf716PP0jt7bMoY9FkqmjG26KbvDzuR84jGhaBi2U,9901
|
277
277
|
ultralytics/utils/export/imx.py,sha256=Jl5nuNxqaP_bY5yrV2NypmoJSrexHE71TxR72SDdjcg,11394
|
278
|
-
ultralytics-8.3.
|
279
|
-
ultralytics-8.3.
|
280
|
-
ultralytics-8.3.
|
281
|
-
ultralytics-8.3.
|
282
|
-
ultralytics-8.3.
|
283
|
-
ultralytics-8.3.
|
278
|
+
ultralytics-8.3.211.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
279
|
+
ultralytics-8.3.211.dist-info/METADATA,sha256=LBFeTdzWXjyyrhX1nsjlS0O4zn510LwAieWA6qufB04,37667
|
280
|
+
ultralytics-8.3.211.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
281
|
+
ultralytics-8.3.211.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
282
|
+
ultralytics-8.3.211.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
283
|
+
ultralytics-8.3.211.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|