Datasets 文件

建立影片資料集

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

建立影片資料集

本指南將向您展示如何使用 VideoFolder 和一些元資料來建立影片資料集。這是一個無需編寫程式碼的解決方案,用於快速建立包含數千個影片的影片資料集。

您可以透過要求使用者先分享他們的聯絡資訊來控制對資料集的訪問。請查閱Gated datasets指南以獲取有關如何在 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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.