3. YOLOv5模型评估与mAP计算
任务目标
使用验证集对已训练完成的YOLOv5模型进行性能评估,计算mAP@0.5、mAP@0.5:0.95、精确率(Precision)和召回率(Recall),并生成混淆矩阵以分析各类别检测性能。
环境与依赖
基于YOLOv5官方仓库(v6.0+),需安装PyTorch≥1.8及仓库requirements.txt所列依赖。评估脚本使用官方val.py,无需额外安装包。
实现与运行
YOLOv5官方仓库已内置完整评估实现,核心入口为val.py。以下为最小评估命令及关键参数说明:
# 在YOLOv5仓库根目录执行
python val.py \
--weights runs/train/exp/weights/best.pt \ # 训练得到的最佳权重
--data dataset.yaml \ # 数据集配置(含验证集路径与类别名)
--task val \ # 使用验证集
--conf-thres 0.001 \ # 置信度阈值(mAP计算需设为0.001)
--iou-thres 0.6 \ # NMS IoU阈值
--batch-size 32 \
--device 0 # GPU编号,CPU设为cpu
若需同时输出混淆矩阵,在val.py中默认已包含混淆矩阵生成逻辑(基于预测结果与GT匹配),运行结束后会在runs/val/exp/目录生成confusion_matrix.png。若需自定义数据集,请确保dataset.yaml中val字段指向验证集图片路径,names列表与训练时一致。
核心评估逻辑说明
评估流程的核心计算由val.py中的run()函数完成,关键步骤包括:对每张验证图片执行推理,将预测框与GT框通过IoU匹配(默认IoU≥0.5视为正确),统计TP/FP/FN后计算各类别及整体的Precision、Recall,并通过改变置信度阈值绘制P-R曲线计算AP,最终取所有类别AP均值得到mAP。混淆矩阵则统计每个GT类别被预测为各类别(含背景)的样本数。
验证方法与判定标准
运行结束后,终端会打印类似以下汇总指标(数值取决于模型与数据集):
Class Images Instances P R mAP@.5 mAP@.5:.95
all 1000 8000 0.852 0.781 0.834 0.612
判定评估成功的标准:
- 终端输出包含
all行的各类指标,且数值在合理范围(P/R/mAP均在0~1之间); runs/val/exp/目录下生成confusion_matrix.png,图中对角线颜色明显深于非对角线,表示多数样本被正确分类;- 若验证集包含K个类别,混淆矩阵尺寸为(K+1)×(K+1)(最后一行/列为背景类)。
常见问题
- 显存不足:降低
--batch-size至8或4; - 指标异常低:检查
--conf-thres是否为0.001(默认0.25会显著降低召回率);确认dataset.yaml中验证集路径正确且与训练时数据分布一致; - 混淆矩阵全黑:若验证集图片尺寸过大导致绘图拥挤,可设置
--save-conf保存置信度并检查--project输出目录权限。