مجموعه داده های تصویر، بارگذارهای داده و تبدیل ها در Pytorch
موسسه پایا پروژه به عنوان متصدی انجام پروژه های پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی پایتون مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری شما داشته باشد.
یادگیری عمیق در انجام پروژه های پایتون به دلیل سهولت استفاده، پشتیبانی از چندین پلتفرم سخت افزاری و پردازش کارآمد به طور فزاینده ای محبوب می شود. مجموعه دادههای تصویر، بارگذارهای داده و تبدیلها اجزای ضروری برای دستیابی به نتایج موفق با مدلهای یادگیری عمیق با استفاده از Pytorch هستند.
در این مقاله با استفاده از کتابخانه Pytorch به مجموعه دادههای تصویر، بارگذارهای داده و تبدیلها در پایتون میپردازیم . مجموعه دادههای تصویر مجموعهای از تصاویر را ذخیره میکنند که میتوانند در مدلهای یادگیری عمیق برای آموزش، آزمایش یا اعتبارسنجی استفاده شوند.
این تصاویر از منابع مختلفی مانند وبسایتهای آنلاین، کنترلکنندههای فیزیکی، محتوای تولید شده توسط کاربر و غیره جمعآوری میشوند. Dataloader مسئول بارگذاری مجموعه دادههای تصویر و ارائه آنها به صورت دستهای برای مدلها هستند. تبدیل ها الگوریتم هایی هستند که برای تغییر جنبه های خاصی از تصاویر مانند رنگ، اندازه، شکل، روشنایی و غیره استفاده می شوند .طبقه بندی تصویر و تقسیم بندی تصویر .
مجموعه داده های محبوب مانند ImageNet، CIFAR-10 و MNIST می توانند به عنوان پایه ای برای ایجاد مجموعه داده های تصویری و Dataloader استفاده شوند. برای ایجاد داده های آماده مدل می توان از تبدیل های رایج تصویر مانند چرخش تصادفی، برش تصادفی، چرخش تصادفی افقی یا عمودی، عادی سازی و افزایش رنگ استفاده کرد. از بارگذارهای داده می توان برای بارگذاری موثر دسته ای از داده ها از مجموعه داده برای آموزش مدل استفاده کرد.
کتابخانه های لازم برای انجام پروژه پایتون را وارد کنید
ابتدا کتابخانه هایی را که در این مقاله استفاده خواهیم کرد وارد می کنیم.
import os
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import torch
import torchvision
مجموعه داده تصویر
یک مجموعه داده تصویر را می توان با تعریف کلاسی که ویژگی های کلاس torch.utils.data.Dataset را به ارث می برد ایجاد کرد. این کلاس دو روش انتزاعی دارد که باید در کلاس مشتق شده وجود داشته باشد:
- ()__len__تعداد نمونه های موجود در مجموعه داده را برمی گرداند.
- () __getitem__نمونه را در نمایه i از مجموعه داده برمی گرداند.
ما می توانیم مجموعه داده تصویر را در Pytorch به صورت زیر بارگذاری کنیم:
Creating a custom dataset class#
:class ImageDataset(torch.utils.data.Dataset)
:def __init__(self, dir, transform=None)
self.data_dir = dir
self.images = os.listdir(dir)
self.transform = transform
Defining the length of the dataset#
:def __len__(self)
return len(self.images)
# Defining the method to get an item from the dataset#
:def __getitem__(self, index)
image_path = os.path.join(self.data_dir, self.images[index])
image = np.array(Image.open(image_path))
Applying the transform#
:if self.transform
image = self.transform(image)
return image
حال اجازه دهید از این کلاس در مجموعه داده نمونه خود استفاده کنیم.
Replace the path with the path to your dataset#
‘.data_path = ‘/maps/train
Creating a dataset object with the path to the dataset#
dataset = ImageDataset(data_path)
Getting the length of the dataset#
dataset_length = len(dataset)
Printing the length of the dataset#
print(‘Number of training examples:’,dataset_length)
Generating a random index within the dataset length#
random_index = random.randint(0, dataset_length – 1)
Plotting the randomly selected image#
plt.imshow(dataset[random_index])
() plt.show
خروجی:
Number of training examples: 1096
تبدیل های سفارشی
یک تبدیل سفارشی را می توان با تعریف یک کلاس با متد __ call__() ایجاد کرد. این تبدیل می تواند برای تعریف توابع پیش پردازش و افزایش داده ها استفاده شود. ما می توانیم یک تبدیل سفارشی تعریف کنیم که با تقسیم تصویر به دو قسمت مساوی به صورت زیر، پیش پردازش را در پروژه پایتون روی تصویر ورودی انجام می دهد:
Defining a custom transformer class#
:class CustomTransform(object)
:def __init__(self, split_percent=0.5)
self.split_percent = split_percent
Defining the transform method#
:def __call__(self, image)
Splitting the image into two parts#
split = int(image.shape[1] * self.split_percent)
image1 = image[:, :split, :]
image2 = image[:, split:, :]
Returning the two parts of the image#
return image1, image2
برای استفاده از چندین شیء تبدیل در PyTorch، می توانید از کلاس torchvision.transforms.Compose استفاده کنید . این کلاس به شما این امکان را می دهد که یک شی ایجاد کنید که ترکیبی از اشیاء تبدیل مختلف را نشان می دهد و در عین حال ترتیبی که می خواهید اعمال شوند را حفظ کنید.
Defining a composition of transforms#
transform = torchvision.transforms.Compose])
# Replace with the transform object(s)#
,()CustomTransform
[(
استفاده از این تبدیل با کلاس مجموعه داده سفارشی.
Creating a dataset object with transforms#
dataset = ImageDataset(data_path, transform=transform)
Get the first splited image from the dataset#
image, target = dataset[random_index]
Plotting the image and target#
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title(‘Image’)
plt.subplot(1, 2, 2)
plt.imshow(target)
plt.title(‘Target’)
()plt.show
خروجی:
منبع:
https://www.geeksforgeeks.org/image-datasets-dataloaders-and-transforms-in-pytorch/