Datasets documentation
معالجة بيانات الصور
معالجة بيانات الصور
يُظهر هذا الدليل طرقًا محددة لمعالجة مجموعات بيانات الصور. تعلّم كيفية:
- استخدم map() مع مجموعة بيانات الصور.
- طبّق تحسينات البيانات على مجموعة بيانات باستخدام set_transform().
للاطلاع على دليل حول كيفية معالجة أي نوع من مجموعات البيانات، راجع دليل العملية العامة.
خريطة
يمكن لدالة map() تطبيق التحويلات على مجموعة بيانات كاملة.
على سبيل المثال، أنشئ دالة Resize أساسية:
>>> def transforms(examples):
... examples["pixel_values"] = [image.convert("RGB").resize((100,100)) for image in examples["image"]]
... return examplesالآن استخدم دالة map() لتغيير حجم مجموعة البيانات بأكملها، واضبط batched=True لتسريع العملية من خلال قبول دفعات من الأمثلة. تُعيد التحويلة pixel_values كائن PIL.Image قابل للتخزين المؤقت:
>>> dataset = dataset.map(transforms, remove_columns=["image"], batched=True)
>>> dataset[0]
{'label': 6,
'pixel_values': <PIL.PngImagePlugin.PngImageFile image mode=RGB size=100x100 at 0x7F058237BB10>}يوفر ملف التخزين المؤقت الوقت لأنك لا تحتاج إلى تنفيذ نفس التحويل مرتين. يُعدّ دالة map() الأنسب للعمليات التي تُنفَّذ مرة واحدة فقط لكل تدريب - مثل تغيير حجم صورة - بدلاً من استخدامها للعمليات التي تُنفَّذ في كل حقبة، مثل عمليات زيادة البيانات.
يتطلب map() بعض الذاكرة، لكن يمكنك تقليل متطلباته من الذاكرة باستخدام المعلمات التالية:
- يحدد
batch_sizeعدد الأمثلة التي تتم معالجتها في كل استدعاء لدالة التحويل. - يحدد
writer_batch_sizeعدد الأمثلة المعالجة التي تُحفظ في الذاكرة قبل تخزينها.
تتخذ قيمتا المعاملين الافتراضية 1000، وهو ما قد يكون مكلفاً إذا كنت تخزّن الصور. خفّض هاتين القيمتين لتقليل استهلاك الذاكرة عند استخدام map().
تطبيق التحويلات
🤗 يطبّق Datasets عمليات زيادة البيانات من أي مكتبة أو حزمة على مجموعة بياناتك. يمكن تطبيق التحويلات على دفعات البيانات بشكل فوري باستخدام set_transform()، مما يستهلك مساحة أقراص أقل.
يستخدم المثال التالي torchvision، لكن يمكنك بحرية استخدام مكتبات أخرى لزيادة البيانات مثل Albumentations وKornia وimgaug.
على سبيل المثال، إذا كنت ترغب في تغيير خصائص اللون بصورة عشوائية:
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [
... ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.7),
... ToTensor(),
... ]
... )أنشئ دالةً لتطبيق تحويل ColorJitter:
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examplesطبّق التحويل باستخدام دالة set_transform():
>>> dataset.set_transform(transforms)