Closed4
[Python / YOLOv8] なんだこのエラーは(オリジナルモデルに追加学習させようとしたら怒られた)
Trainモード、普通に走らせる分にはエラーでないんやけど、
そのあと、生み出したlast.ptを使って再学習させようとしたら、4エポックくらいで下記エラーになる
コード
※1回目の学習からmodelをかえただけ
from ultralytics import YOLO
# Load a model
model = YOLO('myyolov8.yaml') # build a new model from YAML
model = YOLO('./runs/detect/train3/weights/last.pt') # load a pretrained model (recommended for training)
# Train the model
results = model.train(data='mycoco.yaml', epochs=100)
results = model('test.jpg')
エラー
File "C:\Users\~略~\venv\main.py", line 11, in <module>
results = model.train(data='mycoco.yaml', epochs=100)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\~略~\venv\Lib\site-packages\ultralytics\engine\model.py", line 654, in train
self.trainer.train()
File "C:\Users\~略~\venv\Lib\site-packages\ultralytics\engine\trainer.py", line 208, in train
self._do_train(world_size)
File "C:\Users\~略~\venv\Lib\site-packages\ultralytics\engine\trainer.py", line 424, in _do_train
self.metrics, self.fitness = self.validate()
^^^^^^^^^^^^^^^
File "C:\Users\~略~\venv\Lib\site-packages\ultralytics\engine\trainer.py", line 546, in validate
metrics = self.validator(self)
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\~略~\venv\Lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\~略~\venv\Lib\site-packages\ultralytics\engine\validator.py", line 195, in __call__
stats = self.get_stats()
^^^^^^^^^^^^^^^^
File "C:\Users\~略~\venv\Lib\site-packages\ultralytics\models\yolo\detect\val.py", line 168, in get_stats
stats = {k: torch.cat(v, 0).cpu().numpy() for k, v in self.stats.items()} # to numpy
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\~略~\venv\Lib\site-packages\ultralytics\models\yolo\detect\val.py", line 168, in <dictcomp>
stats = {k: torch.cat(v, 0).cpu().numpy() for k, v in self.stats.items()} # to numpy
^^^^^^^^^^^^^^^
RuntimeError: torch.cat(): expected a non-empty list of Tensors
追加学習について 公式
サンプル
from ultralytics import YOLO
# Load a model
model = YOLO('path/to/last.pt') # load a partially trained model
# Resume training
results = model.train(resume=True)
→これはあくまで、学習が途中でストップした場合
指定したエポックの数の途中で4んだ時とかに有効
全部完了したあとに追加で学習した場合はこの3行のコードではできない
解決した
変えた部分
before
- 元々学習させた画像フォルダ:images
- 追加で学習させる画像フォルダ:images2
- yamlで設定した画像フォルダ:images2
after
- 元々学習させた画像フォルダ:images_old
- 追加で学習させる画像フォルダ:images
- yamlで設定した画像フォルダ:images
にしたら通った
画像フォルダのパスはずっと同じじゃないといけないとかあるのかな?
このスクラップは2024/03/18にクローズされました