ultralytics 8.3.165__py3-none-any.whl → 8.3.167__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.
Files changed (46) hide show
  1. ultralytics/__init__.py +1 -1
  2. ultralytics/cfg/datasets/Argoverse.yaml +1 -1
  3. ultralytics/cfg/datasets/DOTAv1.5.yaml +1 -1
  4. ultralytics/cfg/datasets/DOTAv1.yaml +1 -1
  5. ultralytics/cfg/datasets/GlobalWheat2020.yaml +1 -1
  6. ultralytics/cfg/datasets/HomeObjects-3K.yaml +1 -1
  7. ultralytics/cfg/datasets/ImageNet.yaml +1 -1
  8. ultralytics/cfg/datasets/Objects365.yaml +1 -1
  9. ultralytics/cfg/datasets/SKU-110K.yaml +4 -4
  10. ultralytics/cfg/datasets/VOC.yaml +3 -3
  11. ultralytics/cfg/datasets/VisDrone.yaml +37 -30
  12. ultralytics/cfg/datasets/african-wildlife.yaml +1 -1
  13. ultralytics/cfg/datasets/brain-tumor.yaml +1 -1
  14. ultralytics/cfg/datasets/carparts-seg.yaml +1 -1
  15. ultralytics/cfg/datasets/coco-pose.yaml +1 -1
  16. ultralytics/cfg/datasets/coco.yaml +1 -1
  17. ultralytics/cfg/datasets/coco128-seg.yaml +1 -1
  18. ultralytics/cfg/datasets/coco128.yaml +1 -1
  19. ultralytics/cfg/datasets/coco8-grayscale.yaml +1 -1
  20. ultralytics/cfg/datasets/coco8-multispectral.yaml +1 -1
  21. ultralytics/cfg/datasets/coco8-pose.yaml +1 -1
  22. ultralytics/cfg/datasets/coco8-seg.yaml +1 -1
  23. ultralytics/cfg/datasets/coco8.yaml +1 -1
  24. ultralytics/cfg/datasets/crack-seg.yaml +1 -1
  25. ultralytics/cfg/datasets/dog-pose.yaml +1 -1
  26. ultralytics/cfg/datasets/dota8-multispectral.yaml +1 -1
  27. ultralytics/cfg/datasets/dota8.yaml +1 -1
  28. ultralytics/cfg/datasets/hand-keypoints.yaml +1 -1
  29. ultralytics/cfg/datasets/lvis.yaml +1 -1
  30. ultralytics/cfg/datasets/medical-pills.yaml +1 -1
  31. ultralytics/cfg/datasets/open-images-v7.yaml +1 -1
  32. ultralytics/cfg/datasets/package-seg.yaml +1 -1
  33. ultralytics/cfg/datasets/signature.yaml +1 -1
  34. ultralytics/cfg/datasets/tiger-pose.yaml +1 -1
  35. ultralytics/cfg/datasets/xView.yaml +1 -1
  36. ultralytics/engine/exporter.py +37 -18
  37. ultralytics/models/yolo/model.py +1 -5
  38. ultralytics/nn/autobackend.py +7 -8
  39. ultralytics/nn/modules/head.py +4 -6
  40. ultralytics/utils/metrics.py +8 -9
  41. {ultralytics-8.3.165.dist-info → ultralytics-8.3.167.dist-info}/METADATA +1 -1
  42. {ultralytics-8.3.165.dist-info → ultralytics-8.3.167.dist-info}/RECORD +46 -46
  43. {ultralytics-8.3.165.dist-info → ultralytics-8.3.167.dist-info}/WHEEL +0 -0
  44. {ultralytics-8.3.165.dist-info → ultralytics-8.3.167.dist-info}/entry_points.txt +0 -0
  45. {ultralytics-8.3.165.dist-info → ultralytics-8.3.167.dist-info}/licenses/LICENSE +0 -0
  46. {ultralytics-8.3.165.dist-info → ultralytics-8.3.167.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.165"
3
+ __version__ = "8.3.167"
4
4
 
5
5
  import os
6
6
 
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── Argoverse ← downloads here (31.5 GB)
9
+ # └── Argoverse ← downloads here (31.5 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: Argoverse # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── dota1.5 ← downloads here (2GB)
9
+ # └── dota1.5 ← downloads here (2GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: DOTAv1.5 # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── dota1 ← downloads here (2GB)
9
+ # └── dota1 ← downloads here (2GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: DOTAv1 # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── GlobalWheat2020 ← downloads here (7.0 GB)
9
+ # └── GlobalWheat2020 ← downloads here (7.0 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: GlobalWheat2020 # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── homeobjects-3K ← downloads here (390 MB)
9
+ # └── homeobjects-3K ← downloads here (390 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: homeobjects-3K # dataset root dir
@@ -7,7 +7,7 @@
7
7
  # parent
8
8
  # ├── ultralytics
9
9
  # └── datasets
10
- # └── imagenet ← downloads here (144 GB)
10
+ # └── imagenet ← downloads here (144 GB)
11
11
 
12
12
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
13
13
  path: imagenet # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── Objects365 ← downloads here (712 GB = 367G data + 345G zips)
9
+ # └── Objects365 ← downloads here (712 GB = 367G data + 345G zips)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: Objects365 # dataset root dir
@@ -6,13 +6,13 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── SKU-110K ← downloads here (13.6 GB)
9
+ # └── SKU-110K ← downloads here (13.6 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: SKU-110K # dataset root dir
13
- train: train.txt # train images (relative to 'path') 8219 images
14
- val: val.txt # val images (relative to 'path') 588 images
15
- test: test.txt # test images (optional) 2936 images
13
+ train: train.txt # train images (relative to 'path') 8219 images
14
+ val: val.txt # val images (relative to 'path') 588 images
15
+ test: test.txt # test images (optional) 2936 images
16
16
 
17
17
  # Classes
18
18
  names:
@@ -6,16 +6,16 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── VOC ← downloads here (2.8 GB)
9
+ # └── VOC ← downloads here (2.8 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: VOC
13
- train: # train images (relative to 'path') 16551 images
13
+ train: # train images (relative to 'path') 16551 images
14
14
  - images/train2012
15
15
  - images/train2007
16
16
  - images/val2012
17
17
  - images/val2007
18
- val: # val images (relative to 'path') 4952 images
18
+ val: # val images (relative to 'path') 4952 images
19
19
  - images/test2007
20
20
  test: # test images (optional)
21
21
  - images/test2007
@@ -6,13 +6,13 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── VisDrone ← downloads here (2.3 GB)
9
+ # └── VisDrone ← downloads here (2.3 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: VisDrone # dataset root dir
13
- train: VisDrone2019-DET-train/images # train images (relative to 'path') 6471 images
14
- val: VisDrone2019-DET-val/images # val images (relative to 'path') 548 images
15
- test: VisDrone2019-DET-test-dev/images # test images (optional) 1610 images
13
+ train: images/train # train images (relative to 'path') 6471 images
14
+ val: images/val # val images (relative to 'path') 548 images
15
+ test: images/test # test-dev images (optional) 1610 images
16
16
 
17
17
  # Classes
18
18
  names:
@@ -31,50 +31,57 @@ names:
31
31
  download: |
32
32
  import os
33
33
  from pathlib import Path
34
+ import shutil
34
35
 
35
36
  from ultralytics.utils.downloads import download
36
37
 
37
38
 
38
- def visdrone2yolo(dir):
39
- """Convert VisDrone annotations to YOLO format, creating label files with normalized bounding box coordinates."""
39
+ def visdrone2yolo(dir, split, source_name=None):
40
+ """Convert VisDrone annotations to YOLO format with images/{split} and labels/{split} structure."""
40
41
  from PIL import Image
41
42
  from tqdm import tqdm
42
43
 
43
- def convert_box(size, box):
44
- # Convert VisDrone box to YOLO xywh box
45
- dw = 1.0 / size[0]
46
- dh = 1.0 / size[1]
47
- return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh
48
-
49
- (dir / "labels").mkdir(parents=True, exist_ok=True) # make labels directory
50
- pbar = tqdm((dir / "annotations").glob("*.txt"), desc=f"Converting {dir}")
51
- for f in pbar:
52
- img_size = Image.open((dir / "images" / f.name).with_suffix(".jpg")).size
44
+ source_dir = dir / (source_name or f"VisDrone2019-DET-{split}")
45
+ images_dir = dir / "images" / split
46
+ labels_dir = dir / "labels" / split
47
+ labels_dir.mkdir(parents=True, exist_ok=True)
48
+
49
+ # Move images to new structure
50
+ if (source_images_dir := source_dir / "images").exists():
51
+ images_dir.mkdir(parents=True, exist_ok=True)
52
+ for img in source_images_dir.glob("*.jpg"):
53
+ img.rename(images_dir / img.name)
54
+
55
+ for f in tqdm((source_dir / "annotations").glob("*.txt"), desc=f"Converting {split}"):
56
+ img_size = Image.open(images_dir / f.with_suffix(".jpg").name).size
57
+ dw, dh = 1.0 / img_size[0], 1.0 / img_size[1]
53
58
  lines = []
54
- with open(f, encoding="utf-8") as file: # read annotation.txt
59
+
60
+ with open(f, encoding="utf-8") as file:
55
61
  for row in [x.split(",") for x in file.read().strip().splitlines()]:
56
- if row[4] == "0": # VisDrone 'ignored regions' class 0
57
- continue
58
- cls = int(row[5]) - 1
59
- box = convert_box(img_size, tuple(map(int, row[:4])))
60
- lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
62
+ if row[4] != "0": # Skip ignored regions
63
+ x, y, w, h = map(int, row[:4])
64
+ cls = int(row[5]) - 1
65
+ # Convert to YOLO format
66
+ x_center, y_center = (x + w / 2) * dw, (y + h / 2) * dh
67
+ w_norm, h_norm = w * dw, h * dh
68
+ lines.append(f"{cls} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}\n")
61
69
 
62
- label_file = str(f).replace(f"{os.sep}annotations{os.sep}", f"{os.sep}labels{os.sep}")
63
- with open(label_file, "w", encoding="utf-8") as fl:
64
- fl.writelines(lines)
65
-
70
+ (labels_dir / f.name).write_text("".join(lines), encoding="utf-8")
66
71
 
67
72
 
68
- # Download
73
+ # Download (ignores test-challenge split)
69
74
  dir = Path(yaml["path"]) # dataset root dir
70
75
  urls = [
71
76
  "https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-train.zip",
72
77
  "https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-val.zip",
73
78
  "https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-test-dev.zip",
74
- "https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-test-challenge.zip",
79
+ # "https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-test-challenge.zip",
75
80
  ]
76
81
  download(urls, dir=dir, curl=True, threads=4)
77
82
 
78
83
  # Convert
79
- for d in "VisDrone2019-DET-train", "VisDrone2019-DET-val", "VisDrone2019-DET-test-dev":
80
- visdrone2yolo(dir / d) # convert VisDrone annotations to YOLO labels
84
+ splits = {"VisDrone2019-DET-train": "train", "VisDrone2019-DET-val": "val", "VisDrone2019-DET-test-dev": "test"}
85
+ for folder, split in splits.items():
86
+ visdrone2yolo(dir, split, folder) # convert VisDrone annotations to YOLO labels
87
+ shutil.rmtree(dir / folder) # cleanup original directory
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── african-wildlife ← downloads here (100 MB)
9
+ # └── african-wildlife ← downloads here (100 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: african-wildlife # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── brain-tumor ← downloads here (4.21 MB)
9
+ # └── brain-tumor ← downloads here (4.21 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: brain-tumor # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── carparts-seg ← downloads here (133 MB)
9
+ # └── carparts-seg ← downloads here (133 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: carparts-seg # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco-pose ← downloads here (20.1 GB)
9
+ # └── coco-pose ← downloads here (20.1 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco-pose # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco ← downloads here (20.1 GB)
9
+ # └── coco ← downloads here (20.1 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco128-seg ← downloads here (7 MB)
9
+ # └── coco128-seg ← downloads here (7 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco128-seg # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco128 ← downloads here (7 MB)
9
+ # └── coco128 ← downloads here (7 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco128 # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco8-grayscale ← downloads here (1 MB)
9
+ # └── coco8-grayscale ← downloads here (1 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco8-grayscale # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco8-multispectral ← downloads here (20.2 MB)
9
+ # └── coco8-multispectral ← downloads here (20.2 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco8-multispectral # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco8-pose ← downloads here (1 MB)
9
+ # └── coco8-pose ← downloads here (1 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco8-pose # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco8-seg ← downloads here (1 MB)
9
+ # └── coco8-seg ← downloads here (1 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco8-seg # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── coco8 ← downloads here (1 MB)
9
+ # └── coco8 ← downloads here (1 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: coco8 # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── crack-seg ← downloads here (91.6 MB)
9
+ # └── crack-seg ← downloads here (91.6 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: crack-seg # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── dog-pose ← downloads here (337 MB)
9
+ # └── dog-pose ← downloads here (337 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: dog-pose # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── dota8-multispectral ← downloads here (37.3MB)
9
+ # └── dota8-multispectral ← downloads here (37.3MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: dota8-multispectral # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── dota8 ← downloads here (1MB)
9
+ # └── dota8 ← downloads here (1MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: dota8 # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── hand-keypoints ← downloads here (369 MB)
9
+ # └── hand-keypoints ← downloads here (369 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: hand-keypoints # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── lvis ← downloads here (20.1 GB)
9
+ # └── lvis ← downloads here (20.1 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: lvis # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── medical-pills ← downloads here (8.19 MB)
9
+ # └── medical-pills ← downloads here (8.19 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: medical-pills # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── open-images-v7 ← downloads here (561 GB)
9
+ # └── open-images-v7 ← downloads here (561 GB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: open-images-v7 # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── package-seg ← downloads here (103 MB)
9
+ # └── package-seg ← downloads here (103 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: package-seg # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── signature ← downloads here (11.3 MB)
9
+ # └── signature ← downloads here (11.3 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: signature # dataset root dir
@@ -6,7 +6,7 @@
6
6
  # parent
7
7
  # ├── ultralytics
8
8
  # └── datasets
9
- # └── tiger-pose ← downloads here (22.8 MB)
9
+ # └── tiger-pose ← downloads here (49.8 MB)
10
10
 
11
11
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
12
12
  path: tiger-pose # dataset root dir
@@ -7,7 +7,7 @@
7
7
  # parent
8
8
  # ├── ultralytics
9
9
  # └── datasets
10
- # └── xView ← downloads here (20.7 GB)
10
+ # └── xView ← downloads here (20.7 GB)
11
11
 
12
12
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
13
13
  path: xView # dataset root dir
@@ -142,7 +142,7 @@ def export_formats():
142
142
  ["PaddlePaddle", "paddle", "_paddle_model", True, True, ["batch"]],
143
143
  ["MNN", "mnn", ".mnn", True, True, ["batch", "half", "int8"]],
144
144
  ["NCNN", "ncnn", "_ncnn_model", True, True, ["batch", "half"]],
145
- ["IMX", "imx", "_imx_model", True, True, ["int8", "fraction"]],
145
+ ["IMX", "imx", "_imx_model", True, True, ["int8", "fraction", "nms"]],
146
146
  ["RKNN", "rknn", "_rknn_model", False, False, ["batch", "name"]],
147
147
  ]
