基于FiftyOne的模型评估(概述)

FiftyOne 在图像和视频数据集的基础上提供了多种内置方法来评估您的模型 预测,包括回归regressions、分类classifications、检测detections、多边形polygons、 实例和语义分割instance and semantic segmentations。

1. 概述和基本工作流程

FiftyOne 的评估方法可以在 Dataset 和 DatasetView 对象上使用,这意味着您可以用相同的语法评估整个数据集或其特定视图。

图解

评估管理
高级分析
可视化分析
评估维度
评估工作流程
Managing evaluations
评估管理
list_evaluations
列出评估
load_evaluation_results
加载结果
rename/delete
重命名/删除
Analyzing scenarios
场景分析
use_subset方法
子集性能评估
条件对比分析
Confusion matrices
混淆矩阵
交互式图表
点击查看具体样本
动态更新视图
视图过滤
Per-class metrics
类别级指标
Per-sample metrics
样本级指标
整体统计
precision/recall/f1
micro/macro/weighted avg
每个样本标注
eval_fp/eval_fn/eval_tp
样本级准确率
数据集评估
evaluate_detections
EvaluationResults
评估结果对象

基本示例:

import fiftyone as fo
import fiftyone.zoo as foz

# 加载快速入门数据集
dataset = foz.load_zoo_dataset("quickstart")

# 评估 predictions 字段中的目标检测
# 相对于 ground_truth 字段中的真实标注
results = dataset.evaluate_detections(
    "predictions",
    gt_field="ground_truth",
    eval_key="eval",
)

# 启动可视化应用
session = fo.launch_app(dataset)

关键参数:

  • “predictions”: 包含模型预测的字段名
  • gt_field: 包含真实标注的字段名
  • eval_key: 评估标识符,用于存储评估结果

2. 每类指标(Per-class metrics)

评估返回一个特定任务的 EvaluationResults 子类实例,提供了生成聚合统计信息的方法。

示例:生成分类报告

# 获取数据集中最常见的10个类别
counts = dataset.count_values("ground_truth.detections.label")
classes = sorted(counts, key=counts.get, reverse=True)[:10]

# 打印前10个类别的分类报告
results.print_report(classes=classes)

输出包含:

  • precision(精确率): 预测为正确的样本中真正正确的比例
  • recall(召回率): 所有真实正样本中被正确预测的比例
  • f1-score: 精确率和召回率的调和平均数
  • support: 每个类别的真实样本数量

三种平均方式:

  • micro avg: 全局计算TP、FP、FN后再计算指标
  • macro avg: 每个类别单独计算指标后取平均
  • weighted avg: 按类别样本数量加权平均

3. 每样本指标(Per-sample metrics)

当传递 eval_key 参数时,FiftyOne 会在每个样本上填充有用的任务特定信息:

假阴性/假阳性计数
每个样本的准确率
查找假阳性最多的样本:

from fiftyone import ViewField as F

# 创建视图:按假阳性数量降序排列,只显示假阳性框
view = (
    dataset
    .sort_by("eval_fp", reverse=True)  # 按假阳性数量降序
    .filter_labels("predictions", F("eval") == "fp")  # 只保留假阳性
)

session = fo.launch_app(view=view)

文档中提到的例子发现了一个标注错误:整盘胡萝卜被标注为单个目标,但模型预测了单个胡萝卜,这是因为 COCO 格式中的 iscrowd 属性设置错误。

4. 混淆矩阵(Confusion matrices)

混淆矩阵可以通过 Model Evaluation 面板或编程方式使用:

# 绘制混淆矩阵
plot = results.plot_confusion_matrix(classes=classes)
plot.show()

# 将图表连接到会话
session.plots.attach(plot)

交互特性:

  • 点击混淆矩阵的单元格可在应用中选择相应的对象
  • 点击对角线单元格查看真阳性样本
  • 修改视图时,混淆矩阵会自动更新

5. 场景分析(Analyzing scenarios)

使用 use_subset() 方法可以评估模型在特定场景下的性能:

# 创建数据集的不同子集
four.random_split(dataset, {"sunny": 0.7, "cloudy": 0.2, "rainy": 0.1})

# 保存一个视图
dataset.save_view("take100", dataset.take(100))

# 在子集上分析性能
subset_def = dict(type="view", view="take100")
with results.use_subset(subset_def):
    results.print_report(classes=classes)

这允许您:

  • 分析模型在不同条件下的表现
  • 比较不同数据子集的性能
  • 识别模型在特定场景下的弱点

核心区别图解

核心区别
Per-class metrics
Per-sample metrics
Confusion matrices
Analyzing scenarios
Managing evaluations
统计层面: 类别级别
统计层面: 类别间关系
统计层面: 样本级别
统计层面: 子集对比
功能层面: 评估管理
关注点: 整体性能
输出: 分类报告
指标: precision/recall/f1
关注点: 个体表现
输出: 样本标注
指标: FP/FN/TP计数
关注点: 分类混淆
输出: 交互式矩阵
指标: 类别间误分
关注点: 条件性能
输出: 场景报告
指标: 子集指标
关注点: 生命周期
输出: 评估列表
操作: CRUD操作

7. 评估管理

FiftyOne 提供了完整的评估管理功能:


# 列出所有评估
dataset.list_evaluations()

# 获取评估信息
print(dataset.get_evaluation_info("eval"))

# 加载已有的评估结果
results = dataset.load_evaluation_results("eval")

# 重命名评估
dataset.rename_evaluation("eval", "still_eval")

# 删除评估(包括所有相关的数据)
dataset.delete_evaluation("still_eval")

主要方法:

  • list_evaluations(): 列出所有评估
  • get_evaluation_info(): 获取评估详情
  • load_evaluation_results(): 加载评估结果
  • load_evaluation_view(): 加载评估时使用的视图
  • rename_evaluation(): 重命名评估
  • delete_evaluation(): 删除评估及其数据

图解

生命周期
分析流程
指标层次
数据粒度关系
使用评估
创建评估
eval_key
管理评估
Managing
保存/加载
重命名/删除
场景分析
Scenarios
全局评估
子集评估
条件对比
聚合统计
Per-class metrics
类别级
细粒度分析
Per-sample metrics
样本级
Confusion Matrix
混淆矩阵
可视化交互
Classes
类别
Dataset
数据集
Samples
样本
Objects
检测对象

总结

FiftyOne 的评估功能提供了:

  • 灵活的评估接口:可以评估整个数据集或特定视图
  • 详细的指标:从聚合统计到每个样本的详细信息
  • 交互式可视化:通过混淆矩阵和应用界面探索结果
  • 场景分析:评估模型在不同条件下的表现
  • 完整的管理功能:保存、加载、重命名和删除评估
  • 这些功能使得模型评估变得更加直观和高效,帮助您快速识别模型的优缺点并进行改进。
Datasetevaluate_detections()EvaluationResultsViews/Subsets评估流程与功能关系执行评估(eval_key="eval")返回评估结果Per-class metricsprint_report()计算precision/recall/f1类别级聚合统计Per-sample metrics添加样本级标注eval_fp, eval_fn, eval_tp基于指标创建视图Confusion matricesplot_confusion_matrix()交互式选择动态更新矩阵Analyzing scenariosuse_subset()子集评估场景对比分析Managing evaluationslist_evaluations()load_evaluation_results()rename/delete_evaluation()Datasetevaluate_detections()EvaluationResultsViews/Subsets
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值