如何在ClearML中查询并下载特定项目指定指标的最优模型
筛选并下载ClearML项目中指定指标最优模型
完整解决方案
要筛选出YOLOv5项目中mAP_0.5:0.95指标最高的模型并下载,可按以下步骤实现:
1. 提取模型关联的指标数据
每个ClearML模型对象绑定着训练它的任务实例,通过任务可以获取训练过程中上报的所有标量指标,从中提取mAP_0.5:0.95的最大值。
2. 排序选出最优模型
将所有模型按目标指标值从高到低排序,排名第一的即为最优模型。
3. 下载最优模型
调用模型的get_local_copy()方法完成本地下载。
完整代码示例
from clearml import Model # 1. 获取指定项目的模型列表 model_list = Model.query_models( project_name='YOLOv5', model_name=None, tags=['demo', '-TF'], only_published=False, include_archived=True, max_results=5 ) # 2. 定义函数,提取模型的mAP_0.5:0.95最大值 def get_map_score(model): task = model.get_task() scalars = task.get_reported_scalars() # 注意:此处路径需匹配你的训练任务上报指标的实际分组和名称 map_scores = [] if 'metrics' in scalars and 'mAP_0.5:0.95' in scalars['metrics']: # 提取该指标的所有数值点并取最大值 for _, value in scalars['metrics']['mAP_0.5:0.95']['series']: map_scores.append(value) return max(map_scores) if map_scores else 0.0 # 3. 按mAP_0.5:0.95降序排序模型 sorted_models = sorted(model_list, key=get_map_score, reverse=True) # 4. 下载最优模型 if sorted_models: best_model = sorted_models[0] score = get_map_score(best_model) print(f"正在下载最优模型(mAP_0.5:0.95={score:.4f})...") local_path = best_model.get_local_copy() print(f"模型已下载到:{local_path}") else: print("未找到符合条件的模型")
关键注意事项
- 指标路径调整:代码中
'metrics'和'mAP_0.5:0.95'是YOLOv5默认的指标上报路径,若你的训练任务中指标存储路径不同,可在ClearML Web界面的任务「Scalars」标签页查看实际的指标分组和名称,再修改代码对应字段。 - 无指标模型处理:代码中对未上报目标指标的模型默认赋值0分,你可根据需求调整这部分逻辑(比如跳过这类模型)。
参考文档翻译(原文档:Querying Models)
你可以使用
Model.query_models()方法检索符合特定条件的模型,参数说明如下:
project_name:仅返回指定项目下的模型model_name:筛选模型名称(支持模糊匹配,设为None则不限制)tags:筛选带有指定标签的模型,前缀-表示排除带有该标签的模型only_published:设为True时,仅返回已发布的模型include_archived:设为True时,结果中包含已归档的模型max_results:设置返回的最大模型数量
内容的提问来源于stack exchange,提问作者Mike B
相关产品推荐
相关产品推荐