148
148
  return dict(zip(["Format", "Argument", "Suffix", "CPU", "GPU", "Arguments"], zip(*x)))
@@ -313,8 +313,11 @@ class Exporter:
313
313
  if not self.args.int8:
314
314
  LOGGER.warning("IMX export requires int8=True, setting int8=True.")
315
315
  self.args.int8 = True
316
- if model.task != "detect":
317
- raise ValueError("IMX export only supported for detection models.")
316
+ if not self.args.nms:
317
+ LOGGER.warning("IMX export requires nms=True, setting nms=True.")
318
+ self.args.nms = True
319
+ if model.task not in {"detect", "pose"}:
320
+ raise ValueError("IMX export only supported for detection and pose estimation models.")
318
321
  if not hasattr(model, "names"):
319
322
  model.names = default_class_names()
320
323
  model.names = check_class_names(model.names)
@@ -428,7 +431,7 @@ class Exporter:
428
431
 
429
432
  y = None
430
433
  for _ in range(2): # dry runs
431
- y = NMSModel(model, self.args)(im) if self.args.nms and not coreml else model(im)
434
+ y = NMSModel(model, self.args)(im) if self.args.nms and not (coreml or imx) else model(im)
432
435
  if self.args.half and onnx and self.device.type != "cpu":
433
436
  im, model = im.half(), model.half() # to FP16
