2022.5.24 augment

정성우·2022년 5월 24일
0

학습한 내용

import random
import numpy as np
import os
import cv2
import glob
from PIL import Image
import PIL.ImageOps
# PIL -> pip install Pillow
# cv2 -> pip install opencv-python

# 새로만들 이미지 갯수를 정합니다.
num_augmented_images = 50

# 원본 사진 폴더 경로
file_path = "./data"

# 위의 폴더 내부에 있는 이미지 이름의 배열이 저장 되는 형태
file_name = os.listdir(file_path)

# file_name 길이를 가져오겠습니다.
total_origin_image_num = len(file_name)
print("total image number >> ", total_origin_image_num)
# total image number >>  3

augment_cnt = 1

for i in range(1, num_augmented_images):
    # image = [image01 , image02 , image03]
    change_picture_index = random.randint(0, total_origin_image_num-1)
    # print(change_picture_index)
    file_names = file_name[change_picture_index]
    # print(file_names)

    os.makedirs("./custom_data", exist_ok=True)
    origin_image_path = "./data/" + file_names
    # print(origin_image_path)

    image = Image.open(origin_image_path)
    # 랜덤 값이 1~4 사이으 값이 나오도록 1 2 3
    random_augment = random.randrange(1, 7)


    if (random_augment == 1):
        # 이미지 좌우 반전
        inverted_image = image.transpose(method=Image.Transpose.FLIP_LEFT_RIGHT)
        inverted_image.save("./custom_data/" + "inverted_" +
                            str(augment_cnt) + ".png")
        
    elif (random_augment == 2):
        rotated_image = image.rotate(random.randrange(-20, 20))
        rotated_image.save("./custom_data/" + "rotated_" +
                           str(augment_cnt) + ".png")
        # 이미지 기울기
    elif (random_augment == 3):
        
        resize_image = image.resize(size=(224, 224))
        resize_image.save("./custom_data/" + "resize_" +
                          str(augment_cnt) + ".png")
        # 이미지 리사이즈
    elif (random_augment==4):
        flip_image=image.transpose(method=Image.Transpose.FLIP_TOP_BOTTOM)
        flip_image.save("./custom_data/" + "flip_" +
                          str(augment_cnt) + ".png")
        #이미지 상하반전
    elif (random_augment==5):
        # 그레이
        gray_image=cv2.cvtColor(np.array(image),cv2.COLOR_BGR2GRAY)
        gray_image=Image.fromarray(gray_image)
        gray_image.save("./custom_data/" + "gray_" +
                          str(augment_cnt) + ".png")
    elif (random_augment==6):
        # 크롭
        a=random.sample(range(1,image.size[0]),2)
        a.sort()
        b=random.sample(range(1,image.size[1]),2)
        b.sort()
        crop_image=image.crop((a[0],b[0],a[1],b[1]))
        crop_image.save("./custom_data/" + "crop" +
                          str(augment_cnt) + ".png")
    augment_cnt += 1

실행결과

학습한 내용

import torch
import torchvision
import cv2
import numpy as np
from torch.utils.data import Dataset
from torchvision import transforms
from PIL import Image
from matplotlib import pyplot as plt
import albumentations
from albumentations.pytorch import ToTensorV2
import os
import time
from torchvision.utils import save_image

class AlbumentationsDataset(Dataset):
    def __init__(self, file_path, labels, transform=None):
        self.file_path = file_path
        self.labels = labels
        self.transform = transform

    def __getitem__(self, index):
        label = self.labels[index]
        file_path = self.file_path[index]

        # Image open
        # image = Image.open(file_path)
        image = cv2.imread(file_path)

        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        start_t = time.time()
        if self.transform:
            augmented = self.transform(image=image)
            image = augmented['image']

        total_time = (time.time() - start_t)

        return image, label, total_time

    def __len__(self):
        return len(self.file_path)


albumentations_transform = albumentations.Compose([
    albumentations.Resize(256, 256),
    albumentations.RandomCrop(224, 224),
    albumentations.HorizontalFlip(),
    ToTensorV2()
])

image_root=r'C:\Users\peria\Desktop\web\crawling\data'
save_root=r'C:\Users\peria\Desktop\web\crawling\custom_data'
file_paths=[]
labbels=[]
for filename in os.listdir(image_root):
    file_paths.append(os.path.join(image_root,filename))
    labbels.append(filename.split('_')[0])

albumentations_dataset = AlbumentationsDataset(
    file_path=file_paths,
    labels=labbels,
    transform=albumentations_transform
)

total_time = 0
for i in range(len(albumentations_dataset)):
    sample, lb, transform_time = albumentations_dataset[i]
    save_path=os.path.join(save_root,lb+'_'+str(i)+'.png')
    img=transforms.ToPILImage()(sample)
    img.save(save_path)


    total_time += transform_time

print("torchvision time / sample : {} ms ".format(total_time*10))

실행결과

학습한 내용 중 어려웠던 점 또는 해결못한 것들
오류가 하나 발생하면 해결방법을 찾기가 어렵다.

해결방법 작성
구글링

학습 소감
이미지 저장이 안되서 별별 방법을 다해봤는데
torch.tensor를 float()로 변환해서 저장했더니
red값만 저장되었다 ;

0개의 댓글