반응형

Keras에서 사용하는  Data Augmentation을 이미지로 출력하여 확인해봅니다.



2021. 06. 29  최초작성



rotation_range=60

0~ 60도 사이의 임의의 각도로 이미지를 회전시킵니다.

fill_mode를 nearest로 선택했기 때문에 가장자리에 있는 픽셀로 채우게 됩니다. 

 



width_shift_range=0.4

이미지 너비의 40% 이내로 이미지를 좌우로 이동시킵니다. 

 




height_shift_range=0.4

이미지 높이의 40% 이내로 이미지를 위아래로 이동시킵니다. 






shear_range=60

반시계방향으로 60도 범위내로  이미지를 찌끄러트립니다.

 



zoom_range=0.4

1-0.4배에서 1+0.4배 사이로 이미지 크기를 축소/확대합니다. 

 




horizontal_flip=True

무작위로 이미지를 수평방향으로 뒤집습니다. 

 




vertical_flip=True

무작위로 세로 방향으로 이미지를 뒤집습니다. 

 



brightness_range=[0.7,1.3]

이미지 밝기를 70%에서 130%이내에서 무작위로 조정합니다. 

 




테스트에 사용한 코드입니다. 

주석에 있는 변환을 하나씩만 풀어서 어떻게 동작하는지 확인해볼 수 있습니다. 

 

두 개 이상의 변환의 주석을 풀어주면 동시에 작용하게 됩니다. 

실제 학습에 사용시에는 이 중에 필요한 것만 풀어주거나 모두 주석을 풀어주면 됩니다. 

사용하는 데이터셋에 따라서 꼭 필요한 변환만 해야 할 수도 있습니다. 

 

from tensorflow.keras.preprocessing.image import ImageDataGenerator
import numpy as np
import cv2


train_datagen = ImageDataGenerator(
    rotation_range=60,
    # width_shift_range=0.4,
    # height_shift_range=0.4,
    # shear_range=60,
    # zoom_range=0.4,
    # horizontal_flip=True,
    # vertical_flip=True,
    # brightness_range=[0.7,1.3],
    fill_mode='nearest'
    )

train_generator1 = train_datagen.flow_from_directory(
    './dataset',
    target_size=(244, 244),
    batch_size=1,
    classes = ['cat'],
    class_mode='categorical',
    shuffle=True)


def concat_vh(list_2d):

    return cv2.vconcat([cv2.hconcat(list_h)
                        for list_h in list_2d])

image_list1 = []
image_list2 = []
for i in range(9): 
    img_flow = next(train_generator1)[0]
    img_flow = img_flow.astype('uint8')
    img_flow = np.squeeze(img_flow)
    img_flow = cv2.cvtColor(img_flow, cv2.COLOR_BGR2RGB)

    image_list1.append(img_flow)

    if (i+1) % 3 == 0 and i != 0:
        image_list2.append(image_list1)
        image_list1 = []

img = concat_vh(image_list2)

cv2.imshow('data augmentation', img)
cv2.waitKey(0)



반응형

해본 것을 문서화하여 기록합니다.


포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">