434
437
 
@@ -1166,15 +1169,14 @@ class Exporter:
1166
1169
  )
1167
1170
  if getattr(self.model, "end2end", False):
1168
1171
  raise ValueError("IMX export is not supported for end2end models.")
1169
- check_requirements(
1170
- ("model-compression-toolkit>=2.3.0,<2.4.1", "sony-custom-layers>=0.3.0", "edge-mdt-tpc>=1.1.0")
1171
- )
1172
+ check_requirements(("model-compression-toolkit>=2.4.1", "sony-custom-layers>=0.3.0", "edge-mdt-tpc>=1.1.0"))
1172
1173
  check_requirements("imx500-converter[pt]>=3.16.1") # Separate requirements for imx500-converter
1174
+ check_requirements("mct-quantizers>=1.6.0") # Separate for compatibility with model-compression-toolkit
1173
1175
 
1174
1176
  import model_compression_toolkit as mct
1175
1177
  import onnx
1176
1178
  from edgemdt_tpc import get_target_platform_capabilities
1177
- from sony_custom_layers.pytorch import multiclass_nms
1179
+ from sony_custom_layers.pytorch import multiclass_nms_with_indices
1178
1180
 
1179
1181
  LOGGER.info(f"\n{prefix} starting export with model_compression_toolkit {mct.__version__}...")
1180
1182
 
@@ -1198,13 +1200,23 @@ class Exporter:
1198
1200
 
1199
1201
  bit_cfg = mct.core.BitWidthConfig()
1200
1202
  if "C2PSA" in self.model.__str__(): # YOLO11
1201
- layer_names = ["sub", "mul_2", "add_14", "cat_21"]
1202
- weights_memory = 2585350.2439
1203
- n_layers = 238 # 238 layers for fused YOLO11n
1203
+ if self.model.task == "detect":
1204
+ layer_names = ["sub", "mul_2", "add_14", "cat_21"]
1205
+ weights_memory = 2585350.2439
1206
+ n_layers = 238 # 238 layers for fused YOLO11n
1207
+ elif self.model.task == "pose":
1208
+ layer_names = ["sub", "mul_2", "add_14", "cat_22", "cat_23", "mul_4", "add_15"]
1209
+ weights_memory = 2437771.67
1210
+ n_layers = 257 # 257 layers for fused YOLO11n-pose
1204
1211
  else: # YOLOv8
1205
- layer_names = ["sub", "mul", "add_6", "cat_17"]
1206
- weights_memory = 2550540.8
1207
- n_layers = 168 # 168 layers for fused YOLOv8n
1212
+ if self.model.task == "detect":
1213
+ layer_names = ["sub", "mul", "add_6", "cat_17"]
1214
+ weights_memory = 2550540.8
1215
+ n_layers = 168 # 168 layers for fused YOLOv8n
1216
+ elif self.model.task == "pose":
1217
+ layer_names = ["add_7", "mul_2", "cat_19", "mul", "sub", "add_6", "cat_18"]
1218
+ weights_memory = 2482451.85
1219
+ n_layers = 187 # 187 layers for fused YOLO11n-pose
1208
1220
 
1209
1221
  # Check if the model has the expected number of layers
1210
1222
  if len(list(self.model.modules())) != n_layers:
@@ -1251,6 +1263,7 @@ class Exporter:
1251
1263
  score_threshold: float = 0.001,
