cruel summer?? 2025-10-25 16:51 采纳率: 50%
浏览 8
已结题

在训练YOLOv8时出现以下报错,请问哪位指导是什么原因吗?

img

img

img


在训练YOLOv8时出现以下报错,请问哪位指导是什么原因吗?这是我遇到的问题,恳请指正,以下是我的代码:
from ultralytics import YOLO

model = YOLO('yolov8n.pt')

model.train(data='yoloBvn.yaml', workers=0, epochs=10, batch =16)

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-10-25 17:06
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .
    每日一句正能量,让它带给您好心情:你值得拥有所有美好的东西,前提是你愿意为之努力。
    .

    根据您提供的错误信息和代码,问题出现在验证阶段计算评估指标时,具体是在 metrics.py 文件的第843行。错误信息显示:

    TypeError: 'in <string>' requires string as left operand, not numpy.float32
    

    问题分析

    这个错误通常是由于类别名称处理不当导致的。在计算AP(Average Precision)时,代码期望类别名称是字符串类型,但实际传入的是 numpy.float32 类型。

    解决方案

    1. 检查数据集配置文件

    请检查您的 yoloBvn.yaml 文件,确保 names 字段中的类别名称都是字符串类型:

    # yoloBvn.yaml 示例
    path: /path/to/your/dataset
    train: images/train
    val: images/val
    test: images/test
    
    
    nc: 45  # 类别数量
    names: 
      0: 'class_name_1'  # 确保使用字符串
      1: 'class_name_2'
      2: 'class_name_3'
      # ... 其他类别
    

    2. 修复类别名称

    如果您的 names 字段包含数字或其他非字符串值,请将其转换为字符串:

    # 错误的写法
    names: [0, 1, 2, 3, 4]
    
    
    # 正确的写法  
    names: ['0', '1', '2', '3', '4']
    # 或者使用有意义的类别名称
    names: ['person', 'car', 'bicycle', 'dog', 'cat']
    

    3. 检查标签文件

    确保您的标签文件(通常是 .txt 文件)中的类别索引是整数,而不是浮点数:

    # 正确的标签格式
    0 0.5 0.5 0.2 0.3
    1 0.3 0.4 0.1 0.2
    
    
    # 错误的标签格式(类别索引为浮点数)
    0.0 0.5 0.5 0.2 0.3
    1.0 0.3 0.4 0.1 0.2
    

    4. 临时解决方案

    如果急需解决,可以尝试修改 metrics.py 文件第843行附近:

    # 在 metrics.py 中找到问题行(大约第843行)
    # 原始代码可能类似:
    names = {i: names[k] for i, k in enumerate(unique_classes) if k in names}
    
    
    # 修改为:
    names = {i: names[int(k)] for i, k in enumerate(unique_classes) if int(k) in names}
    

    注意: 这只是临时解决方案,建议优先修复数据集配置。

    5. 完整的工作示例

    from ultralytics import YOLO
    
    
    # 加载预训练模型
    model = YOLO('yolov8n.pt')
    
    
    # 训练模型
    model.train(
        data='yoloBvn.yaml',  # 确保配置文件正确
        workers=0, 
        epochs=10, 
        batch=16,
        imgsz=640
    )
    

    建议

    1. 验证数据集配置:仔细检查 yoloBvn.yaml 文件格式
    2. 检查标签文件:确保所有类别索引都是整数
    3. 更新Ultralytics:使用最新版本的ultralytics包
    4. 检查Python环境:确保所有依赖包版本兼容

    如果问题仍然存在,请分享您的 yoloBvn.yaml 文件内容,以便进一步诊断问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月25日