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)
'머신러닝공부' 카테고리의 다른 글
CIFAR-10을 이용한 CNN 성능 향상 과정 예제 스크립트 (0) | 2022.12.29 |
---|---|
CNN-ImageDataGenerator를 활용한 예제 스크립트 (0) | 2022.12.29 |
CNN 성능향상 방법 4가지 (0) | 2022.12.29 |
CIFAR-10 스트립트 예제 (0) | 2022.12.29 |
CNN을 활용한 MNIST Example Script (0) | 2022.12.27 |