ultralytics 8.3.75__py3-none-any.whl → 8.3.76__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.
- ultralytics/__init__.py +1 -1
- ultralytics/engine/exporter.py +10 -10
- ultralytics/engine/model.py +1 -0
- ultralytics/engine/results.py +1 -1
- ultralytics/engine/trainer.py +1 -1
- ultralytics/trackers/track.py +5 -7
- ultralytics/utils/torch_utils.py +15 -8
- {ultralytics-8.3.75.dist-info → ultralytics-8.3.76.dist-info}/METADATA +1 -1
- {ultralytics-8.3.75.dist-info → ultralytics-8.3.76.dist-info}/RECORD +13 -13
- {ultralytics-8.3.75.dist-info → ultralytics-8.3.76.dist-info}/LICENSE +0 -0
- {ultralytics-8.3.75.dist-info → ultralytics-8.3.76.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.75.dist-info → ultralytics-8.3.76.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.75.dist-info → ultralytics-8.3.76.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
ultralytics/engine/exporter.py
CHANGED
@@ -1560,20 +1560,20 @@ class NMSModel(torch.nn.Module):
|
|
1560
1560
|
|
1561
1561
|
preds = self.model(x)
|
1562
1562
|
pred = preds[0] if isinstance(preds, tuple) else preds
|
1563
|
+
kwargs = dict(device=pred.device, dtype=pred.dtype)
|
1564
|
+
bs = pred.shape[0]
|
1563
1565
|
pred = pred.transpose(-1, -2) # shape(1,84,6300) to shape(1,6300,84)
|
1564
1566
|
extra_shape = pred.shape[-1] - (4 + len(self.model.names)) # extras from Segment, OBB, Pose
|
1567
|
+
if self.args.dynamic and self.args.batch > 1: # batch size needs to always be same due to loop unroll
|
1568
|
+
pad = torch.zeros(torch.max(torch.tensor(self.args.batch - bs), torch.tensor(0)), *pred.shape[1:], **kwargs)
|
1569
|
+
pred = torch.cat((pred, pad))
|
1565
1570
|
boxes, scores, extras = pred.split([4, len(self.model.names), extra_shape], dim=2)
|
1566
1571
|
scores, classes = scores.max(dim=-1)
|
1567
1572
|
self.args.max_det = min(pred.shape[1], self.args.max_det) # in case num_anchors < max_det
|
1568
1573
|
# (N, max_det, 4 coords + 1 class score + 1 class label + extra_shape).
|
1569
|
-
out = torch.zeros(
|
1570
|
-
|
1571
|
-
|
1572
|
-
boxes.shape[-1] + 2 + extra_shape,
|
1573
|
-
device=boxes.device,
|
1574
|
-
dtype=boxes.dtype,
|
1575
|
-
)
|
1576
|
-
for i, (box, cls, score, extra) in enumerate(zip(boxes, classes, scores, extras)):
|
1574
|
+
out = torch.zeros(bs, self.args.max_det, boxes.shape[-1] + 2 + extra_shape, **kwargs)
|
1575
|
+
for i in range(bs):
|
1576
|
+
box, cls, score, extra = boxes[i], classes[i], scores[i], extras[i]
|
1577
1577
|
mask = score > self.args.conf
|
1578
1578
|
if self.is_tf:
|
1579
1579
|
# TFLite GatherND error if mask is empty
|
@@ -1593,7 +1593,7 @@ class NMSModel(torch.nn.Module):
|
|
1593
1593
|
if self.args.format == "tflite": # TFLite is already normalized
|
1594
1594
|
nmsbox *= multiplier
|
1595
1595
|
else:
|
1596
|
-
nmsbox = multiplier * nmsbox / torch.tensor(x.shape[2:],
|
1596
|
+
nmsbox = multiplier * nmsbox / torch.tensor(x.shape[2:], **kwargs).max()
|
1597
1597
|
if not self.args.agnostic_nms: # class-specific NMS
|
1598
1598
|
end = 2 if self.obb else 4
|
1599
1599
|
# fully explicit expansion otherwise reshape error
|
@@ -1624,4 +1624,4 @@ class NMSModel(torch.nn.Module):
|
|
1624
1624
|
# Zero-pad to max_det size to avoid reshape error
|
1625
1625
|
pad = (0, 0, 0, self.args.max_det - dets.shape[0])
|
1626
1626
|
out[i] = torch.nn.functional.pad(dets, pad)
|
1627
|
-
return (out, preds[1]) if self.model.task == "segment" else out
|
1627
|
+
return (out[:bs], preds[1]) if self.model.task == "segment" else out[:bs]
|
ultralytics/engine/model.py
CHANGED
@@ -122,6 +122,7 @@ class Model(torch.nn.Module):
|
|
122
122
|
self.metrics = None # validation/training metrics
|
123
123
|
self.session = None # HUB session
|
124
124
|
self.task = task # task type
|
125
|
+
self.model_name = None # model name
|
125
126
|
model = str(model).strip()
|
126
127
|
|
127
128
|
# Check if Ultralytics HUB model from https://hub.ultralytics.com
|
ultralytics/engine/results.py
CHANGED
@@ -1016,7 +1016,7 @@ class Boxes(BaseTensor):
|
|
1016
1016
|
xyxy (torch.Tensor | numpy.ndarray): Boxes in [x1, y1, x2, y2] format.
|
1017
1017
|
conf (torch.Tensor | numpy.ndarray): Confidence scores for each box.
|
1018
1018
|
cls (torch.Tensor | numpy.ndarray): Class labels for each box.
|
1019
|
-
id (torch.Tensor |
|
1019
|
+
id (torch.Tensor | None): Tracking IDs for each box (if available).
|
1020
1020
|
xywh (torch.Tensor | numpy.ndarray): Boxes in [x, y, width, height] format.
|
1021
1021
|
xyxyn (torch.Tensor | numpy.ndarray): Normalized [x1, y1, x2, y2] boxes relative to orig_shape.
|
1022
1022
|
xywhn (torch.Tensor | numpy.ndarray): Normalized [x, y, width, height] boxes relative to orig_shape.
|
ultralytics/engine/trainer.py
CHANGED
ultralytics/trackers/track.py
CHANGED
@@ -66,25 +66,23 @@ def on_predict_postprocess_end(predictor: object, persist: bool = False) -> None
|
|
66
66
|
>>> predictor = YourPredictorClass()
|
67
67
|
>>> on_predict_postprocess_end(predictor, persist=True)
|
68
68
|
"""
|
69
|
-
path, im0s = predictor.batch[:2]
|
70
|
-
|
71
69
|
is_obb = predictor.args.task == "obb"
|
72
70
|
is_stream = predictor.dataset.mode == "stream"
|
73
|
-
for i in
|
71
|
+
for i, result in enumerate(predictor.results):
|
74
72
|
tracker = predictor.trackers[i if is_stream else 0]
|
75
|
-
vid_path = predictor.save_dir / Path(path
|
73
|
+
vid_path = predictor.save_dir / Path(result.path).name
|
76
74
|
if not persist and predictor.vid_path[i if is_stream else 0] != vid_path:
|
77
75
|
tracker.reset()
|
78
76
|
predictor.vid_path[i if is_stream else 0] = vid_path
|
79
77
|
|
80
|
-
det = (
|
78
|
+
det = (result.obb if is_obb else result.boxes).cpu().numpy()
|
81
79
|
if len(det) == 0:
|
82
80
|
continue
|
83
|
-
tracks = tracker.update(det,
|
81
|
+
tracks = tracker.update(det, result.orig_img)
|
84
82
|
if len(tracks) == 0:
|
85
83
|
continue
|
86
84
|
idx = tracks[:, -1].astype(int)
|
87
|
-
predictor.results[i] =
|
85
|
+
predictor.results[i] = result[idx]
|
88
86
|
|
89
87
|
update_args = {"obb" if is_obb else "boxes": torch.as_tensor(tracks[:, :-1])}
|
90
88
|
predictor.results[i].update(**update_args)
|
ultralytics/utils/torch_utils.py
CHANGED
@@ -302,15 +302,22 @@ def model_info(model, detailed=False, verbose=True, imgsz=640):
|
|
302
302
|
return
|
303
303
|
n_p = get_num_params(model) # number of parameters
|
304
304
|
n_g = get_num_gradients(model) # number of gradients
|
305
|
-
|
305
|
+
layers = __import__("collections").OrderedDict((n, m) for n, m in model.named_modules() if len(m._modules) == 0)
|
306
|
+
n_l = len(layers) # number of layers
|
306
307
|
if detailed:
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
308
|
+
h = f"{'layer':>5}{'name':>40}{'type':>20}{'gradient':>10}{'parameters':>12}{'shape':>20}{'mu':>10}{'sigma':>10}"
|
309
|
+
LOGGER.info(h)
|
310
|
+
for i, (mn, m) in enumerate(layers.items()):
|
311
|
+
mn = mn.replace("module_list.", "")
|
312
|
+
mt = m.__class__.__name__
|
313
|
+
if len(m._parameters):
|
314
|
+
for pn, p in m.named_parameters():
|
315
|
+
LOGGER.info(
|
316
|
+
f"{i:>5g}{mn + '.' + pn:>40}{mt:>20}{p.requires_grad!r:>10}{p.numel():>12g}"
|
317
|
+
f"{str(list(p.shape)):>20}{p.mean():>10.3g}{p.std():>10.3g}{str(p.dtype).replace('torch.', ''):>15}"
|
318
|
+
)
|
319
|
+
else: # layers with no learnable params
|
320
|
+
LOGGER.info(f"{i:>5g}{mn:>40}{mt:>20}{False!r:>10}{0:>12g}{str([]):>20}{'-':>10}{'-':>10}{'-':>15}")
|
314
321
|
|
315
322
|
flops = get_flops(model, imgsz) # imgsz may be int or list, i.e. imgsz=640 or imgsz=[640, 320]
|
316
323
|
fused = " (fused)" if getattr(model, "is_fused", lambda: False)() else ""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.76
|
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,7 +7,7 @@ tests/test_exports.py,sha256=T_z_NUS9URQXv83k5XNLHTuksJ8srtzbZnWuiiQWM98,9260
|
|
7
7
|
tests/test_integrations.py,sha256=p3DMnnPMKsV0Qm82JVJUIY1UZ67xRgF9E8AaL76TEHE,6154
|
8
8
|
tests/test_python.py,sha256=tW-EFJC2rjl_DvAa8khXGWYdypseQjrLjGHhe2p9r9A,23238
|
9
9
|
tests/test_solutions.py,sha256=aY0G3vNzXGCENG9FD76MfUp7jgzeESPsUvbvQYBUvH0,4205
|
10
|
-
ultralytics/__init__.py,sha256=
|
10
|
+
ultralytics/__init__.py,sha256=EJlzPDNmMx9lP1HbgFSshFYdnHAVry65hDNaGnuXWqU,709
|
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=qP44HnFP4QcC5FQz29A-EGTuwdtxXAzPvw_IvCVmiqA,39771
|
@@ -102,11 +102,11 @@ ultralytics/data/loaders.py,sha256=JOwXbz-dxgG2bx0_cQHp-olz5FleoCX8EzrUvZ77vvg,2
|
|
102
102
|
ultralytics/data/split_dota.py,sha256=YI-i2MqdiBt06W67TJnBXQHJrqTnkJDJ3zzoL0UZVro,10733
|
103
103
|
ultralytics/data/utils.py,sha256=5YMU5396oAFPwTy2y0MCU2WipF6Rt-7xNtmHKRCA4fI,33838
|
104
104
|
ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
105
|
-
ultralytics/engine/exporter.py,sha256=
|
106
|
-
ultralytics/engine/model.py,sha256=
|
105
|
+
ultralytics/engine/exporter.py,sha256=nrO0UdRMzhb_hp-IXAstBmMHJoax-P7Fqe7a8u2954A,77113
|
106
|
+
ultralytics/engine/model.py,sha256=s8HsSBvdRgSbnKGULr7YW-ZWJKJsQpOoHd9Aih_nMt0,53427
|
107
107
|
ultralytics/engine/predictor.py,sha256=jiYDAjupOlRUpPvw9tu7or9PjXtLm-YCRiawANtWxj0,17881
|
108
|
-
ultralytics/engine/results.py,sha256=
|
109
|
-
ultralytics/engine/trainer.py,sha256=
|
108
|
+
ultralytics/engine/results.py,sha256=hWlO2e58BPUJ5R4Jl4iirBPaZ8BypcNu_cNQ2NHpUqM,78111
|
109
|
+
ultralytics/engine/trainer.py,sha256=hrqaO3cgf0VPVLHKv0tHk4W3gcasgqq_KF-DkgnIjus,37421
|
110
110
|
ultralytics/engine/tuner.py,sha256=EUlTs7KJQ2RVABm8pihr_14M_Z2kGSzJaWH-Y9TJYDw,11976
|
111
111
|
ultralytics/engine/validator.py,sha256=r27X8HGeDEwq7V5sFjEQH_3EnP1CyG-HcOLpFABUisU,15034
|
112
112
|
ultralytics/hub/__init__.py,sha256=1ifzSYV0PIT4ZWOm2V7HnpGyY3G3hCz0malw3AXHFlY,5660
|
@@ -199,7 +199,7 @@ ultralytics/trackers/__init__.py,sha256=Zlu_Ig5osn7hqch_g5Be_e4pwZUkeeTQiesJCi0p
|
|
199
199
|
ultralytics/trackers/basetrack.py,sha256=h0fcxzCdZf_56H1NG_mCIATaz_cWj0e9aJKE1xgmtFQ,4451
|
200
200
|
ultralytics/trackers/bot_sort.py,sha256=xUmlj0agS0PGjy97N3C0jLMV07yvsurE5QcnuoV_Ecw,10522
|
201
201
|
ultralytics/trackers/byte_tracker.py,sha256=CT_Yjw2ahHoprEfNcTM0hBMoGss5qcqt6Paxk956lYU,20846
|
202
|
-
ultralytics/trackers/track.py,sha256=
|
202
|
+
ultralytics/trackers/track.py,sha256=PtGB4CTMdylvccrzho37nysMvVS8gSINGFgZY0n-AuU,3973
|
203
203
|
ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
204
204
|
ultralytics/trackers/utils/gmc.py,sha256=kU54RozuGJcAVlyb5_HjXiNIUIX5VuH613AMc6Gdnwg,14597
|
205
205
|
ultralytics/trackers/utils/kalman_filter.py,sha256=OBvemZXptgn9v1sgBLvFomCqOWwjIB3-8wBbc8nakHo,21377
|
@@ -219,7 +219,7 @@ ultralytics/utils/ops.py,sha256=izQr5GvgzmaD-GXaqxIjLE525JnvgLetOtuq_EOaxM8,3458
|
|
219
219
|
ultralytics/utils/patches.py,sha256=ARR89dP4YKq7Dd3g2eU-ukbnc2lo3BELukL_1c_d854,3298
|
220
220
|
ultralytics/utils/plotting.py,sha256=hKji4TyxAmCXdSL264VX6dsC2AZYiL9StShI02dcAOM,62990
|
221
221
|
ultralytics/utils/tal.py,sha256=DO-c006HEI62pcrNRpmt4lpqJPC5yu3veRDOvUuExno,18498
|
222
|
-
ultralytics/utils/torch_utils.py,sha256=
|
222
|
+
ultralytics/utils/torch_utils.py,sha256=Q7B84IsAs29pehadJJ25jQOxuCTGVMj1x8TJNYLsijs,33878
|
223
223
|
ultralytics/utils/triton.py,sha256=2L1_rZ8xCJEjexRVj75g9YU-u4tQln_DJ5N1Yr_0bSs,4071
|
224
224
|
ultralytics/utils/tuner.py,sha256=gySDBzTlq_klTOq6CGEyUN58HXzPCulObaMBHacXzHo,6294
|
225
225
|
ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
|
@@ -233,9 +233,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=waZ_bRu0-qBKujTLuqonC2gx2DkgBuVnfq
|
|
233
233
|
ultralytics/utils/callbacks/raytune.py,sha256=A_NVWjyPNf2m6iB-mbW7SMpyqM9QBvpbPa-MCMFMtdk,727
|
234
234
|
ultralytics/utils/callbacks/tensorboard.py,sha256=JHOEVlNQ5dYJPd4Z-EvqbXowuK5uA0p8wPgyyaIUQs0,4194
|
235
235
|
ultralytics/utils/callbacks/wb.py,sha256=ayhT2y62AcSOacnawshATU0rWrlSFQ77mrGgBdRl3W4,7086
|
236
|
-
ultralytics-8.3.
|
237
|
-
ultralytics-8.3.
|
238
|
-
ultralytics-8.3.
|
239
|
-
ultralytics-8.3.
|
240
|
-
ultralytics-8.3.
|
241
|
-
ultralytics-8.3.
|
236
|
+
ultralytics-8.3.76.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
237
|
+
ultralytics-8.3.76.dist-info/METADATA,sha256=8w-KvGSLIOXISAZ524SnU3jgFOca5sxJY9NGByF7T-0,35158
|
238
|
+
ultralytics-8.3.76.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
239
|
+
ultralytics-8.3.76.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
240
|
+
ultralytics-8.3.76.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
241
|
+
ultralytics-8.3.76.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|