Datasets documentation
Bir görüntü veri seti oluşturun
Bir görüntü veri seti oluşturun
Bir görüntü veri seti oluşturmak ve paylaşmak için iki yöntem vardır. Bu kılavuz size şunları gösterecektir:
Python'da yerel dosyalardan bir görüntü veri seti oluşturun ve Dataset.push_to_hub() ile paylaşın. Bu, Python'da yalnızca birkaç adım gerektiren kolay bir yöntemdir.
ImageFolderile bazı meta veriler içeren bir görüntü veri seti oluşturun. Bu, birkaç bin görüntü içeren bir görüntü veri setini hızlı bir şekilde oluşturmak için kod gerektirmeyen bir çözümdür.
Veri setinize erişimi, kullanıcıların önce iletişim bilgilerini paylaşmasını gerektirerek kontrol edebilirsiniz. Bu özelliği Hub'da nasıl etkinleştireceğinize dair daha fazla bilgi için Gated datasets kılavuzuna göz atın.
ImageFolder
ImageFolder, kod yazma gerektirmeden birkaç bin görüntü içeren bir görüntü veri setini hızlıca yüklemek için tasarlanmış bir veri seti oluşturucudur.
💡
ImageFolder'ın veri seti deposu yapınıza dayalı olarak veri seti bölümlerini nasıl oluşturduğunu öğrenmek için Split pattern hierarchy'a göz atın.
ImageFolder, veri setinizin sınıf etiketlerini dizin adlarına dayanarak otomatik olarak çıkarır. Veri setinizi aşağıdaki gibi bir dizin yapısında saklayın:
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.pngVeri kümesi ImageFolder yapısını izliyorsa, doğrudan load_dataset() ile yükleyebilirsiniz:
>>> from datasets import load_dataset
>>> dataset = load_dataset("path/to/folder")Bu, load_dataset() içinde imagefolder değerini ve dizini data_dir içinde elle geçirmeye eşdeğerdir:
>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder")Birden fazla bölüme sahip veri setlerini yüklemek için imagefolder kullanabilirsiniz. Bunu yapmak için veri seti dizininizin aşağıdaki yapıya sahip olması gerekir:
folder/train/dog/golden_retriever.png
folder/train/cat/maine_coon.png
folder/test/dog/german_shepherd.png
folder/test/cat/bengal.pngTüm görüntü dosyaları tek bir dizinde yer alıyorsa veya aynı dizin yapısı seviyesinde değillerse,
labelsütunu otomatik olarak eklenmez. Gerekliysedrop_labels=Falsedeğerini açıkça belirleyin.
Veri setiniz hakkında eklemek istediğiniz ek bilgiler varsa, örneğin metin açıklamaları veya sınırlayıcı kutular, bunları klasörünüze metadata.csv dosyası olarak ekleyin. Bu sayede metin açıklama veya nesne algılama gibi farklı bilgisayarlı görme görevleri için veri setlerini hızla oluşturabilirsiniz. Ayrıca bir JSONL dosyası olan metadata.jsonl veya bir Parquet dosyası olan metadata.parquet kullanabilirsiniz.
folder/train/metadata.csv
folder/train/0001.png
folder/train/0002.png
folder/train/0003.pngGörsellerinizi ayrıca sıkıştırılmış (zip) dosya olarak da kullanabilirsiniz; bu durumda her zip dosyası hem görselleri hem de meta verileri içermelidir.
folder/train.zip
folder/test.zip
folder/validation.zipmetadata.csv dosyanız, görüntü dosyalarını metadata ile ilişkilendiren bir file_name veya *_file_name alanına sahip olmalıdır:
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 imagesveya metadata.jsonl kullanarak:
{"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"}Burada file_name, metadata dosyasının yanındaki görüntü dosyasının adı olmalıdır. Daha genel olarak, metadata dosyasının bulunduğu dizinden görüntü dosyasına göre göreli yol olmalıdır.
Veri setinizdeki her satırda birden fazla görseli işaretlemek mümkündür, örneğin hem girdi hem de çıktınız görsel ise:
{"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"}Görsel listeleri de tanımlayabilirsiniz. Bu durumda alanın adını file_names veya *_file_names olarak belirlemeniz gerekir. İşte bir örnek:
{"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"}Görsel açıklama
Görsel açıklama veri setleri, bir görseli tanımlayan metinler içerir. metadata.csv örneği aşağıdaki gibi görünebilir:
file_name,text
0001.png,This is a golden retriever playing with a ball
0002.png,A german shepherd
0003.png,One chihuahuaVeri setini ImageFolder ile yükleyin; bu işlem, görsel açıklamaları için bir text sütunu oluşturur:
>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"This is a golden retriever playing with a ball"Nesne algılama
Nesne algılama veri setleri, bir görüntüdeki nesneleri tanımlayan sınırlayıcı kutulara ve kategorilere sahiptir. metadata.jsonl örneği şu görünüme sahip olabilir:
{"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]}}Veri setini ImageFolder ile yükleyin; bu işlem, sınırlayıcı kutuları ve kategorileri içeren bir objects sütunu oluşturacaktır:
>>> 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]}Veri setini Hub'a yükle
Bir veri seti oluşturduktan sonra, onu push_to_hub() yöntemiyle Hub ile paylaşabilirsiniz. huggingface_hub kütüphanesinin yüklü olduğundan ve Hugging Face hesabınıza giriş yaptığınızdan emin olun (daha fazla ayrıntı için Python ile Yükleme öğreticisi bölümüne bakın).
Veri setinizi push_to_hub() ile yükleyin:
>>> 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 formatı TAR arşivlerine dayanır ve büyük görüntü veri kümeleri için uygundur. Gerçekten de görüntülerinizi TAR arşivlerinde gruplayabilirsiniz (ör. her TAR arşivi başına 1 GB görüntü) ve binlerce TAR arşivine sahip olabilirsiniz:
folder/train/00000.tar
folder/train/00001.tar
folder/train/00002.tar
...Arşivlerde, her örnek aynı öneki paylaşan dosyalardan oluşur:
e39871fd9fd74f55.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.jpg
f18b91585c4d3f3e.json
ede6e66b2fb59aab.jpg
ede6e66b2fb59aab.json
ed600d57fcee4f94.jpg
ed600d57fcee4f94.json
...Görsellerinizin etiketlerini/açıklamalarını/sınır kutularını örneğin JSON veya metin dosyaları kullanarak ekleyebilirsiniz.
WebDataset'inizi yükleyin ve her dosya uzantısı için bir sütun oluşturulacaktır (burada “jpg” ve “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]}Her örnek için birden fazla görüntüye sahip olmak da mümkündür:
e39871fd9fd74f55.input.jpg
e39871fd9fd74f55.output.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.input.jpg
f18b91585c4d3f3e.output.jpg
f18b91585c4d3f3e.json
...WebDataset formatı ve python kütüphanesi hakkında daha fazla ayrıntı için lütfen WebDataset dokümantasyonuna göz atın.
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.
Diskteki görüntü dosyaları ve ilişkili meta verilerden (örneğin, açıklamalar ve boyutlar) başlayarak, yerel bir *.lance dizinine kendi içinde tutarlı bir Lance veri seti yazabilirsiniz. Sonuçta oluşan tablo, kodlanmış görüntü baytlarını içeren bir image sütunuyla birlikte meta veri sütunlarınızı saklayabilir.
Örneğin, şu tür bir meta veriden başlayabilirsiniz:
{'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}Metadata ve görüntü baytlarınız için bir pyarrow şeması tanımlayabilir, bir tablo oluşturabilir ve bunu bir Lance veri seti olarak yazabilirsiniz:
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",
)Görselleri depolayan bir Lance tablosunun nasıl görünebileceğine dair temsilî bir görünüm aşağıdadır (image sütunu kodlanmış baytları içerir):
+-----------------------------------------------+--------+-------+-----+------------------------------+ | 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" | +-----------------------------------------------+--------+-------+-----+------------------------------+
Bu yaklaşımı kullanarak, Lance'ta keyfi büyüklükte görüntü veri kümeleri depolayabilirsiniz. Sonuç olarak oluşan images.lance/ dizini ve içindeki *.lance dosyaları, yukarıdaki diğer örneklerde olduğu gibi Hugging Face Hub'a yüklenebilir. Lance görüntü veri kümesinin bir örneği için lance-format/laion-1m Hub'daki veri kümesine bakın.
Lance veri kümeleriyle çalışma hakkında daha fazla ayrıntı için Lance belgelerini inceleyin.
Update on GitHub