Datasets documentation

Görsel verilerini yükle

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Görsel verilerini yükle

Görsel veri setleri, PIL nesneleri içeren Image türünde sütunlara sahiptir.

Görsel veri setleriyle çalışmak için vision bağımlılığının yüklü olması gerekir. Nasıl yükleneceğini öğrenmek için kurulum kılavuzuna göz atın.

Bir görüntü veri seti yüklediğinizde ve görüntü sütununu çağırdığınızda, görüntüler PIL Images olarak çözümlenir:

>>> from datasets import load_dataset, Image

>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")
>>> dataset[0]["image"]

Görüntü veri setine, veri setindeki tüm görüntü nesnelerini çözmek ve yeniden örneklemek zorunda kalmamak için önce satır dizinine, ardından image sütununa erişin - dataset[0]["image"] - . Aksi takdirde, büyük bir veri setiniz varsa bu yavaş ve zaman alıcı bir işlem olabilir.

Herhangi bir tür veri setinin nasıl yükleneceğine dair bir kılavuz için genel yükleme kılavuzuna göz atın.

Yerel dosyalar

Bir veri setini görüntü yolundan yükleyebilirsiniz. cast_column() fonksiyonunu kullanarak görüntü dosya yollarından oluşan bir sütunu kabul edin ve Image özelliği ile bunu bir PIL görüntüsüne dönüştürün:

>>> from datasets import Dataset, Image

>>> dataset = Dataset.from_dict({"image": ["path/to/image_1", "path/to/image_2", ..., "path/to/image_n"]}).cast_column("image", Image())
>>> dataset[0]["image"]
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1200x215 at 0x15E6D7160>]

Görsel nesnesini çözmek yerine yalnızca görsel veri setinin altta yatan yolunu yüklemek istiyorsanız, Image özelliğinde decode=False olarak ayarlayın:

>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train").cast_column("image", Image(decode=False))
>>> dataset[0]["image"]
{'bytes': None,
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/b0a21163f78769a2cf11f58dfc767fb458fc7cea5c05dccc0144a2c0f0bc1292/train/bean_rust/bean_rust_train.29.jpg'}

ImageFolder

Özel bir dataloader yazma gerektirmeyen bir ImageFolder veri seti oluşturucusu ile bir veri seti de yükleyebilirsiniz. Bu, ImageFolder'ın farklı görü görevleri için birkaç bin görüntü içeren görüntü veri setlerini hızlı bir şekilde oluşturmak ve yüklemek için ideal olmasını sağlar. Görüntü veri seti yapınız şu şekilde olmalıdır:

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

Alternatif olarak, örneğin şu tür bir meta veriye sahip olmalıdır:

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

Veri kümesi ImageFolder yapısını izliyorsa, doğrudan load_dataset() ile yükleyebilirsiniz:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")

Yerel veri kümeleri için bu, load_dataset() içinde imagefolder'ı ve data_dir içinde dizini manuel olarak geçmeye eşdeğerdir:

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

Ardından videolara PIL.Image nesneleri olarak erişebilirsiniz:

>>> dataset["train"][0]
{"image": <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1200x215 at 0x15E6D7160>, "label": 0}

>>> dataset["train"][-1]
{"image": <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1200x215 at 0x15E8DAD30>, "label": 1}

Üstveri dosyasındaki bilgileri yok saymak için load_dataset() içinde drop_metadata=True değerini ayarlayın:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)

Bir metadata dosyanız yoksa, ImageFolder etiket adını otomatik olarak dizin adından çıkarır. Otomatik olarak oluşturulan etiketleri kaldırmak istiyorsanız, drop_labels=True olarak ayarlayın. Bu durumda, veri setiniz yalnızca bir görüntü sütunu içerecektir:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)

Son olarak filters argümanı, etikete veya meta verilerdeki bir koşula dayalı olarak veri setinin yalnızca bir alt kümesini yüklemenizi sağlar. Bu, meta veriler Parquet formatındaysa özellikle faydalıdır, çünkü bu format hızlı filtrelemeyi mümkün kılar. Varsayılan olarak veri seti filtrelemeden önce tamamen indirildiği için, bu argümanı streaming=True ile kullanmanız da önerilir.

>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)

Kendi ImageFolder veri setinizi oluşturma hakkında daha fazla bilgi için Görsel veri seti oluşturma kılavuzuna göz atın.

WebDataset

WebDataset biçimi, TAR arşivlerinden oluşan bir klasöre dayanır ve büyük görüntü veri kümeleri için uygundur. Boyutları nedeniyle WebDatasets genellikle akış modunda yüklenir (streaming=True kullanılarak).

Bir WebDataset'i şu şekilde yükleyebilirsiniz:

>>> from datasets import load_dataset

>>> dataset = load_dataset("webdataset", data_dir="/path/to/folder", streaming=True)

Lance

Lance, açık kaynaklı çok modlu bir lakehouse tablo biçimidir. Lance tabloları, tabular verilerinizin yanı sıra metin ve skaler değerlerin yanı sıra görüntü, ses ve video gibi büyük ikili nesneleri (blob) da yerel olarak depolayabilir.

Lance, metadata ve görüntü blob'larını tek bir yerde bir arada tutarken, görüntü baytlarını yüklemeye gerek kalmadan yalnızca ilgilendiğiniz metadata sütunlarını verimli bir şekilde taramanıza olanak tanır. Hazır olduğunuzda, satırların küçük bir alt kümesini (görüntü blob'ları dahil) alabilir ve bunları doğrudan yerel dosya sisteminizdeki dosyalara yazabilirsiniz.

from datasets import load_dataset

# Return as a Hugging Face dataset
ds = load_dataset(
    "lance-format/laion-1m",
    split="train",
    streaming=True
)

dir_name = "laion_samples"
Path(dir_name).mkdir(exist_ok=True)

for idx, row in enumerate(ds.take(3)):
    with open(f"{dir_name}/{idx}.jpg", "wb") as f:
        f.write(row["image"])

Bu örnekte, image sütunu kodlanmış görüntü baytlarını içerdiğinden bunları doğrudan .jpg dosyalarına yazabilirsiniz.

datasets API’si şu anda işlemleri Lance tablosuna aktarmıyor, bu nedenle daha büyük veri kümelerinde yavaş olabilir. Şimdilik, lance Python paketini doğrudan kullanarak çok daha iyi performans elde edersiniz. Kullanım örnekleri için Hub üzerindeki dokümantasyona bakın.

Görsel kod çözme

Varsayılan olarak, bir veri setinde gezinirken görüntüler PIL.Images olarak sıralı biçimde çözümlenir. Ancak çoklu iş parçacıklı (multithreaded) çözümlenme kullanılarak veri setinin hızı önemli ölçüde artırılabilir:

>>> import os
>>> num_threads = num_threads = min(32, (os.cpu_count() or 1) + 4)
>>> dataset = dataset.decode(num_threads=num_threads)
>>> for example in dataset:  # up to 20 times faster !
...     ...

Çok iş parçacıklı işlemi num_threads parametresiyle etkinleştirebilirsiniz. Bu, uzaktan veri akışını hızlandırmak için özellikle faydalıdır. Ancak hızlı disklerdeki yerel veriler için num_threads=0 değerinden daha yavaş olabilir.

PIL.Images olarak çözümlenen görsellerle ilgilenmiyorsanız ve bunun yerine yol/baytlara erişmek istiyorsanız, çözümlenmeyi devre dışı bırakabilirsiniz:

>>> dataset = dataset.decode(False)

Not: IterableDataset.decode() şu anda yalnızca akış veri setleri için kullanılabilir.

Update on GitHub