Python Code

python Image Tranforms (이미지 전처리)

Kimhj 2023. 10. 28. 22:47

 

  • Image 간의 사이즈 조절, Noramlization, 텐서화 등 전처리를 한번에 적용해 줄 수 있는 torchvision.transforms 를 활용할 수 있음.
  • transforms 코드 예시
from torchvision import transforms

image_transform = transforms.Compose([
    transforms.Resize([512, 512]),
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
])
  • transforms 코드 적용 (Dataset Class)
import torch
from torch.utils.data import Dataset, DataLoader

class ImageDataset(Dataset):
    '''
    dataset class overloads the __init__, __len__, __getitem__ methods of the Dataset class. 
    
    Parameters :
        df:  DataFrame object for the csv file.
        data_path: Location of the dataset.
        image_transform: Transformations to apply to the image.
        train: A boolean indicating whether it is a training_set or not.
    '''
    def __init__(self,df, data_path, image_transform=True, train=True):
        super(Dataset, self).__init__()

        self.df = df
        self.data_path = data_path
        self.image_transform = image_transform
        self.train = train
    
    def __len__(self):
        return len(self.df)
    
    def __getitem__(self, idx):
        image_id = self.df['id_code'][idx]
        image = Image.open(f"{self.data_path}")
        if self.image_transform:
            image = self.image_transform(image) # Applies transformation to the image.
        if self.train:  # train mode
            label = self.df['diagnosis'][idx]
            return image, label
        else:   # eval mode
            return image
  • transform 적용
data_set = dataset(train_df,f'{path}train_images',image_transform=image_transform)

 

  • transform methods
    • ToPILImage() - csv 파일로 데이터셋을 받을 경우, PIL image로 바꿔준다.
    • CenterCrop(size) - 가운데 부분을 size 크기로 자른다.
    • Grayscale(num_output_channels=1) - grayscale로 변환한다.
    • ColorJitter() - 색을 바꾼다.
    • RandomAffine(degrees, translate) - 랜덤으로 affine 변형을 한다. 회전, 이동을 함
    • RandomCrop(size, scale, ratio) -이미지를 랜덤으로 아무데나 잘라 size 크기로 출력한다.
    • Resize(size) - 이미지 사이즈를 size로 변경한다
    • RandomRotation(degrees) 이미지를 랜덤으로 degrees 각도로 회전한다.
    • RandomResizedCrop(size, scale, ratio) - 이미지를 랜덤으로 변형한다.
    • RandomVerticalFlip(p=0.5) - 이미지를 랜덤으로 수직으로 뒤집는다. p =0이면 뒤집지 않는다.
    • RandomHorizontalFlip(p=0.5) - 이미지를 랜덤으로 수평으로 뒤집는다.
    • RandomApply([transforms, p=0.3) - transform함수를 p확률 만큼 적용한다.
    • ToTensor() - 이미지 데이터를 tensor로 바꿔준다.
    • Normalize(mean, std, inplace=False) - 이미지를 정규화한다.