Hub documentation

مجموعة بيانات الصور

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

مجموعة بيانات الصور

ستوضح لك هذه الدليل كيفية تكوين مستودع مجموعة البيانات الخاصة بك مع ملفات الصور. يمكنك العثور على أمثلة مرافقة للمستودعات في مجموعة أمثلة مجموعات بيانات الصور.

يتمتع مجموعة بيانات ذات بنية مدعومة وصيغ ملفات تلقائيًا بمشغل مجموعات البيانات في صفحتها على Hub.

تُحمَّل معلومات إضافية عن الصور الخاصة بك - مثل التسميات أو صناديق الحدود للكشف عن الكائنات - تلقائيًا ما دمتَ تتضمن هذه المعلومات في ملف بيانات وصفية (metadata.csv/metadata.jsonl/metadata.parquet).

بديلًا عن ذلك، يمكن أن تكون الصور في ملفات Parquet أو في أرشيفات TAR تتبع صيغة WebDataset.

الصور فقط

إذا كان مجموعة بياناتك تتكون من عمود واحد يحتوي على الصور فقط، يمكنك ببساطة تخزين ملفات الصور الخاصة بك في الجذر:

my_dataset_repository/
├── 1.jpg
├── 2.jpg
├── 3.jpg
└── 4.jpg

أو في مجلد فرعي:

my_dataset_repository/
└── images
    ├── 1.jpg
    ├── 2.jpg
    ├── 3.jpg
    └── 4.jpg

تُؤيَّد عدة صيغ في الوقت نفسه، بما في ذلك PNG وJPEG وTIFF وWebP.

my_dataset_repository/
└── images
    ├── 1.jpg
    ├── 2.png
    ├── 3.tiff
    └── 4.webp

إذا كان لديك عدة تقسيمات، يمكنك وضع صورك في مجلدات تحمل أسماء مناسبة:

my_dataset_repository/
├── train
│   ├── 1.jpg
│   └── 2.jpg
└── test
    ├── 3.jpg
    └── 4.jpg

راجع أسماء الملفات والتقسيمات لمزيد من المعلومات وطرق أخرى لتنظيم البيانات حسب التقسيمات.

أعمدة إضافية

إذا كانت هناك معلومات إضافية ترغب في تضمينها حول مجموعة بياناتك، مثل التسميات النصية أو صناديق الحدود، أضفها كملف metadata.csv في مستودعك. يتيح لك ذلك إنشاء مجموعات بيانات بسرعة لمهام مختلفة في مجال الرؤية الحاسوبية مثل التسمية النصية أو كشف الكائنات.

my_dataset_repository/
└── train
    ├── 1.jpg
    ├── 2.jpg
    ├── 3.jpg
    ├── 4.jpg
    └── metadata.csv

يجب أن يحتوي ملف metadata.csv الخاص بك على عمود file_name يربط ملفات الصور ببياناتها الوصفية:

file_name,text
1.jpg,a drawing of a green pokemon with red eyes
2.jpg,a green and yellow toy with a red nose
3.jpg,a red and white ball with an angry look on its face
4.jpg,a cartoon ball with a smile on its face

يمكنك أيضًا استخدام ملف JSONL metadata.jsonl:

{"file_name": "1.jpg","text": "a drawing of a green pokemon with red eyes"}
{"file_name": "2.jpg","text": "a green and yellow toy with a red nose"}
{"file_name": "3.jpg","text": "a red and white ball with an angry look on its face"}
{"file_name": "4.jpg","text": "a cartoon ball with a smile on its face"}

وللبيانات الأكبر حجماً أو إذا كنت مهتماً بميزات استرجاع البيانات المتقدمة، يمكنك استخدام ملف Parquet metadata.parquet.

المسارات النسبية

يجب أن يكون ملف البيانات الوصفية موجودًا إما في نفس المجلد الذي توجد فيه الصور المرتبطة به، أو في أي مجلد أبوي، كما في هذا المثال:

my_dataset_repository/
└── train
    ├── images
    │   ├── 1.jpg
    │   ├── 2.jpg
    │   ├── 3.jpg
    │   └── 4.jpg
    └── metadata.csv

في هذه الحالة، يجب أن تكون عمود file_name مسارًا نسبيًا كاملًا إلى الصور، وليس مجرد اسم الملف:

file_name,text
images/1.jpg,a drawing of a green pokemon with red eyes
images/2.jpg,a green and yellow toy with a red nose
images/3.jpg,a red and white ball with an angry look on its face
images/4.jpg,a cartoon ball with a smile on it's face

لا يمكن وضع ملفات البيانات الوصفية في مجلدات فرعية من المجلد الذي تحتوي عليه الصور.

بشكلٍ أكثر عمومية، يجب أن تحتوي أي عمود يُسمى file_name أو *_file_name على المسار النسبي الكامل للصور.

تصنيف الصور

لأُطُر بيانات تصنيف الصور، يمكنك أيضًا استخدام إعداد بسيط: استخدم المجلدات لتسمية فئات الصور. احفظ ملفات الصور الخاصة بك في بنية مجلدات على النحو التالي:

