ultralytics 8.3.49__py3-none-any.whl → 8.3.50__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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.3.49"
3
+ __version__ = "8.3.50"
4
4
 
5
5
  import os
6
6
 
@@ -218,8 +218,10 @@ class YOLODataset(BaseDataset):
218
218
  # NOTE: do NOT resample oriented boxes
219
219
  segment_resamples = 100 if self.use_obb else 1000
220
220
  if len(segments) > 0:
221
- # list[np.array(1000, 2)] * num_samples
222
- # (N, 1000, 2)
221
+ # make sure segments interpolate correctly if original length is greater than segment_resamples
222
+ max_len = max([len(s) for s in segments])
223
+ segment_resamples = (max_len + 1) if segment_resamples < max_len else segment_resamples
224
+ # list[np.array(segment_resamples, 2)] * num_samples
223
225
  segments = np.stack(resample_segments(segments, n=segment_resamples), axis=0)
224
226
  else:
225
227
  segments = np.zeros((0, segment_resamples, 2), dtype=np.float32)
@@ -115,7 +115,7 @@ class Model(nn.Module):
115
115
  self.predictor = None # reuse predictor
116
116
  self.model = None # model object
117
117
  self.trainer = None # trainer object
118
- self.ckpt = None # if loaded from *.pt
118
+ self.ckpt = {} # if loaded from *.pt
119
119
  self.cfg = None # if loaded from *.yaml
120
120
  self.ckpt_path = None
121
121
  self.overrides = {} # overrides for trainer object
@@ -807,7 +807,7 @@ class Model(nn.Module):
807
807
  # Update model and cfg after training
808
808
  if RANK in {-1, 0}:
809
809
  ckpt = self.trainer.best if self.trainer.best.exists() else self.trainer.last
810
- self.model, _ = attempt_load_one_weight(ckpt)
810
+ self.model, self.ckpt = attempt_load_one_weight(ckpt)
811
811
  self.overrides = self.model.args
812
812
  self.metrics = getattr(self.trainer.validator, "metrics", None) # TODO: no metrics returned by DDP
813
813
  return self.metrics
@@ -120,7 +120,7 @@ class BaseValidator:
120
120
  self.args.plots &= trainer.stopper.possible_stop or (trainer.epoch == trainer.epochs - 1)
121
121
  model.eval()
122
122
  else:
123
- if str(self.args.model).endswith(".yaml"):
123
+ if str(self.args.model).endswith(".yaml") and model is None:
124
124
  LOGGER.warning("WARNING ⚠️ validating an untrained model YAML will result in 0 mAP.")
125
125
  callbacks.add_integration_callbacks(self)
