You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

YOLOv8微调后预测结果仍与预训练模型一致的问题求助

YOLOv8微调后预测结果仍与预训练模型一致的问题求助

嗨,我来帮你排查这个问题!这种情况大概率是你的预测代码没正确加载到自己训练好的权重,或是训练过程中存在细节疏漏,导致模型根本没学到自定义数据的特征。咱们一步步来梳理:

  • 先确认权重文件是否正确
    你代码里加载的是best.pt,但要注意:这个文件是不是你自己训练完成后生成的权重?默认情况下,YOLOv8训练后的权重会存在runs/detect/train/weights/目录下,很多人会不小心用了根目录里的预训练best.pt
    解决办法:把路径改成训练后权重的实际位置,比如:

    model = YOLO("runs/detect/train/weights/best.pt")
    
  • 检查训练过程是否真的生效

    • 去看看训练生成的日志文件(runs/detect/train/train.log)或者结果表格(results.csv),观察自定义类的损失值有没有下降,验证集的mAP指标有没有提升。如果数值一直没变化,可能训练时根本没用到你的自定义数据。
    • 再核对data.yaml:确保里面的trainval路径是正确的,names列表里的类名和你数据集的标注完全对应,而且训练时确实指定了这个yaml文件,比如训练命令是:
      yolo detect train data=data.yaml model=yolov8n.pt epochs=50
      
  • 验证权重的类是否符合预期
    你可以加一行代码打印模型的类名,看看是不是自己定义的类:

    model = YOLO("best.pt")
    print(model.names)
    

    如果输出的还是YOLOv8默认的80类(比如person、car这类),那百分百是加载了预训练权重,不是你自己训练的。

  • 试试调整预测参数
    有时候即使加载了正确权重,过高的置信度阈值会把自定义类的检测结果过滤掉,你可以降低阈值试试:

    results = model.predict("output_IMG_7671.MOV", show=True, conf=0.25)
    

另外提个小建议:训练完成后,最好把自己的best.pt复制到单独的文件夹存起来,避免和预训练权重混在一起,下次就不会搞错啦。

备注:内容来源于stack exchange,提问作者user21569483

火山引擎 最新活动