Datasets documentation
Buat dataset gambar
Buat dataset gambar
Ada dua metode untuk membuat dan membagikan dataset gambar. Panduan ini akan menunjukkan cara Anda:
Buat dataset gambar dari file lokal di python dengan Dataset.push_to_hub(). Ini adalah cara mudah yang hanya membutuhkan beberapa langkah di python.
Buat dataset gambar dengan
ImageFolderdan beberapa metadata. Ini adalah solusi tanpa kode untuk membuat dataset gambar dengan cepat yang berisi beberapa ribu gambar.
Anda dapat mengontrol akses ke dataset Anda dengan meminta pengguna untuk membagikan informasi kontak mereka terlebih dahulu. Lihat panduan Gated datasets untuk informasi lebih lanjut tentang cara mengaktifkan fitur ini di Hub.
ImageFolder
ImageFolder adalah pembangun dataset yang dirancang untuk memuat dataset gambar dengan ribuan gambar secara cepat tanpa mengharuskan Anda menulis kode apa pun.
💡 Lihat hierarki pola Split untuk mempelajari lebih lanjut tentang bagaimana
ImageFoldermembuat split dataset berdasarkan struktur repositori dataset Anda.
ImageFolder secara otomatis menyimpulkan label kelas dari dataset Anda berdasarkan nama direktori. Simpan dataset Anda dalam struktur direktori seperti:
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.pngJika dataset mengikuti struktur ImageFolder, maka Anda dapat memuatnya langsung dengan load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("path/to/folder")Ini setara dengan meneruskan imagefolder secara manual di load_dataset() dan direktori di data_dir:
>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder")Anda juga dapat menggunakan imagefolder untuk memuat dataset yang melibatkan beberapa split. Untuk melakukannya, direktori dataset Anda harus memiliki struktur berikut:
folder/train/dog/golden_retriever.png
folder/train/cat/maine_coon.png
folder/test/dog/german_shepherd.png
folder/test/cat/bengal.pngJika semua file gambar berada dalam satu direktori atau tidak berada pada level struktur direktori yang sama, kolom
labeltidak akan ditambahkan secara otomatis. Jika Anda membutuhkannya, tetapkandrop_labels=Falsesecara eksplisit.
Jika ada informasi tambahan yang ingin Anda sertakan tentang dataset Anda, seperti teks caption atau bounding box, tambahkan sebagai file metadata.csv di folder Anda. Hal ini memungkinkan Anda dengan cepat membuat dataset untuk berbagai tugas computer vision seperti text captioning atau object detection. Anda juga dapat menggunakan file JSONL metadata.jsonl atau file Parquet metadata.parquet.
folder/train/metadata.csv
folder/train/0001.png
folder/train/0002.png
folder/train/0003.pngAnda juga dapat meng-zip gambar Anda, dan dalam hal ini setiap zip harus berisi gambar dan metadata
folder/train.zip
folder/test.zip
folder/validation.zipFile metadata.csv Anda harus memiliki field file_name atau *_file_name yang menghubungkan file gambar dengan metadata mereka:
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 imagesatau menggunakan 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"}Di sini, file_name harus berupa nama file gambar yang berada di samping file metadata. Secara lebih umum, ini harus berupa path relatif dari direktori yang berisi metadata ke file gambar.
Anda dapat menunjuk ke lebih dari satu gambar di setiap baris dalam dataset Anda, misalnya jika input dan output Anda sama-sama berupa gambar:
{"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"}Anda juga dapat mendefinisikan daftar gambar. Dalam hal itu, Anda perlu menamai field file_names atau *_file_names. Berikut adalah contohnya:
{"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"}Penamaan gambar
Dataset captioning gambar memiliki teks yang menggambarkan sebuah gambar. Contoh metadata.csv mungkin terlihat seperti:
file_name,text
0001.png,This is a golden retriever playing with a ball
0002.png,A german shepherd
0003.png,One chihuahuaMuat dataset dengan ImageFolder, dan kolom text untuk caption gambar akan dibuat:
>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"This is a golden retriever playing with a ball"Deteksi objek
Dataset deteksi objek memiliki kotak pembatas dan kategori yang mengidentifikasi objek dalam sebuah gambar. Contoh metadata.jsonl mungkin terlihat seperti:
{"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]}}Muat dataset dengan ImageFolder, dan kolom objects akan dibuat berisi kotak pembatas dan kategorinya:
>>> 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]}Unggah dataset ke Hub
Setelah Anda membuat dataset, Anda dapat membagikannya ke Hub dengan metode push_to_hub(). Pastikan Anda telah menginstal pustaka huggingface_hub dan telah masuk ke akun Hugging Face Anda (lihat tutorial Upload with Python untuk detail lebih lanjut).
Unggah dataset Anda dengan 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
Format WebDataset didasarkan pada arsip TAR dan cocok untuk dataset gambar besar. Anda dapat mengelompokkan gambar Anda ke dalam arsip TAR (misalnya 1GB gambar per arsip TAR) dan memiliki ribuan arsip TAR:
folder/train/00000.tar
folder/train/00001.tar
folder/train/00002.tar
...Di arsip, setiap contoh terdiri dari file-file yang berbagi prefiks yang sama:
e39871fd9fd74f55.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.jpg
f18b91585c4d3f3e.json
ede6e66b2fb59aab.jpg
ede6e66b2fb59aab.json
ed600d57fcee4f94.jpg
ed600d57fcee4f94.json
...Anda dapat menempatkan label/keterangan/kotak batas gambar Anda menggunakan file JSON atau teks, misalnya.
Muat WebDataset Anda dan akan dibuat satu kolom per akhiran file (di sini “jpg” dan “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]}Anda juga dapat memiliki beberapa gambar per contoh seperti ini:
e39871fd9fd74f55.input.jpg
e39871fd9fd74f55.output.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.input.jpg
f18b91585c4d3f3e.output.jpg
f18b91585c4d3f3e.json
...Untuk detail lebih lanjut tentang format WebDataset dan pustaka python, silakan periksa dokumentasi WebDataset.
Lance
Lance adalah format tabel lakehouse multimodal terbuka. Tabel Lance dapat menyimpan secara native tidak hanya teks dan nilai skalar, tetapi juga objek biner besar (blobs) seperti gambar, audio, dan video berdampingan dengan data tabular Anda.
Berangkat dari file gambar di disk beserta metadata terkait (misalnya, caption dan dimensi), Anda dapat menulis dataset Lance yang mandiri ke direktori *.lance lokal. Tabel yang dihasilkan dapat menyimpan kolom metadata Anda berdampingan dengan kolom image yang berisi byte gambar yang telah dikodekan.
Sebagai contoh, Anda mungkin memulai dengan metadata seperti:
{'caption': 'Cordelia and Dudley on their wedding day last year', 'height': 315, 'width': 233}
{'caption': 'Statistics on challenges for automation in 2021', 'height': 299, 'width': 701}Anda dapat mendefinisikan skema pyarrow untuk metadata dan byte gambar Anda, membangun tabel, dan menuliskannya sebagai dataset Lance:
import lance
import pyarrow as pa
schema = pa.schema(
[
pa.field("caption", pa.utf8()),
pa.field("height", pa.int32()),
pa.field("width", pa.int32()),
# ... add any additional metadata columns you want here ...
pa.field("image", pa.binary()),
]
)
# Provide image files alongside metadata
rows = [
{
"image_path": "/path/to/images/0001.jpg",
"caption": "Cordelia and Dudley on their wedding day last year",
"height": 315,
"width": 233,
},
{
"image_path": "/path/to/images/0002.jpg",
"caption": "Statistics on challenges for automation in 2021",
"height": 299,
"width": 701,
},
]
image_bytes = []
for r in rows:
with open(r["image_path"], "rb") as f:
image_bytes.append(f.read())
table = pa.table(
{
"caption": [r["caption"] for r in rows],
"height": [r["height"] for r in rows],
"width": [r["width"] for r in rows],
"image": image_bytes,
},
schema=schema,
)
ds = lance.write_dataset(
table,
"./images.lance",
schema=schema,
mode="create",
)Berikut adalah tampilan representatif dari tabel Lance yang menyimpan gambar (kolom image berisi byte yang telah dikodekan):
+-----------------------------------------------+--------+-------+-----+------------------------------+ | caption | height | width | ... | image | +-----------------------------------------------+--------+-------+-----+------------------------------+ | "Cordelia and Dudley on their wedding ..." | 315 | 233 | ... | b"\\xff\\xd8\\xff...\\xd9" | | "Statistics on challenges for automation ..." | 299 | 701 | ... | b"\\xff\\xd8\\xff...\\xd9" | +-----------------------------------------------+--------+-------+-----+------------------------------+
Dengan pendekatan ini, Anda dapat menyimpan dataset gambar berukuran sembarang besar di Lance. Direktori images.lance/ yang dihasilkan beserta file *.lance di dalamnya dapat diunggah ke Hugging Face Hub, sama seperti contoh lain di atas. Lihat dataset lance-format/laion-1m di Hub untuk contoh dataset gambar Lance.
Untuk detail lebih lanjut tentang cara bekerja dengan dataset Lance, lihat dokumentasi Lance.
Update on GitHub