如何为Ultralytics YOLOv8模型加载.npy文件进行训练?
问题描述
目标:使用YOLOv8训练经spectral库预处理后保存为.npy格式的高光谱图像
- 数据集已按Ultralytics文档要求的格式存储,使用的
config.yaml配置如下:
path: F:\Sem-VI\Code\dataset # dataset root dir train: train # train images (relative to 'path') 118287 images val: val # val images (relative to 'path') 118287 images # Classes names: 0: somethin
- 训练时触发错误:
FileNotFoundError: Dataset 'config.yaml' images not found ⚠️, missing path 'F:\Sem-VI\Code\dataset\val' Note dataset download directory is 'F:\yolo-ultralytics\datasets'. You can update this in 'C:\Users\Tests\AppData\Roaming\Ultralytics\settings.yaml'
- 已尝试方案:使用相对路径/绝对路径配置,均无效
核心原因
YOLOv8默认仅支持标准图像格式(JPG/PNG等),无法直接识别.npy文件。报错提示"missing path"实际是遍历指定目录时找不到符合默认格式的文件,并非路径本身不存在。
解决方案
1. 自定义.npy数据集加载器
继承YOLOv8的YOLODataset类,重写图像加载逻辑以支持.npy格式:
from ultralytics.data.dataset import YOLODataset import numpy as np class NPYHyperspectralDataset(YOLODataset): def load_image(self, i, rect_mode=False): # 加载.npy高光谱文件 img_path = self.im_files[i] img = np.load(img_path) # 调整维度至YOLO要求的HWC格式(根据你的数据存储格式修改) # 示例:若原始数据为CHW(通道在前),转为HWC if img.ndim == 3 and img.shape[0] not in [1,3]: # 高光谱通道数通常远大于3 img = np.transpose(img, (1, 2, 0)) # 归一化(根据你的数据范围调整,示例为0-255) img = img.astype(np.float32) / np.max(img) * 255 return img, img_path
2. 修正配置文件路径格式
Windows下路径需注意转义,推荐使用正斜杠避免转义问题:
path: F:/Sem-VI/Code/dataset # 替换为你的数据集根目录绝对路径 train: train # 对应根目录下的train子目录 val: val # 对应根目录下的val子目录 # Classes names: 0: somethin
同时确认F:/Sem-VI/Code/dataset/val目录下确实存在.npy文件,且数量与标注文件(如.txt)一一对应。
3. 训练时指定自定义数据集
在训练代码中导入自定义数据集类,并传递给train方法:
from ultralytics import YOLO from your_script import NPYHyperspectralDataset # 替换为自定义类所在的脚本文件名 # 加载YOLOv8模型(可使用预训练模型或自定义yaml) model = YOLO('yolov8n.pt') # 启动训练 model.train( data='config.yaml', dataset=NPYHyperspectralDataset, epochs=50, imgsz=640, # 根据你的图像实际尺寸调整 batch=16 )
额外排查点
- 检查标注文件的路径是否与
.npy文件完全对应,确保每个.npy都有对应的标注 - 若必须使用命令行训练,需修改Ultralytics的数据集注册逻辑,或直接使用代码训练更灵活
内容的提问来源于stack exchange,提问作者T090 Subhashish Nabajja
相关产品推荐
相关产品推荐

