训练YOLOv8时出现IndexError的问题排查与求助
解决YOLOv8训练时的IndexError问题
核心错误原因
你的data.yaml文件存在明显矛盾:nc: 0表示类别数量为0,但names: ['particle']定义了1个类别,两者不匹配是触发索引越界错误的直接原因。YOLOv8会根据nc值初始化模型的类别输出维度,当nc=0时,模型无法处理标注中的类别索引(即使是0),从而抛出IndexError。
步骤1:修正data.yaml配置
将nc值改为与names列表长度一致的数值(这里是1),同时适配Windows系统的路径格式:
path: C:\Users\pksha\yolo # 替换为你Windows系统下的实际项目路径,或用相对路径"."表示当前目录 train: train/images val: val/images nc: 1 # 必须和names的类别数量一致 names: ['particle']
步骤2:检查数据集结构与标注
确保你的数据集符合YOLO格式要求:
- 项目目录下需包含
train/images、train/labels、val/images、val/labels四个文件夹 - 每张图像(如
img1.jpg)对应同名的标注文件(img1.txt),标注格式为:类别索引 x_center y_center width height(所有坐标值需做归一化处理,类别索引从0开始,这里只能是0)
步骤3:调整训练代码(指定图像尺寸)
在训练时显式指定输入图像尺寸为416*416,匹配你的需求:
from ultralytics import YOLO # 加载模型(从头训练用yaml,微调预训练模型用.pt) model = YOLO("yolov8l.yaml") # 启动训练,指定图像尺寸 results = model.train(data="data.yaml", epochs=1, imgsz=416)
内容的提问来源于stack exchange,提问作者Puneet Sharma
相关产品推荐
相关产品推荐

