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にクローズされました