ultralytics 8.3.213__py3-none-any.whl → 8.3.214__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/engine/trainer.py +7 -3
- ultralytics/models/yolo/classify/val.py +1 -0
- ultralytics/utils/plotting.py +3 -2
- {ultralytics-8.3.213.dist-info → ultralytics-8.3.214.dist-info}/METADATA +1 -1
- {ultralytics-8.3.213.dist-info → ultralytics-8.3.214.dist-info}/RECORD +10 -10
- {ultralytics-8.3.213.dist-info → ultralytics-8.3.214.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.213.dist-info → ultralytics-8.3.214.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.213.dist-info → ultralytics-8.3.214.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.213.dist-info → ultralytics-8.3.214.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
ultralytics/engine/trainer.py
CHANGED
|
@@ -170,6 +170,8 @@ class BaseTrainer:
|
|
|
170
170
|
self.tloss = None
|
|
171
171
|
self.loss_names = ["Loss"]
|
|
172
172
|
self.csv = self.save_dir / "results.csv"
|
|
173
|
+
if self.csv.exists() and not self.args.resume:
|
|
174
|
+
self.csv.unlink()
|
|
173
175
|
self.plot_idx = [0, 1, 2]
|
|
174
176
|
self.nan_recovery_attempts = 0
|
|
175
177
|
|
|
@@ -820,16 +822,17 @@ class BaseTrainer:
|
|
|
820
822
|
if ckpt.get("scaler") is not None:
|
|
821
823
|
self.scaler.load_state_dict(ckpt["scaler"])
|
|
822
824
|
if self.ema and ckpt.get("ema"):
|
|
825
|
+
self.ema = ModelEMA(self.model) # validation with EMA creates inference tensors that can't be updated
|
|
823
826
|
self.ema.ema.load_state_dict(ckpt["ema"].float().state_dict())
|
|
824
827
|
self.ema.updates = ckpt["updates"]
|
|
825
828
|
self.best_fitness = ckpt.get("best_fitness", 0.0)
|
|
826
829
|
|
|
827
830
|
def _handle_nan_recovery(self, epoch):
|
|
828
|
-
"""Detect and recover from NaN/Inf loss
|
|
829
|
-
loss_nan = self.
|
|
831
|
+
"""Detect and recover from NaN/Inf loss and fitness collapse by loading last checkpoint."""
|
|
832
|
+
loss_nan = self.loss is not None and not self.loss.isfinite()
|
|
830
833
|
fitness_nan = self.fitness is not None and not np.isfinite(self.fitness)
|
|
831
834
|
fitness_collapse = self.best_fitness and self.best_fitness > 0 and self.fitness == 0
|
|
832
|
-
corrupted = RANK in {-1, 0} and
|
|
835
|
+
corrupted = RANK in {-1, 0} and loss_nan and (fitness_nan or fitness_collapse)
|
|
833
836
|
reason = "Loss NaN/Inf" if loss_nan else "Fitness NaN/Inf" if fitness_nan else "Fitness collapse"
|
|
834
837
|
if RANK != -1: # DDP: broadcast to all ranks
|
|
835
838
|
broadcast_list = [corrupted if RANK == 0 else None]
|
|
@@ -844,6 +847,7 @@ class BaseTrainer:
|
|
|
844
847
|
if self.nan_recovery_attempts > 3:
|
|
845
848
|
raise RuntimeError(f"Training failed: NaN persisted for {self.nan_recovery_attempts} epochs")
|
|
846
849
|
LOGGER.warning(f"{reason} detected (attempt {self.nan_recovery_attempts}/3), recovering from last.pt...")
|
|
850
|
+
self._model_train() # set model to train mode before loading checkpoint to avoid inference tensor errors
|
|
847
851
|
_, ckpt = load_checkpoint(self.last)
|
|
848
852
|
ema_state = ckpt["ema"].float().state_dict()
|
|
849
853
|
if not all(torch.isfinite(v).all() for v in ema_state.values() if isinstance(v, torch.Tensor)):
|
ultralytics/utils/plotting.py
CHANGED
|
@@ -778,10 +778,10 @@ def plot_images(
|
|
|
778
778
|
idx = batch_idx == i
|
|
779
779
|
classes = cls[idx].astype("int")
|
|
780
780
|
labels = confs is None
|
|
781
|
+
conf = confs[idx] if confs is not None else None # check for confidence presence (label vs pred)
|
|
781
782
|
|
|
782
783
|
if len(bboxes):
|
|
783
784
|
boxes = bboxes[idx]
|
|
784
|
-
conf = confs[idx] if confs is not None else None # check for confidence presence (label vs pred)
|
|
785
785
|
if len(boxes):
|
|
786
786
|
if boxes[:, :4].max() <= 1.1: # if normalized with tolerance 0.1
|
|
787
787
|
boxes[..., [0, 2]] *= w # scale to pixels
|
|
@@ -805,7 +805,8 @@ def plot_images(
|
|
|
805
805
|
for c in classes:
|
|
806
806
|
color = colors(c)
|
|
807
807
|
c = names.get(c, c) if names else c
|
|
808
|
-
|
|
808
|
+
label = f"{c}" if labels else f"{c} {conf[0]:.1f}"
|
|
809
|
+
annotator.text([x, y], label, txt_color=color, box_color=(64, 64, 64, 128))
|
|
809
810
|
|
|
810
811
|
# Plot keypoints
|
|
811
812
|
if len(kpts):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.3.
|
|
3
|
+
Version: 8.3.214
|
|
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=x2q5Wx3eOl32ymmr_4p6srz7ebO-O8zFttuerys_OWg,28083
|
|
9
9
|
tests/test_solutions.py,sha256=oaTz5BttPDIeHkQh9oEaw-O73L4iYDP3Lfe82V7DeKM,13416
|
|
10
|
-
ultralytics/__init__.py,sha256=
|
|
10
|
+
ultralytics/__init__.py,sha256=k3IEmJ-I53V1LVgbSIEiVObKPJmj-HpFj6IQ5-YBqrU,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=
|
|
128
|
+
ultralytics/engine/trainer.py,sha256=URv3-BKeipw0Szl1xrnTH5cCIU3_SA10mx89GSA7Vs4,43832
|
|
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
|
|
@@ -170,7 +170,7 @@ ultralytics/models/yolo/model.py,sha256=PH8nXl0ZulgjWMr9M-XAK2TcdaBNXX5AzofIhcKb
|
|
|
170
170
|
ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
|
|
171
171
|
ultralytics/models/yolo/classify/predict.py,sha256=o7pDE8xwjkHUUIIOph7ZVQZyGZyob24dYDQ460v_7R0,4149
|
|
172
172
|
ultralytics/models/yolo/classify/train.py,sha256=juAdpi0wIsnleACkq9Rct9io-Gr1A4gG511VqIUvu8E,9656
|
|
173
|
-
ultralytics/models/yolo/classify/val.py,sha256=
|
|
173
|
+
ultralytics/models/yolo/classify/val.py,sha256=FUTTrvIMlFxdJm8dlrsguKsDvfRdDtGNlIMdJ_-PMtE,10134
|
|
174
174
|
ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
|
|
175
175
|
ultralytics/models/yolo/detect/predict.py,sha256=Vtpqb2gHI7hv9TaBBXsnoScQ8HrSnj0PPOkEu07MwLc,5394
|
|
176
176
|
ultralytics/models/yolo/detect/train.py,sha256=rnmCt0TG5bdySE2TVUsUqwyyF_LTy4dZdlACoM1MhcU,10554
|
|
@@ -255,7 +255,7 @@ ultralytics/utils/metrics.py,sha256=DC-JuakuhHfeCeLvUHb7wj1HPhuFakx00rqXicTka5Y,
|
|
|
255
255
|
ultralytics/utils/nms.py,sha256=AVOmPuUTEJqmq2J6rvjq-nHNxYIyabgzHdc41siyA0w,14161
|
|
256
256
|
ultralytics/utils/ops.py,sha256=PW3fgw1d18CA2ZNQZVJqUy054cJ_9tIcxd1XnA0FPgU,26905
|
|
257
257
|
ultralytics/utils/patches.py,sha256=0-2G4jXCIPnMonlft-cPcjfFcOXQS6ODwUDNUwanfg4,6541
|
|
258
|
-
ultralytics/utils/plotting.py,sha256=
|
|
258
|
+
ultralytics/utils/plotting.py,sha256=jpnOxvfabGPBHCP-G-oVAc1PAURhEx90ygEh0xyAW84,48014
|
|
259
259
|
ultralytics/utils/tal.py,sha256=7KQYNyetfx18CNc_bvNG7BDb44CIU3DEu4qziVVvNAE,20869
|
|
260
260
|
ultralytics/utils/torch_utils.py,sha256=FU3tzaAYZP_FIrusfOxVrfgBN2e7u7QvHY9yM-xB3Jc,40332
|
|
261
261
|
ultralytics/utils/tqdm.py,sha256=ny5RIg2OTkWQ7gdaXfYaoIgR0Xn2_hNGB6tUpO2Unns,16137
|
|
@@ -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.
|
|
279
|
-
ultralytics-8.3.
|
|
280
|
-
ultralytics-8.3.
|
|
281
|
-
ultralytics-8.3.
|
|
282
|
-
ultralytics-8.3.
|
|
283
|
-
ultralytics-8.3.
|
|
278
|
+
ultralytics-8.3.214.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
279
|
+
ultralytics-8.3.214.dist-info/METADATA,sha256=lRopGuUCAjuwmLz00q3Yr7QlnhurHYTxG6DfH0Tafzo,37667
|
|
280
|
+
ultralytics-8.3.214.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
281
|
+
ultralytics-8.3.214.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
282
|
+
ultralytics-8.3.214.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
283
|
+
ultralytics-8.3.214.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|