基准测试一个模型
你是否训练过多个检测模型并想知道哪个模型在你的特定用例上表现最好?或者你下载了一个预训练模型,想验证它在你的数据集上的性能?模型基准测试对于做出关于生产部署模型的明智决策至关重要。
本指南将展示如何使用 supervision
来轻松进行基准测试。主要内容包括:
本指南将使用实例分割模型,但同样适用于目标检测、实例分割和 OBB (Oriented Bounding Box) 模型。
本指南的简要版本可在 Colab Notebook 获取。
加载数据集 (Loading a Dataset)
假设你已经有一个数据集。也许你是在 Universe 上找到的,也可能是你 自己标注的。无论哪种情况,本指南假设你手头有一个已标注的数据集。
我们将使用以下库:
roboflow
:用于管理数据集和部署模型inference
:用于运行模型supervision
:用于评估模型结果
pip install roboflow supervision
pip install git+https://github.com/roboflow/inference.git@linas/allow-latest-rc-supervision
!!! info
我们目前正在更新 `inference`,请按上方的方式安装。
以下是如何下载数据集:
from roboflow import Roboflow
rf = Roboflow(api_key="<YOUR_API_KEY>")
project = rf.workspace("<WORKSPACE_NAME>").project("<PROJECT_NAME>")
dataset = project.version(<DATASET_VERSION_NUMBER>).download("<FORMAT>")
如果你的数据集来自 Universe,依次进入 Dataset
> Download Dataset
> 选择格式 (例如 YOLOv11
) > Show download code
。
如果是自己标注的数据,请访问 dashboard 并参考 此指南 获取 workspace 和 project ID。
在本指南中,我们使用一个小型的 Corgi v2 数据集。它标注良好并包含测试集。
from roboflow import Roboflow
rf = Roboflow(api_key="<YOUR_API_KEY>")
project = rf.workspace("fbamse1-gm2os").project("corgi-v2")
dataset = project.version(4).download("yolov11")
运行后会在当前工作目录创建一个 Corgi-v2-4
文件夹,其中包含 train
、test
和 valid
文件夹以及 data.yaml
文件。
加载模型 (Loading a Model)
让我们加载一个模型。
“Inference, Local”
Roboflow 支持多种最先进的 预训练模型,用于目标检测、实例分割和姿态追踪。甚至不需要 API key!
可以通过 inference
加载模型:
from inference import get_model
model = get_model(model_id="yolov11s-seg-640")
“Inference, Deployed”
你也可以直接在 Roboflow 平台训练和部署模型。详情见 此指南。
from inference import get_model
model_id = "<PROJECT_NAME>/<MODEL_VERSION>"
model = get_model(model_id=model_id)
“Ultralytics”
Ultralytics 同样支持运行各种模型:
pip install "ultralytics<=8.3.40"
from ultralytics import YOLO
model = YOLO("yolo11s-seg.pt")
基准测试基础 (Benchmarking Basics)
评估模型需要慎重选择数据集。应该用哪些图片?让我们分析不同情况:
- 无关数据集 (Unrelated Dataset):如果数据集未用于训练该模型,这是最佳选择。
- 训练集 (Training Set):用于训练模型的图片。如果模型没用这个数据集训练还可以,否则 不要 用它做基准测试,结果会虚高。
- 验证集 (Validation Set):训练时用于验证模型的图片。虽然不是直接训练数据,但仍会间接影响训练结果。
- 测试集 (Test Set):留作最终测试的数据集。这是做基准测试的最佳选择。
因此,无关数据集或 test
集是最佳基准测试选择。
但还有其他问题可能出现:
- 额外类别 (Extra Classes):无关数据集可能包含额外类别,需要 过滤。
- 类别不匹配 (Class Mismatch):类别名或 ID 可能不同,需要映射,详见 运行模型。
- 数据污染 (Data Contamination):如果测试集图片在训练或验证集中出现,结果会虚高。
- 没有测试集 (Missing Test Set):有些数据集没有测试集,需要自己收集和 标注。
运行模型 (Running a Model)
到目前为止,你应该已经有了:
- 一个带标注的评估数据集
- 一个待测试的模型
接下来我们用 supervision
创建数据集迭代器,并在每张图片上运行模型预测。
(以下代码省略翻译,可直接参考原文,代码不需翻译)
类别映射 (Remapping Classes)
上面的逻辑中有一个问题: 如果我们用的是无关数据集,类别名和 ID 可能和模型的不一致。
我们需要把预测类别映射到数据集类别。
(代码部分保留原文)
可视化预测 (Visualizing Predictions)
评估模型性能的第一步是可视化预测结果,这样直观了解模型表现和问题。
(代码部分原文保留)
预测中的紫色框代表目标值 (ground truth),青色框代表模型预测。
基准测试指标 (Benchmarking Metrics)
仅凭视觉判断还不够,supervision
提供了多种指标帮助我们定量评估模型性能。
平均精度 (Mean Average Precision, mAP)
mAP 50:95
是最常用的指标,计算在 IoU 阈值 0.5 至 0.95 下的平均精度。
(代码保留原文)
F1 分数 (F1 Score)
F1 分数是精度 (precision) 和召回率 (recall) 的调和平均值。 (代码保留原文)
模型排行榜 (Model Leaderboard)
想比较主流模型?可以访问 Model Leaderboard,查看不同模型的表现。 排行榜开源,可在 GitHub 查看和提交。
总结 (Conclusion)
本指南介绍了如何:
简要版本可在 Colab Notebook 获取。 更多信息请查阅 文档 或在 GitHub 反馈问题。
祝你基准测试顺利!