


在训练YOLOv8时出现以下报错,请问哪位指导是什么原因吗?这是我遇到的问题,恳请指正,以下是我的代码:
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
model.train(data='yoloBvn.yaml', workers=0, epochs=10, batch =16)



model = YOLO('yolov8n.pt')
model.train(data='yoloBvn.yaml', workers=0, epochs=10, batch =16)
关注让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。
如果答案让您满意,请采纳、点赞、关注,非常感谢!
.
每日一句正能量,让它带给您好心情:你值得拥有所有美好的东西,前提是你愿意为之努力。
.
根据您提供的错误信息和代码,问题出现在验证阶段计算评估指标时,具体是在 metrics.py 文件的第843行。错误信息显示:
TypeError: 'in <string>' requires string as left operand, not numpy.float32
这个错误通常是由于类别名称处理不当导致的。在计算AP(Average Precision)时,代码期望类别名称是字符串类型,但实际传入的是 numpy.float32 类型。
请检查您的 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'
# ... 其他类别
如果您的 names 字段包含数字或其他非字符串值,请将其转换为字符串:
# 错误的写法
names: [0, 1, 2, 3, 4]
# 正确的写法
names: ['0', '1', '2', '3', '4']
# 或者使用有意义的类别名称
names: ['person', 'car', 'bicycle', 'dog', 'cat']
确保您的标签文件(通常是 .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
如果急需解决,可以尝试修改 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}
注意: 这只是临时解决方案,建议优先修复数据集配置。
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8n.pt')
# 训练模型
model.train(
data='yoloBvn.yaml', # 确保配置文件正确
workers=0,
epochs=10,
batch=16,
imgsz=640
)
yoloBvn.yaml 文件格式如果问题仍然存在,请分享您的 yoloBvn.yaml 文件内容,以便进一步诊断问题。