
انواع روشهای لود داده تصویری در کراس و تنسرفلو
در کراس و TensorFlow، میتوانید از چند روش مختلف برای لود دادههای تصویری استفاده کنید. در زیر به سه روش اصلی، ImageDataGenerator، tf.data و image_dataset_from_directory، می پردازیم :
1. ImageDataGenerator

ImageDataGenerator یک کلاس در keras.preprocessing.image است که برای تغییرات و تبدیلات تصاویر استفاده میشود. این روش بیشتر برای Augmentation تصاویر ستفاده میشود.
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
# ساخت یک شیء از ImageDataGenerator
datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest')
# خواندن و تغییر یک تصویر
img = plt.imread('path/to/your/image.jpg')
img = datagen.random_transform(img)
# نمایش تصویر اصلی و تصویر تغییر یافته
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.imshow(plt.imread('path/to/your/image.jpg'))
plt.title('Original Image')
plt.subplot(1, 2, 2)
plt.imshow(img)
plt.title('Transformed Image')
plt.show()
2. tf.data

tf.data یک API در TensorFlow است که برای ایجاد ورودی پیشرفته برای مدلهای یادگیری عمیق استفاده میشود. این امکان را فراهم میکند تا دادههای ورودی را به شکلی کارآمد و بهینه به مدل منتقل کنید.
import tensorflow as tf
# تعریف تابع برای پردازش تصاویر
def preprocess_image(image_path):
# خواندن تصویر
img = tf.io.read_file(image_path)
# دیکود تصویر
img = tf.image.decode_image(img, channels=3)
# تغییر اندازه تصویر به اندازه مشخص
img = tf.image.resize(img, [224, 224])
# نرمالیزه کردن مقادیر پیکسلها
img = img / 255.0
return img
# ایجاد یک دیتاست با استفاده از tf.data
image_paths = ['path/image1.jpg', 'path//image2.jpg', ...]
dataset = tf.data.Dataset.from_tensor_slices(image_paths)
dataset = dataset.map(preprocess_image)
dataset = dataset.batch(32) # انجام batch بر روی دیتاست
3. image_dataset_from_directory

image_dataset_from_directory یک تابع در TensorFlow است که برای خواندن تصاویر از یک دایرکتوری و ایجاد یک دیتاست از آنها برای استفاده در مدلهای یادگیری عمیق مفید است.
from tensorflow.keras.preprocessing import image_dataset_from_directory
# مسیر دایرکتوری حاوی دستههای مختلف از تصاویر
data_dir = 'path/to/your/dataset'
# ساخت دیتاست از دایرکتوری
dataset = image_dataset_from_directory(data_dir, batch_size=32, image_size=(128, 128), validation_split=0.2)
این سه روش اصلی برای لود داده تصویری در TensorFlow و کراس استفاده میشوند، و هرکدام دارای ویژگیها و کاربردهای خاص خود هستند. انتخاب یک روش به وابستگی از نیازها و موارد مختلف شماست که در ادامه به بررسی آن می پردازیم:
ImageDataGenerator
- کاربرد:
- استفاده اصلی این کلاس در Augmentation تصاویر (افزایش تنوع دادهها با تغییرات مختلف) در مرحله آموزش مدلهای یادگیری عمیق است.
- مزایا
- ساده برای استفاده و پیادهسازی.
- تعداد زیادی از تبدیلات تصویری را پشتیبانی میکند.
- مناسب برای پردازش تصاویر به صورت آنی (online) در طول آموزش.
- محدودیتها
- نمیتواند دادهها را به شکل batch بخواند و به مدل دهد.
tf.data
- کاربرد
- استفاده از tf.data برای ایجاد ورودی به مدلهای یادگیری عمیق.
- مدیریت داده به شکل کارآمد و بهینه برای تشکیل دیتاستها و استفاده از ویژگیهای مختلف مانند parallel loading و prefetching.
- مزایا
- انعطافپذیری بیشتر در ایجاد دادههای ورودی.
- امکان استفاده از توابع map و batch برای تغییرات دلخواه روی داده.
- مناسب برای پردازش تصاویر به صورت batch و offline.
- محدودیتها
- ممکن است پیادهسازی نسبتاً پیچیدهتری نسبت به ImageDataGenerator داشته باشد.
image_dataset_from_directory
- کاربرد
- خواندن و ساخت دیتاست از تصاویر موجود در یک دایرکتوری.
- ساخت یک دیتاست آماده برای استفاده در آموزش یا ارزیابی مدلهای یادگیری عمیق.
- مزایا
- سهولت در ساخت یک دیتاست از تصاویر در یک دایرکتوری با تقسیمبندی برچسبها.
- امکان تعیین دقیق اندازه تصاویر و دستهبندی آنها.
- ساختار مشخص و آسان برای استفاده در آموزش مدل.
- محدودیتها
- ممکن است در برخی موارد از انعطافپذیری کمتری نسبت به tf.data برخوردار باشد.
با توجه به موارد بالا، انتخاب بین این سه روش به وابستگی از نیازهای خاص و شرایط پروژه شماست. در بسیاری از موارد، میتوانید از ترکیب این سه روش برای بهینهسازی عملکرد و کارایی مدل خود استفاده کنید.
سوالات
1. کدام عبارت درست است در مورد ImageDataGenerator؟
الف) این برای ایجاد دیتاستهای پیچیده ورودی مدلهای یادگیری عمیق استفاده میشود.
ب) اصلیترین کاربرد آن در Augmentation تصاویر در فاز آموزش مدلهای یادگیری عمیق است.
ج) نمیتواند دادهها را به شکل batch بخواند و به مدل دهد.
د) برای خواندن تصاویر از یک دایرکتوری و ساخت دیتاست استفاده میشود.
2. توضیحی که در مورد tf.data داده شده است چه چیزی نادرست است؟
الف) انعطافپذیری بیشتری در ایجاد دادههای ورودی دارد.
ب) ممکن است پیادهسازی نسبتاً پیچیدهتری نسبت به ImageDataGenerator داشته باشد.
ج) برای پردازش تصاویر به صورت batch و offline مناسب است.
د) از tf.data.Dataset برای ایجاد دیتاستهای پیشرفته و ورودی مدلهای یادگیری عمیق استفاده میکند.
3. عبارت صحیح در مورد image_dataset_from_directory چیست؟
الف) بیشتر برای ایجاد ورودی پیشرفته برای مدلهای یادگیری عمیق استفاده میشود.
ب) نمیتواند دادهها را به شکل batch بخواند و به مدل دهد.
ج) امکان تعیین دقیق اندازه تصاویر و دستهبندی آنها را دارد.
د) از tf.data.Dataset برای ایجاد دیتاستهای پیشرفته استفاده میکند.
4. ImageDataGenerator برای چه مرحلهای از فرآیند یادگیری عمیق بیشترین کارایی را از خود نشان میدهد؟
الف) Validation
ب) Testing
ج) Preprocessing Training Data
د) Model Evaluation
5. image_dataset_from_directory چه ویژگی ای دارد که آن را مناسب برای ساخت دیتاست از تصاویر در یک دایرکتوری میکند؟
الف) پیچیدگی بالا در پیادهسازی.
ب) ساختار مشخص و آسان برای استفاده در آموزش مدل.
ج) تعداد زیادی از تبدیلات تصویری.
د) امکان انجام تغییرات پیچیده و خصوصی روی داده.