126
126
  model = AutoBackend(
@@ -685,11 +685,11 @@ class SAM2Model(torch.nn.Module):
685
685
  if prev is None:
686
686
  continue # skip padding frames
687
687
  # "maskmem_features" might have been offloaded to CPU in demo use cases,
688
- # so we load it back to GPU (it's a no-op if it's already on GPU).
689
- feats = prev["maskmem_features"].cuda(non_blocking=True)
688
+ # so we load it back to inference device (it's a no-op if it's already on device).
689
+ feats = prev["maskmem_features"].to(device=device, non_blocking=True)
690
690
  to_cat_memory.append(feats.flatten(2).permute(2, 0, 1))
691
691
  # Spatial positional encoding (it might have been offloaded to CPU in eval)
692
- maskmem_enc = prev["maskmem_pos_enc"][-1].cuda()
692
+ maskmem_enc = prev["maskmem_pos_enc"][-1].to(device=device)
693
693
  maskmem_enc = maskmem_enc.flatten(2).permute(2, 0, 1)
694
694
  # Temporal positional encoding
695
695
  maskmem_enc = maskmem_enc + self.maskmem_tpos_enc[self.num_maskmem - t_pos - 1]
@@ -39,4 +39,6 @@ class OBBTrainer(yolo.detect.DetectionTrainer):
39
39
  def get_validator(self):
40
40
  """Return an instance of OBBValidator for validation of YOLO model."""
41
41
  self.loss_names = "box_loss", "cls_loss", "dfl_loss"
42
- return yolo.obb.OBBValidator(self.test_loader, save_dir=self.save_dir, args=copy(self.args))
42
+ return yolo.obb.OBBValidator(
43
+ self.test_loader, save_dir=self.save_dir, args=copy(self.args), _callbacks=self.callbacks
44
+ )
@@ -7,7 +7,7 @@ from typing import List
7
7
 
8
8
  import numpy as np
9
9
 
10
- from .ops import ltwh2xywh, ltwh2xyxy, xywh2ltwh, xywh2xyxy, xyxy2ltwh, xyxy2xywh
10
+ from .ops import ltwh2xywh, ltwh2xyxy, resample_segments, xywh2ltwh, xywh2xyxy, xyxy2ltwh, xyxy2xywh
11
11
 
12
12
 
13
13
  def _ntuple(n):
@@ -406,7 +406,20 @@ class Instances:
406
406
  normalized = instances_list[0].normalized
407
407
 
408
408
  cat_boxes = np.concatenate([ins.bboxes for ins in instances_list], axis=axis)
409
- cat_segments = np.concatenate([b.segments for b in instances_list], axis=axis)
409
+ seg_len = [b.segments.shape[1] for b in instances_list]
410
+ if len(set(seg_len)) > 1: # resample segments if there's different length
411
+ max_len = max(seg_len)
412
+ cat_segments = np.concatenate(
413
+ [
414
+ resample_segments(list(b.segments), max_len)
415
+ if len(b.segments)
416
+ else np.zeros((0, max_len, 2), dtype=np.float32) # re-generating empty segments
417
+ for b in instances_list
418
+ ],
419
+ axis=axis,
420
+ )
421
+ else:
422
+ cat_segments = np.concatenate([b.segments for b in instances_list], axis=axis)
410
423
  cat_keypoints = np.concatenate([b.keypoints for b in instances_list], axis=axis) if use_keypoint else None
411
424
  return cls(cat_boxes, cat_segments, cat_keypoints, bbox_format, normalized)
412
425
 
ultralytics/utils/ops.py CHANGED
@@ -624,6 +624,8 @@ def resample_segments(segments, n=1000):
624
624
  segments (list): the resampled segments.
625
625
  """
626
626
  for i, s in enumerate(segments):
627
+ if len(s) == n:
628
+ continue
627
629
  s = np.concatenate((s, s[0:1, :]), axis=0)
628
630
  x = np.linspace(0, len(s) - 1, n - len(s) if len(s) < n else n)
629
631
  xp = np.arange(len(s))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.3.49
3
+ Version: 8.3.50
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=1MvhcQ2qHdbJImHII-bFarcaIcm-kPlEK-OdFLxnj7o,8769
7
7
  tests/test_integrations.py,sha256=f5-QCUk1SU_-qn4mBCZwS3GN3tXEBIIXo4z2EhExbHw,6126
8
8
  tests/test_python.py,sha256=IfHAXqilpYxWNmIE6rAWWUSeIYS6SBO9AkXGHDGZTvA,23182
9
9
  tests/test_solutions.py,sha256=HlDe-XOgBX0k1cLhRTAhhawMHk6p-5dg5xl2AIRjfdk,3790
10
- ultralytics/__init__.py,sha256=TnzAgIPfUzVh5LxQEHMpgGRKUVOY9agPgIAfRtdMKxg,681
10
+ ultralytics/__init__.py,sha256=G2CTePEZVd22siopgro_jZo3hyF2Bir3f7fymRE6faM,681
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=etGrRb8t9r6R-n-00qFAmOZHXNriXEUe0zvEzCPi5oc,38921
@@ -95,18 +95,18 @@ ultralytics/data/augment.py,sha256=Cfa3cufMjNMBqnzSpCFrF7IjR5B-NkpOJ6NwpVdEAWo,1
95
95
  ultralytics/data/base.py,sha256=ZCIhAyFfxXVp5fVnYD8mwbksNALJTayBKIR5FKGV7ZM,15168
96
96
  ultralytics/data/build.py,sha256=AfMmz0sHIYmwry_90tEJFRk_kz0S3SolScVXqYHiT08,7261
97
97
  ultralytics/data/converter.py,sha256=RIfTXNrazwZqmTYOYoJtupDMtNzm8dxsrVp6q2m8gyg,24388
98
- ultralytics/data/dataset.py,sha256=D556AW0ZEsW3V8c5zJiHM_prc_YfZqymIkDKPw3k9Io,22936
98
+ ultralytics/data/dataset.py,sha256=pVNs7484LusQ3IwcEcNeGiZfNrSvhw0K5K4JT35Ljh0,23184
99
99
  ultralytics/data/loaders.py,sha256=k1Vq7Rxv6tpsRsYuMdZeI3_f2BciAaZwhDQU8iHhVJM,28506
100
100
  ultralytics/data/split_dota.py,sha256=eFafJ7Vg52wj6KDCHFJAf1tKzyPD5YaPB8kM4VX5Aeg,10688
101
101
  ultralytics/data/utils.py,sha256=bmWEIrdogj4kssZQSJdSbIF8QsJU00lo-EY-Mgcqv4M,31073
102
102
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
103
103
  ultralytics/engine/exporter.py,sha256=EMrdP8Ra5VnmNEUjustWOvgrH1C4vgwz0L0frjZRSJY,67054
104
- ultralytics/engine/model.py,sha256=-_vG3fyXbTpaftVktFU7A8lSd7pgc9lDMIjZSu6wI0E,53107
104
+ ultralytics/engine/model.py,sha256=l5UiXGBa4ox9BXq0dc6eUsOvd85Q4KHUxGCwY2dfXQE,53113
105
105
  ultralytics/engine/predictor.py,sha256=o1RYMFH3_uVOMCIXXakpRYpNzoD-6Bdsxryt5fuBni0,17712
106
106
  ultralytics/engine/results.py,sha256=a1XFZRPwqgKDBOEAibHuT9nP2xefLiWVsMoBJbcr4iA,75058
107
107
  ultralytics/engine/trainer.py,sha256=Cd95QLJ3C4fncoOX1YgauLA9aWVYRd1G6x0Au2xX86k,37335
108
108
  ultralytics/engine/tuner.py,sha256=WBj8iw1K1TK0hvanlA-wkwmfqh1SI8jEe2dGwUINeTg,11838
109
- ultralytics/engine/validator.py,sha256=aWpXE3nrOqaA7jCuUgwxi0FabiGTIXtZvjoJyCX903o,14870
109
+ ultralytics/engine/validator.py,sha256=fCBTYHwXAT6u4Pq-UYYZDZCwHjjB9ZWzFUdsENDt_Is,14888
110
110
  ultralytics/hub/__init__.py,sha256=c6Me4E8V-P7mtzTggyPYz9FnVkqWRyPp9F-fMcyFNQ0,5632
111
111
  ultralytics/hub/auth.py,sha256=pj_2NijotQpyG4_VJ6EAzNWGD93L6t-34J60yfiNZPc,5541
112
112
  ultralytics/hub/session.py,sha256=2KznO5kX14HFZ2-Ct9LoG312sdHuigQSLZb58MGvbJY,16411
@@ -137,7 +137,7 @@ ultralytics/models/sam/modules/blocks.py,sha256=Q-KwhFbdyZhl1tjG_kP2LcQkZbzoNt61
137
137
  ultralytics/models/sam/modules/decoders.py,sha256=mODsqnTN_CjE3H0Sh9cd8PfTnHANPjGB1bjqHxfezSg,25830
138
138
  ultralytics/models/sam/modules/encoders.py,sha256=Ay3sYeUonCf6URXBdB0dDwyngovevW8hUDgULRnNIoA,34824
139
139
  ultralytics/models/sam/modules/memory_attention.py,sha256=XilWBnRfH8wZxIoL2-yEk-dRypCsS0Jf_9t8WJxXKg0,9722
140
- ultralytics/models/sam/modules/sam.py,sha256=ED_1CwDJ_eoELMkKlfAQpWLlHsBYj6gNL63imtSloro,52685
140
+ ultralytics/models/sam/modules/sam.py,sha256=Rmg9teVlZo-Iu5BhlBtHsmwzxJqXRGs0deAp9Ijp2-0,52725
141
141
  ultralytics/models/sam/modules/tiny_encoder.py,sha256=NyzeFMLnmqwcFQFs-JBM9PCWSsYoYZ_6h59Un1DeDV0,41332
142
142
  ultralytics/models/sam/modules/transformer.py,sha256=nuhF_14LGrr5uYCAP9XCXps-zlVcT4OWO0evXWDxPwI,16081
143
143
  ultralytics/models/sam/modules/utils.py,sha256=Y36V6BVy6GeaAvKE8gHmoDIa-f5LjJpmSVwywNkv2yk,12315
@@ -156,7 +156,7 @@ ultralytics/models/yolo/detect/train.py,sha256=LKCcQTAsXm3-TPK2zkE1YJhbAcS65qhY2
156
156
  ultralytics/models/yolo/detect/val.py,sha256=MV7U81vqj8tR8NYdeexFqRK2lxXwcRclvRqzRfeLJGM,15066
157
157
  ultralytics/models/yolo/obb/__init__.py,sha256=txWbPGLY1_M7ZwlLQjrwGjTBOlsv9P3yk5ZEgysTinU,193
158
158
  ultralytics/models/yolo/obb/predict.py,sha256=VxpKCKV5dWnOr0GyV1rJGH5SzzRouCYW_8T26xJ8MU8,2037
159
- ultralytics/models/yolo/obb/train.py,sha256=_FVYCvHJ5ECi2aN8k7AmVLxRUuun7acSqwWtCBRuL6Q,1473
159
+ ultralytics/models/yolo/obb/train.py,sha256=vN7p_ec8rHhA0AeKvVUNzaSGG4O30UGlMh6Qk7bCkhQ,1522
160
160
  ultralytics/models/yolo/obb/val.py,sha256=ARha7rJmf12wM1neVi7VX6ejorXrjUMNUpx9dDvRmYU,9337
161
161
  ultralytics/models/yolo/pose/__init__.py,sha256=OGvxN3LqJot2h8GX1csJ1KErsHnDKsm33Ce6ZBU9Lr4,199
162
162
  ultralytics/models/yolo/pose/predict.py,sha256=cpTe4vTI3etnGCgyMcvxbF0cMNetiWXUwhsipEFX-KQ,2365
@@ -209,10 +209,10 @@ ultralytics/utils/dist.py,sha256=NDFga-uKxkBX2zLxFHSene_cCiGQJoyOeCXcN9JIOIk,235
209
209
  ultralytics/utils/downloads.py,sha256=fh7I5toTSowAOXtmx5zIzCEDREfTFG45cLIHmsDmuYw,21974
210
210
  ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,816
211
211
  ultralytics/utils/files.py,sha256=uiXQSVABJRoI5ImnM6ndEBIFbECfksmWNEldBg8GnSo,8224
212
- ultralytics/utils/instance.py,sha256=EnLp3hCihG5-32eGSMmjzspbxZsDvbqEOs-X0kcvxwQ,16252
212
+ ultralytics/utils/instance.py,sha256=NuTLa_XoqgmWNhxQ2JuflT22UAmEmv0UWd5BZXCjSNM,16841
213
213
  ultralytics/utils/loss.py,sha256=_d2L4lIemaeAHrGHqf9q-KI7yTgHKCbIcYAF7Y-farI,34185
214
214
  ultralytics/utils/metrics.py,sha256=toJlyA0W-xtChqAtIDiHISolxc_30NP33ezxWQ1rnPc,53804
215
- ultralytics/utils/ops.py,sha256=32Vg2cDwdqcMyb3XT9RGS2-YinIDRiE1-iS7H_0wssE,33174
215
+ ultralytics/utils/ops.py,sha256=O_p_GUAtYL31YQIvEl4m3OOgUE34qaIZY9UN5k0ROnU,33219
216
216
  ultralytics/utils/patches.py,sha256=J-iOwIRbfUs-inBZerhnXby5tUKjYcOIyvhLTS352JE,3270
217
217
  ultralytics/utils/plotting.py,sha256=GmBkN7e1skJK2cZ2hzKBXQCb1gayWTrA9TLHw0q07UM,62948
218
218
  ultralytics/utils/tal.py,sha256=thD_AEhVmhaZqmS5szZMvpKO-RKOeZwfX1BYAhdnA0o,18470
@@ -230,9 +230,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=IbGQfEltamUKXJt93uSLQFn8c2rYh3DMTg
230
230
  ultralytics/utils/callbacks/raytune.py,sha256=Ck_yFzg7UZXiDWrLHaltjQybzVWSFDfzpdrx9ZYTRfI,700
231
231
  ultralytics/utils/callbacks/tensorboard.py,sha256=SHlE58Fb-sg-uZKtgy-ybIO3SAIfK55aj8kTYGA0Cyg,4167
232
232
  ultralytics/utils/callbacks/wb.py,sha256=sizfTa-xI9k2pnDSP_Q9pHZEFwcl__gSFM0AcneuRpY,7058
233
- ultralytics-8.3.49.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
234
- ultralytics-8.3.49.dist-info/METADATA,sha256=Z88YZkTfKEbcvp43SwxSP2ljCd3JX2O-xv7eTUawBk4,35332
235
- ultralytics-8.3.49.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
236
- ultralytics-8.3.49.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
237
- ultralytics-8.3.49.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
238
- ultralytics-8.3.49.dist-info/RECORD,,
233
+ ultralytics-8.3.50.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
234
+ ultralytics-8.3.50.dist-info/METADATA,sha256=UhnzwB1j7o0dsYNJZtpzkKPBOKg_HNCAePYrFqW3zSo,35332
235
+ ultralytics-8.3.50.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
236
+ ultralytics-8.3.50.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
237
+ ultralytics-8.3.50.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
238
+ ultralytics-8.3.50.dist-info/RECORD,,