YOLOv3评估recall、precision等指标

本文介绍如何使用YOLOv3模型在VOC格式数据集上进行目标检测,并详细说明了生成检测结果txt文本的过程,以及如何利用voc_eval.py计算recall、precision和AP值,为模型性能评估提供全面指导。
部署运行你感兴趣的模型镜像
我使用的是voc格式数据集,训练方法详见上篇博客:YOLOv3训练自己的VOC数据集
一、生成检测结果txt文本
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg xx.weight
  • 如果没加-out选项则默认在results目录下生成txt文件,例如:comp4_det_test_car.txt
  • 将生成的txt文件更名为 类别名.txt,例如car.txt
二、借助voc_eval.py计算recall、precision等
  • Faster RCNN的实现中即包含voc_eval.py,将其复制到当前项目目录下
  • 新建compute.py
from voc_eval import voc_eval

rec,prec,ap = voc_eval('…/results/{}.txt','…/VOCdevkit/VOC2007/Annotations/{}.xml','…/VOCdevkit/VOC2007/ImageSets/Main/test.txt','car','.')

print(……)
  • 注意随手删除运行目录下生成的annots.pkl,以防下一次运行出现问题
  • 另外原项目examples/detector.c中包含validate_detector_recall函数,也可借助其计算recall

参考:
https://blog.youkuaiyun.com/cgt19910923/article/details/80524173
https://blog.youkuaiyun.com/mieleizhi0522/article/details/79989754
https://blog.youkuaiyun.com/northeastsqure/article/details/54848665

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

YOLOv6 的训练或评估过程中,如果发现没有输出 PrecisionRecall 和 F1 等评估指标,通常是因为默认的配置或日志输出设置未包含这些指标的展示。与 YOLOv5 和 YOLOv8 相比,YOLOv6 的官方实现对输出指标的处理方式有所不同,尤其是在早期版本中,这些指标可能不会直接打印在训练日志中。 ### 原因分析 1. **默认日志输出内容限制** YOLOv6 的训练脚本默认输出的指标主要集中在损失函数(如 `box_loss`, `cls_loss`, `obj_loss`)和验证集上的 `mAP`、`IoU` 等性能指标,而 PrecisionRecall 和 F1 并未包含在标准输出中[^1]。 2. **评估模块未主动启用相关计算** 在评估阶段,虽然 PrecisionRecall 和 F1 是通过混淆矩阵等中间结果计算得出的,但 YOLOv6 的评估函数可能没有在最终结果中主动返回这些指标[^2]。 3. **版本差异与配置问题** 不同版本的 YOLOv6(如官方仓库的不同提交)在输出指标上可能存在差异,某些版本可能完全移除了对这些指标的计算逻辑。 --- ### 解决方法 #### 方法一:修改训练/评估脚本输出指标 在 `train.py` 或 `val.py` 文件中,找到与输出指标相关的代码段,通常是 `LOGGER.info()` 所在的部分。可以通过修改日志输出的内容,将 PrecisionRecall 和 F1 添加进去。 例如,在 `val.py` 中找到如下代码段: ```python LOGGER.info(f"Epoch: {epoch} | mAP@0.5: {mAP50:.4f} | mAP@0.5:0.95: {mAP:.4f}") ``` 可以扩展为: ```python LOGGER.info(f"Epoch: {epoch} | mAP@0.5: {mAP50:.4f} | mAP@0.5:0.95: {mAP:.4f} | Precision: {precision:.4f} | Recall: {recall:.4f} | F1: {f1:.4f}") ``` 前提是 `precision`, `recall`, `f1` 变量已经在评估流程中被计算并返回。 #### 方法二:手动计算 PrecisionRecall 和 F1 在评估过程中,YOLOv6 通常会返回 TP(True Positives)、FP(False Positives)、FN(False Negatives)等中间统计量。基于这些值,可以手动计算 PrecisionRecall 和 F1: ```python precision = tp / (tp + fp + 1e-8) recall = tp / (tp + fn + 1e-8) f1 = 2 * precision * recall / (precision + recall + 1e-8) ``` 将上述代码插入到评估流程中,并在日志中输出即可。 #### 方法三:使用混淆矩阵生成完整报告 借助 `sklearn.metrics` 中的 `classification_report` 函数,可以基于预测结果生成完整的 PrecisionRecall 和 F1 指标: ```python from sklearn.metrics import classification_report # 假设 y_true 是真实标签,y_pred 是模型预测标签 report = classification_report(y_true, y_pred) print(report) ``` 需要将预测结果整理为标签格式,这在目标检测任务中可能需要额外处理。 --- ### 补充建议 - 如果使用的是官方 YOLOv6 仓库,建议查看 `metrics.py` 或 `utils.py` 文件,确认是否已有计算 PrecisionRecall 的函数。 - 在训练过程中,也可以将这些指标写入 TensorBoard 日志,以便可视化跟踪其变化趋势。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值