FiftyOne 计算机视觉数据集入驻 Hugging Face Hub
轻松使用和共享尖端计算机视觉数据集
当今的尖端机器学习模型,如 Transformer 和扩散模型,主要为非结构化数据(如文本、音频、图像和视频)设计。由这些非结构化组件构建的高质量数据集对于基准测试和训练最先进的模型至关重要。
将这些数据连接到我们的模型一直很痛苦,因为不均匀的数据模式将数据整理、过滤和处理的责任推给了最终用户。直到现在!
隆重推出 FiftyOne 计算机视觉数据集和 Hugging Face Hub 之间的集成。通过此集成,您可以:
- 直接将 Hugging Face Hub 中的视觉数据集加载到 FiftyOne 中,以简化数据整理、可视化以及模型推理/训练。
- 将 FiftyOne 中的视觉数据集共享到 Hugging Face Hub,以提高透明度和可复现性。
简而言之,
- Hugging Face 实现了机器学习模型的民主化分发和应用
- FiftyOne 为非结构化视觉数据带来了结构化
- FiftyOne 🤝 🤗 Hub 集成弥合了数据与模型之间的鸿沟
在深入探讨此集成之前,这里有一些简要背景介绍:
FiftyOne 是什么?
FiftyOne 是领先的开源工具包,用于整理、可视化和管理非结构化视觉数据。该库简化了以数据为中心的工作流程,从查找低置信度预测到识别低质量样本,再到发现数据中的隐藏模式。该库支持各种视觉数据,从图像和视频到 PDF、点云和网格。
虽然表格数据格式(如 pandas `DataFrame` 或 Parquet 文件)由行和列组成,但 FiftyOne 数据集 更加灵活。`fiftyone.Dataset` 的基本元素是 样本,它包含与一段视觉数据相关的所有信息。这些属性存储在 字段 中,字段可以是基本数据类型,也可以是具有自定义模式的字段(如 对象检测、关键点 和 多边形)。FiftyOne 数据集是用于视觉数据的高效且灵活的数据结构,原因如下:
- FiftyOne `Dataset` 是 指向磁盘上媒体文件的逻辑数据集,而不是直接存储媒体文件内容。
- FiftyOne 数据集是 由 MongoDB 文档构建 的,因此它们继承了 MongoDB 非关系型数据模型的灵活性。
- FiftyOne 与向量数据库原生集成,可实现高效的检索和大规模语义搜索。
总而言之,FiftyOne 为视觉数据集的 过滤、索引、评估 和 聚合 提供了最直接和直观的 API。
🚀 这种强大的数据模型使您能够 将 Hugging Face Transformer 模型直接应用于图像 或 视频 数据集,只需一行代码。
📢 本博客中的代码块需要 fiftyone>=0.24.0
和 huggingface_hub>=0.24.0
(太方便了!)。
从 🤗 Hub 加载视觉数据集
通过 FiftyOne 与 Hugging Face Hub 的集成,您可以加载上传到 Hub 的任何 FiftyOne 数据集(请参阅以下部分),以及大多数存储在 Parquet 文件中的基于图像的数据集,这是通过 `datasets` 库上传到 Hub 的标准数据集格式。FiftyOne 的 Hugging Face utils 中的 `load_from_hub()` 函数可以处理这两种情况!
从 🤗 Hub 加载 FiftyOne 数据集
任何以 FiftyOne 支持的常见格式 推送到 Hub 的数据集都应在其 Hub 上的数据集仓库中包含所有必要的配置信息,因此您可以通过指定其 repo_id
来加载数据集。例如,要加载 VisDrone 检测数据集,您只需要:
import fiftyone as fo
from fiftyone.utils import load_from_hub
## load from the hub
dataset = load_from_hub("Voxel51/VisDrone2019-DET")
## visualize in app
session = fo.launch_app(dataset)
就这么简单!
您可以自定义下载过程,包括要下载的样本数量、创建的数据集对象的名称、是否将其持久化到磁盘等!
哪些数据集是 FiftyOne 格式?
通过 FiftyOne 的 Hugging Face Hub 集成上传的每个数据集都将带有 `fiftyone` 标签。您可以在 此 URL 在线查看所有带有此标签的数据集。您也可以使用 Hugging Face Hub 的 API 以编程方式检索此列表:
from huggingface_hub import HfApi
api = HfApi()
api.list_datasets(tags="fiftyone")
事实上,FiftyOne 的 Hugging Face Hub 插件 中可加载数据集的列表就是通过这种方式填充的!
为什么从 🤗 Hub 加载 FiftyOne 数据集? 不要重复造轮子。如果 ML 社区已经为您格式化并处理了一个流行的数据集,请将您的时间花在模型开发管道的其他部分。
使用 FiftyOne 从 🤗Hub 加载 Parquet 数据集
您还可以使用 `load_from_hub()` 函数从 Parquet 文件加载数据集,从而访问更广泛的计算机视觉和多模态数据集。此函数易于指定您希望转换为 FiftyOne 标签 的特征、指向媒体文件的特征以及要下载的拆分/子集。FiftyOne 将为您处理类型转换,并在必要时从 URL 下载图像。
借助此功能,您可以加载:
- 图像分类数据集,如 Food101 和 ImageNet-Sketch
- 对象检测数据集,如 CPPE-5 和 WIDER FACE
- 分割数据集,如 SceneParse150 和 Sidewalk Semantic
- 图像字幕数据集,如 COYO-700M 和 New Yorker Caption Contest
- 视觉问答数据集,如 TextVQA 和 ScienceQA 等等!
作为一个简单的例子,我们可以用以下代码将 WikiArt 数据集 的前 1,000 个样本加载到 FiftyOne 中:
import fiftyone as fo
from fiftyone.utils.huggingface import load_from_hub
dataset = load_from_hub(
"huggan/wikiart", ## repo_id
format="parquet", ## for Parquet format
classification_fields=["artist", "style", "genre"], ## columns to treat as classification labels
max_samples=1000, # number of samples to load
name="wikiart", # name of the dataset in FiftyOne
)
这一行命令让我们能够访问 FiftyOne 的数据可视化、分析和理解功能,我们可以用它们来分析艺术风格!
为什么要在 FiftyOne 中从 🤗 Hub 加载 Parquet 数据集?
- 简化您的数据处理管道.
- 通过聚类、语义搜索和降维技术为数据带来结构。
- 将 Transformer 模型应用于您的整个数据集,只需一行代码。
将 FiftyOne 数据集推送到 🤗 Hub
分享您的视觉数据集从未如此简单。无论是为视觉理解任务开发基准,还是创建 AI 生成艺术品集合,来自 FiftyOne Hugging Face utils 的 push_to_hub()
功能都允许您通过一行代码将图像、视频或 3D 数据集上传到 Hugging Face Hub。
将数据集推送到 Hub 就像这样简单:
import fiftyone as fo
import fiftyone.zoo as foz
from fiftyone.utils.huggingface import push_to_hub
## load example dataset
dataset = foz.load_zoo_dataset("quickstart")
## push to hub
push_to_hub(dataset, "my-hf-dataset")
上传过程高度可定制:您可以指定许可证、标签、描述、一次上传的文件数量、导出数据集的格式等等!
当您调用 `push_to_hub()` 时,数据集将上传到指定仓库名称下的您的用户名仓库中,如果需要,将创建该仓库。数据集卡片将自动生成并填充加载数据集的说明。您甚至可以使用 `preview_path` 参数上传缩略图图像/GIF,使其显示在数据集卡片上。
这是一个使用许多这些参数的示例,它将数据集上传到私有仓库 https://huggingface.co/datasets/username/my-action-recognition-dataset,并带有标签、MIT 许可证、描述和预览图像。
dataset = foz.load_from_zoo("quickstart-video", max_samples=3)
push_to_hub(
dataset,
"my-video-dataset",
tags=["video", "tracking"],
license="mit",
description="A dataset of videos for action recognition tasks",
private=True,
preview_path="<path/to/preview.png>"
)
为什么要将 FiftyOne 数据集推送到 🤗 Hub?
- 与您的朋友(受控访问)或更广泛的机器学习社区分享您的数据!
- 参与我们即将举行的 Hugging Face FiftyOne 数据集策展竞赛!
结论
FiftyOne 的 Hugging Face Hub 集成使视觉数据集的共享、使用和结构化变得前所未有的容易。通过结合从 Hub 加载和推送到 Hub,您可以从现有数据集中创建自己的数据集,就像我的队友 Harpreet Sahota 使用 MashupVQA 所做的那样。您还可以通过将数据集从 Hub 加载到 FiftyOne 并使用 FiftyOne 的 Hugging Face Transformers 集成来连接您的模型和数据。生成嵌入、测试增强技术和微调模型,而无需担心数据格式。
继续努力:构建更好的数据集,训练更好的模型!