资讯动态

FiftyOne 标注前数据策展(Pre-Annotation Curation):从原始数据到高质量标注集

发布时间:2026/9/16 13:33:15 来源:尧图企业网站定制
FiftyOne 标注前数据策展Pre-Annotation Curation从原始数据到高质量标注集【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone在投入时间和预算进行人工标注之前先用 FiftyOne 理解你的原始数据、决定标注什么是构建高质量视觉 AI 数据集的关键一步。本文基于 FiftyOne 仓库中的 curation_pre.rst 工作流文档系统讲解标注前策展的完整技术方案通过 Embeddings 可视化探索数据分布、用相似度搜索含自然语言查询定位目标样本、用 uniqueness 与重复样本检测评分和修剪数据、并借助 Enterprise Data Quality 面板审计原始数据最后用 saved views 将发现的子集固化为可复用的数据集切片。读完本文你将掌握一套从原始数据到精选标注子集的完整可落地的策展工作流。什么是标注前策展标注前策展Pre-Annotation Curation指的是在人工标注开始之前先对原始通常是未标注的数据进行的系统性分析、筛选与清洗工作。其核心目标是在标注预算有限的前提下回答两个问题这段数据里有什么以及哪些样本值得优先标注从 curation_pre.rst 看典型的标注前策展工作流包含以下几类能力可视化 Embeddings探索数据集的内在结构见 brain/index.rst 中的 Visualizing embeddings 一节相似度搜索包括基于图像的相似检索与自然语言查询见 similarity.rstUniqueness 评分为每个样本计算独特性分数找出最具代表性的样本Near-Duplicates 修剪剔除与数据集内其他样本过于接近的重复样本数据质量审计借助 FiftyOne Enterprise 的 Data Quality 面板自动扫描原始数据中的常见质量问题见 data_quality.rst。在 FiftyOne App 中Embeddings 面板 和 相似度搜索面板 将这些工作流变成点选即可的操作而 saved views 则让你把探索中发现的子集保存为数据集中的命名切片供后续标注、训练与审计复用。用 Embeddings 可视化探索数据的内在结构理解原始数据的第一步往往是看一眼全貌。FiftyOne Brain 提供的compute_visualization()方法可以生成样本或单个对象的低维表示并在 App 的 Embeddings 面板中以散点图形式交互式探索。两种核心组件Embedding 方法与降维方法一个 Embedding 可视化由两部分组成生成 Embedding 的方法与降维方法。compute_visualization()的embeddings和model参数支持多种生成 Embedding 的方式见 brain/index.rst不提供任何参数使用默认的通用模型为数据生成 Embedding提供一个Model实例或 Model Zoo 中任意支持 Embedding 的模型名称提供你自己的预计算 Embedding 数组提供数据集中已存储预计算 Embedding 的VectorField或ArrayField字段名。method参数则控制降维方法支持方法全称说明umap默认Uniform Manifold Approximation and Projection首次使用时会被提示安装umap-learn包tsnet-distributed Stochastic Neighbor Embedding适合可视化高维数据的局部结构pcaPrincipal Component Analysis线性降维速度最快manual手动降维直接提供你自己算好的低维表示import fiftyone.brain as fob results fob.compute_visualization( dataset, methodumap, # umap, tsne, pca, manual brain_key..., # ... )在 App 的 Embeddings 面板中交互探索当数据集中存在 Embeddings 可视化结果时compute_visualization()的产物在 App 中打开 Embeddings 面板即可看到散点图。散点图中的每个点对应一个样本或对象你可以用套索工具框选感兴趣的点对应的样本会自动在 Samples 面板中被选中——反向亦然。这种图选联动非常适合发现数据中的隐藏结构例如识别异常样本与视觉上相似的样本发现错误/虚假预测中的模式在数据湖中寻找目标场景的示例挖掘评估流水线所需的难例hard examples为数据不足的类别推荐补充训练样本对训练数据进行无监督的预标注。相似度搜索定位与排序数据相似度搜索是标注前策展中最常用的定位工具。FiftyOne Brain 提供compute_similarity()方法为数据集中的图像或对象补丁建立相似度索引建立索引后既可以用 SDK 的sort_by_similarity()view stage 编程式地按相似度排序也可以在 App 中通过点选界面直接检索。建立相似度索引import fiftyone as fo import fiftyone.brain as fob import fiftyone.zoo as foz dataset foz.load_zoo_dataset(quickstart) # 为整个数据集建立图像相似度索引 fob.compute_similarity( dataset, modelclip-vit-base32-torch, brain_keyimg_sim, ) session fo.launch_app(dataset)compute_similarity()的embeddings/model参数与compute_visualization()相同支持默认模型、Model Zoo 模型、预计算 Embedding 数组或数据集字段四种方式。支持的相似度后端Similarity Backends默认情况下所有相似度索引由内置的scikit-learn后端提供服务。你也可以通过backend参数切换到其他后端完整列表见 similarity.rstsklearn默认基于 scikit-learn 的后端qdrant、redis、pinecone、mongodb、elasticsearch、pgvector、mosaicDatabricks Mosaic AI、milvus、lancedb各类外部向量数据库/后端。import fiftyone.brain as fob results fob.compute_similarity( dataset, backendsklearn, # sklearn, qdrant, redis, ... brain_key..., # ... )图像相似度App 点选 SDK 编程两种查询方式建立索引后在 App 中加载数据集并选中若干图像网格上方会出现相似度图标点击即可按与当前选区的相似度排序。也可以在 SDK 中编程式构造视图# 随机取一张图作为查询 query_id dataset.take(1).first().id # 构造包含 15 张最相似图片的视图 view dataset.sort_by_similarity(query_id, k15, brain_keyimg_sim) session.view view注意对 DatasetView 执行相似度搜索只会返回该视图内的结果如果视图包含未进入索引的样本它们永远不会出现在结果中。这意味着你可以对整个 Dataset 只建一次索引然后通过在数据集上构造视图来对任意子集反复检索。对象相似度按目标补丁检索任何以Detection、Detections、Polyline或Polylines格式存储在数据集上的对象都可以建立相似度索引。只需要在compute_similarity()中额外传入patches_field# 为 ground truth 对象建立相似度索引 fob.compute_similarity( dataset, patches_fieldground_truth, modelclip-vit-base32-torch, brain_keygt_sim, ) # 编程式查询转换为 patches 视图后按相似度排序 patches dataset.to_patches(ground_truth) query_id patches.take(1).first().id view patches.sort_by_similarity(query_id, k15, brain_keygt_sim)自然语言查询Text Similarity使用 CLIP 模型如clip-vit-base32-torch建立索引时还可以直接使用任意自然语言查询在 App 或 SDK 中检索语义匹配的样本。验证一个索引是否支持文本查询只需检查其supports_prompts属性image_index fob.compute_similarity( dataset, modelclip-vit-base32-torch, brain_keyimg_sim, ) print(image_index.config.supports_prompts) # True # 不加载索引时从数据集元信息中读取 info dataset.get_brain_info(img_sim) print(info.config.supports_prompts) # TrueSDK 侧的自然语言查询同样通过sort_by_similarity()完成只是把查询对象从样本 ID 换成文本# 图像相似度上的文本查询 query kites high in the air view dataset.sort_by_similarity(query, k15, brain_keyimg_sim) session.view view # 对象相似度上的文本查询 patches dataset.to_patches(ground_truth) query cute puppies view patches.sort_by_similarity(query, k15, brain_keygt_sim) session.view view使用文本查询有两个关键注意事项传入模型名称而非模型实例。索引基于模型名称创建才能在后续会话与 App 中重新加载模型完成文本编码如果传入Model实例文本查询只在当前会话有效# 文本查询在 App 和未来会话中均可使用 fob.compute_similarity(dataset, modelclip-vit-base32-torch, brain_keysim) # 文本查询仅当前会话可用 model foz.load_zoo_model(clip-vit-base32-torch) fob.compute_similarity(dataset, modelmodel, brain_keysim)预计算 Embedding 也可以保留文本查询能力同时提供embeddings和model名称即可。这是对无法用模型直接处理媒体数据的样本所支持的标准路径因为Model声明的media_type只能是image或videofob.compute_similarity( dataset, embeddingsembeddings, # 预计算 Embedding modelclip-vit-base32-torch, brain_keysim, )相似度索引的完整生命周期管理相似度索引的 API 覆盖创建、增删、检索与删除的完整生命周期详见 similarity.rst 的 Similarity API 一节切换默认后端单次调用传backend参数整个会话可通过环境变量FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND切换永久修改则更新~/.fiftyone/brain_config.json中的default_similarity_backend键{ default_similarity_backend: backend, similarity_backends: { backend: {...}, ... } }创建索引的多种语法不传参数时使用默认模型mobilenet-v2-imagenet-torch自动计算全部 Embedding也可以embeddingsFalse先建空索引、稍后再添加 Embedding还可以传入预计算 Embedding 数组图像用compute_embeddings()对象用compute_patch_embeddings()。动态增删用add_to_index()添加/覆盖 Embedding用remove_from_index()按 sample/label ID 删除用get_embeddings()批量取回。对象索引需要同时提供 sample ID 与 label ID。sklearn 后端的持久化使用默认 sklearn 后端时增删 Embedding 后必须手动调用save()才能写入数据库使用 Qdrant 等外部向量数据库则无需此步骤。删除索引外部后端可先调用cleanup()删除外部索引/集合再调用dataset.delete_brain_run(brain_key)从数据集中删除索引记录。cleanup()对 sklearn 后端无效果。用 Uniqueness 为样本评分找出最该标注的数据Uniqueness独特性是标注前策展中挑选数据的利器尤其适合在机器学习工作流早期决定用哪部分数据来引导bootstrap模型。独特的样本能构成让模型学习得高效、有效的训练批次。compute_uniqueness()不需要任何预训练模型直接计算数据集中每个样本的独特性import fiftyone as fo import fiftyone.brain as fob dataset fo.load_dataset(...) fob.compute_uniqueness(dataset)输入未标注或已标注的图像数据集输出为每个样本填充一个标量uniqueness字段数值越高表示越独特数值被归一化到[0, 1]数据集中最独特的样本为1原理算法度量每个样本在数据集中的分布情况据此按相对相似度排序——与多数样本都相近的样本不独特远离多数样本的样本更独特可定制项可通过uniqueness_field参数自定义结果字段名可通过embeddings/model参数改用你自己的 Embedding 或 Model Zoo 模型可通过roi_field参数指定每个图像内用于计算独特性的兴趣区域该字段需包含Detections或Polylines。修剪重复样本Near-Duplicates 与 Exact Duplicates在策展大规模数据集时你可能无意中加入重复数据这会让模型产生偏差或混淆。FiftyOne 提供两种互补的重复检测能力。近似重复检测Near Duplicatescompute_near_duplicates()借助 Embedding 自动找出数据集中的近似重复样本见 brain/index.rst 的 Near duplicates 一节import fiftyone as fo import fiftyone.brain as fob dataset fo.load_dataset(...) index fob.compute_near_duplicates(dataset) print(index.duplicate_ids) dups_view index.duplicates_view() session fo.launch_app(dups_view)输出一个SimilarityIndex对象提供duplicate_ids、neighbors_map、duplicates_view()等强大方法阈值调整使用自定义 Embedding/模型时可能需要通过threshold参数调整检测距离阈值。阈值过大误报多过小漏报多最佳值与数据集及所用 Embedding 相关结果概览neighbors_map是一个字典键为每个非重复样本的 ID值为(id, distance)元组列表记录该样本的重复样本及其 Embedding 距离可视化duplicates_view(type_field..., id_field..., dist_field...)构造一个视图把重复样本直接排在对应参考样本之后并可附加记录重复类型与最近参考样本 ID/距离的字段复用索引find_duplicates()可用新阈值重跑检测而无需重新调用compute_near_duplicates()find_unique(n)则从索引中挑选出 n 个彼此最大程度独特的样本配合compute_visualization()生成的降维结果可用visualize_unique()绘制散点图或用dataset.select(index.unique_ids)在 App 中加载查看。精确重复检测Exact Duplicatescompute_exact_duplicates()使用文件哈希filehash扫描数据集无论重复数据存储在不同文件名还是相同文件名下都能识别import fiftyone as fo import fiftyone.brain as fob dataset fo.load_dataset(...) duplicates_map fob.compute_exact_duplicates(dataset) print(duplicates_map)输出是一个字典键为存在精确重复的样本 ID值为该样本对应重复样本的 ID 列表。这与 Enterprise Data Quality 面板中的 Exact Duplicates 扫描使用同一思路。Enterprise Data Quality 面板一键审计原始数据对于 FiftyOne Enterprise 用户版本 2.2.0Data Quality 面板是 App 内置的审计工具可自动扫描数据集中的常见质量问题详见 data_quality.rst。点击 Samples 标签旁的 图标即可打开。支持扫描的问题类型面板首页列出可用的问题类型及其分析/审查状态问题类型扫描内容结果字段Brightness异常过亮或过暗的图像brightnessBlurriness异常模糊或异常清晰的图像blurrinessAspect Ratio极端宽高比的图像aspect_ratioEntropy熵值异常小或异常大的图像entropyNear Duplicates借助 Embedding 扫描近似重复样本nearest_neighbor最近邻距离Exact Duplicates用文件哈希扫描相同或不同文件名的重复数据filehash扫描、分析与行动发起扫描点击问题类型卡片右侧箭头进入展开视图点击 Scan Dataset 后有两个执行选项——Execute仅用于测试同步计算几分钟内未完成会超时生产数据一律选择 Schedule将扫描调度到计算集群上以委托执行delegated execution。扫描进行中可点击通知中的链接跳转到 Runs 页面监控任务状态。分析结果扫描完成后卡片会显示交互式直方图。每个问题类型都有默认的阈值区间来高亮潜在问题若发现问题面板左上角会显示潜在问题数量Samples 面板自动更新为对应样本。可用阈值滑块手动探索不同区间Samples 面板实时联动找到更优阈值后可通过设置菜单 Save Threshold 保存随时可 Reset Threshold 恢复默认。采取行动在网格中复核潜在问题后用 Add Tags 按钮给问题样本打标签已选中样本只给选中样本打标签否则给当前视图内全部样本打标签。之后即可通过 App 侧边栏的 sample tags 过滤器随时检索、复核、处理这些已标记样本。面板右上角的审查状态指示器可在 In Review 与 Reviewed 之间切换。更新扫描删除样本后直方图自动更新新增样本或清空扫描相关字段值后面板会自动检测到未扫描样本并提示。点击分析页右下角的 Scan New Samples 按钮即可增量扫描新样本。删除扫描直接删除数据集中的对应字段如删除brightness字段即删除亮度扫描。在 App 中可通过 Operator browser 中的delete_sample_field操作符删除样本字段。用 Saved Views 固化策展成果经过上述探索、评分与筛选你发现的数据子集不应止步于一次会话。App 左上角的菜单可以把当前 view bar 与筛选侧边栏的状态保存为数据集上的saved view见 app.rst 的 Saving views 一节。Saved views 以你指定的名称持久化在数据集上未来会话中可通过同一 UI 快速加载——这正是把探索中发现的子集变成命名切片的标准方式也是将标注前策展与后续标注/训练阶段衔接的关键纽带。端到端标注前策展工作流把以上能力串起来一个典型的标注前策展流程如下建索引用fob.compute_similarity(dataset, brain_keyimg_sim)或fob.compute_visualization(dataset, brain_keyviz)为数据集建立 Embedding 索引看全貌在 App 中打开 Embeddings 面板用散点图 套索选择理解数据分布找出异常与目标场景按相似度/文本检索在 App 中点选图像或输入自然语言或用dataset.sort_by_similarity(query, k50, brain_keyimg_sim)编程式取出目标样本评分与修剪fob.compute_uniqueness(dataset)给样本排独特度fob.compute_near_duplicates(dataset)与fob.compute_exact_duplicates(dataset)找出重复数据Enterprise 用户可直接用 Data Quality 面板完成亮度、模糊、宽高比、熵、重复等一键审计固化子集把筛选出的待标注子集保存为 saved view例如view dataset.match(F(uniqueness) 0.8)后保存供标注团队直接加载。从源码实现看这些能力都沉淀在核心 API 中例如sort_by_similarity()作为 view stage 定义于 fiftyone/core/collections.py其文档字符串明确说明使用前必须先调用fiftyone.brain.compute_similarity建立索引并且支持k返回数量、reverse反向排序、dist_field距离字段、brain_key索引名等参数相似度、可视化、独特性、重复检测等方法则统一由fiftyone.brain模块提供与文档所述行为一一对应。进一步学习仓库中提供了与本文工作流配套的完整教程与配方可直接在本地环境运行Using image embeddings 教程Embedding 可视化方法在真实数据上的应用示例Dimensionality reduction 教程UMAP / t-SNE / PCA 等降维方法详解Clustering images 教程在 Embedding 空间聚类图像Exploring image uniqueness 教程用独特性检测数据集中近似重复图像Removing duplicate images 配方重复图像清洗的完整实战Similarity Search 完整文档索引生命周期、后端配置与全部 API 细节Data Quality 面板文档Enterprise 数据质量审计的完整操作指南Brain 能力总览Embedding 可视化、近重复、精确重复、独特性、标签错误等全部 Brain 方法。标注前策展的核心哲学是花在选择标注什么上的时间会在标注成本和模型质量上数倍回报。借助 FiftyOne 的 Embedding 可视化、相似度搜索、独特性评分、重复检测与数据质量审计能力你可以在人工介入之前就对原始数据建立系统性认知让每一次标注预算都花在最值得的样本上。【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价