ultralytics 8.3.211__py3-none-any.whl → 8.3.212__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 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.211"
3
+ __version__ = "8.3.212"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -44,7 +44,6 @@ from ultralytics.utils.dist import ddp_cleanup, generate_ddp_command
44
44
  from ultralytics.utils.files import get_latest_run
45
45
  from ultralytics.utils.plotting import plot_results
46
46
  from ultralytics.utils.torch_utils import (
47
- TORCH_1_9,
48
47
  TORCH_2_4,
49
48
  EarlyStopping,
50
49
  ModelEMA,
@@ -424,23 +423,20 @@ class BaseTrainer:
424
423
  self.tloss = self.loss_items if self.tloss is None else (self.tloss * i + self.loss_items) / (i + 1)
425
424
 
426
425
  # Backward
427
- if self.loss.isfinite():
428
- self.scaler.scale(self.loss).backward()
429
- if ni - last_opt_step >= self.accumulate:
430
- self.optimizer_step()
431
- last_opt_step = ni
432
-
433
- # Timed stopping
434
- if self.args.time:
435
- self.stop = (time.time() - self.train_time_start) > (self.args.time * 3600)
436
- if RANK != -1: # if DDP training
437
- broadcast_list = [self.stop if RANK == 0 else None]
438
- dist.broadcast_object_list(broadcast_list, 0) # broadcast 'stop' to all ranks
439
- self.stop = broadcast_list[0]
440
- if self.stop: # training time exceeded
441
- break
442
- else:
443
- LOGGER.warning(f"Non-finite forward pass (loss={self.loss}), skipping backwards pass...")
426
+ self.scaler.scale(self.loss).backward()
427
+ if ni - last_opt_step >= self.accumulate:
428
+ self.optimizer_step()
429
+ last_opt_step = ni
430
+
431
+ # Timed stopping
432
+ if self.args.time:
433
+ self.stop = (time.time() - self.train_time_start) > (self.args.time * 3600)
434
+ if RANK != -1: # if DDP training
435
+ broadcast_list = [self.stop if RANK == 0 else None]
436
+ dist.broadcast_object_list(broadcast_list, 0) # broadcast 'stop' to all ranks
437
+ self.stop = broadcast_list[0]
438
+ if self.stop: # training time exceeded
439
+ break
444
440
 
445
441
  # Log
446
442
  if RANK in {-1, 0}:
@@ -556,7 +552,10 @@ class BaseTrainer:
556
552
  """Read results.csv into a dictionary using polars."""
557
553
  import polars as pl # scope for faster 'import ultralytics'
558
554
 
559
- return pl.read_csv(self.csv, infer_schema_length=None).to_dict(as_series=False)
555
+ try:
556
+ return pl.read_csv(self.csv, infer_schema_length=None).to_dict(as_series=False)
557
+ except Exception:
558
+ return {}
560
559
 
561
560
  def _model_train(self):
562
561
  """Set model in training mode."""
@@ -600,6 +599,7 @@ class BaseTrainer:
600
599
  serialized_ckpt = buffer.getvalue() # get the serialized content to save
601
600
 
602
601
  # Save checkpoints
602
+ self.wdir.mkdir(parents=True, exist_ok=True) # ensure weights directory exists
603
603
  self.last.write_bytes(serialized_ckpt) # save last.pt
604
604
  if self.best_fitness == self.fitness:
605
605
  self.best.write_bytes(serialized_ckpt) # save best.pt
@@ -665,17 +665,8 @@ class BaseTrainer:
665
665
  def optimizer_step(self):
666
666
  """Perform a single step of the training optimizer with gradient clipping and EMA update."""
667
667
  self.scaler.unscale_(self.optimizer) # unscale gradients
668
- try:
669
- if TORCH_1_9:
670
- torch.nn.utils.clip_grad_norm_(self.model.parameters(), max_norm=10.0, error_if_nonfinite=True)
671
- self.scaler.step(self.optimizer)
672
- except RuntimeError as e:
673
- if "finite" in str(e).lower():
674
- LOGGER.warning("Non-finite gradients, skipping optimizer updates")
675
- self.scaler.update()
676
- self.optimizer.zero_grad()
677
- return
678
- raise
668
+ torch.nn.utils.clip_grad_norm_(self.model.parameters(), max_norm=10.0)
669
+ self.scaler.step(self.optimizer)
679
670
  self.scaler.update()
680
671
  self.optimizer.zero_grad()
681
672
  if self.ema:
@@ -749,8 +740,9 @@ class BaseTrainer:
749
740
  """Save training metrics to a CSV file."""
750
741
  keys, vals = list(metrics.keys()), list(metrics.values())
751
742
  n = len(metrics) + 2 # number of cols
752
- s = "" if self.csv.exists() else (("%s," * n % tuple(["epoch", "time"] + keys)).rstrip(",") + "\n") # header
753
743
  t = time.time() - self.train_time_start
744
+ self.csv.parent.mkdir(parents=True, exist_ok=True) # ensure parent directory exists
745
+ s = "" if self.csv.exists() else (("%s," * n % tuple(["epoch", "time"] + keys)).rstrip(",") + "\n") # header
754
746
  with open(self.csv, "a", encoding="utf-8") as f:
755
747
  f.write(s + ("%.6g," * n % tuple([self.epoch + 1, t] + vals)).rstrip(",") + "\n")
756
748
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.211
3
+ Version: 8.3.212
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=3o-qqPrPqjD1a_U6KBvwAusZ_Wy6S1WzmuvgRRUXmcA,11099
7
7
  tests/test_integrations.py,sha256=ehRcYMpGvUI3KvgsaT1pkN1rXkr7tDSlYYMqIcXyGbg,6220
8
8
  tests/test_python.py,sha256=L0yIWfXo1Ar3NuRi8r6cYBC0-WLDucf0TCbEi27YFeA,27950
9
9
  tests/test_solutions.py,sha256=oaTz5BttPDIeHkQh9oEaw-O73L4iYDP3Lfe82V7DeKM,13416
10
- ultralytics/__init__.py,sha256=iewnwHiT24VbcGnpzCwE7CPRnyEmZfAa6MUgQD6AdNQ,1302
10
+ ultralytics/__init__.py,sha256=6mA5j_Q2O-bn32o6GDauhsIUm7Lo4ahq5BRdvCD23js,1302
11
11
  ultralytics/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
12
12
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
13
13
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
@@ -125,7 +125,7 @@ ultralytics/engine/exporter.py,sha256=BFzmv7tn2e9zUPwFspb677o1QzzJlOfcVyl3gXmVGW
125
125
  ultralytics/engine/model.py,sha256=uX6cTFdlLllGRbz8Lr90IZGb4OrtMDIHQEg7DxUqwe8,53449
126
126
  ultralytics/engine/predictor.py,sha256=4lfw2RbBDE7939011FcSCuznscrcnMuabZtc8GXaKO4,22735
127
127
  ultralytics/engine/results.py,sha256=uQ_tgvdxKAg28pRgb5WCHiqx9Ktu7wYiVbwZy_IJ5bo,71499
128
- ultralytics/engine/trainer.py,sha256=jgDpYIRDUQpw5_WI4j-x1tbgEvPKgh1LPP4nMS06ojk,41619
128
+ ultralytics/engine/trainer.py,sha256=9E8T6V8LfnTxXAxJ2NlQQuh5UsN_KygzjgT41idZE68,41268
129
129
  ultralytics/engine/tuner.py,sha256=8uiZ9DSYdjHmbhfiuzbMPw--1DLS3cpfZPeSzJ9dGEA,21664
130
130
  ultralytics/engine/validator.py,sha256=s7cKMqj2HgVm-GL9bUc76QBeue2jb4cKPk-uQQG5nck,16949
131
131
  ultralytics/hub/__init__.py,sha256=xCF02lzlPKbdmGfO3NxLuXl5Kb0MaBZp_-fAWDHZ8zw,6698
@@ -275,9 +275,9 @@ ultralytics/utils/callbacks/tensorboard.py,sha256=_4nfGK1dDLn6ijpvphBDhc-AS8qhS3
275
275
  ultralytics/utils/callbacks/wb.py,sha256=ngQO8EJ1kxJDF1YajScVtzBbm26jGuejA0uWeOyvf5A,7685
276
276
  ultralytics/utils/export/__init__.py,sha256=jQtf716PP0jt7bMoY9FkqmjG26KbvDzuR84jGhaBi2U,9901
277
277
  ultralytics/utils/export/imx.py,sha256=Jl5nuNxqaP_bY5yrV2NypmoJSrexHE71TxR72SDdjcg,11394
278
- ultralytics-8.3.211.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
279
- ultralytics-8.3.211.dist-info/METADATA,sha256=LBFeTdzWXjyyrhX1nsjlS0O4zn510LwAieWA6qufB04,37667
280
- ultralytics-8.3.211.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
281
- ultralytics-8.3.211.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
282
- ultralytics-8.3.211.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
283
- ultralytics-8.3.211.dist-info/RECORD,,
278
+ ultralytics-8.3.212.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
279
+ ultralytics-8.3.212.dist-info/METADATA,sha256=UvMHXm-BAUH-pTHjwSWAwmkt2JpvF1NdNI1kM7QWCl0,37667
280
+ ultralytics-8.3.212.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
281
+ ultralytics-8.3.212.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
282
+ ultralytics-8.3.212.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
283
+ ultralytics-8.3.212.dist-info/RECORD,,