Datasets 文件

建立影像資料集

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

建立影像資料集

有兩種方法可以建立和分享影像資料集。本指南將向您展示如何:

  • 使用 Python 中的本地檔案和 Dataset.push_to_hub() 建立影像資料集。這是一種簡單的方法,在 Python 中只需幾個步驟即可完成。

  • 使用 ImageFolder 和一些元資料建立影像資料集。這是一個無需編寫程式碼的解決方案,可以快速建立包含數千張影像的資料集。

您可以透過要求使用者先分享他們的聯絡資訊來控制對資料集的訪問。請檢視 受保護的資料集 指南,瞭解更多關於如何在 Hub 上啟用此功能的資訊。

ImageFolder

ImageFolder 是一個數據集構建器,旨在快速載入包含數千張影像的影像資料集,而無需您編寫任何程式碼。

💡 檢視 切分模式層級結構 以瞭解更多關於 ImageFolder 如何根據您的資料集倉庫結構建立資料集切分的資訊。

ImageFolder 會根據目錄名稱自動推斷資料集的類標籤。請將您的資料集儲存在類似以下的目錄結構中:

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

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

如果資料集遵循 ImageFolder 結構,那麼您可以直接使用 load_dataset() 載入它

>>> from datasets import load_dataset

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

這等同於在 load_dataset() 中手動傳遞 imagefolder,並在 data_dir 中指定目錄

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

您也可以使用 imagefolder 來載入包含多個切分的資料集。為此,您的資料集目錄應具有以下結構

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

如果所有影像檔案都包含在單個目錄中,或者它們不在同一級別的目錄結構中,`label` 列將不會自動新增。如果需要它,請顯式設定 `drop_labels=False`。

如果您想包含有關資料集的其他資訊,例如文字標題或邊界框,請將其作為 `metadata.csv` 檔案新增到您的資料夾中。這使您可以快速為不同的計算機視覺任務(如文字字幕或目標檢測)建立資料集。您還可以使用 JSONL 檔案 `metadata.jsonl` 或 Parquet 檔案 `metadata.parquet`。

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

您也可以壓縮您的影像,在這種情況下,每個 zip 檔案應包含影像和元資料

folder/train.zip
folder/test.zip
folder/validation.zip

您的 `metadata.csv` 檔案必須有一個 `file_name` 或 `*_file_name` 欄位,用於將影像檔案與其元資料鏈接起來

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

或使用 metadata.jsonl

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

這裡的 `file_name` 必須是元資料檔案旁邊影像檔案的名稱。更一般地說,它必須是從包含元資料的目錄到影像檔案的相對路徑。

可以在資料集的每一行中指向多張影像,例如,如果您的輸入和輸出都是影像:

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

您還可以定義影像列表。在這種情況下,您需要將欄位命名為 `file_names` 或 `*_file_names`。下面是一個例子

{"frames_file_names": ["0001_t0.png", "0001_t1.png"], label: "moving_up"}
{"frames_file_names": ["0002_t0.png", "0002_t1.png"], label: "moving_down"}
{"frames_file_names": ["0003_t0.png", "0003_t1.png"], label: "moving_right"}

影像字幕

影像字幕資料集包含描述影像的文字。一個 `metadata.csv` 的例子可能如下所示

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

使用 ImageFolder 載入資料集,它將為影像字幕建立一個 `text` 列

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

目標檢測

目標檢測資料集包含識別影像中物體的邊界框和類別。一個示例 `metadata.jsonl` 可能如下所示:

{"file_name": "0001.png", "objects": {"bbox": [[302.0, 109.0, 73.0, 52.0]], "categories": [0]}}
{"file_name": "0002.png", "objects": {"bbox": [[810.0, 100.0, 57.0, 28.0]], "categories": [1]}}
{"file_name": "0003.png", "objects": {"bbox": [[160.0, 31.0, 248.0, 616.0], [741.0, 68.0, 202.0, 401.0]], "categories": [2, 2]}}

使用 ImageFolder 載入資料集,它將建立一個 `objects` 列,其中包含邊界框和類別

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["objects"]
{"bbox": [[302.0, 109.0, 73.0, 52.0]], "categories": [0]}

將資料集上傳到 Hub

建立資料集後,您可以使用 push_to_hub() 方法將其分享到 Hub。請確保您已安裝 huggingface_hub 庫並已登入到您的 Hugging Face 帳戶(有關更多詳細資訊,請參閱使用 Python 上傳教程)。

使用 push_to_hub() 上傳您的資料集

>>> from datasets import load_dataset

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder", split="train")
>>> dataset.push_to_hub("stevhliu/my-image-captioning-dataset")

WebDataset

WebDataset 格式基於 TAR 歸檔,適用於大型影像資料集。實際上,您可以將影像分組到 TAR 歸檔中(例如,每個 TAR 歸檔 1GB 的影像),並擁有數千個 TAR 歸檔

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

在歸檔檔案中,每個示例由共享相同字首的檔案組成

e39871fd9fd74f55.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.jpg
f18b91585c4d3f3e.json
ede6e66b2fb59aab.jpg
ede6e66b2fb59aab.json
ed600d57fcee4f94.jpg
ed600d57fcee4f94.json
...

您可以使用 JSON 或文字檔案等方式來存放您的影像標籤/字幕/邊界框。

載入您的 WebDataset,它會為每個檔案字尾(這裡是“jpg”和“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]}

每個樣本也可以包含多張圖片,像這樣

e39871fd9fd74f55.input.jpg
e39871fd9fd74f55.output.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.input.jpg
f18b91585c4d3f3e.output.jpg
f18b91585c4d3f3e.json
...

有關 WebDataset 格式和 Python 庫的更多詳情,請查閱 WebDataset 文件

< > 在 GitHub 上更新

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