YOLO系列训练生成的exp进行处理找出mAP值

YOLOv8或者YOLOv10训练生成的exp文件进行遍历,找出results.csv文件中metrics/mAP50(B)、metrics/mAP50-95(B)值和args.yaml中的mode文件,将他们保存到一个excel文件中。

YOLO训练train.py代码如下:
在这里插入图片描述
模型训练好后生成exp文件如下:
在这里插入图片描述
生成excel文件完整代码如下:

import os
import pandas as pd
import yaml

def find_max_map50_and_model(root_dir):
    results = []

    for subdir, _, _ in os.walk(root_dir):
        # 获取每个子文件夹中的所有文件夹
        subfolders = [f.path for f in os.scandir(subdir) if f.is_dir()]

        for folder in subfolders:
            # 检查每个文件夹中是否包含results.csv和args.yaml文件
            results_csv_path = os.path.join(folder, 'results.csv')
            args_yaml_path = os.path.join(folder, 'args.yaml')

            if os.path.isfile(results_csv_path) and os.path.isfile(args_yaml_path):
                # 读取 results.csv 文件
                df = pd.read_csv(results_csv_path)
                print(df.columns)
                if '       metrics/mAP50(B)' in df.columns and '    metrics/mAP50-95(B)' in df.columns:
                    max_value = df['       metrics/mAP50(B)'].max()
                    max_row = df[df['       metrics/mAP50(B)'] == max_value]
                    max_map50_95_value = max_row['    metrics/mAP50-95(B)'].values[0]
                    precision = max_row['   metrics/precision(B)'].values[0]
                    recall = max_row['      metrics/recall(B)'].values[0]

                    # 读取 args.yaml 文件
                    with open(args_yaml_path, 'r') as f:
                        args = yaml.safe_load(f)
                        model_info = args.get('model', 'N/A')
                        model_info = model_info.split('/')[-1].split(".")[0]

                    results.append({
                        'folder': folder,
                        'metrics/mAP50(B)': max_value,
                        'metrics/mAP50-95(B)': max_map50_95_value,
                        'Model': model_info,
                        "recall":recall,
                        "precision":precision
                    })

    return results
output_file = r'results_summary.xlsx'  #生成xlsx文件
root_directory = r'runs/train'      #训练保存的exp问你就
results = find_max_map50_and_model(root_directory)

# 将结果转换为DataFrame
df_results = pd.DataFrame(results, columns=['Model','precision','recall','parameters','GFLOPS' ,'metrics/mAP50(B)', 'metrics/mAP50-95(B)', 'folder'])
# df_results = pd.DataFrame(results)

# 将DataFrame保存为Excel文件
df_results.to_excel(output_file, index=False)
print(f"Results have been saved to {output_file}")

# 读取保存的Excel文件
df_saved = pd.read_excel(output_file)

# 找到metrics/mAP50(B)的最大值
max_map50_value = df_saved['metrics/mAP50(B)'].max()
max_row = df_saved[df_saved['metrics/mAP50(B)'] == max_map50_value]

print("Row with the maximum metrics/mAP50(B):")
print(max_map50_value)

主要是改动下面这两个:

output_file = r'results_summary.xlsx'  #生成xlsx文件
root_directory = r'runs/train'      #训练保存的exp问你就

在这里插入图片描述

### 查看与解释YOLO训练后的mAP结果 #### 定义与重要性 mAP(mean Average Precision),即平均精度均,在目标检测领域是一个重要的评估标准。对于YOLO这样的单阶段检测器来说,mAP用于综合评价模型性能的好坏[^3]。 #### 计算过程 为了获得mAP,先要计算各个类别的AP(Average Precision)。这涉及到对比预测框和真实框之间的重叠程度(IOU, Intersection Over Union),并设定一定的阈来判断正负样本。当完成所有测试集图片的目标检测之后,会针对每一个类别统计TP(True Positive)、FP(False Positive)以及FN(False Negative),进而构建PR曲线(Precision-Recall Curve),最后通过积分或者近似方法求得该类别的AP。而mAP则是所有类别AP得简单平均。 #### 实际操作指南 实际应用中,可以通过第三方工具辅助计算mAP。例如可以在GitHub上找到专门为此设计的脚本库`Cartucho/mAP`[^4]。按照说明文档准备相应的输入文件——主要是将YOLO模型产生的预测结果保存成特定格式的文字文件,并放置于指定目录下;同样地处理好标注数据作为ground truth。运行程序后即可得出详细的mAP报告。 ```bash # 下载mAP计算仓库 git clone https://github.com/Cartucho/mAP.git cd mAP/ ``` #### 解读技巧 高mAP意味着模型具有较好的泛化能力,能够在不同场景下稳定工作。但是需要注意的是,mAP并不是唯一评判标准,有时候即使mAP很高也可能存在某些特殊情况下的误检或漏检现象。因此建议结合其他指标一起分析,比如F1 Score、召回率等。另外,不同的IoU阈设置也会影响最终的结果展示形式[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值