Data-Centric AI
以数据为中心的 AI 通过系统性地修正训练数据中的标签、覆盖范围和质量来改进模型,同时保持模型架构不变。
以数据为中心的 AI,是通过系统地改进数据来提升 AI 系统的实践,改进内容包括标签一致性、对真实条件的覆盖、类别平衡和数据清洁度,同时基本保持模型和训练代码不变。Andrew Ng 于 2021 年推广了这一术语,并指出卷积神经网络和 Transformer 等架构已经足够成熟,大多数应用从改进数据中获得的收益,比从改进模型中获得的收益更多。与之相反,以模型为中心的 AI 会固定基准数据集,不断迭代架构、损失函数和超参数调优,大多数学术排行榜都采用这种方式。
Ng 最著名的例子来自钢板检测:一个缺陷检测器的准确率停滞在 76.2%,以模型为中心的改进毫无效果,而修正不一致的标签后,准确率升至 93.1%。同年晚些时候,DeepLearning.AI 和 Landing AI 举办了以数据为中心的 AI 竞赛,固定模型,只允许参赛者改进一个带噪声的手写罗马数字图像分类数据集,该数据集最多包含 10,000 张图像。
核心实践#
- 一致的数据标注:标注人员遵循针对模糊情况制定的书面规则,例如边界框是否应包含汽车的后视镜,或如何标注被遮挡一半的人物。如果两位标注人员对这些情况的处理方式不同,就会产生模型无法克服的标签噪声。
- 发现标签错误:模型与现有标签不一致的地方,可能存在错误。Northcutt、Athalye 和 Mueller 在 2021 年的一项研究中发现,在 10 个常用数据集中,测试样例的标签错误平均至少占 3.3%;在 ImageNet 验证集中,这一比例至少为 6%。
- 有针对性地收集数据和使用合成数据:按类别、场景、光照或物体尺寸进行误差分析,可以找出模型的失败之处;专门针对这些数据切片补充样本,比随机添加样本更有帮助。
- 数据清洗:删除损坏的文件、无关图像和重复图像,尤其是同时出现在训练集和测试集中的近似重复图像。
- 数据增强:扩大模型所见的光照、尺度和视角范围,而无需采集新图像。
不同数据集划分中出现重复项会造成数据泄漏,从而抬高测试得分;类别不平衡则可能让模型取得较高的准确率,却漏掉关键的稀有类别,例如缺陷零件数量很少的制造缺陷检测。在医学图像分析中,数据集规模小且专家标注成本高,因此一致且经过审核的标签比数据量更重要。
以数据为中心的循环#
以数据为中心的团队会固定模型,使用混淆矩阵等工具研究模型错误,并据此调整数据。首次微调与迭代循环课程便会将 YOLO26 模型表现最差的类别转化为下一项数据集改进工作:
此示例会污染 scikit-learn 手写数字数据集中 20% 的标签,标记折外预测与标签不一致的样本,并在排除这些样本后重新训练同一个模型:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_predict, train_test_split
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# Replace 20% of the training labels with random digits to mimic annotation errors
rng = np.random.default_rng(0)
noisy = y_train.copy()
flip = rng.random(len(noisy)) < 0.2
noisy[flip] = rng.integers(0, 10, flip.sum())
wrong = noisy != y_train # some random digits match the true label
# The model stays fixed; only the training data changes
model = LogisticRegression(max_iter=5000)
print(f"noisy labels: {model.fit(X_train, noisy).score(X_test, y_test):.1%} test accuracy")
# Flag examples whose out-of-fold prediction disagrees with their label, then drop them
keep = cross_val_predict(model, X_train, noisy, cv=5) == noisy
print(f"flagged {(~keep).sum()} examples, {(~keep & wrong).sum()} of {wrong.sum()} wrong labels")
print(f"cleaned labels: {model.fit(X_train[keep], noisy[keep]).score(X_test, y_test):.1%} test accuracy")模型没有变化,测试准确率便从 87.0% 提升到 94.1%。筛选器标记了 354 个样本:213 个错误标签中有 211 个被标出,此外还有 143 个正确但不寻常的样本,因此清理后的数据集在几乎清除所有错误的同时,也丢失了一些有效样本。
要比较数据变更,必须确切知道每个模型使用了哪些数据进行训练。Ultralytics Platform 会保存不可变的数据集版本:云端训练中的“保存数据集版本”选项会将每个模型关联到其训练所用的快照;“比较版本”会列出两个快照之间发生变化的图像、标注和类别;数据集的“模型”选项卡则会在每个模型旁列出其数据集版本以及 mAP50-95 等关键指标。
以数据为中心的 AI 与相关术语#
- 主动学习:决定接下来应该标注哪些未标注样本,通常优先选择模型最没把握的样本。这是以数据为中心的 AI 中的一种技术。
- 数据飞轮:已部署模型的输入和错误转化为新训练数据的生产循环,因此每次发布都会重复以数据为中心的工作。
- 机器学习运维(MLOps):对模型进行版本管理、训练、部署和监控的工程实践,使数据变更可复现、可比较。










