在运行Yolov8时报错RuntimeError: torch.cat(): expected a non-empty list of Tensors的解决方法

这个错误还算是比较冷门当是又不是太容易发现,在报错出来的时候容易被最后面的提醒误解,我的报错提示如下:

RuntimeError                              Traceback (most recent call last)
Input In [11], in <module>
      6 model = YOLO('./yolov8.yaml').load('./yolov8n.pt')  # build from YAML and transfer weights
      8 # Train the model
----> 9 results = model.train(data='tianchi.yaml', epochs=10, device=0)

File /文件地址/ultralytics-main/ultralytics/engine/model.py:655, in Model.train(self, trainer, **kwargs)
    652             pass
    654 self.trainer.hub_session = self.session  # attach optional HUB session
--> 655 self.trainer.train()
    656 # Update model and cfg after training
    657 if RANK in (-1, 0):

File /文件地址/ultralytics-main/ultralytics/engine/trainer.py:213, in BaseTrainer.train(self)
    210         ddp_cleanup(self, str(file))
    212 else:
--> 213     self._do_train(world_size)

File /文件地址/ultralytics-main/ultralytics/engine/trainer.py:429, in BaseTrainer._do_train(self, world_size)
    427 # Validation
    428 if self.args.val or final_epoch or self.stopper.possible_stop or self.stop:
--> 429     self.metrics, self.fitness = self.validate()
    430 self.save_metrics(metrics={**self.label_loss_items(self.tloss), **self.metrics, **self.lr})
    431 self.stop |= self.stopper(epoch + 1, self.fitness) or final_epoch

File /文件地址/ultralytics-main/ultralytics/engine/trainer.py:551, in BaseTrainer.validate(self)
    545 def validate(self):
    546     """
    547     Runs validation on test set using self.validator.
    548 
    549     The returned dict is expected to contain "fitness" key.
    550     """
--> 551     metrics = self.validator(self)
    552     fitness = metrics.pop("fitness", -self.loss.detach().cpu().numpy())  # use loss as fitness measure if not found
    553     if not self.best_fitness or self.best_fitness < fitness:

File /opt/conda/lib/python3.9/site-packages/torch/utils/_contextlib.py:115, in context_decorator.<locals>.decorate_context(*args, **kwargs)
    112 @functools.wraps(func)
    113 def decorate_context(*args, **kwargs):
    114     with ctx_factory():
--> 115         return func(*args, **kwargs)

File /文件地址/ultralytics-main/ultralytics/engine/validator.py:195, in BaseValidator.__call__(self, trainer, model)
    192         self.plot_predictions(batch, preds, batch_i)
    194     self.run_callbacks("on_val_batch_end")
--> 195 stats = self.get_stats()
    196 self.check_stats(stats)
    197 self.speed = dict(zip(self.speed.keys(), (x.t / len(self.dataloader.dataset) * 1e3 for x in dt)))

File /文件地址/ultralytics-main/ultralytics/models/yolo/detect/val.py:168, in DetectionValidator.get_stats(self)
    166 def get_stats(self):
    167     """Returns metrics statistics and results dictionary."""
--> 168     stats = {k: torch.cat(v, 0).cpu().numpy() for k, v in self.stats.items()}  # to numpy
    169     if len(stats) and stats["tp"].any():
    170         self.metrics.process(**stats)

File /文件地址/ultralytics-main/ultralytics/models/yolo/detect/val.py:168, in <dictcomp>(.0)
    166 def get_stats(self):
    167     """Returns metrics statistics and results dictionary."""
--> 168     stats = {k: torch.cat(v, 0).cpu().numpy() for k, v in self.stats.items()}  # to numpy
    169     if len(stats) and stats["tp"].any():
    170         self.metrics.process(**stats)

RuntimeError: torch.cat(): expected a non-empty list of Tensors

单看这些代码还是不太容易发现问题的,只可能把你往torch.cat()这个方向引,但如果眼尖会发现在报错之前,有这么两个不起眼的警告(还不是报错,只是警告)

train: Scanning /文件位置/ultralytics-main/datasets/tianchi/image/mchar_train.cache... 0 images, 30000 backgrounds, 0 corrupt: 100%|██████████| 30000/30000 [00:00<?, ?it/s]
WARNING ⚠️ No labels found in /文件位置/ultralytics-main/datasets/tianchi/image/mchar_train.cache, training may not work correctly. See https://docs.ultralytics.com/datasets/detect  for dataset formatting guidance.

val: Scanning /文件位置/ultralytics-main/datasets/tianchi/image/mchar_val.cache... 0 images, 10000 backgrounds, 0 corrupt: 100%|██████████| 10000/10000 [00:00<?, ?it/s]
WARNING ⚠️ No labels found in /文件位置/ultralytics-main/datasets/tianchi/image/mchar_val.cache, training may not work correctly. See https://docs.ultralytics.com/datasets/detect  for dataset formatting guidance.

意思是有0张图片,30000张背景,下面是对没有标签的警告。

到这个时候就要思考文件位置会不会有什么问题(因为我的yolov8是已经跑通了的),回去一看,果不其然,对于文件的命名出错了。

正常的命名方法是这样的:images放照片;labels放标签,而我两个文件夹都忘打最后的 ‘s’

010da0070c8649f887086387bc066364.png

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值