YOLO分类模型训练报错:期望路径对象而非NoneType
问题
尝试用包含两类JPG图片的自定义数据集训练YOLO分类模型,启动训练时触发报错:
Traceback (most recent call last): File "C:\pythonProject\main.py", line 5, in <module> model.train(data='./training_dataset', epochs=1, imgsz=64) File "C:\pythonProject\venv\lib\site-packages\ultralytics\engine\model.py", line 341, in train self.trainer.train() File "C:\pythonProject\venv\lib\site-packages\ultralytics\engine\trainer.py", line 192, in train self._do_train(world_size) File "C:\pythonProject\venv\lib\site-packages\ultralytics\engine\trainer.py", line 288, in _do_train self._setup_train(world_size) File "C:\pythonProject\venv\lib\site-packages\ultralytics\engine\trainer.py", line 255, in _setup_train self.test_loader = self.get_dataloader(self.testset, batch_size=batch_size * 2, rank=-1, mode='val') File "C:\pythonProject\venv\lib\site-packages\ultralytics\models\yolo\classify\train.py", line 88, in get_dataloader dataset = self.build_dataset(dataset_path, mode) File "C:\pythonProject\venv\lib\site-packages\ultralytics\models\yolo\classify\train.py", line 83, in build_dataset return ClassificationDataset(root=img_path, args=self.args, augment=mode == 'train', prefix=mode) File "C:\pythonProject\venv\lib\site-packages\ultralytics\data\dataset.py", line 220, in __init__ super().__init__(root=root) File "C:\pythonProject\venv\lib\site-packages\torchvision\datasets\folder.py", line 309, in __init__ super().__init__( File "C:\pythonProject\venv\lib\site-packages\torchvision\datasets\folder.py", line 145, in __init__ samples = self.make_dataset(self.root, class_to_idx, extensions, is_valid_file) File "C:\pythonProject\venv\lib\site-packages\torchvision\datasets\folder.py", line 189, in make_dataset return make_dataset(directory, class_to_idx, extensions=extensions, is_valid_file=is_valid_file) File "C:\pythonProject\venv\lib\site-packages\torchvision\datasets\folder.py", line 61, in make_dataset directory = os.path.expanduser(directory) File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\ntpath.py", line 293, in expanduser path = os.fspath(path) TypeError: expected str, bytes or os.PathLike object, not NoneType
更换两个不同数据集后问题仍存在,完整代码如下:
from ultralytics import YOLO model = YOLO('yolov8n-cls.pt') model.train(data='./training_dataset', epochs=1, imgsz=64)
数据集结构为:training_dataset/train/cats、training_dataset/train/dogs
解决方案
- 补全数据集结构:YOLO分类训练默认需要训练集和验证集,在
training_dataset目录下添加val文件夹,内部创建与train一致的cats和dogs子目录,并放入对应类别的验证图片。最终结构应为:training_dataset/ ├─ train/ │ ├─ cats/ │ └─ dogs/ └─ val/ ├─ cats/ └─ dogs/ - 临时跳过验证集(不推荐,无法评估模型泛化能力):修改训练代码,添加
val=False参数,代码如下:from ultralytics import YOLO model = YOLO('yolov8n-cls.pt') model.train(data='./training_dataset', epochs=1, imgsz=64, val=False)
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

