티스토리 뷰
이미지데이터 학습을 쉽게하도록 하기위해 다양한 패키지를 제공한다. 그 중 하나가 ImageDataGenerator 클래스이다.
ImageDataGenerator 클래스를 통해 객체를 생성할 때 파라미터를 전달해주는 것을 통해 데이터의 전처리를 쉽게할 수 있고, 또 이 객체의 flow_from_directory 메소드를 활용하면 폴더 형태로된 데이터 구조를 바로 가져와서 사용할 수 있다.
이 과정은 매우 직관적이고 코드도 ImageDataGenerator를 사용하지 않는 방법에 비해 상당히 짧아진다.
환경은 keras tensorflow backend를 이용하였다.
3. ImageDataGenerator를 통한 트레이닝, 테스트 데이터 만들기
ImageDataGenerator를 만들 때 아래와 같이 rescale, shear_range, zoom_range, horizontal_flip을 설정해줌으로써 해당 데이터의 전처리를 어떻게 할지를 정해준다. 이 때 파라미터가 무엇을 뜻하는지를 정리하면 아래와 같다. (https://keras.io/preprocessing/image/)
- shear_range : 밀린강도 범위내에서 임의로 원본 이미지를 변형 시킵니다. 수치는 시계반대방향으로 밀림강도를 radian으로 나타냅니다.
- zoom_range : 지정된 확대/축소 범위내에 임의로 원본이미지를 확대/ 축소 합니다. (1 - 수치) ~ (1+ 수치) 사이의 범위로 확대 축소를 합니다. ex> zoom_range = 0.3
- horizontal_flip : 수평방향 뒤집기(true)
- vertical_flip : 수직 방향 뒤집기(true)
- rescale : rescaling factor. Defaults to None. If None or 0, no rescaling is applied, otherwise we multipy the data by the value provided (before applying any other transformation)
- rotaion_range : 지정된 각도 범위내에서 임의로 원본 이미지를 회전 시킵니다. 단위 도, 정수형 ex>rotaion_range=90
- width_shift_range : 지정된 수평방향 이동 범위 내에서 임의로 원본 이미지를 이동 시킵니다. 수치는 전체 넓이의 비율(실수)로 나타냅니다. ex> 0.1이면 전체 넓이 100의 10px 좌우로 이동
- hight_shift_range: 지정된 수직방향 이동 범위 내에서 임의로 원본 이미지를 이동 시킵니다. 수치는 전체 넓이의 비율(실수)로 나타냅니다
또한 flow_from_directory 메소드를 사용하면 폴더구조를 그대로 가져와서 ImageDataGenerator 객체의 실제 데이터를 채워준다.
이 데이터를 불러올 때 앞서 정의한 파라미터로 전처리를 한다.
자료 생성
# Part 2 - Fitting the CNN to the images
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
test_set = test_datagen.flow_from_directory('dataset/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
모델 학습
마지막으로 fit_generator 함수를 실행함으로써 fitting이 이루어진다.
이 예제의 경우 ImageDataGenerator 객체를 사용하였기 때문에 fit_generator 함수를 통해 fitting한다.
steps_per_epoch은 한 번 epoch 돌 때, 데이터를 몇 번 볼 것인가를 정해준다.
[트레이닝데이터수/배치사이즈]를 사용하면 되는듯하다.
validation_steps는 한 번 epoch 돌 고난 후, validation set을 통해 validation accuracy를 측정할 때 validation set을 몇 번 볼 것인지를 정해준다.
이 때도 마찬가지로 [validation data수/배치사이즈]를 사용하면 된다.
즉 ImageDataGenerator를 쓴 경우, fit_generator를 사용하면 된다고 기억하면 된다.
폴더 구조는 아래와 같이 하면 된다.
flow_from_directory에 넣어준 경로(dataset/training_set) 밑에 이런식으로 class(cats, dogs) 별로 폴더를 만들고 폴더 밑에 이미지들을 넣어준다. 그러면 알아서 labeling을 하게 된다.
model.fit_generator(training_set,
steps_per_epoch = 300,
epochs = 25,
validation_data = test_set,
validation_steps = 2000)
'머신러닝 & 딥러닝' 카테고리의 다른 글
opencv-python 패키지 설치 및 이미지 불러오기 (0) | 2022.08.20 |
---|---|
다중 클래스 이미지 분류 — Keras 및 TensorFlow 실습 (0) | 2022.08.16 |
cnn 모델을 이용한 꽃 종류를 예측하기 (0) | 2022.08.12 |
딥러닝 시계열 분석 기본 방법 (0) | 2022.08.11 |
딥러닝 이미지 입력 데이터 증식하는 방법 (0) | 2022.08.07 |