my_dataset_repository/
├── green
│   ├── 1.jpg
│   └── 2.jpg
└── red
    ├── 3.jpg
    └── 4.jpg

يتضمن مجموعة البيانات المُنشأة بهذه البنية عمودين: image وlabel (بقيم green وred).

يمكنك أيضًا توفير عدة تقسيمات. للقيام بذلك، يجب أن يكون لمجلد مجموعة البيانات البنية التالية (انظر أسماء الملفات والتقسيمات لمزيد من المعلومات):

my_dataset_repository/
├── test
│   ├── green
│   │   └── 2.jpg
│   └── red
│       └── 4.jpg
└── train
    ├── green
    │   └── 1.jpg
    └── red
        └── 3.jpg

يمكنك تعطيل الإضافة التلقائية لعمود label في إعدادات YAML. إذا لم تحمل أسماء المجلدات أي معنى خاص، فاضبط drop_labels: true في ترويسة README:

configs:
  - config_name: default  # Name of the dataset subset, if applicable.
    drop_labels: true

مجموعات بيانات كبيرة الحجم

تنسيق WebDataset

يناسب تنسيق WebDataset مجموعات البيانات الكبيرة من الصور (انظر timm/imagenet-12k-wds على سبيل المثال). يتكون من أرشيفات TAR تحتوي على الصور وبياناتها الوصفية، وهو مُحسَّن للبث. وهو مفيد إذا كان لديك عدد كبير من الصور ولتحصل على محمّلات بيانات للبث للتدريب على نطاق واسع.

my_dataset_repository/
├── train-0000.tar
├── train-0001.tar
├── ...
└── train-1023.tar

لإنشاء أرشيف TAR بصيغة WebDataset، أنشئ مجلداً يحتوي على الصور وملفات البيانات الوصفية المراد أرشفتها، ثم أنشئ أرشيف TAR باستخدام أمر tar على سبيل المثال. عادةً ما يكون الحجم المعتاد لكل أرشيف حوالي 1 غيغابايت. تأكد من أن كل زوج من الصورة والبيانات الوصفية يتشاركان في نفس بادئة الملف، على سبيل المثال:

train-0000/
├── 000.jpg
├── 000.json
├── 001.jpg
├── 001.json
├── ...
├── 999.jpg
└── 999.json

لاحظ أنه من أجل راحة المستخدم وتمكين Dataset Viewer، يتم تحويل كل مجموعة بيانات مستضافة في Hub تلقائيًا إلى صيغة Parquet حتى حجم 5 جيجابايت. اقرأ المزيد حول ذلك في وثائق Parquet format.

تنسيق Parquet

بدلاً من رفع الصور وبيانات الوصف كملفات منفصلة، يمكنك تضمين كل شيء داخل ملف Parquet. يكون هذا مفيدًا إذا كان لديك عدد كبير من الصور، أو إذا كنت ترغب في تضمين أعمدة صور متعددة، أو إذا كنت تريد تخزين معلومات إضافية عن الصور في نفس الملف. كما أن Parquet مفيد لتخزين بيانات مثل البايتات الخام، وهو ما لا يدعمه JSON/CSV.

my_dataset_repository/
└── train.parquet

يمكن إنشاء ملفات Parquet تحتوي على بيانات صور باستخدام pandas أو مكتبة datasets. لإنشاء ملفات Parquet تحتوي على بيانات صور في pandas، يمكنك استخدام pandas-image-methods وdf.to_parquet(). في datasets، يمكنك تعيين نوع العمود إلى Image() واستخدام الطريقة ds.to_parquet(...) أو ds.push_to_hub(...). يمكنك العثور على دليل حول تحميل مجموعات بيانات الصور في datasets هنا.

بديلًا عن ذلك، يمكنك ضبط نوع الصورة يدويًا لملفات Parquet التي تم إنشاؤها باستخدام أدوات أخرى. أولًا، تأكد من أن أعمدة الصور لديك من النوع struct، مع حقل ثنائي "bytes" لبيانات الصورة وحقل نصي "path" لاسم ملف الصورة أو مساره. ثم يجب عليك تحديد أنواع الميزات للأعمدة مباشرةً في YAML داخل ترويسة README، على سبيل المثال:

dataset_info:
  features:
  - name: image
    dtype: image
  - name: caption
    dtype: string

يُوصى باستخدام Parquet للصور الصغيرة (أقل من 1 ميغابايت لكل صورة) ومجموعات الصفوف الصغيرة (100 صفوف لكل مجموعة صفوف، وهو ما يستخدمه datasets للصور). أما للصور الأكبر، فيُوصى باستخدام صيغة WebDataset، أو مشاركة ملفات الصور الأصلية (اختياريًا مع ملفات البيانات الوصفية، ووفقًا لـتوصيات وحدود المستودعات المتعلقة بالتخزين وعدد الملفات).

Update on GitHub