Datasets documentation
Görsel verilerini yükle
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
visionbağı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
imagesü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.pngAlternatif 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.pngVeri 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
ImageFolderveri 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.
datasetsAPI’si şu anda işlemleri Lance tablosuna aktarmıyor, bu nedenle daha büyük veri kümelerinde yavaş olabilir. Şimdilik,lancePython 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