数据集文档

创建视频数据集

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

创建视频数据集

本指南将向您展示如何使用 VideoFolder 和一些元数据创建视频数据集。这是一个无需代码的解决方案,可用于快速创建包含数千个视频的视频数据集。

您可以控制对数据集的访问,要求用户先分享他们的联系方式。请查看门控数据集指南,了解有关如何在 Hub 上启用此功能的更多信息。

VideoFolder

VideoFolder 是一个数据集构建器,旨在快速加载包含数千个视频的视频数据集,而无需编写任何代码。

💡 请查看拆分模式层级结构,以了解有关 VideoFolder 如何根据您的数据集仓库结构创建数据集拆分的更多信息。

VideoFolder 会根据目录名称自动推断数据集的类标签。将您的数据集存储在如下目录结构中:

folder/train/dog/golden_retriever.mp4
folder/train/dog/german_shepherd.mp4
folder/train/dog/chihuahua.mp4

folder/train/cat/maine_coon.mp4
folder/train/cat/bengal.mp4
folder/train/cat/birman.mp4

如果数据集遵循 VideoFolder 结构,则可以使用 load_dataset() 直接加载它

>>> from datasets import load_dataset

>>> dataset = load_dataset("path/to/folder")

这等效于在 load_dataset() 中手动传递 videofolder,并在 data_dir 中传递目录

>>> dataset = load_dataset("videofolder", data_dir="/path/to/folder")

您还可以使用 videofolder 加载涉及多个拆分的数据集。为此,您的数据集目录应具有以下结构:

folder/train/dog/golden_retriever.mp4
folder/train/cat/maine_coon.mp4
folder/test/dog/german_shepherd.mp4
folder/test/cat/bengal.mp4

如果所有视频文件都包含在单个目录中,或者它们不在同一级别的目录结构中,则不会自动添加 label 列。如果需要它,请显式设置 drop_labels=False

如果还有您想包含的有关数据集的其他信息,例如文本字幕或边界框,请将其作为 metadata.csv 文件添加到您的文件夹中。这使您可以快速为不同的计算机视觉任务(如文本字幕或物体检测)创建数据集。您还可以使用 JSONL 文件 metadata.jsonl 或 Parquet 文件 metadata.parquet

folder/train/metadata.csv
folder/train/0001.mp4
folder/train/0002.mp4
folder/train/0003.mp4

您的 metadata.csv 文件必须具有 file_name*_file_name 字段,该字段将视频文件与其元数据链接起来

file_name,additional_feature
0001.mp4,This is a first value of a text feature you added to your videos
0002.mp4,This is a second value of a text feature you added to your videos
0003.mp4,This is a third value of a text feature you added to your videos

或使用 metadata.jsonl

{"file_name": "0001.mp4", "additional_feature": "This is a first value of a text feature you added to your videos"}
{"file_name": "0002.mp4", "additional_feature": "This is a second value of a text feature you added to your videos"}
{"file_name": "0003.mp4", "additional_feature": "This is a third value of a text feature you added to your videos"}

这里的 file_name 必须是元数据文件旁边视频文件的名称。更一般地,它必须是从包含元数据的目录到视频文件的相对路径。

可以在数据集的每一行中指向多个视频,例如,如果您的输入和输出都是视频

{"input_file_name": "0001.mp4", "output_file_name": "0001_output.mp4"}
{"input_file_name": "0002.mp4", "output_file_name": "0002_output.mp4"}
{"input_file_name": "0003.mp4", "output_file_name": "0003_output.mp4"}

您还可以定义视频列表。在这种情况下,您需要将字段命名为 file_names*_file_names。这是一个示例

{"videos_file_names": ["0001_left.mp4", "0001_right.mp4"], "label": "moving_up"}
{"videos_file_names": ["0002_left.mp4", "0002_right.mp4"], "label": "moving_down"}
{"videos_file_names": ["0003_left.mp4", "0003_right.mp4"], "label": "moving_right"}

视频字幕

视频字幕数据集包含描述视频的文本。一个 metadata.csv 示例可能如下所示:

file_name,text
0001.mp4,This is a golden retriever playing with a ball
0002.mp4,A german shepherd
0003.mp4,One chihuahua

使用 VideoFolder 加载数据集,它将为视频字幕创建一个 text

>>> dataset = load_dataset("videofolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"This is a golden retriever playing with a ball"

将数据集上传到 Hub

创建数据集后,您可以将其分享到使用 huggingface_hub 的 Hub。确保您已安装 huggingface_hub 库并且已登录您的 Hugging Face 帐户(请参阅使用 Python 上传教程了解更多详情)。

使用 huggingface_hub.HfApi.upload_folder 上传您的数据集

from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path="/path/to/local/dataset",
    repo_id="username/my-cool-dataset",
    repo_type="dataset",
)

WebDataset

WebDataset 格式基于 TAR 归档,适用于大型视频数据集。实际上,您可以将视频分组到 TAR 归档中(例如,每个 TAR 归档 1GB 的视频),并拥有数千个 TAR 归档

folder/train/00000.tar
folder/train/00001.tar
folder/train/00002.tar
...

在归档中,每个示例都由共享相同前缀的文件组成

e39871fd9fd74f55.mp4
e39871fd9fd74f55.json
f18b91585c4d3f3e.mp4
f18b91585c4d3f3e.json
ede6e66b2fb59aab.mp4
ede6e66b2fb59aab.json
ed600d57fcee4f94.mp4
ed600d57fcee4f94.json
...

例如,您可以使用 JSON 或文本文件来放置视频标签/字幕/特征。

有关 WebDataset 格式和 Python 库的更多详细信息,请查看 WebDataset 文档

加载您的 WebDataset,它将为每个文件后缀创建一个列(此处为 “mp4” 和 “json”)

>>> from datasets import load_dataset

>>> dataset = load_dataset("webdataset", data_dir="/path/to/folder", split="train")
>>> dataset[0]["json"]
{"bbox": [[302.0, 109.0, 73.0, 52.0]], "categories": [0]}
< > 在 GitHub 上更新