如何在FiftyOne中调取已持久化的模型评估结果无需重跑评估
解决方案
方案1:直接加载数据集内置评估结果(推荐)
所有已运行完成的FiftyOne评估结果都会完整持久化存储在数据集的底层存储中,不需要重新执行evaluate_detections方法,直接调用内置的load_evaluation_results()接口即可获取完整的结果对象:
import fiftyone as fo # 加载已持久化的数据集 dataset = fo.load_dataset("existing_dataset") # 直接加载指定名称的已存评估结果 eval_results = dataset.load_evaluation_results("eval") # 可直接调用结果对象的所有方法,例如获取mAP print(eval_results.mAP())
该方案下所有访问同一数据集的团队拿到的结果完全同源,能100%保证数值一致性,且不需要等待评估重跑,也不存在序列化相关的兼容性问题。
方案2:跨环境离线共享评估结果
如果需要脱离原数据集环境给其他团队传递结果,不要手动对结果对象执行pickle序列化,使用FiftyOne官方提供的序列化/反序列化接口即可避免mongoengine相关的报错:
序列化保存结果
# 按上述方法加载到eval_results后 with open("detection_eval_results.json", "w", encoding="utf-8") as f: f.write(eval_results.serialize())
反序列化加载结果
其他团队拿到文件后执行以下代码即可得到完全一致的结果对象:
import fiftyone.utils.eval as foe with open("detection_eval_results.json", "r", encoding="utf-8") as f: eval_results = foe.deserialize_evaluation_results(f.read())
内容的提问来源于stack exchange,提问作者mherzog
相关产品推荐
相关产品推荐

