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问你就