[SOLVED] The code has been updated: I wish to create an image dataset for self supervised learning, where I have a dataset of 1000 unlabelled images (.jpg files). I wish to create 4000 labelled images for rotation angle detection pre-task.
For each image , I wish to create 4 labelled images with rotation of 0, 90, 180, or 270 degrees and assign corresponding pseudo-labels (0,90,180 and 270) to them.
e.g. folder has : Img1.jpg , Img2.jpg , Img3.jpg.
dataset (Image, label): (Img1_0.jpg, 0), (Img2_0.jpg, 0), (Img3_0.jpg, 0), (Img1_90.jpg, 90), (Img2_90.jpg, 90), (Img3_90.jpg, 90), (Img1_180.jpg, 180), (Img2_180.jpg, 180), (Img3_180.jpg, 180), (Img1_270.jpg, 270), (Img2_270.jpg, 270), (Img3_270.jpg, 270).
The images are in .jpg format in the file "/content/unsup_f"
.
Code:
import torch
import torchvision.transforms.functional as F
from torch.utils.data import Dataset, DataLoader
from PIL import Image
from torchvision import transforms as T
from torchvision.datasets import ImageFolder
class RotationDataset(Dataset):
def __init__(self, dataset, degrees):
self.dataset = dataset
self.degrees = degrees
def __len__(self):
return len(self.dataset) * len(self.degrees)
def __getitem__(self, index):
img_index = index // len(self.degrees)
img, _ = self.dataset[img_index]
degree_index = index % len(self.degrees)
degree = self.degrees[degree_index]
rotated_img = F.rotate(img, degree)
label = torch.tensor(degrees[degree_index])
return rotated_img, label
trans_comp = T.Compose([
T.Resize([256,256]),
T.ToTensor()
])
unlabelled_dataset = ImageFolder(root='/content/unsup_f', transform=trans_comp)
# Example usage
degrees = [0, 90, 180, 270]
rotated_dataset = RotationDataset(unlabelled_dataset, degrees)
dataloader = DataLoader(rotated_dataset, batch_size=1, shuffle=True)
I tried to create this class but was not able to do so. can someone help.
Error:
FileNotFoundError: Found no valid file for the classes .ipynb_checkpoints. Supported extensions are: .jpg, .jpeg, .png, .ppm, .bmp, .pgm, .tif, .tiff, .webp