본문 바로가기

머신러닝공부

CNN 성능 개선, Image Data Augmentation 개요 및 장점

728x90
반응형

Image Data Augmentation

원본 이미지에 저절한 변형을 가해서 새로운 데이터를 만드는 방식

 

장점

다양한 데이터를 입력시킴으로써 모델을 더욱 견고하게 만들어 주기 때문에 실제 데이터를 가지고 테스트 시 더 높은 성능을 기대할 수 있음

CNN모델을 학습시키기에 수집된 데이터가 적은 경우에 강력한 힘을 발휘함

Keras에서 이미지 데이터 보강을 위한 ImageDataGenerator 제공

 

flow(), flow_from_generator 함수 중 원하는 것을 선택하여 사용

 

flow() 적용

ImageDataGenerator 생성 (gen=ImageDataGenerator(...)) -> 이미지 로드 (load_img() / cifar10.load_data()) -> flow(...)적용 (obj=gen.flow(...)) -> next()실행 (x, y=obj.next())

 

flow_from_directory() 적용

ImageDataGenerator 생성 (gen=ImageDataGenerator(...)) -> flow_from_directory(...)적용 (obj=gen.flow_from_directory(...)) -> next()실행 (x, y=obj.next())

 

[1] ImageDataGenerator생성

gen = ImageDataGenerator(rotation_ragne=30, horizontal_flip=True, rescale 1./255)

ImageDataGenerator 함수를 이용해 데이터 변형 방식을 설절함

 

[2] 이미지 로드 및 정규화

load.img() 또는 cifar10.load_data를 이용하여 로드

데이터를 1./255를 이용하여 0~1 값으로 정규화

load_img() 함수는 리턴 타입이 JpegImageFile이므로 img_to-aray()를 이용하여 numpy타입으로 변환해야 함

 

[3] flow 또는 flow_from_directory() 적용

data_gen = gen.flow(xdata, ydata, batch_size = ...)

data_gen = gen.flow_from_directory(dir_path, batch_size=..., class_mode='...')

flow 함수는 주어진 데이터에서 batch_size에 지정된 개수만큼 무작위로 뽑아 변형을 가하라는 의미

flow_from_directory() 함수는 주어진 dir_path에서 batch_size만큼 읽어서 변형을 가하고, 정답(label)은 dir_path의 하위 디렉토리 이름으로 인식되며 class_mode로 지정된, 'binary', 'sparse', 'categorical'같은 형태로 표현된

 

[4] next() 실행

img.label = data_gen.next()

next() 함수 실행할 때마다 flow() 함수 또는 flow_from_directory() 함수에서 지정된 batch_size만큼이 변형된 데이터(img)와 정답(label)이 리턴됨

ex) img.shape = (batch_size, height, width.channel)

반응형