1252
1264
  iou_threshold: float = 0.7,
1253
1265
  max_detections: int = 300,
1266
+ task: str = "detect",
1254
1267
  ):
1255
1268
  """
1256
1269
  Initialize NMSWrapper with PyTorch Module and NMS parameters.
@@ -1260,34 +1273,40 @@ class Exporter:
1260
1273
  score_threshold (float): Score threshold for non-maximum suppression.
1261
1274
  iou_threshold (float): Intersection over union threshold for non-maximum suppression.
1262
1275
  max_detections (int): The number of detections to return.
1276
+ task (str): Task type, either 'detect' or 'pose'.
1263
1277
  """
1264
1278
  super().__init__()
1265
1279
  self.model = model
1266
1280
  self.score_threshold = score_threshold
1267
1281
  self.iou_threshold = iou_threshold
1268
1282
  self.max_detections = max_detections
1283
+ self.task = task
1269
1284
 
1270
1285
  def forward(self, images):
1271
1286
  """Forward pass with model inference and NMS post-processing."""
1272
1287
  # model inference
1273
1288
  outputs = self.model(images)
1274
1289
 
1275
- boxes = outputs[0]
1276
- scores = outputs[1]
1277
- nms = multiclass_nms(
1290
+ boxes, scores = outputs[0], outputs[1]
1291
+ nms_outputs = multiclass_nms_with_indices(
1278
1292
  boxes=boxes,
1279
1293
  scores=scores,
1280
1294
  score_threshold=self.score_threshold,
1281
1295
  iou_threshold=self.iou_threshold,
1282
1296
  max_detections=self.max_detections,
1283
1297
  )
1284
- return nms
1298
+ if self.task == "pose":
1299
+ kpts = outputs[2] # (bs, max_detections, kpts 17*3)
1300
+ out_kpts = torch.gather(kpts, 1, nms_outputs.indices.unsqueeze(-1).expand(-1, -1, kpts.size(-1)))
1301
+ return nms_outputs.boxes, nms_outputs.scores, nms_outputs.labels, out_kpts
1302
+ return nms_outputs
1285
1303
 
1286
1304
  quant_model = NMSWrapper(
1287
1305
  model=quant_model,
1288
1306
  score_threshold=self.args.conf or 0.001,
1289
1307
  iou_threshold=self.args.iou,
1290
1308
  max_detections=self.args.max_det,
1309
+ task=self.model.task,
1291
1310
  ).to(self.device)
1292
1311
 
1293
1312
  f = Path(str(self.file).replace(self.file.suffix, "_imx_model"))
@@ -243,10 +243,6 @@ class YOLOE(Model):
243
243
  """
244
244
  super().__init__(model=model, task=task, verbose=verbose)
245
245
 
246
- # Assign default COCO class names when there are no custom names
247
- if not hasattr(self.model, "names"):
248
- self.model.names = YAML.load(ROOT / "cfg/datasets/coco8.yaml").get("names")
249
-
250
246
  @property
251
247
  def task_map(self) -> Dict[str, Dict[str, Any]]:
252
248
  """Map head to model, validator, and predictor classes."""
@@ -287,7 +283,7 @@ class YOLOE(Model):
287
283
  Examples:
288
284
  >>> model = YOLOE("yoloe-11s-seg.pt")
289
285
  >>> img = torch.rand(1, 3, 640, 640)
290
- >>> visual_features = model.model.backbone(img)
286
+ >>> visual_features = torch.rand(1, 1, 80, 80)
291
287
  >>> pe = model.get_visual_pe(img, visual_features)
292
288
  """
293
289
  assert isinstance(self.model, YOLOEModel)
@@ -259,11 +259,7 @@ class AutoBackend(nn.Module):
259
259
  session = onnxruntime.InferenceSession(w, providers=providers)
260
260
  else:
261
261
  check_requirements(
262
- [
263
- "model-compression-toolkit>=2.3.0,<2.4.1",
264
- "sony-custom-layers[torch]>=0.3.0",
265
- "onnxruntime-extensions",
266
- ]
262
+ ["model-compression-toolkit>=2.4.1", "sony-custom-layers[torch]>=0.3.0", "onnxruntime-extensions"]
267
263
  )
268
264
  w = next(Path(w).glob("*.onnx"))
269
265
  LOGGER.info(f"Loading {w} for ONNX IMX inference...")
@@ -273,7 +269,6 @@ class AutoBackend(nn.Module):
273
269
  session_options = mctq.get_ort_session_options()
274
270
  session_options.enable_mem_reuse = False # fix the shape mismatch from onnxruntime
275
271
  session = onnxruntime.InferenceSession(w, session_options, providers=["CPUExecutionProvider"])
276
- task = "detect"
277
272
 
278
273
  output_names = [x.name for x in session.get_outputs()]
279
274
  metadata = session.get_modelmeta().custom_metadata_map
@@ -674,8 +669,12 @@ class AutoBackend(nn.Module):
674
669
  self.session.run_with_iobinding(self.io)
675
670
  y = self.bindings
676
671
  if self.imx:
677
- # boxes, conf, cls
678
- y = np.concatenate([y[0], y[1][:, :, None], y[2][:, :, None]], axis=-1)
672
+ if self.task == "detect":
673
+ # boxes, conf, cls
674
+ y = np.concatenate([y[0], y[1][:, :, None], y[2][:, :, None]], axis=-1)
675
+ elif self.task == "pose":
676
+ # boxes, conf, kpts
677
+ y = np.concatenate([y[0], y[1][:, :, None], y[2][:, :, None], y[3]], axis=-1)
679
678
 
680
679
  # OpenVINO
681
680
  elif self.xml:
@@ -178,14 +178,10 @@ class Detect(nn.Module):
178
178
  grid_size = torch.tensor([grid_w, grid_h, grid_w, grid_h], device=box.device).reshape(1, 4, 1)
179
179
  norm = self.strides / (self.stride[0] * grid_size)
180
180
  dbox = self.decode_bboxes(self.dfl(box) * norm, self.anchors.unsqueeze(0) * norm[:, :2])
181
- elif self.export and self.format == "imx":
182
- dbox = self.decode_bboxes(
183
- self.dfl(box) * self.strides, self.anchors.unsqueeze(0) * self.strides, xywh=False
184
- )
185
- return dbox.transpose(1, 2), cls.sigmoid().permute(0, 2, 1)
186
181
  else:
187
182
  dbox = self.decode_bboxes(self.dfl(box), self.anchors.unsqueeze(0)) * self.strides
188
-
183
+ if self.export and self.format == "imx":
184
+ return dbox.transpose(1, 2), cls.sigmoid().permute(0, 2, 1)
189
185
  return torch.cat((dbox, cls.sigmoid()), 1)
190
186
 
191
187
  def bias_init(self):
@@ -384,6 +380,8 @@ class Pose(Detect):
384
380
  if self.training:
385
381
  return x, kpt
386
382
  pred_kpt = self.kpts_decode(bs, kpt)
383
+ if self.export and self.format == "imx":
384
+ return (*x, pred_kpt.permute(0, 2, 1))
387
385
  return torch.cat([x, pred_kpt], 1) if self.export else (torch.cat([x[0], pred_kpt], 1), (x[1], kpt))
388
386
 
389
387
  def kpts_decode(self, bs: int, kpts: torch.Tensor) -> torch.Tensor:
@@ -330,7 +330,7 @@ class ConfusionMatrix(DataExportMixin):
330
330
  """
331
331
  self.task = task
332
332
  self.nc = len(names) # number of classes
333
- self.matrix = np.zeros((self.nc + 1, self.nc + 1)) if self.task == "detect" else np.zeros((self.nc, self.nc))
333
+ self.matrix = np.zeros((self.nc, self.nc)) if self.task == "classify" else np.zeros((self.nc + 1, self.nc + 1))
334
334
  self.names = names # name of classes
335
335
 
336
336
  def process_cls_preds(self, preds, targets):
@@ -360,8 +360,9 @@ class ConfusionMatrix(DataExportMixin):
360
360
  conf (float, optional): Confidence threshold for detections.
361
361
  iou_thres (float, optional): IoU threshold for matching detections to ground truth.
362
362
  """
363
- conf = 0.25 if conf in {None, 0.001} else conf # apply 0.25 if default val conf is passed
364
363
  gt_cls, gt_bboxes = batch["cls"], batch["bboxes"]
364
+ is_obb = gt_bboxes.shape[1] == 5 # check if boxes contains angle for OBB
365
+ conf = 0.25 if conf in {None, 0.01 if is_obb else 0.001} else conf # apply 0.25 if default val conf is passed
365
366
  no_pred = len(detections["cls"]) == 0
366
367
  if gt_cls.shape[0] == 0: # Check if labels is empty
367
368
  if not no_pred:
@@ -380,7 +381,6 @@ class ConfusionMatrix(DataExportMixin):
380
381
  gt_classes = gt_cls.int().tolist()
381
382
  detection_classes = detections["cls"].int().tolist()
382
383
  bboxes = detections["bboxes"]
383
- is_obb = bboxes.shape[1] == 5 # check if detections contains angle for OBB
384
384
  iou = batch_probiou(gt_bboxes, bboxes) if is_obb else box_iou(gt_bboxes, bboxes)
385
385
 
386
386
  x = torch.where(iou > iou_thres)
@@ -422,7 +422,7 @@ class ConfusionMatrix(DataExportMixin):
422
422
  tp = self.matrix.diagonal() # true positives
423
423
  fp = self.matrix.sum(1) - tp # false positives
424
424
  # fn = self.matrix.sum(0) - tp # false negatives (missed detections)
425
- return (tp[:-1], fp[:-1]) if self.task == "detect" else (tp, fp) # remove background class if task=detect
425
+ return (tp, fp) if self.task == "classify" else (tp[:-1], fp[:-1]) # remove background class if task=detect
426
426
 
427
427
  @TryExcept(msg="ConfusionMatrix plot failure")
428
428
  @plt_settings()
@@ -441,16 +441,15 @@ class ConfusionMatrix(DataExportMixin):
441
441
  array[array < 0.005] = np.nan # don't annotate (would appear as 0.00)
442
442
 
443
443
  fig, ax = plt.subplots(1, 1, figsize=(12, 9))
444
+ names, n = self.names, self.nc
444
445
  if self.nc >= 100: # downsample for large class count
445
446
  k = max(2, self.nc // 60) # step size for downsampling, always > 1
446
447
  keep_idx = slice(None, None, k) # create slice instead of array
447
- self.names = self.names[keep_idx] # slice class names
448
+ names = names[keep_idx] # slice class names
448
449
  array = array[keep_idx, :][:, keep_idx] # slice matrix rows and cols
449
450
  n = (self.nc + k - 1) // k # number of retained classes
450
- nc = nn = n if self.task == "classify" else n + 1 # adjust for background if needed
451
- else:
452
- nc = nn = self.nc if self.task == "classify" else self.nc + 1
453
- ticklabels = (self.names + ["background"]) if (0 < nn < 99) and (nn == nc) else "auto"
451
+ nc = nn = n if self.task == "classify" else n + 1 # adjust for background if needed
452
+ ticklabels = (names + ["background"]) if (0 < nn < 99) and (nn == nc) else "auto"
454
453
  xy_ticks = np.arange(len(ticklabels))
455
454
  tick_fontsize = max(6, 15 - 0.1 * nc) # Minimum size is 6
456
455
  label_fontsize = max(6, 12 - 0.1 * nc)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.165
3
+ Version: 8.3.167
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>
@@ -7,45 +7,45 @@ tests/test_exports.py,sha256=HmMKOTCia9ZDC0VYc_EPmvBTM5LM5eeI1NF_pKjLpd8,9677
7
7
  tests/test_integrations.py,sha256=kl_AKmE_Qs1GB0_91iVwbzNxofm_hFTt0zzU6JF-pg4,6323
8
8
  tests/test_python.py,sha256=JJu-69IfuUf1dLK7Ko9elyPONiQ1yu7yhapMVIAt_KI,27907
9
9
  tests/test_solutions.py,sha256=tuf6n_fsI8KvSdJrnc-cqP2qYdiYqCWuVrx0z9dOz3Q,13213
10
- ultralytics/__init__.py,sha256=wIZPLrHc-rAxfQk9cYyc2VaweiqnHQTfua9fEcayfKc,730
10
+ ultralytics/__init__.py,sha256=25BnED8OrDgyWwAHSNTDasTO5KJyBbtsiHMkJU2cmZk,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=VIpPHImhjb0XLJquGZrG_LBGZchtOtBSXR7HYTYV2GU,39602
14
14
  ultralytics/cfg/default.yaml,sha256=oFG6llJO-Py5H-cR9qs-7FieJamroDLwpbrkhmfROOM,8307
15
- ultralytics/cfg/datasets/Argoverse.yaml,sha256=0mm20vJBZxxLQtc_Z3Op6zUjmJkINLi70hO6aw67Lwc,3263
16
- ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=aT3VKgkVPTaaRRjnpHEhIbgANU-yt7VsFjAf5562wqA,1212
17
- ultralytics/cfg/datasets/DOTAv1.yaml,sha256=Ydf8_hRfZkaFMEkDKw3as0msVV4KPD1JuFjVMYDqIMQ,1182
18
- ultralytics/cfg/datasets/GlobalWheat2020.yaml,sha256=JP6zk5GR2fufGGFmOMr57EnRj7kKh9-fIuInkdmXMlU,2145
19
- ultralytics/cfg/datasets/HomeObjects-3K.yaml,sha256=kF9tsGZKoFf9D7IA4SyiZrRMavhOpBW1TM_xWiyK_Iw,935
20
- ultralytics/cfg/datasets/ImageNet.yaml,sha256=1zci8FWwbkFwNHlAkfDUnWyoOKrFvkEXz1VNpVAizBg,42531
21
- ultralytics/cfg/datasets/Objects365.yaml,sha256=EfhNwsYMqDCXc3kZfokvk4LYq1QZDKl-ZpfoecP7aOE,9355
22
- ultralytics/cfg/datasets/SKU-110K.yaml,sha256=OBUCCRFr6UXrp6LkXZSXA92dSYCc6MrDP_0rlmmLrvI,2546
23
- ultralytics/cfg/datasets/VOC.yaml,sha256=zVkCLoj6EbZm8gf8cOg8QbEIpsN6W6oreKmW2czTWeE,3788
24
- ultralytics/cfg/datasets/VisDrone.yaml,sha256=iIAxa9F3CxG18d3SFrwqM8_8HFzObxEM3yyhWaQ8saQ,3282
25
- ultralytics/cfg/datasets/african-wildlife.yaml,sha256=WGr59qBlu_MgxQeh1bACHU-vcLbrdKi7VYQ0_pZSgg0,916
26
- ultralytics/cfg/datasets/brain-tumor.yaml,sha256=3NJ7my1ZXse4nnvtf7tTxeLdFO6UhjZlLAbA6VrIsrU,801
27
- ultralytics/cfg/datasets/carparts-seg.yaml,sha256=f1m1eKGkDseizSMOHMRUmxf_Q9XAn4cztbAkeHfkyis,1254
28
- ultralytics/cfg/datasets/coco-pose.yaml,sha256=j_ynggAOE1aNpjG42QHMDTrYiPic8S0cnbNHXqmH7vY,1624
29
- ultralytics/cfg/datasets/coco.yaml,sha256=E5OlAwkJkzhRI2BFIPnUE0VnzdQNDFhv2czDVS582BQ,2607
30
- ultralytics/cfg/datasets/coco128-seg.yaml,sha256=04Pfr7RPgJM2hF_LpYYD2zIPqCyOJ2sWW23HO2qXoEI,1983
31
- ultralytics/cfg/datasets/coco128.yaml,sha256=hNHjxEq57lRpcNYuN3dX7ockjhgQu7SdiXepcGApjdU,1966
32
- ultralytics/cfg/datasets/coco8-grayscale.yaml,sha256=YfAJRbM2wWd37p1Jl7rOOoxiPH3rWRo5mddjUvJcFxg,1962
33
- ultralytics/cfg/datasets/coco8-multispectral.yaml,sha256=Kaca3kaq8-iwtBOdmvJaETI-JzDNyjKbk7SSUWGUnO4,2064
34
- ultralytics/cfg/datasets/coco8-pose.yaml,sha256=4S_0RSNNK_ccz1Qxp7wdO0-RjxwwhldTRpGahQnzIw8,1010
35
- ultralytics/cfg/datasets/coco8-seg.yaml,sha256=8V59_ASLtTg3jsXtV03opU4TRwyFy2fsNUUSR791cB0,1914
36
- ultralytics/cfg/datasets/coco8.yaml,sha256=aPefOD63vx1EJ4BhdeumSrYVoJIh2uMyIb6BTrEFk68,1889
37
- ultralytics/cfg/datasets/crack-seg.yaml,sha256=mfoOsT4opIR9JbQuRqfZvj0xe_SBKB_rcp-Hnz2kFCY,838
38
- ultralytics/cfg/datasets/dog-pose.yaml,sha256=6b1EXTZcbwOQAOSewICR26gslN410xl6zjS3pcgZjmc,909
39
- ultralytics/cfg/datasets/dota8-multispectral.yaml,sha256=AD9LGIV0FdnHLJCsczU06SIOIHYOygr5owb69bi-Nk0,1217
40
- ultralytics/cfg/datasets/dota8.yaml,sha256=cVmqA8SYVIY4Rp5y0oIPfw1Si2AZMPMDrFaV8ZRUnGI,1061
41
- ultralytics/cfg/datasets/hand-keypoints.yaml,sha256=Rt8G2UhSofoyZew1N_PWwBhiuwo_3T22k7lwmvM0980,991
42
- ultralytics/cfg/datasets/lvis.yaml,sha256=69E7zRFQxqdx6T7GhrLVR8XoZtfx4pwR7I3kobxmz2M,29704
43
- ultralytics/cfg/datasets/medical-pills.yaml,sha256=gc1LspJeskPAA23WHFNz_CracF6H5SIFqVT5Zh_lb14,793
44
- ultralytics/cfg/datasets/open-images-v7.yaml,sha256=GblFutr27lY3W2h9GyK8zUqq5svtF1EeEBoP5kbnd5o,12120
45
- ultralytics/cfg/datasets/package-seg.yaml,sha256=N7k3rofNVuTPSc5KMPRInsOKvWiQWelezRHvW1usemQ,850
46
- ultralytics/cfg/datasets/signature.yaml,sha256=iNp2q29yUzMVtTJWJhrC7stt7jFPC70SCzQFOtoIad4,775
47
- ultralytics/cfg/datasets/tiger-pose.yaml,sha256=numopgYHU42-3n5NvOWwouQ5KpRzwah4qcJortFUgyQ,927
48
- ultralytics/cfg/datasets/xView.yaml,sha256=46Z-TaZAXHXM85PoSWeI9mhpu__RB5TOtPAfo0cbAFM,5341
15
+ ultralytics/cfg/datasets/Argoverse.yaml,sha256=4SGaJio9JFUkrscHJTPnH_QSbYm48Wbk8EFwl39zntc,3262
16
+ ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=VZ_KKFX0H2YvlFVJ8JHcLWYBZ2xiQ6Z-ROSTiKWpS7c,1211
17
+ ultralytics/cfg/datasets/DOTAv1.yaml,sha256=JrDuYcQ0JU9lJlCA-dCkMNko_jaj6MAVGHjsfjeZ_u0,1181
18
+ ultralytics/cfg/datasets/GlobalWheat2020.yaml,sha256=dnr_loeYSE6Eo_f7V1yubILsMRBMRm1ozyC5r7uT-iY,2144
19
+ ultralytics/cfg/datasets/HomeObjects-3K.yaml,sha256=xEtSqEad-rtfGuIrERjjhdISggmPlvaX-315ZzKz50I,934
20
+ ultralytics/cfg/datasets/ImageNet.yaml,sha256=GvDWypLVG_H3H67Ai8IC1pvK6fwcTtF5FRhzO1OXXDU,42530
21
+ ultralytics/cfg/datasets/Objects365.yaml,sha256=vLzbT3xgpLR-bHhrHOiYyzYvDIniRdevgSyPetm8QHk,9354
22
+ ultralytics/cfg/datasets/SKU-110K.yaml,sha256=a52le1-JQ2YH6b1WLMUxVz7RkZ36YsmXgWyw0z3q9nQ,2542
23
+ ultralytics/cfg/datasets/VOC.yaml,sha256=GfJkYxN6uAiBTHOsR57L0UDi5NE9vH59A15EROrp0DU,3785
24
+ ultralytics/cfg/datasets/VisDrone.yaml,sha256=NujUSnR6gpXYdcvgg9nxmSZjPjcC9MdZ_YzMipvnuK8,3615
25
+ ultralytics/cfg/datasets/african-wildlife.yaml,sha256=SuloMp9WAZBigGC8az-VLACsFhTM76_O29yhTvUqdnU,915
26
+ ultralytics/cfg/datasets/brain-tumor.yaml,sha256=qrxPO_t9wxbn2kHFwP3vGTzSWj2ELTLelUwYL3_b6nc,800
27
+ ultralytics/cfg/datasets/carparts-seg.yaml,sha256=A4e9hM1unTY2jjZIXGiKSarF6R-Ad9R99t57OgRJ37w,1253
28
+ ultralytics/cfg/datasets/coco-pose.yaml,sha256=UYEY90XjHxTEYsUMXZXXaxzxs31zRun-PLTMRo1i334,1623
29
+ ultralytics/cfg/datasets/coco.yaml,sha256=iptVWzO1gLRPs76Mrs1Sp4yjYAR4f3AYeoUwP0r4UKw,2606
30
+ ultralytics/cfg/datasets/coco128-seg.yaml,sha256=knBS2enqHzQj5R5frU4nJdxKsFFBhq8TQ1G1JNiaz9s,1982
31
+ ultralytics/cfg/datasets/coco128.yaml,sha256=ok_dzaBUzSd0DWfe531GT_uYTEoF5mIQcgoMHZyIVIA,1965
32
+ ultralytics/cfg/datasets/coco8-grayscale.yaml,sha256=8v6G6mOzZHQNdQM1YwdTBW_lsWWkLRnAimwZBHKtJg8,1961
33
+ ultralytics/cfg/datasets/coco8-multispectral.yaml,sha256=nlU4W0d8rl1cVChthOk0NImhVDCm0voY3FrZs2D0lY0,2063
34
+ ultralytics/cfg/datasets/coco8-pose.yaml,sha256=GfSONSl-Oh4QErto91E_ws3im9ZTEYmDMaPOaSLLdV8,1009
35
+ ultralytics/cfg/datasets/coco8-seg.yaml,sha256=Ez42ZE6xHlj8lcjtMBJJP2Y460q2BuiwRfk090XnBgE,1913
36
+ ultralytics/cfg/datasets/coco8.yaml,sha256=tzrDY1KW82AHsgpCxte_yPkgMIIpNY6Pb4F46TDPxkk,1888
37
+ ultralytics/cfg/datasets/crack-seg.yaml,sha256=fqvSIq1fRXO55V_g2T92hcYAVoKBHZsSZQR7CokoPUI,837
38
+ ultralytics/cfg/datasets/dog-pose.yaml,sha256=sRU1JDtEC4nLVf2vkn7lxbp4ILWNcgE-ok96rxZv2lc,908
39
+ ultralytics/cfg/datasets/dota8-multispectral.yaml,sha256=2lMBi1Q3_pc0auK00yX80oF7oUMo0bUlwjkOrp33hvs,1216
40
+ ultralytics/cfg/datasets/dota8.yaml,sha256=5n4h_4zdrtUSkmH5DHJ-JLPvfiATcieIkgP3NeOP5nI,1060
41
+ ultralytics/cfg/datasets/hand-keypoints.yaml,sha256=6JF2wwrfAfaVb5M_yLmXyv7iIFXtAt91FqS-Q3kJda0,990
42
+ ultralytics/cfg/datasets/lvis.yaml,sha256=nEQgUdSdBcTYW3LzdK2ba3k8SK-p7NNgZ-SoCXf5vns,29703
43
+ ultralytics/cfg/datasets/medical-pills.yaml,sha256=RK7iQFpDDkUS6EsEGqlbFjoohi3cgSsUIbsk7UItyds,792
44
+ ultralytics/cfg/datasets/open-images-v7.yaml,sha256=wK9v3OAGdHORkFdqoBi0hS0fa1b74LLroAzUSWjxEqw,12119
45
+ ultralytics/cfg/datasets/package-seg.yaml,sha256=V4uyTDWWzgft24y9HJWuELKuZ5AndAHXbanxMI6T8GU,849
46
+ ultralytics/cfg/datasets/signature.yaml,sha256=gBvU3715gVxVAafI_yaYczGX3kfEfA4BttbiMkgOXNk,774
47
+ ultralytics/cfg/datasets/tiger-pose.yaml,sha256=Y_8htA4--6hmpqHTW-Ix4t9SdaWenSSyl_FUtI2A7n8,926
48
+ ultralytics/cfg/datasets/xView.yaml,sha256=NEEGaRTvTGafckJiFD1ltFyMl0b04zOyOFu_J-PN-Ik,5340
49
49
  ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml,sha256=1Ycp9qMrwpb8rq7cqht3Q-1gMN0R87U35nm2j_isdro,524
50
50
  ultralytics/cfg/models/11/yolo11-cls.yaml,sha256=17l5GdN-Vst4LvafsK2-q6Li9VX9UlUcT5ClCtikweE,1412
51
51
  ultralytics/cfg/models/11/yolo11-obb.yaml,sha256=3M_c06B-y8da4tunHVxQQ-iFUNLKUfofqCZTpnH5FEU,2034
@@ -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=mb_mJ2eQ7pvCpRk9xrzGOmTvJ6dbknGWN6adcHe_7pM,73500
122
+ ultralytics/engine/exporter.py,sha256=m6HAaoDRDaUR4P0zue3o7bUKjnPa4QlMCjcbJtS4iCI,74926
123
123
  ultralytics/engine/model.py,sha256=FmLwiKuItVNgoyXhAvesUnD3UeHBzCVzGHDrqB8J4ms,53453
124
124
  ultralytics/engine/predictor.py,sha256=xxl1kdAzKrN8Y_5MQ5f92uFPeeRq1mYOl6hNlzpPjy8,22520
125
125
  ultralytics/engine/results.py,sha256=QcHcbPVlLBiy_APwABr-T5K65HR8Bl1rRzxawjjP76E,71873
@@ -164,7 +164,7 @@ ultralytics/models/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXp
164
164
  ultralytics/models/utils/loss.py,sha256=E-61TfLPc04IdeL6IlFDityDoPju-ov0ouWV_cNY4Kg,21254
165
165
  ultralytics/models/utils/ops.py,sha256=Pr77n8XW25SUEx4X3bBvXcVIbRdJPoaXJuG0KWWawRQ,15253
166
166
  ultralytics/models/yolo/__init__.py,sha256=or0j5xvcM0usMlsFTYhNAOcQUri7reD0cD9JR5b7zDk,307
167
- ultralytics/models/yolo/model.py,sha256=xK-Te6D0PGY3vpWQg-HT3TwP0bzPs0XfUjd_L_tVXRs,18752
167
+ ultralytics/models/yolo/model.py,sha256=e66CIsSLHbEeGlkEQ1r6WwVDKAoR2nc0-UoGA94z-eM,18544
168
168
  ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
169
169
  ultralytics/models/yolo/classify/predict.py,sha256=FqAC2YXe25bRwedMZhF3Lw0waoY-a60xMKELhxApP9I,4149
170
170
  ultralytics/models/yolo/classify/train.py,sha256=V-hevc6X7xemnpyru84OfTRA77eNnkVSMEz16_OUvo4,10244
@@ -194,14 +194,14 @@ ultralytics/models/yolo/yoloe/train.py,sha256=XYpQYSnSD8vi_9VSj_S5oIsNUEqm3e66vP
194
194
  ultralytics/models/yolo/yoloe/train_seg.py,sha256=aCV7M8oQOvODFnU4piZdJh3tIrBJYAzZfRVRx1vRgxo,4956
195
195
  ultralytics/models/yolo/yoloe/val.py,sha256=yebPkxwKKt__cY05Zbh1YXg4_BKzzpcDc3Cv3FJ5SAA,9769
196
196
  ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
197
- ultralytics/nn/autobackend.py,sha256=n-2ADzX3Y2MRE8nHFeVvFCJFJP9rCbkkNbcufPZ24dE,41532
197
+ ultralytics/nn/autobackend.py,sha256=_65yU6AIpmz1vV24oSNNMPIBmywPTQQdWF0pwHDHxiU,41628
198
198
  ultralytics/nn/tasks.py,sha256=jRUjYn1xz_LEa_zx6Upb0UpXvy0Bca1o5HEc7FCRgwM,72653
199
199
  ultralytics/nn/text_model.py,sha256=cYwD-0el4VeToDBP4iPFOQGqyEQatJOBHrVyONL3K_s,15282
200
200
  ultralytics/nn/modules/__init__.py,sha256=2nY0X69Z5DD5SWt6v3CUTZa5gXSzC9TQr3VTVqhyGho,3158
201
201
  ultralytics/nn/modules/activation.py,sha256=75JcIMH2Cu9GTC2Uf55r_5YLpxcrXQDaVoeGQ0hlUAU,2233
202
202
  ultralytics/nn/modules/block.py,sha256=JfOjWEgUNfwFCt-P2awhga4B7GXeDlkKVhLBp7oA-Es,70652
203
203
  ultralytics/nn/modules/conv.py,sha256=eM_t0hQwvEH4rllJucqRMNq7IoipEjbTa_ELROu4ubs,21445
204
- ultralytics/nn/modules/head.py,sha256=zTXFXc46ljPdP3mjgH7B3y2bPIjvbVPtgTu_rQCV8xo,53505
204
+ ultralytics/nn/modules/head.py,sha256=WiYJ-odEWisWZKKbOuvj1dJkUky2Z6D3yCTFqiRO-B0,53450
205
205
  ultralytics/nn/modules/transformer.py,sha256=PW5-6gzOP3_rZ_uAkmxvI42nU5bkrgbgLKCy5PC5px4,31415
206
206
  ultralytics/nn/modules/utils.py,sha256=rn8yTObZGkQoqVzjbZWLaHiytppG4ffjMME4Lw60glM,6092
207
207
  ultralytics/solutions/__init__.py,sha256=ZoeAQavTLp8aClnhZ9tbl6lxy86GxofyGvZWTx2aWkI,1209
@@ -246,7 +246,7 @@ ultralytics/utils/export.py,sha256=LK-wlTlyb_zIKtSvOmfmvR70RcUU9Ct9UBDt5wn9_rY,9
246
246
  ultralytics/utils/files.py,sha256=ZCbLGleiF0f-PqYfaxMFAWop88w7U1hpreHXl8b2ko0,8238
247
247
  ultralytics/utils/instance.py,sha256=dC83rHvQXciAED3rOiScFs3BOX9OI06Ey1mj9sjUKvs,19070
248
248
  ultralytics/utils/loss.py,sha256=fbOWc3Iu0QOJiWbi-mXWA9-1otTYlehtmUsI7os7ydM,39799
249
- ultralytics/utils/metrics.py,sha256=3nQsz3rAm8n65iqikRzU30Pd2x20FY60ZlWrCMv5ZYk,62225
249
+ ultralytics/utils/metrics.py,sha256=AbaYgGPEFY-IVv1_Izb0dXulSs1NEZ2-TVkO1GcP8iI,62179
250
250
  ultralytics/utils/ops.py,sha256=8d60fbpntrexK3gPoLUS6mWAYGrtrQaQCOYyRJsCjuI,34521
251
251
  ultralytics/utils/patches.py,sha256=tBAsNo_RyoFLL9OAzVuJmuoDLUJIPuTMByBYyblGG1A,6517
252
252
  ultralytics/utils/plotting.py,sha256=LO-iR-k1UewV5vt4xXDUIirdmNEZdpfiQvLyIWqINPg,47171
@@ -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.165.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
269
- ultralytics-8.3.165.dist-info/METADATA,sha256=WDieA7xho_LHySb9YZQpFqZWPXBGTcz9nbSeJWbLlDo,37576
270
- ultralytics-8.3.165.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
271
- ultralytics-8.3.165.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
272
- ultralytics-8.3.165.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
273
- ultralytics-8.3.165.dist-info/RECORD,,
268
+ ultralytics-8.3.167.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
269
+ ultralytics-8.3.167.dist-info/METADATA,sha256=GHOf_ArFRGBsrNgvyYN-MibqukqrWcY4ORaG0A-XOg4,37576
270
+ ultralytics-8.3.167.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
271
+ ultralytics-8.3.167.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
272
+ ultralytics-8.3.167.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
273
+ ultralytics-8.3.167.dist-info/RECORD,,