ultralytics 8.2.65__py3-none-any.whl → 8.2.67__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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.65"
3
+ __version__ = "8.2.67"
4
4
 
5
5
  import os
6
6
 
@@ -17,6 +17,7 @@ from ultralytics.utils import (
17
17
  DEFAULT_CFG_DICT,
18
18
  LOGGER,
19
19
  RANK,
20
+ SETTINGS,
20
21
  callbacks,
21
22
  checks,
22
23
  emojis,
@@ -286,7 +287,7 @@ class Model(nn.Module):
286
287
  >>> model._load('path/to/weights.pth', task='detect')
287
288
  """
288
289
  if weights.lower().startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://")):
289
- weights = checks.check_file(weights) # automatically download and return local filename
290
+ weights = checks.check_file(weights, download_dir=SETTINGS["weights_dir"]) # download and return local file
290
291
  weights = checks.check_model_file_from_stem(weights) # add suffix, i.e. yolov8n -> yolov8n.pt
291
292
 
292
293
  if Path(weights).suffix == ".pt":
@@ -507,7 +507,7 @@ class BaseTrainer:
507
507
  self.last.write_bytes(serialized_ckpt) # save last.pt
508
508
  if self.best_fitness == self.fitness:
509
509
  self.best.write_bytes(serialized_ckpt) # save best.pt
510
- if (self.save_period > 0) and (self.epoch > 0) and (self.epoch % self.save_period == 0):
510
+ if (self.save_period > 0) and (self.epoch % self.save_period == 0):
511
511
  (self.wdir / f"epoch{self.epoch}.pt").write_bytes(serialized_ckpt) # save epoch, i.e. 'epoch3.pt'
512
512
 
513
513
  def get_dataset(self):
@@ -48,6 +48,7 @@ class HUBTrainingSession:
48
48
  self.timers = {} # holds timers in ultralytics/utils/callbacks/hub.py
49
49
  self.model = None
50
50
  self.model_url = None
51
+ self.model_file = None
51
52
 
52
53
  # Parse input
53
54
  api_key, model_id, self.filename = self._parse_identifier(identifier)
@@ -91,10 +92,13 @@ class HUBTrainingSession:
91
92
  raise ValueError(emojis("❌ The specified HUB model does not exist")) # TODO: improve error handling
92
93
 
93
94
  self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
95
+ if self.model.is_trained():
96
+ print(emojis(f"Loading trained HUB model {self.model_url} 🚀"))
97
+ self.model_file = self.model.get_weights_url("best")
98
+ return
94
99
 
100
+ # Set training args and start heartbeats for HUB to monitor agent
95
101
  self._set_train_args()
96
-
97
- # Start heartbeats for HUB to monitor agent
98
102
  self.model.start_heartbeat(self.rate_limits["heartbeat"])
99
103
  LOGGER.info(f"{PREFIX}View model at {self.model_url} 🚀")
100
104
 
@@ -195,8 +199,6 @@ class HUBTrainingSession:
195
199
  ValueError: If the model is already trained, if required dataset information is missing, or if there are
196
200
  issues with the provided training arguments.
197
201
  """
198
- if self.model.is_trained():
199
- raise ValueError(emojis(f"Model is already trained and uploaded to {self.model_url} 🚀"))
200
202
 
201
203
  if self.model.is_resumable():
202
204
  # Model has saved weights
ultralytics/nn/tasks.py CHANGED
@@ -66,13 +66,13 @@ from ultralytics.utils.loss import (
66
66
  v8PoseLoss,
67
67
  v8SegmentationLoss,
68
68
  )
69
+ from ultralytics.utils.ops import make_divisible
69
70
  from ultralytics.utils.plotting import feature_visualization
70
71
  from ultralytics.utils.torch_utils import (
71
72
  fuse_conv_and_bn,
72
73
  fuse_deconv_and_bn,
73
74
  initialize_weights,
74
75
  intersect_dicts,
75
- make_divisible,
76
76
  model_info,
77
77
  scale_img,
78
78
  time_sync,
@@ -44,6 +44,7 @@ LOGGING_NAME = "ultralytics"
44
44
  MACOS, LINUX, WINDOWS = (platform.system() == x for x in ["Darwin", "Linux", "Windows"]) # environment booleans
45
45
  ARM64 = platform.machine() in {"arm64", "aarch64"} # ARM64 booleans
46
46
  PYTHON_VERSION = platform.python_version()
47
+ TORCH_VERSION = torch.__version__
47
48
  TORCHVISION_VERSION = importlib.metadata.version("torchvision") # faster than importing torchvision
48
49
  HELP_MSG = """
49
50
  Usage examples for running YOLOv8:
@@ -975,6 +976,11 @@ class SettingsManager(dict):
975
976
  "tensorboard": True,
976
977
  "wandb": True,
977
978
  }
979
+ self.help_msg = (
980
+ f"\nView settings with 'yolo settings' or at '{self.file}'"
981
+ "\nUpdate settings with 'yolo settings key=value', i.e. 'yolo settings runs_dir=path/to/dir'. "
982
+ "For help see https://docs.ultralytics.com/quickstart/#ultralytics-settings."
983
+ )
978
984
 
979
985
  super().__init__(copy.deepcopy(self.defaults))
980
986
 
@@ -986,15 +992,10 @@ class SettingsManager(dict):
986
992
  correct_keys = self.keys() == self.defaults.keys()
987
993
  correct_types = all(type(a) is type(b) for a, b in zip(self.values(), self.defaults.values()))
988
994
  correct_version = check_version(self["settings_version"], self.version)
989
- help_msg = (
990
- f"\nView settings with 'yolo settings' or at '{self.file}'"
991
- "\nUpdate settings with 'yolo settings key=value', i.e. 'yolo settings runs_dir=path/to/dir'. "
992
- "For help see https://docs.ultralytics.com/quickstart/#ultralytics-settings."
993
- )
994
995
  if not (correct_keys and correct_types and correct_version):
995
996
  LOGGER.warning(
996
997
  "WARNING ⚠️ Ultralytics settings reset to default values. This may be due to a possible problem "
997
- f"with your settings or a recent ultralytics package update. {help_msg}"
998
+ f"with your settings or a recent ultralytics package update. {self.help_msg}"
998
999
  )
999
1000
  self.reset()
1000
1001
 
@@ -1002,7 +1003,7 @@ class SettingsManager(dict):
1002
1003
  LOGGER.warning(
1003
1004
  f"WARNING ⚠️ Ultralytics setting 'datasets_dir: {self.get('datasets_dir')}' "
1004
1005
  f"must be different than 'runs_dir: {self.get('runs_dir')}'. "
1005
- f"Please change one to avoid possible issues during training. {help_msg}"
1006
+ f"Please change one to avoid possible issues during training. {self.help_msg}"
1006
1007
  )
1007
1008
 
1008
1009
  def load(self):
@@ -1015,6 +1016,12 @@ class SettingsManager(dict):
1015
1016
 
1016
1017
  def update(self, *args, **kwargs):
1017
1018
  """Updates a setting value in the current settings."""
1019
+ for k, v in kwargs.items():
1020
+ if k not in self.defaults:
1021
+ raise KeyError(f"No Ultralytics setting '{k}'. {self.help_msg}")
1022
+ t = type(self.defaults[k])
1023
+ if not isinstance(v, t):
1024
+ raise TypeError(f"Ultralytics setting '{k}' must be of type '{t}', not '{type(v)}'. {self.help_msg}")
1018
1025
  super().update(*args, **kwargs)
1019
1026
  self.save()
1020
1027
 
@@ -484,7 +484,7 @@ def check_model_file_from_stem(model="yolov8n"):
484
484
  return model
485
485
 
486
486
 
487
- def check_file(file, suffix="", download=True, hard=True):
487
+ def check_file(file, suffix="", download=True, download_dir=".", hard=True):
488
488
  """Search/download file (if necessary) and return path."""
489
489
  check_suffix(file, suffix) # optional
490
490
  file = str(file).strip() # convert to string and strip spaces
@@ -497,12 +497,12 @@ def check_file(file, suffix="", download=True, hard=True):
497
497
  return file
498
498
  elif download and file.lower().startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://")): # download
499
499
  url = file # warning: Pathlib turns :// -> :/
500
- file = url2file(file) # '%2F' to '/', split https://url.com/file.txt?auth
501
- if Path(file).exists():
500
+ file = Path(download_dir) / url2file(file) # '%2F' to '/', split https://url.com/file.txt?auth
501
+ if file.exists():
502
502
  LOGGER.info(f"Found {clean_url(url)} locally at {file}") # file already exists
503
503
  else:
504
504
  downloads.safe_download(url=url, file=file, unzip=False)
505
- return file
505
+ return str(file)
506
506
  else: # search
507
507
  files = glob.glob(str(ROOT / "**" / file), recursive=True) or glob.glob(str(ROOT.parent / file)) # find file
508
508
  if not files and hard:
@@ -424,13 +424,6 @@ def scale_img(img, ratio=1.0, same_shape=False, gs=32):
424
424
  return F.pad(img, [0, w - s[1], 0, h - s[0]], value=0.447) # value = imagenet mean
425
425
 
426
426
 
427
- def make_divisible(x, divisor):
428
- """Returns nearest x divisible by divisor."""
429
- if isinstance(divisor, torch.Tensor):
430
- divisor = int(divisor.max()) # to int
431
- return math.ceil(x / divisor) * divisor
432
-
433
-
434
427
  def copy_attr(a, b, include=(), exclude=()):
435
428
  """Copies attributes from object 'b' to object 'a', with options to include/exclude certain attributes."""
436
429
  for k, v in b.__dict__.items():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.65
3
+ Version: 8.2.67
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
@@ -69,6 +69,7 @@ Requires-Dist: keras ; extra == 'export'
69
69
  Requires-Dist: flatbuffers <100,>=23.5.26 ; (platform_machine == "aarch64") and extra == 'export'
70
70
  Requires-Dist: numpy ==1.23.5 ; (platform_machine == "aarch64") and extra == 'export'
71
71
  Requires-Dist: h5py !=3.11.0 ; (platform_machine == "aarch64") and extra == 'export'
72
+ Requires-Dist: tensorstore >=0.1.63 ; (platform_machine == "aarch64" and python_version >= "3.9") and extra == 'export'
72
73
  Requires-Dist: coremltools >=7.0 ; (platform_system != "Windows" and python_version <= "3.11") and extra == 'export'
73
74
  Provides-Extra: extra
74
75
  Requires-Dist: hub-sdk >=0.0.8 ; extra == 'extra'
@@ -8,7 +8,7 @@ tests/test_exports.py,sha256=Uezf3OatpPHlo5qoPw-2kqkZxuMCF9L4XF2riD4vmII,8225
8
8
  tests/test_integrations.py,sha256=xglcfMPjfVh346PV8WTpk6tBxraCXEFJEQyyJMr5tyU,6064
9
9
  tests/test_python.py,sha256=cLK8dyRf_4H_znFIm-krnOFMydwkxKlVZvHwl9vbck8,21780
10
10
  tests/test_solutions.py,sha256=EACnPXbeJe2aVTOKfqMk5jclKKCWCVgFEzjpR6y7Sh8,3304
11
- ultralytics/__init__.py,sha256=q8iXvFMyCB22eCpB78eJlF_zMTzv6COYFZmC38iymMg,694
11
+ ultralytics/__init__.py,sha256=2hniA3cH39Y6I4NNtuSPQqQN11EFMMqlsBXvM7MQFig,694
12
12
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
13
13
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
14
14
  ultralytics/cfg/__init__.py,sha256=fD3Llw12sIkJo4g667t6b051je9nEpwdBLGgbbVEzHY,32973
@@ -99,15 +99,15 @@ ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2
99
99
  ultralytics/data/explorer/gui/dash.py,sha256=vZ476NaUH4FKU08rAJ1K9WNyKtg0soMyJJxqg176yWc,10498
100
100
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
101
101
  ultralytics/engine/exporter.py,sha256=EM35MOPWbIKE2ShJsPzdrEmrjzwZSp9gW-rO8GEFal0,58905
102
- ultralytics/engine/model.py,sha256=zeyyXy4dY3fTj0GjYeTuvJcKyNmlEX34ntSzLF3_T7E,52013
102
+ ultralytics/engine/model.py,sha256=8YSxLan1OfV_IynCQjAzaGS4gCWTEbGLfUWnfTDxhsE,52047
103
103
  ultralytics/engine/predictor.py,sha256=W58kDCFH2AfoFzpGbos3k8zUEVsLunBuM8sc2B64rPY,17449
104
104
  ultralytics/engine/results.py,sha256=oNAzSKdKxxx_5QQd9opzCevvgPhspdY5BkWxoz5bQ8E,69882
105
- ultralytics/engine/trainer.py,sha256=Ueinv8iWx4UxxqS4X0E8vLgrQC6MK0qfRKVklV-VRdI,35475
105
+ ultralytics/engine/trainer.py,sha256=esQhG3XJUF1vsl49GavnqpL0tvMZIY-SwD_hw1XmWdU,35454
106
106
  ultralytics/engine/tuner.py,sha256=iZrgMmXSDpfuDu4bdFRflmAsscys2-8W8qAGxSyOVJE,11844
107
107
  ultralytics/engine/validator.py,sha256=Y21Uo8_Zto4qjk_YqQk6k7tyfpq_Qk9cfjeXeyDRxs8,14643
108
108
  ultralytics/hub/__init__.py,sha256=93bqI8x8-MfDYdKkQVduuocUiQj3WGnk1nIk0li08zA,5663
109
109
  ultralytics/hub/auth.py,sha256=FID58NE6fh7Op_B45QOpWBw1qoBN0ponL16uvyb2dZ8,5399
110
- ultralytics/hub/session.py,sha256=uXkP8AayJClLUD9TP8AlJSqxm-OmTgCmTXl1TkO6jQc,16147
110
+ ultralytics/hub/session.py,sha256=UF_aVwyxnbP-OzpzKXGGhi4i6KGWjjhoj5Qsn46dFpE,16257
111
111
  ultralytics/hub/utils.py,sha256=tXfM3QbXBcf4Y6StgHI1pktT4OM7Ic9eF3xiBFHGlhY,9721
112
112
  ultralytics/models/__init__.py,sha256=TT9iLCL_n9Y80dcUq0Fo-p-GRZCSU2vrWXM3CoMwqqE,265
113
113
  ultralytics/models/fastsam/__init__.py,sha256=0dt65jZ_5b7Q-mdXN8MSEkgnFRA0FIwlel_LS2RaOlU,254
@@ -166,7 +166,7 @@ ultralytics/models/yolo/world/train.py,sha256=acYN2-onL69LrL4av6_hY2r5AY0urC0WVi
166
166
  ultralytics/models/yolo/world/train_world.py,sha256=IsnCEVt6DcM9lUskCKmIN-M8MM79xLpwTRqRoAHUnZ4,4857
167
167
  ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
168
168
  ultralytics/nn/autobackend.py,sha256=3Bdljx-0GUGLBy70nUx4oDgSqrXqaOFYYtg9NKgPfgI,31576
169
- ultralytics/nn/tasks.py,sha256=jGAauQZOOSXKsxAKad_HBNfLleOoTS7T9XSlOZN8v7Y,45856
169
+ ultralytics/nn/tasks.py,sha256=aegNns5m1YewIT3oG9zgjsQddtyZ6rbOrgMKEIqK_s4,45885
170
170
  ultralytics/nn/modules/__init__.py,sha256=mARjWk83WPYF5phXhXfPbAu2ZohtdbHdi5zzoxyMubo,2553
171
171
  ultralytics/nn/modules/activation.py,sha256=RS0DRDm9r56tojN79X8UBVtiktde9Wasw7GIbiopSMk,945
172
172
  ultralytics/nn/modules/block.py,sha256=jLXQerl4nXfr4MEGMp9S3YgdTqOJzas1GBxryyXyLV0,34582
@@ -193,10 +193,10 @@ ultralytics/trackers/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7J
193
193
  ultralytics/trackers/utils/gmc.py,sha256=-1oBNFRB-9EawJmUOT566AygLCVxJw-jsPSIOl5j_Hk,13683
194
194
  ultralytics/trackers/utils/kalman_filter.py,sha256=0oqhk59NKEiwcJ2FXnw6_sT4bIFC6Wu5IY2B-TGxJKU,15168
195
195
  ultralytics/trackers/utils/matching.py,sha256=UxhSGa5pN6WoYwYSBAkkt-O7xMxUR47VuUB6PfVNkb4,5404
196
- ultralytics/utils/__init__.py,sha256=w6UHjkT0qkDmIr6JgwoGisLusJFpvmpOiegATYend_g,38526
196
+ ultralytics/utils/__init__.py,sha256=FyRZRncXCAGmtFp1Dd4ACUK5zTrp6sOK-zFuG2Nwm1I,38905
197
197
  ultralytics/utils/autobatch.py,sha256=POJb9f8dioI7lPGnCc7bdxt0ncftXZa0bvOkip-XoWk,3969
198
198
  ultralytics/utils/benchmarks.py,sha256=6tdNcBLATllWpmAMUC6TW7DiCx1VKHhnQN4vkoqN3sE,23866
199
- ultralytics/utils/checks.py,sha256=dTyIJ17DvnDxRT6Jhmb71MGxc9qehic8OereIjfB8Js,28460
199
+ ultralytics/utils/checks.py,sha256=hBkhOinWRzhpA5SbY1v-wCMdFeOemORRlmKBXgwoHYo,28498
200
200
  ultralytics/utils/dist.py,sha256=NDFga-uKxkBX2zLxFHSene_cCiGQJoyOeCXcN9JIOIk,2358
201
201
  ultralytics/utils/downloads.py,sha256=NB9UDas5f8Rzxt_PS1vDKkSgCxcJ0R_-pjNyZ8E3OUM,21897
202
202
  ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,816
@@ -208,7 +208,7 @@ ultralytics/utils/ops.py,sha256=CQeMDVV4f9QWvYPNvNJu7GJAW2-XG93D7ee7yFY0vsI,3268
208
208
  ultralytics/utils/patches.py,sha256=Oo3DkP7MbXnNGvPfoFSocAkVvaPh9kwMT_9RQUfjVhI,3594
209
209
  ultralytics/utils/plotting.py,sha256=5HRfiG2dklWZJheTxGTy0gFRk39utHcZbMJl7j2hnMI,55522
210
210
  ultralytics/utils/tal.py,sha256=hia39MhWPFpDWOTAXC_5vz-9cUdiRHZs-UcTnxD4Dlo,16112
211
- ultralytics/utils/torch_utils.py,sha256=YVIVnqZ-hzzACC9IBdyX0j6cyX_gc8s1fko18KxEiPs,29097
211
+ ultralytics/utils/torch_utils.py,sha256=ClXfUpTKFkwD3Zfnjk9YnK0gsA-7YmvEasTDiVN9Wvw,28880
212
212
  ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
213
213
  ultralytics/utils/tuner.py,sha256=49KAadKZsUeCpwIm5Sn0grb0RPcMNI8vHGLwroDEJNI,6171
214
214
  ultralytics/utils/callbacks/__init__.py,sha256=YrWqC3BVVaTLob4iCPR6I36mUxIUOpPJW7B_LjT78Qw,214
@@ -222,9 +222,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
222
222
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
223
223
  ultralytics/utils/callbacks/tensorboard.py,sha256=QEgOVhUqY9akOs5TJIwz1Rvn6l32xWLpOxlwEyWF0B8,4136
224
224
  ultralytics/utils/callbacks/wb.py,sha256=9-fjQIdLjr3b73DTE3rHO171KvbH1VweJ-bmbv-rqTw,6747
225
- ultralytics-8.2.65.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
226
- ultralytics-8.2.65.dist-info/METADATA,sha256=UD4TLd7imSyCw5cNylaZfUzGJ_OSyrvw5DwVSQ1oo68,41217
227
- ultralytics-8.2.65.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
228
- ultralytics-8.2.65.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
229
- ultralytics-8.2.65.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
230
- ultralytics-8.2.65.dist-info/RECORD,,
225
+ ultralytics-8.2.67.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
226
+ ultralytics-8.2.67.dist-info/METADATA,sha256=GXFnutNkySYV8dkdMktKgVCDUJKN6o1zuuBh5TKw2ig,41337
227
+ ultralytics-8.2.67.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
228
+ ultralytics-8.2.67.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
229
+ ultralytics-8.2.67.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
230
+ ultralytics-8.2.67.dist-info/RECORD,,