ultralytics 8.2.38__py3-none-any.whl → 8.2.40__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.
Potentially problematic release.
This version of ultralytics might be problematic. Click here for more details.
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/models/v8/yolov8-p6.yaml +5 -5
- ultralytics/data/augment.py +13 -16
- ultralytics/data/converter.py +10 -11
- ultralytics/data/split_dota.py +4 -4
- ultralytics/engine/exporter.py +2 -2
- ultralytics/engine/model.py +2 -26
- ultralytics/hub/__init__.py +16 -1
- ultralytics/hub/session.py +39 -26
- ultralytics/models/sam/modules/tiny_encoder.py +6 -7
- ultralytics/nn/modules/__init__.py +1 -0
- ultralytics/nn/modules/block.py +1 -2
- ultralytics/nn/modules/head.py +1 -2
- ultralytics/nn/tasks.py +5 -1
- ultralytics/solutions/__init__.py +1 -0
- ultralytics/utils/__init__.py +1 -1
- ultralytics/utils/callbacks/hub.py +9 -2
- {ultralytics-8.2.38.dist-info → ultralytics-8.2.40.dist-info}/METADATA +6 -6
- {ultralytics-8.2.38.dist-info → ultralytics-8.2.40.dist-info}/RECORD +23 -23
- {ultralytics-8.2.38.dist-info → ultralytics-8.2.40.dist-info}/LICENSE +0 -0
- {ultralytics-8.2.38.dist-info → ultralytics-8.2.40.dist-info}/WHEEL +0 -0
- {ultralytics-8.2.38.dist-info → ultralytics-8.2.40.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.2.38.dist-info → ultralytics-8.2.40.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
nc: 80 # number of classes
|
|
6
6
|
scales: # model compound scaling constants, i.e. 'model=yolov8n-p6.yaml' will call yolov8-p6.yaml with scale 'n'
|
|
7
7
|
# [depth, width, max_channels]
|
|
8
|
-
n: [0.33, 0.25, 1024]
|
|
9
|
-
s: [0.33, 0.50, 1024]
|
|
10
|
-
m: [0.67, 0.75, 768]
|
|
11
|
-
l: [1.00, 1.00, 512]
|
|
12
|
-
x: [1.00, 1.25, 512]
|
|
8
|
+
n: [0.33, 0.25, 1024] # YOLOv8n-p6 summary (fused): 220 layers, 4976656 parameters, 42560 gradients, 8.7 GFLOPs
|
|
9
|
+
s: [0.33, 0.50, 1024] # YOLOv8s-p6 summary (fused): 220 layers, 17897168 parameters, 57920 gradients, 28.5 GFLOPs
|
|
10
|
+
m: [0.67, 0.75, 768] # YOLOv8m-p6 summary (fused): 285 layers, 44862352 parameters, 78400 gradients, 83.1 GFLOPs
|
|
11
|
+
l: [1.00, 1.00, 512] # YOLOv8l-p6 summary (fused): 350 layers, 62351440 parameters, 98880 gradients, 167.3 GFLOPs
|
|
12
|
+
x: [1.00, 1.25, 512] # YOLOv8x-p6 summary (fused): 350 layers, 97382352 parameters, 123456 gradients, 261.1 GFLOPs
|
|
13
13
|
|
|
14
14
|
# YOLOv8.0x6 backbone
|
|
15
15
|
backbone:
|
ultralytics/data/augment.py
CHANGED
|
@@ -1223,16 +1223,13 @@ def classify_transforms(
|
|
|
1223
1223
|
else:
|
|
1224
1224
|
# Resize the shortest edge to matching target dim for non-square target
|
|
1225
1225
|
tfl = [T.Resize(scale_size)]
|
|
1226
|
-
tfl
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
),
|
|
1234
|
-
]
|
|
1235
|
-
|
|
1226
|
+
tfl.extend(
|
|
1227
|
+
[
|
|
1228
|
+
T.CenterCrop(size),
|
|
1229
|
+
T.ToTensor(),
|
|
1230
|
+
T.Normalize(mean=torch.tensor(mean), std=torch.tensor(std)),
|
|
1231
|
+
]
|
|
1232
|
+
)
|
|
1236
1233
|
return T.Compose(tfl)
|
|
1237
1234
|
|
|
1238
1235
|
|
|
@@ -1284,9 +1281,9 @@ def classify_augmentations(
|
|
|
1284
1281
|
ratio = tuple(ratio or (3.0 / 4.0, 4.0 / 3.0)) # default imagenet ratio range
|
|
1285
1282
|
primary_tfl = [T.RandomResizedCrop(size, scale=scale, ratio=ratio, interpolation=interpolation)]
|
|
1286
1283
|
if hflip > 0.0:
|
|
1287
|
-
primary_tfl
|
|
1284
|
+
primary_tfl.append(T.RandomHorizontalFlip(p=hflip))
|
|
1288
1285
|
if vflip > 0.0:
|
|
1289
|
-
primary_tfl
|
|
1286
|
+
primary_tfl.append(T.RandomVerticalFlip(p=vflip))
|
|
1290
1287
|
|
|
1291
1288
|
secondary_tfl = []
|
|
1292
1289
|
disable_color_jitter = False
|
|
@@ -1298,19 +1295,19 @@ def classify_augmentations(
|
|
|
1298
1295
|
|
|
1299
1296
|
if auto_augment == "randaugment":
|
|
1300
1297
|
if TORCHVISION_0_11:
|
|
1301
|
-
secondary_tfl
|
|
1298
|
+
secondary_tfl.append(T.RandAugment(interpolation=interpolation))
|
|
1302
1299
|
else:
|
|
1303
1300
|
LOGGER.warning('"auto_augment=randaugment" requires torchvision >= 0.11.0. Disabling it.')
|
|
1304
1301
|
|
|
1305
1302
|
elif auto_augment == "augmix":
|
|
1306
1303
|
if TORCHVISION_0_13:
|
|
1307
|
-
secondary_tfl
|
|
1304
|
+
secondary_tfl.append(T.AugMix(interpolation=interpolation))
|
|
1308
1305
|
else:
|
|
1309
1306
|
LOGGER.warning('"auto_augment=augmix" requires torchvision >= 0.13.0. Disabling it.')
|
|
1310
1307
|
|
|
1311
1308
|
elif auto_augment == "autoaugment":
|
|
1312
1309
|
if TORCHVISION_0_10:
|
|
1313
|
-
secondary_tfl
|
|
1310
|
+
secondary_tfl.append(T.AutoAugment(interpolation=interpolation))
|
|
1314
1311
|
else:
|
|
1315
1312
|
LOGGER.warning('"auto_augment=autoaugment" requires torchvision >= 0.10.0. Disabling it.')
|
|
1316
1313
|
|
|
@@ -1321,7 +1318,7 @@ def classify_augmentations(
|
|
|
1321
1318
|
)
|
|
1322
1319
|
|
|
1323
1320
|
if not disable_color_jitter:
|
|
1324
|
-
secondary_tfl
|
|
1321
|
+
secondary_tfl.append(T.ColorJitter(brightness=hsv_v, contrast=hsv_v, saturation=hsv_s, hue=hsv_h))
|
|
1325
1322
|
|
|
1326
1323
|
final_tfl = [
|
|
1327
1324
|
T.ToTensor(),
|
ultralytics/data/converter.py
CHANGED
|
@@ -329,8 +329,7 @@ def convert_coco(
|
|
|
329
329
|
|
|
330
330
|
if lvis:
|
|
331
331
|
with open((Path(save_dir) / json_file.name.replace("lvis_v1_", "").replace(".json", ".txt")), "a") as f:
|
|
332
|
-
for
|
|
333
|
-
f.write(f"{l}\n")
|
|
332
|
+
f.writelines(f"{line}\n" for line in image_txt)
|
|
334
333
|
|
|
335
334
|
LOGGER.info(f"{'LVIS' if lvis else 'COCO'} data converted successfully.\nResults saved to {save_dir.resolve()}")
|
|
336
335
|
|
|
@@ -534,25 +533,25 @@ def yolo_bbox2segment(im_dir, save_dir=None, sam_model="sam_b.pt"):
|
|
|
534
533
|
|
|
535
534
|
LOGGER.info("Detection labels detected, generating segment labels by SAM model!")
|
|
536
535
|
sam_model = SAM(sam_model)
|
|
537
|
-
for
|
|
538
|
-
h, w =
|
|
539
|
-
boxes =
|
|
536
|
+
for label in tqdm(dataset.labels, total=len(dataset.labels), desc="Generating segment labels"):
|
|
537
|
+
h, w = label["shape"]
|
|
538
|
+
boxes = label["bboxes"]
|
|
540
539
|
if len(boxes) == 0: # skip empty labels
|
|
541
540
|
continue
|
|
542
541
|
boxes[:, [0, 2]] *= w
|
|
543
542
|
boxes[:, [1, 3]] *= h
|
|
544
|
-
im = cv2.imread(
|
|
543
|
+
im = cv2.imread(label["im_file"])
|
|
545
544
|
sam_results = sam_model(im, bboxes=xywh2xyxy(boxes), verbose=False, save=False)
|
|
546
|
-
|
|
545
|
+
label["segments"] = sam_results[0].masks.xyn
|
|
547
546
|
|
|
548
547
|
save_dir = Path(save_dir) if save_dir else Path(im_dir).parent / "labels-segment"
|
|
549
548
|
save_dir.mkdir(parents=True, exist_ok=True)
|
|
550
|
-
for
|
|
549
|
+
for label in dataset.labels:
|
|
551
550
|
texts = []
|
|
552
|
-
lb_name = Path(
|
|
551
|
+
lb_name = Path(label["im_file"]).with_suffix(".txt").name
|
|
553
552
|
txt_file = save_dir / lb_name
|
|
554
|
-
cls =
|
|
555
|
-
for i, s in enumerate(
|
|
553
|
+
cls = label["cls"]
|
|
554
|
+
for i, s in enumerate(label["segments"]):
|
|
556
555
|
line = (int(cls[i]), *s.reshape(-1))
|
|
557
556
|
texts.append(("%g " * len(line)).rstrip() % line)
|
|
558
557
|
if texts:
|
ultralytics/data/split_dota.py
CHANGED
|
@@ -26,8 +26,8 @@ def bbox_iof(polygon1, bbox2, eps=1e-6):
|
|
|
26
26
|
bbox2 (np.ndarray): Bounding boxes, (n ,4).
|
|
27
27
|
"""
|
|
28
28
|
polygon1 = polygon1.reshape(-1, 4, 2)
|
|
29
|
-
lt_point = np.min(polygon1, axis=-2)
|
|
30
|
-
rb_point = np.max(polygon1, axis=-2)
|
|
29
|
+
lt_point = np.min(polygon1, axis=-2) # left-top
|
|
30
|
+
rb_point = np.max(polygon1, axis=-2) # right-bottom
|
|
31
31
|
bbox1 = np.concatenate([lt_point, rb_point], axis=-1)
|
|
32
32
|
|
|
33
33
|
lt = np.maximum(bbox1[:, None, :2], bbox2[..., :2])
|
|
@@ -35,8 +35,8 @@ def bbox_iof(polygon1, bbox2, eps=1e-6):
|
|
|
35
35
|
wh = np.clip(rb - lt, 0, np.inf)
|
|
36
36
|
h_overlaps = wh[..., 0] * wh[..., 1]
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
polygon2 = np.stack([
|
|
38
|
+
left, top, right, bottom = (bbox2[..., i] for i in range(4))
|
|
39
|
+
polygon2 = np.stack([left, top, right, top, right, bottom, left, bottom], axis=-1).reshape(-1, 4, 2)
|
|
40
40
|
|
|
41
41
|
sg_polys1 = [Polygon(p) for p in polygon1]
|
|
42
42
|
sg_polys2 = [Polygon(p) for p in polygon2]
|
ultralytics/engine/exporter.py
CHANGED
|
@@ -388,7 +388,7 @@ class Exporter:
|
|
|
388
388
|
"""YOLOv8 ONNX export."""
|
|
389
389
|
requirements = ["onnx>=1.12.0"]
|
|
390
390
|
if self.args.simplify:
|
|
391
|
-
requirements += ["onnxslim
|
|
391
|
+
requirements += ["onnxslim>=0.1.31", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
|
|
392
392
|
check_requirements(requirements)
|
|
393
393
|
import onnx # noqa
|
|
394
394
|
|
|
@@ -827,7 +827,7 @@ class Exporter:
|
|
|
827
827
|
"onnx>=1.12.0",
|
|
828
828
|
"onnx2tf>1.17.5,<=1.22.3",
|
|
829
829
|
"sng4onnx>=1.0.1",
|
|
830
|
-
"onnxslim
|
|
830
|
+
"onnxslim>=0.1.31",
|
|
831
831
|
"onnx_graphsurgeon>=0.3.26",
|
|
832
832
|
"tflite_support<=0.4.3" if IS_JETSON else "tflite_support", # fix ImportError 'GLIBCXX_3.4.29'
|
|
833
833
|
"flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
|
ultralytics/engine/model.py
CHANGED
|
@@ -9,7 +9,7 @@ import torch
|
|
|
9
9
|
|
|
10
10
|
from ultralytics.cfg import TASK2DATA, get_cfg, get_save_dir
|
|
11
11
|
from ultralytics.engine.results import Results
|
|
12
|
-
from ultralytics.hub
|
|
12
|
+
from ultralytics.hub import HUB_WEB_ROOT, HUBTrainingSession
|
|
13
13
|
from ultralytics.nn.tasks import attempt_load_one_weight, guess_model_task, nn, yaml_model_load
|
|
14
14
|
from ultralytics.utils import (
|
|
15
15
|
ARGV,
|
|
@@ -17,7 +17,6 @@ from ultralytics.utils import (
|
|
|
17
17
|
DEFAULT_CFG_DICT,
|
|
18
18
|
LOGGER,
|
|
19
19
|
RANK,
|
|
20
|
-
SETTINGS,
|
|
21
20
|
callbacks,
|
|
22
21
|
checks,
|
|
23
22
|
emojis,
|
|
@@ -76,7 +75,6 @@ class Model(nn.Module):
|
|
|
76
75
|
add_callback: Adds a callback function for an event.
|
|
77
76
|
clear_callback: Clears all callbacks for an event.
|
|
78
77
|
reset_callbacks: Resets all callbacks to their default functions.
|
|
79
|
-
_get_hub_session: Retrieves or creates an Ultralytics HUB session.
|
|
80
78
|
is_triton_model: Checks if a model is a Triton Server model.
|
|
81
79
|
is_hub_model: Checks if a model is an Ultralytics HUB model.
|
|
82
80
|
_reset_ckpt_args: Resets checkpoint arguments when loading a PyTorch model.
|
|
@@ -136,13 +134,12 @@ class Model(nn.Module):
|
|
|
136
134
|
if self.is_hub_model(model):
|
|
137
135
|
# Fetch model from HUB
|
|
138
136
|
checks.check_requirements("hub-sdk>=0.0.6")
|
|
139
|
-
self.session =
|
|
137
|
+
self.session = HUBTrainingSession.create_session(model)
|
|
140
138
|
model = self.session.model_file
|
|
141
139
|
|
|
142
140
|
# Check if Triton Server model
|
|
143
141
|
elif self.is_triton_model(model):
|
|
144
142
|
self.model_name = self.model = model
|
|
145
|
-
self.task = task
|
|
146
143
|
return
|
|
147
144
|
|
|
148
145
|
# Load or create new YOLO model
|
|
@@ -176,14 +173,6 @@ class Model(nn.Module):
|
|
|
176
173
|
"""
|
|
177
174
|
return self.predict(source, stream, **kwargs)
|
|
178
175
|
|
|
179
|
-
@staticmethod
|
|
180
|
-
def _get_hub_session(model: str):
|
|
181
|
-
"""Creates a session for Hub Training."""
|
|
182
|
-
from ultralytics.hub.session import HUBTrainingSession
|
|
183
|
-
|
|
184
|
-
session = HUBTrainingSession(model)
|
|
185
|
-
return session if session.client.authenticated else None
|
|
186
|
-
|
|
187
176
|
@staticmethod
|
|
188
177
|
def is_triton_model(model: str) -> bool:
|
|
189
178
|
"""Is model a Triton Server URL string, i.e. <scheme>://<netloc>/<endpoint>/<task_name>"""
|
|
@@ -657,19 +646,6 @@ class Model(nn.Module):
|
|
|
657
646
|
self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
|
|
658
647
|
self.model = self.trainer.model
|
|
659
648
|
|
|
660
|
-
if SETTINGS["hub"] is True and not self.session:
|
|
661
|
-
# Create a model in HUB
|
|
662
|
-
try:
|
|
663
|
-
self.session = self._get_hub_session(self.model_name)
|
|
664
|
-
if self.session:
|
|
665
|
-
self.session.create_model(args)
|
|
666
|
-
# Check model was created
|
|
667
|
-
if not getattr(self.session.model, "id", None):
|
|
668
|
-
self.session = None
|
|
669
|
-
except (PermissionError, ModuleNotFoundError):
|
|
670
|
-
# Ignore PermissionError and ModuleNotFoundError which indicates hub-sdk not installed
|
|
671
|
-
pass
|
|
672
|
-
|
|
673
649
|
self.trainer.hub_session = self.session # attach optional HUB session
|
|
674
650
|
self.trainer.train()
|
|
675
651
|
# Update model and cfg after training
|
ultralytics/hub/__init__.py
CHANGED
|
@@ -4,9 +4,24 @@ import requests
|
|
|
4
4
|
|
|
5
5
|
from ultralytics.data.utils import HUBDatasetStats
|
|
6
6
|
from ultralytics.hub.auth import Auth
|
|
7
|
-
from ultralytics.hub.
|
|
7
|
+
from ultralytics.hub.session import HUBTrainingSession
|
|
8
|
+
from ultralytics.hub.utils import HUB_API_ROOT, HUB_WEB_ROOT, PREFIX, events
|
|
8
9
|
from ultralytics.utils import LOGGER, SETTINGS, checks
|
|
9
10
|
|
|
11
|
+
__all__ = (
|
|
12
|
+
"PREFIX",
|
|
13
|
+
"HUB_WEB_ROOT",
|
|
14
|
+
"HUBTrainingSession",
|
|
15
|
+
"login",
|
|
16
|
+
"logout",
|
|
17
|
+
"reset_model",
|
|
18
|
+
"export_fmts_hub",
|
|
19
|
+
"export_model",
|
|
20
|
+
"get_export",
|
|
21
|
+
"check_dataset",
|
|
22
|
+
"events",
|
|
23
|
+
)
|
|
24
|
+
|
|
10
25
|
|
|
11
26
|
def login(api_key: str = None, save=True) -> bool:
|
|
12
27
|
"""
|
ultralytics/hub/session.py
CHANGED
|
@@ -19,16 +19,12 @@ class HUBTrainingSession:
|
|
|
19
19
|
HUB training session for Ultralytics HUB YOLO models. Handles model initialization, heartbeats, and checkpointing.
|
|
20
20
|
|
|
21
21
|
Attributes:
|
|
22
|
-
agent_id (str): Identifier for the instance communicating with the server.
|
|
23
22
|
model_id (str): Identifier for the YOLO model being trained.
|
|
24
23
|
model_url (str): URL for the model in Ultralytics HUB.
|
|
25
|
-
api_url (str): API URL for the model in Ultralytics HUB.
|
|
26
|
-
auth_header (dict): Authentication header for the Ultralytics HUB API requests.
|
|
27
24
|
rate_limits (dict): Rate limits for different API calls (in seconds).
|
|
28
25
|
timers (dict): Timers for rate limiting.
|
|
29
26
|
metrics_queue (dict): Queue for the model's metrics.
|
|
30
27
|
model (dict): Model data fetched from Ultralytics HUB.
|
|
31
|
-
alive (bool): Indicates if the heartbeat loop is active.
|
|
32
28
|
"""
|
|
33
29
|
|
|
34
30
|
def __init__(self, identifier):
|
|
@@ -46,14 +42,12 @@ class HUBTrainingSession:
|
|
|
46
42
|
"""
|
|
47
43
|
from hub_sdk import HUBClient
|
|
48
44
|
|
|
49
|
-
self.rate_limits = {
|
|
50
|
-
"metrics": 3.0,
|
|
51
|
-
"ckpt": 900.0,
|
|
52
|
-
"heartbeat": 300.0,
|
|
53
|
-
} # rate limits (seconds)
|
|
45
|
+
self.rate_limits = {"metrics": 3, "ckpt": 900, "heartbeat": 300} # rate limits (seconds)
|
|
54
46
|
self.metrics_queue = {} # holds metrics for each epoch until upload
|
|
55
47
|
self.metrics_upload_failed_queue = {} # holds metrics for each epoch if upload failed
|
|
56
48
|
self.timers = {} # holds timers in ultralytics/utils/callbacks/hub.py
|
|
49
|
+
self.model = None
|
|
50
|
+
self.model_url = None
|
|
57
51
|
|
|
58
52
|
# Parse input
|
|
59
53
|
api_key, model_id, self.filename = self._parse_identifier(identifier)
|
|
@@ -65,10 +59,26 @@ class HUBTrainingSession:
|
|
|
65
59
|
# Initialize client
|
|
66
60
|
self.client = HUBClient(credentials)
|
|
67
61
|
|
|
68
|
-
if
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
# Load models if authenticated
|
|
63
|
+
if self.client.authenticated:
|
|
64
|
+
if model_id:
|
|
65
|
+
self.load_model(model_id) # load existing model
|
|
66
|
+
else:
|
|
67
|
+
self.model = self.client.model() # load empty model
|
|
68
|
+
|
|
69
|
+
@classmethod
|
|
70
|
+
def create_session(cls, identifier, args=None):
|
|
71
|
+
"""Class method to create an authenticated HUBTrainingSession or return None."""
|
|
72
|
+
try:
|
|
73
|
+
session = cls(identifier)
|
|
74
|
+
assert session.client.authenticated, "HUB not authenticated"
|
|
75
|
+
if args:
|
|
76
|
+
session.create_model(args)
|
|
77
|
+
assert session.model.id, "HUB model not loaded correctly"
|
|
78
|
+
return session
|
|
79
|
+
# PermissionError and ModuleNotFoundError indicate hub-sdk not installed
|
|
80
|
+
except (PermissionError, ModuleNotFoundError, AssertionError):
|
|
81
|
+
return None
|
|
72
82
|
|
|
73
83
|
def load_model(self, model_id):
|
|
74
84
|
"""Loads an existing model from Ultralytics HUB using the provided model identifier."""
|
|
@@ -92,14 +102,12 @@ class HUBTrainingSession:
|
|
|
92
102
|
"epochs": model_args.get("epochs", 300),
|
|
93
103
|
"imageSize": model_args.get("imgsz", 640),
|
|
94
104
|
"patience": model_args.get("patience", 100),
|
|
95
|
-
"device": model_args.get("device", ""),
|
|
96
|
-
"cache": model_args.get("cache", "ram"),
|
|
105
|
+
"device": str(model_args.get("device", "")), # convert None to string
|
|
106
|
+
"cache": str(model_args.get("cache", "ram")), # convert True, False, None to string
|
|
97
107
|
},
|
|
98
108
|
"dataset": {"name": model_args.get("data")},
|
|
99
109
|
"lineage": {
|
|
100
|
-
"architecture": {
|
|
101
|
-
"name": self.filename.replace(".pt", "").replace(".yaml", ""),
|
|
102
|
-
},
|
|
110
|
+
"architecture": {"name": self.filename.replace(".pt", "").replace(".yaml", "")},
|
|
103
111
|
"parent": {},
|
|
104
112
|
},
|
|
105
113
|
"meta": {"name": self.filename},
|
|
@@ -113,7 +121,7 @@ class HUBTrainingSession:
|
|
|
113
121
|
# Model could not be created
|
|
114
122
|
# TODO: improve error handling
|
|
115
123
|
if not self.model.id:
|
|
116
|
-
return
|
|
124
|
+
return None
|
|
117
125
|
|
|
118
126
|
self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
|
|
119
127
|
|
|
@@ -122,7 +130,8 @@ class HUBTrainingSession:
|
|
|
122
130
|
|
|
123
131
|
LOGGER.info(f"{PREFIX}View model at {self.model_url} 🚀")
|
|
124
132
|
|
|
125
|
-
|
|
133
|
+
@staticmethod
|
|
134
|
+
def _parse_identifier(identifier):
|
|
126
135
|
"""
|
|
127
136
|
Parses the given identifier to determine the type of identifier and extract relevant components.
|
|
128
137
|
|
|
@@ -213,13 +222,14 @@ class HUBTrainingSession:
|
|
|
213
222
|
thread=True,
|
|
214
223
|
verbose=True,
|
|
215
224
|
progress_total=None,
|
|
216
|
-
|
|
225
|
+
stream_response=None,
|
|
217
226
|
*args,
|
|
218
227
|
**kwargs,
|
|
219
228
|
):
|
|
220
229
|
def retry_request():
|
|
221
230
|
"""Attempts to call `request_func` with retries, timeout, and optional threading."""
|
|
222
231
|
t0 = time.time() # Record the start time for the timeout
|
|
232
|
+
response = None
|
|
223
233
|
for i in range(retry + 1):
|
|
224
234
|
if (time.time() - t0) > timeout:
|
|
225
235
|
LOGGER.warning(f"{PREFIX}Timeout for request reached. {HELP_MSG}")
|
|
@@ -233,7 +243,7 @@ class HUBTrainingSession:
|
|
|
233
243
|
|
|
234
244
|
if progress_total:
|
|
235
245
|
self._show_upload_progress(progress_total, response)
|
|
236
|
-
elif
|
|
246
|
+
elif stream_response:
|
|
237
247
|
self._iterate_content(response)
|
|
238
248
|
|
|
239
249
|
if HTTPStatus.OK <= response.status_code < HTTPStatus.MULTIPLE_CHOICES:
|
|
@@ -268,7 +278,8 @@ class HUBTrainingSession:
|
|
|
268
278
|
# If running in the main thread, call retry_request directly
|
|
269
279
|
return retry_request()
|
|
270
280
|
|
|
271
|
-
|
|
281
|
+
@staticmethod
|
|
282
|
+
def _should_retry(status_code):
|
|
272
283
|
"""Determines if a request should be retried based on the HTTP status code."""
|
|
273
284
|
retry_codes = {
|
|
274
285
|
HTTPStatus.REQUEST_TIMEOUT,
|
|
@@ -338,12 +349,13 @@ class HUBTrainingSession:
|
|
|
338
349
|
timeout=3600,
|
|
339
350
|
thread=not final,
|
|
340
351
|
progress_total=progress_total,
|
|
341
|
-
|
|
352
|
+
stream_response=True,
|
|
342
353
|
)
|
|
343
354
|
else:
|
|
344
355
|
LOGGER.warning(f"{PREFIX}WARNING ⚠️ Model upload issue. Missing model {weights}.")
|
|
345
356
|
|
|
346
|
-
|
|
357
|
+
@staticmethod
|
|
358
|
+
def _show_upload_progress(content_length: int, response: requests.Response) -> None:
|
|
347
359
|
"""
|
|
348
360
|
Display a progress bar to track the upload progress of a file download.
|
|
349
361
|
|
|
@@ -358,7 +370,8 @@ class HUBTrainingSession:
|
|
|
358
370
|
for data in response.iter_content(chunk_size=1024):
|
|
359
371
|
pbar.update(len(data))
|
|
360
372
|
|
|
361
|
-
|
|
373
|
+
@staticmethod
|
|
374
|
+
def _iterate_content(response: requests.Response) -> None:
|
|
362
375
|
"""
|
|
363
376
|
Process the streamed HTTP response data.
|
|
364
377
|
|
|
@@ -384,8 +384,8 @@ class TinyViTBlock(nn.Module):
|
|
|
384
384
|
convolution.
|
|
385
385
|
"""
|
|
386
386
|
h, w = self.input_resolution
|
|
387
|
-
b,
|
|
388
|
-
assert
|
|
387
|
+
b, hw, c = x.shape # batch, height*width, channels
|
|
388
|
+
assert hw == h * w, "input feature has wrong size"
|
|
389
389
|
res_x = x
|
|
390
390
|
if h == self.window_size and w == self.window_size:
|
|
391
391
|
x = self.attn(x)
|
|
@@ -394,13 +394,13 @@ class TinyViTBlock(nn.Module):
|
|
|
394
394
|
pad_b = (self.window_size - h % self.window_size) % self.window_size
|
|
395
395
|
pad_r = (self.window_size - w % self.window_size) % self.window_size
|
|
396
396
|
padding = pad_b > 0 or pad_r > 0
|
|
397
|
-
|
|
398
397
|
if padding:
|
|
399
398
|
x = F.pad(x, (0, 0, 0, pad_r, 0, pad_b))
|
|
400
399
|
|
|
401
400
|
pH, pW = h + pad_b, w + pad_r
|
|
402
401
|
nH = pH // self.window_size
|
|
403
402
|
nW = pW // self.window_size
|
|
403
|
+
|
|
404
404
|
# Window partition
|
|
405
405
|
x = (
|
|
406
406
|
x.view(b, nH, self.window_size, nW, self.window_size, c)
|
|
@@ -408,19 +408,18 @@ class TinyViTBlock(nn.Module):
|
|
|
408
408
|
.reshape(b * nH * nW, self.window_size * self.window_size, c)
|
|
409
409
|
)
|
|
410
410
|
x = self.attn(x)
|
|
411
|
+
|
|
411
412
|
# Window reverse
|
|
412
413
|
x = x.view(b, nH, nW, self.window_size, self.window_size, c).transpose(2, 3).reshape(b, pH, pW, c)
|
|
413
|
-
|
|
414
414
|
if padding:
|
|
415
415
|
x = x[:, :h, :w].contiguous()
|
|
416
416
|
|
|
417
|
-
x = x.view(b,
|
|
417
|
+
x = x.view(b, hw, c)
|
|
418
418
|
|
|
419
419
|
x = res_x + self.drop_path(x)
|
|
420
|
-
|
|
421
420
|
x = x.transpose(1, 2).reshape(b, c, h, w)
|
|
422
421
|
x = self.local_conv(x)
|
|
423
|
-
x = x.view(b, c,
|
|
422
|
+
x = x.view(b, c, hw).transpose(1, 2)
|
|
424
423
|
|
|
425
424
|
return x + self.drop_path(self.mlp(x))
|
|
426
425
|
|
ultralytics/nn/modules/block.py
CHANGED
|
@@ -40,7 +40,6 @@ __all__ = (
|
|
|
40
40
|
"SPPELAN",
|
|
41
41
|
"CBFuse",
|
|
42
42
|
"CBLinear",
|
|
43
|
-
"Silence",
|
|
44
43
|
"RepVGGDW",
|
|
45
44
|
"CIB",
|
|
46
45
|
"C2fCIB",
|
|
@@ -789,7 +788,7 @@ class CIB(nn.Module):
|
|
|
789
788
|
self.cv1 = nn.Sequential(
|
|
790
789
|
Conv(c1, c1, 3, g=c1),
|
|
791
790
|
Conv(c1, 2 * c_, 1),
|
|
792
|
-
Conv(2 * c_, 2 * c_, 3, g=2 * c_)
|
|
791
|
+
RepVGGDW(2 * c_) if lk else Conv(2 * c_, 2 * c_, 3, g=2 * c_),
|
|
793
792
|
Conv(2 * c_, c2, 1),
|
|
794
793
|
Conv(c2, c2, 3, g=c2),
|
|
795
794
|
)
|
ultralytics/nn/modules/head.py
CHANGED
|
@@ -110,8 +110,7 @@ class Detect(nn.Module):
|
|
|
110
110
|
else:
|
|
111
111
|
dbox = self.decode_bboxes(self.dfl(box), self.anchors.unsqueeze(0)) * self.strides
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
return y
|
|
113
|
+
return torch.cat((dbox, cls.sigmoid()), 1)
|
|
115
114
|
|
|
116
115
|
def bias_init(self):
|
|
117
116
|
"""Initialize Detect() biases, WARNING: requires stride availability."""
|
ultralytics/nn/tasks.py
CHANGED
|
@@ -693,7 +693,7 @@ class Ensemble(nn.ModuleList):
|
|
|
693
693
|
|
|
694
694
|
|
|
695
695
|
@contextlib.contextmanager
|
|
696
|
-
def temporary_modules(modules=
|
|
696
|
+
def temporary_modules(modules=None, attributes=None):
|
|
697
697
|
"""
|
|
698
698
|
Context manager for temporarily adding or modifying modules in Python's module cache (`sys.modules`).
|
|
699
699
|
|
|
@@ -718,6 +718,10 @@ def temporary_modules(modules={}, attributes={}):
|
|
|
718
718
|
applications or libraries. Use this function with caution.
|
|
719
719
|
"""
|
|
720
720
|
|
|
721
|
+
if modules is None:
|
|
722
|
+
modules = {}
|
|
723
|
+
if attributes is None:
|
|
724
|
+
attributes = {}
|
|
721
725
|
import sys
|
|
722
726
|
from importlib import import_module
|
|
723
727
|
|
ultralytics/utils/__init__.py
CHANGED
|
@@ -1070,7 +1070,7 @@ TESTS_RUNNING = is_pytest_running() or is_github_action_running()
|
|
|
1070
1070
|
set_sentry()
|
|
1071
1071
|
|
|
1072
1072
|
# Apply monkey patches
|
|
1073
|
-
from .patches import imread, imshow, imwrite, torch_save
|
|
1073
|
+
from ultralytics.utils.patches import imread, imshow, imwrite, torch_save
|
|
1074
1074
|
|
|
1075
1075
|
torch.save = torch_save
|
|
1076
1076
|
if WINDOWS:
|
|
@@ -3,8 +3,14 @@
|
|
|
3
3
|
import json
|
|
4
4
|
from time import time
|
|
5
5
|
|
|
6
|
-
from ultralytics.hub
|
|
7
|
-
from ultralytics.utils import LOGGER, SETTINGS
|
|
6
|
+
from ultralytics.hub import HUB_WEB_ROOT, PREFIX, HUBTrainingSession, events
|
|
7
|
+
from ultralytics.utils import LOGGER, RANK, SETTINGS
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def on_pretrain_routine_start(trainer):
|
|
11
|
+
"""Create a remote Ultralytics HUB session to log local model training."""
|
|
12
|
+
if RANK in {-1, 0} and SETTINGS["hub"] is True and not getattr(trainer, "hub_session", None):
|
|
13
|
+
trainer.hub_session = HUBTrainingSession.create_session(trainer.args.model, trainer.args)
|
|
8
14
|
|
|
9
15
|
|
|
10
16
|
def on_pretrain_routine_end(trainer):
|
|
@@ -91,6 +97,7 @@ def on_export_start(exporter):
|
|
|
91
97
|
|
|
92
98
|
callbacks = (
|
|
93
99
|
{
|
|
100
|
+
"on_pretrain_routine_start": on_pretrain_routine_start,
|
|
94
101
|
"on_pretrain_routine_end": on_pretrain_routine_end,
|
|
95
102
|
"on_fit_epoch_end": on_fit_epoch_end,
|
|
96
103
|
"on_model_save": on_model_save,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.2.
|
|
3
|
+
Version: 8.2.40
|
|
4
4
|
Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
6
6
|
Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
@@ -122,7 +122,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
|
|
|
122
122
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
123
123
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
|
|
124
124
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
125
|
-
<a href="https://
|
|
125
|
+
<a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="2%" alt="Ultralytics BiliBili"></a>
|
|
126
126
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
127
127
|
<a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="2%" alt="Ultralytics Discord"></a>
|
|
128
128
|
</div>
|
|
@@ -313,7 +313,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
|
|
|
313
313
|
Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino), can optimize your AI workflow.
|
|
314
314
|
|
|
315
315
|
<br>
|
|
316
|
-
<a href="https://
|
|
316
|
+
<a href="https://ultralytics.com/hub" target="_blank">
|
|
317
317
|
<img width="100%" src="https://github.com/ultralytics/assets/raw/main/yolov8/banner-integrations.png" alt="Ultralytics active learning integrations"></a>
|
|
318
318
|
<br>
|
|
319
319
|
<br>
|
|
@@ -338,9 +338,9 @@ Our key integrations with leading AI platforms extend the functionality of Ultra
|
|
|
338
338
|
|
|
339
339
|
## <div align="center">Ultralytics HUB</div>
|
|
340
340
|
|
|
341
|
-
Experience seamless AI with [Ultralytics HUB](https://
|
|
341
|
+
Experience seamless AI with [Ultralytics HUB](https://ultralytics.com/hub) ⭐, the all-in-one solution for data visualization, YOLOv5 and YOLOv8 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://ultralytics.com/app_install). Start your journey for **Free** now!
|
|
342
342
|
|
|
343
|
-
<a href="https://
|
|
343
|
+
<a href="https://ultralytics.com/hub" target="_blank">
|
|
344
344
|
<img width="100%" src="https://github.com/ultralytics/assets/raw/main/im/ultralytics-hub.png" alt="Ultralytics HUB preview image"></a>
|
|
345
345
|
|
|
346
346
|
## <div align="center">Contribute</div>
|
|
@@ -375,7 +375,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
|
|
|
375
375
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
376
376
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
|
|
377
377
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
378
|
-
<a href="https://
|
|
378
|
+
<a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="3%" alt="Ultralytics BiliBili"></a>
|
|
379
379
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
380
380
|
<a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
|
|
381
381
|
</div>
|
|
@@ -7,7 +7,7 @@ tests/test_explorer.py,sha256=r1pWer2y290Y0DqsM-La7egfEY0497YCdC4rwq3URV4,2178
|
|
|
7
7
|
tests/test_exports.py,sha256=qc4YOgsGixqYLO6IRNY16-v6z14R0dp5fdni1v222xw,8034
|
|
8
8
|
tests/test_integrations.py,sha256=8Ru7GyKV8j44EEc8X9_E7q7aR4CTOIMPuSagXjSGUxw,5847
|
|
9
9
|
tests/test_python.py,sha256=9KjBKQXj6T9hRfX-4nnERd7OR3xx2ejV8430BoXjHro,20536
|
|
10
|
-
ultralytics/__init__.py,sha256=
|
|
10
|
+
ultralytics/__init__.py,sha256=EnkTVTA0WLhbesHd-athIUXYTqm5ZUIUVcty9r4kGyE,694
|
|
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=JblkT6Ze9MZ8hSs8gkV8JPcEKNMm-YqRqM4x501Dn9g,21507
|
|
@@ -63,7 +63,7 @@ ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml,sha256=kqgbEKNua7XwH95zteW6IzXaAj
|
|
|
63
63
|
ultralytics/cfg/models/v8/yolov8-ghost.yaml,sha256=WUHOI18aA11kgANDCWbDDy3jswNlP_nIkpWX09BfBuI,2096
|
|
64
64
|
ultralytics/cfg/models/v8/yolov8-obb.yaml,sha256=Tv5JDZTLOrfyBj3ggqse9ShjDpM-nIFIxhiseQKwJEA,1899
|
|
65
65
|
ultralytics/cfg/models/v8/yolov8-p2.yaml,sha256=tfHkkVAC0fkCc7AbisTzGpXW3Ffk2-K5-wjReSbm7Gw,1731
|
|
66
|
-
ultralytics/cfg/models/v8/yolov8-p6.yaml,sha256=
|
|
66
|
+
ultralytics/cfg/models/v8/yolov8-p6.yaml,sha256=lAFASwFhjvUpfCdzrnGZiU4Fy9EwbJ5QbJhrRyUm210,2296
|
|
67
67
|
ultralytics/cfg/models/v8/yolov8-pose-p6.yaml,sha256=yzxI20bMBdo6f5kd53VfuEHm_QqE_V3uwAvFJE0Tbr0,1927
|
|
68
68
|
ultralytics/cfg/models/v8/yolov8-pose.yaml,sha256=DHoJd7q7Hw89JBX5im-M3NWG8mge3VdPVNb4K4jTzIQ,1563
|
|
69
69
|
ultralytics/cfg/models/v8/yolov8-rtdetr.yaml,sha256=ofujf77LW3stXS6-leVM_ExROWifJ84D5WqRhujyVJI,1896
|
|
@@ -83,13 +83,13 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q
|
|
|
83
83
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
|
|
84
84
|
ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
|
|
85
85
|
ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
|
|
86
|
-
ultralytics/data/augment.py,sha256=
|
|
86
|
+
ultralytics/data/augment.py,sha256=zekY4Lw_dxsbPpm4jDSr7PYtWwj7iBaRqBcAeeDFDS4,59554
|
|
87
87
|
ultralytics/data/base.py,sha256=C3teLnw97ZTbpJHT9P7yYWosAKocMzgJjRe1rxgfpls,13524
|
|
88
88
|
ultralytics/data/build.py,sha256=AfMmz0sHIYmwry_90tEJFRk_kz0S3SolScVXqYHiT08,7261
|
|
89
|
-
ultralytics/data/converter.py,sha256=
|
|
89
|
+
ultralytics/data/converter.py,sha256=7640xKuf7LPeoTwoCvgbIXM5xbzyq72Hu2Rf2lrgjRY,17554
|
|
90
90
|
ultralytics/data/dataset.py,sha256=NFaXyHRn64TyTEbtSkr7SkqWXK8bEJl6lZ6M1JwO3MY,22201
|
|
91
91
|
ultralytics/data/loaders.py,sha256=eqfgFwrQeCiqiZKfkmZ54SN0APVJDGhnlXTTFqeKFSU,23932
|
|
92
|
-
ultralytics/data/split_dota.py,sha256=
|
|
92
|
+
ultralytics/data/split_dota.py,sha256=fWezt1Bo3jiZ6AyUWdBtTUuvLamPv1t7JD-DirM9gQ8,10142
|
|
93
93
|
ultralytics/data/utils.py,sha256=zqFg4xaWU--fastZmwvZ3DxGyJQ3i4tVNLuYnqS1xxs,31044
|
|
94
94
|
ultralytics/data/explorer/__init__.py,sha256=-Y3m1ZedepOQUv_KW82zaGxvU_PSHcuwUTFqG9BhAr4,113
|
|
95
95
|
ultralytics/data/explorer/explorer.py,sha256=GqQcHkETxlS0w-lYUnTE_RJ9wPReK7c9XG41-k9FoxE,18668
|
|
@@ -97,16 +97,16 @@ ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yf
|
|
|
97
97
|
ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
98
98
|
ultralytics/data/explorer/gui/dash.py,sha256=CPlFIIhf53j_YVAqealsC3AbcztdPqZxfniQcBnlKK4,10042
|
|
99
99
|
ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
100
|
-
ultralytics/engine/exporter.py,sha256=
|
|
101
|
-
ultralytics/engine/model.py,sha256=
|
|
100
|
+
ultralytics/engine/exporter.py,sha256=RVREJjFJ7Y-pnLq_i0yM5x9QRlKoLr0WnQWepkbFD_Y,58534
|
|
101
|
+
ultralytics/engine/model.py,sha256=3R-jqjW7pJX_E6cfraE20GzkQ1nngy52m3LS1uQlYtE,39046
|
|
102
102
|
ultralytics/engine/predictor.py,sha256=W58kDCFH2AfoFzpGbos3k8zUEVsLunBuM8sc2B64rPY,17449
|
|
103
103
|
ultralytics/engine/results.py,sha256=zRuEIrBtpoCQ3M6a_YscnyXrWSP-zpL3ACv0gTdrDaw,30987
|
|
104
104
|
ultralytics/engine/trainer.py,sha256=Gkh7tFa5BlQv4pZhcAKCfKBHwR28w4AHLqALxKa8ask,35264
|
|
105
105
|
ultralytics/engine/tuner.py,sha256=iZrgMmXSDpfuDu4bdFRflmAsscys2-8W8qAGxSyOVJE,11844
|
|
106
106
|
ultralytics/engine/validator.py,sha256=Y21Uo8_Zto4qjk_YqQk6k7tyfpq_Qk9cfjeXeyDRxs8,14643
|
|
107
|
-
ultralytics/hub/__init__.py,sha256=
|
|
107
|
+
ultralytics/hub/__init__.py,sha256=0pwI44r0JniiaCFzcwdh_vfSKlf4UTlKPGui5aOMPc8,5663
|
|
108
108
|
ultralytics/hub/auth.py,sha256=FID58NE6fh7Op_B45QOpWBw1qoBN0ponL16uvyb2dZ8,5399
|
|
109
|
-
ultralytics/hub/session.py,sha256=
|
|
109
|
+
ultralytics/hub/session.py,sha256=l7o2RzhicROeG87_LS2Al4DWseFfEOqbaCmun8wEKlo,15733
|
|
110
110
|
ultralytics/hub/utils.py,sha256=RpFDFp9biUK70Mswzz2o3uEu4xwQxRaStPS19U2gu0g,9721
|
|
111
111
|
ultralytics/models/__init__.py,sha256=TT9iLCL_n9Y80dcUq0Fo-p-GRZCSU2vrWXM3CoMwqqE,265
|
|
112
112
|
ultralytics/models/fastsam/__init__.py,sha256=0dt65jZ_5b7Q-mdXN8MSEkgnFRA0FIwlel_LS2RaOlU,254
|
|
@@ -133,7 +133,7 @@ ultralytics/models/sam/modules/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz
|
|
|
133
133
|
ultralytics/models/sam/modules/decoders.py,sha256=7NWnBNupxGYvH0S1N0R6NBHxdVFRUrrnL9EqAw09J4E,7816
|
|
134
134
|
ultralytics/models/sam/modules/encoders.py,sha256=pRNZHzt2J2xD_D0Btu8pk4DcItfr6dRr9rcRfxoZZhU,24746
|
|
135
135
|
ultralytics/models/sam/modules/sam.py,sha256=zC4l4kcrIQD_ekczjl2l6dgaABqqjROZxQ-FDb-itt0,2783
|
|
136
|
-
ultralytics/models/sam/modules/tiny_encoder.py,sha256=
|
|
136
|
+
ultralytics/models/sam/modules/tiny_encoder.py,sha256=_fdtgoYcsQKmvit7Ii9iUmL3Zh42IziEswtZZ38JXrk,29181
|
|
137
137
|
ultralytics/models/sam/modules/transformer.py,sha256=VINZMb4xkx4IHAbJdhCq2XLDvaFBMup7RGC16DLS7OY,11164
|
|
138
138
|
ultralytics/models/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
139
139
|
ultralytics/models/utils/loss.py,sha256=PmlKDe4xQTiYkPSCdNUabxJC7bh43zGxiKVIxsXBVGE,15135
|
|
@@ -165,14 +165,14 @@ ultralytics/models/yolo/world/train.py,sha256=acYN2-onL69LrL4av6_hY2r5AY0urC0WVi
|
|
|
165
165
|
ultralytics/models/yolo/world/train_world.py,sha256=n0XTAHYxufHU5OZ_QjpkHieKik-24z0LrYKzWYbCLvA,4798
|
|
166
166
|
ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
|
|
167
167
|
ultralytics/nn/autobackend.py,sha256=zsMF-GS12xtMBeQEkSoJ5cudEHyzMaRSQBuXcfuBNdo,31210
|
|
168
|
-
ultralytics/nn/tasks.py,sha256=
|
|
169
|
-
ultralytics/nn/modules/__init__.py,sha256=
|
|
170
|
-
ultralytics/nn/modules/block.py,sha256=
|
|
168
|
+
ultralytics/nn/tasks.py,sha256=1fempWanr6FrjoDZ10ukZvcnvG80ahYBKtaX8KLJtRM,45547
|
|
169
|
+
ultralytics/nn/modules/__init__.py,sha256=mARjWk83WPYF5phXhXfPbAu2ZohtdbHdi5zzoxyMubo,2553
|
|
170
|
+
ultralytics/nn/modules/block.py,sha256=JiPwcbLzb7O_O5T1KkW0dIGJSfBwPaS-NNYuVkLBDwg,34384
|
|
171
171
|
ultralytics/nn/modules/conv.py,sha256=Ywe87IhuaS22mR2JJ9xjnW8Sb-m7WTjxuqIxV_Dv8lI,12722
|
|
172
|
-
ultralytics/nn/modules/head.py,sha256=
|
|
172
|
+
ultralytics/nn/modules/head.py,sha256=6VV6t2OJ_t9fCdhFxzcMcirp6lonv-xSm0o2yFghZZ0,26747
|
|
173
173
|
ultralytics/nn/modules/transformer.py,sha256=AxD9uURpCl-EqvXe3DiG6JW-pBzB16G-AahLdZ7yayo,17909
|
|
174
174
|
ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQjhU,3196
|
|
175
|
-
ultralytics/solutions/__init__.py,sha256=
|
|
175
|
+
ultralytics/solutions/__init__.py,sha256=aO9h0JQDfaQR2PCk7yCRxu2odb3Zxu76RdYSv9JPfm8,588
|
|
176
176
|
ultralytics/solutions/ai_gym.py,sha256=RdkV15IW8CLYn9pGCzkvU1Gor2o71da-TLJVvsFM8a0,4665
|
|
177
177
|
ultralytics/solutions/analytics.py,sha256=UI8HoegfIJGgvQPOt4-e9A0ss2_ofM7zzxcbKlhe66k,11572
|
|
178
178
|
ultralytics/solutions/distance_calculation.py,sha256=pSIkyytHGRAaNzIrkkNkiOnSVWU1PYvURlCIV_jRORA,6505
|
|
@@ -190,7 +190,7 @@ ultralytics/trackers/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7J
|
|
|
190
190
|
ultralytics/trackers/utils/gmc.py,sha256=-1oBNFRB-9EawJmUOT566AygLCVxJw-jsPSIOl5j_Hk,13683
|
|
191
191
|
ultralytics/trackers/utils/kalman_filter.py,sha256=0oqhk59NKEiwcJ2FXnw6_sT4bIFC6Wu5IY2B-TGxJKU,15168
|
|
192
192
|
ultralytics/trackers/utils/matching.py,sha256=UxhSGa5pN6WoYwYSBAkkt-O7xMxUR47VuUB6PfVNkb4,5404
|
|
193
|
-
ultralytics/utils/__init__.py,sha256=
|
|
193
|
+
ultralytics/utils/__init__.py,sha256=WdStmMYcXE7q4V3RgTYGmLEicMJR0mTQawGtK5_q9Is,38657
|
|
194
194
|
ultralytics/utils/autobatch.py,sha256=gPFcREMsMHRAuTQiBnNZ9Mm1XNqmQW-uMPhveDFEQ_Y,3966
|
|
195
195
|
ultralytics/utils/benchmarks.py,sha256=tDX7wu0TpMMlEQDOFqfkjxl156ssS7Lh_5tFWIXdJfg,23549
|
|
196
196
|
ultralytics/utils/checks.py,sha256=PDY1eHlsyDVEIiKRjvb81uz2jniL1MqgP_TmXH_78KM,28379
|
|
@@ -213,15 +213,15 @@ ultralytics/utils/callbacks/base.py,sha256=A8H6jXnPQJfOxA1ByTBWF2ePDs5ldccUabXG0
|
|
|
213
213
|
ultralytics/utils/callbacks/clearml.py,sha256=M9Fi1OfdWqcm8uVkauuX3zJIYhNh6Tp7Jo4CfA0u0nw,5923
|
|
214
214
|
ultralytics/utils/callbacks/comet.py,sha256=QR3-9f0L_W7nZWWg_OEN7t8La2JotapSS-CnNYVjCdk,13744
|
|
215
215
|
ultralytics/utils/callbacks/dvc.py,sha256=WIClMsuvhiiyrwRv5BsZLxjsxYNJ3Y8Vq7zN0Bthtro,5045
|
|
216
|
-
ultralytics/utils/callbacks/hub.py,sha256=
|
|
216
|
+
ultralytics/utils/callbacks/hub.py,sha256=boBWcpgNUjg4b2BvxEPPgz2mldi2J_2XZv2J6h05znU,3987
|
|
217
217
|
ultralytics/utils/callbacks/mlflow.py,sha256=_bUzHyPb0npne0WFlGzlGCy-X5sxGQhC_xA3dZbF08I,5391
|
|
218
218
|
ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyzC5q7p4ipQ,3756
|
|
219
219
|
ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
|
|
220
220
|
ultralytics/utils/callbacks/tensorboard.py,sha256=QEgOVhUqY9akOs5TJIwz1Rvn6l32xWLpOxlwEyWF0B8,4136
|
|
221
221
|
ultralytics/utils/callbacks/wb.py,sha256=9-fjQIdLjr3b73DTE3rHO171KvbH1VweJ-bmbv-rqTw,6747
|
|
222
|
-
ultralytics-8.2.
|
|
223
|
-
ultralytics-8.2.
|
|
224
|
-
ultralytics-8.2.
|
|
225
|
-
ultralytics-8.2.
|
|
226
|
-
ultralytics-8.2.
|
|
227
|
-
ultralytics-8.2.
|
|
222
|
+
ultralytics-8.2.40.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
223
|
+
ultralytics-8.2.40.dist-info/METADATA,sha256=wH0JGdmXtJ2-3mAZZuTWXAT5WRlTPKcC-Z1XbC8erms,41291
|
|
224
|
+
ultralytics-8.2.40.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
|
|
225
|
+
ultralytics-8.2.40.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
226
|
+
ultralytics-8.2.40.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
227
|
+
ultralytics-8.2.40.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|