相关代码:

from ultralytics import YOLO

def evaluate_training():
    # 加载最佳模型
    model = YOLO('runs/train/my_yolo11_model/weights/best.pt')
    
    # 在验证集上评估模型
    results = model.val(
        data='../configs/my_dataset.yaml',  # 注意路径调整
        device='mps'
    )
    
    print("=== 模型评估结果 ===")
    print(f"mAP50: {results.box.map50:.4f}")
    print(f"mAP50-95: {results.box.map:.4f}")
    print(f"精确度 (Precision): {results.box.p[0]:.4f}")  # 修正这里
    print(f"召回率 (Recall): {results.box.r[0]:.4f}")     # 修正这里
    print(f"F1分数: {results.box.f1[0]:.4f}")
    
    # 各类别详细结果
    print("\n=== 各类别性能 ===")
    for i, class_name in enumerate(['cat', 'bird']):  # 根据你的类别修改
        print(f"{class_name}: mAP50={results.box.ap50[i]:.4f}, mAP50-95={results.box.ap[i]:.4f}")
    
    # 性能评估
    print("\n=== 性能分析 ===")
    if results.box.map50 > 0.8:
        print("✅ 优秀!模型性能非常好!")
        print("💡 建议:训练已经充分,可以直接使用模型")
    elif results.box.map50 > 0.6:
        print("✅ 良好!模型性能不错")
        print("💡 建议:可以继续训练或直接使用")
    elif results.box.map50 > 0.4:
        print("⚠️ 一般!模型有改进空间")
        print("💡 建议:继续训练或调整参数")
    else:
        print("❌ 较差!需要优化")
        print("💡 建议:检查数据质量或重新训练")
    
    return results

if __name__ == '__main__':
    evaluate_training()
 

结果是好是坏呢?

/Users/hogworts/miniconda3/envs/yolo11/bin/python /Users/hogworts/PycharmProjects/my-yolo-proj/scripts/evaluate_model.py 
Ultralytics 8.3.217 🚀 Python-3.9.24 torch-2.8.0 MPS (Apple M2)
YOLO11n summary (fused): 100 layers, 2,582,737 parameters, 0 gradients, 6.3 GFLOPs
val: Fast image access ✅ (ping: 0.0±0.0 ms, read: 273.1±174.0 MB/s, size: 75.0 KB)
val: Scanning /Users/hogworts/PycharmProjects/my-yolo-proj/datasets/my_dataset/labels/val.cache... 4 images, 0 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 4/4 124.3Kit/s 0.0s
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 1/1 0.9it/s 1.1s
                   all          4          4     0.0133          1      0.802      0.722
                   cat          3          3     0.0244          1      0.608      0.548
                  bird          1          1    0.00216          1      0.995      0.895
Speed: 1.8ms preprocess, 193.0ms inference, 0.0ms loss, 22.4ms postprocess per image
Results saved to /Users/hogworts/PycharmProjects/my-yolo-proj/scripts/runs/detect/val2
=== 模型评估结果 ===
mAP50: 0.8017
mAP50-95: 0.7219
精确度 (Precision): 0.0244
召回率 (Recall): 1.0000
F1分数: 0.0476

=== 各类别性能 ===
cat: mAP50=0.6083, mAP50-95=0.5483
bird: mAP50=0.9950, mAP50-95=0.8955

=== 性能分析 ===
✅ 优秀!模型性能非常好!
💡 建议:训练已经充分,可以直接使用模型

进程已结束,退出代码为 0

性能是不错,但是可用性很差,下面来根据这几个指标得分分析一下。

模型评估

好的模型(理想情况):

精确度 > 0.7 ✅
召回率 > 0.8 ✅  
F1分数 > 0.75 ✅
mAP50 > 0.8 ✅
 

你的模型:

精确度 = 0.0244 ❌(严重问题)
召回率 = 1.0000 ✅(优秀)
F1分数 = 0.0476 ❌(严重问题)
mAP50 = 0.8017 ⚠️(表面好看)
 

  1. 精确度 (Precision) = 0.0244 ❌
    通俗理解:模型说"我找到了目标",这个说法有多可靠?

情况:模型每说100次"我找到了目标",只有2.44次是真的

比喻:像是一个保安,看到100个人就说"这些都是小偷",结果只有2个是真的小偷

结论:非常差,模型产生了大量误报

  1. 召回率 (Recall) = 1.0000 ✅
    通俗理解:真实的目标中,模型找到了多少?

情况:所有真实目标都被找到了,一个不漏

比喻:保安抓住了所有真正的小偷,但把很多好人也当成了小偷

结论:完美,但代价是很多误检

  1. F1分数 = 0.0476 ❌
    通俗理解:精确度和召回率的综合评分

范围:0-1,越接近1越好

情况:0.0476非常低

结论:很差,整体检测质量不好

  1. mAP50 = 0.8017 ⚠️
    通俗理解:在宽松标准下的整体检测准确度

情况:0.80看起来不错

但要注意:这个指标可能被高召回率拉高,掩盖了精确度问题

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