728x90
케라스 공식 홈페이지
keras.io/ko/preprocessing/image/
ImageDataGenerator 클래스란?
이미지를 학습시킬 때 학습데이터의 양이 적을 경우
학습데이터를 조금씩 변형시켜서 학습데이터의 양을 늘리는 방식중에 하나이다.
데이터가 필요한데 데이터가 부족하다? 흔한 현상이죠 하지만 이미지에선 그 틀을 조금 부술수 있는 기법이 존재하죠 바로 이미지 증식! 고양이사진을 3픽셀 옆으로 민다고 강아지 사진이 되진 않는다는거죠 회전 확대 이동 반전등 여러가지를 사용해도 우리 눈엔 고양이로 보인다는것. 하지만 픽셀 데이터 상으로는 완전히 다른 데이터가 나오므로 이것을 이용해 데이터도 늘릴 겸 위치이동이나 회전에 대한 학습도 하게 되는거죠 |
Keras.preprocessing.image.ImageDataGenerator
내가 사용했던 예시를 통해 하나씩 분석해보자
먼저 내가 사용할 트레이닝 데이터이다.
유튜브 썸네일 이미지(X)와 구독자/조회수를 나눈 썸네일에 로그를 취한 점수(Y)이다.
하지만 내가 수집한 데이터는 1750개로 딥러닝을 돌리기엔 터무니 부족하다.
그래서 이미지 제너레이터를 사용해야한다는 것이다.
ImageDataGenerator - 객체 생성
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=30,
shear_range=0.2,
zoom_range=0.4,
horizontal_flip=True
)
다양한 파라미터가 있지만 다른 건 레퍼런스를 참고하도록하자..
- rescale = 1./255 : 값을 0과 1 사이로 변경
- rotation_range = 30 : 무작위 회전각도 30도 이내
- shear_range = 0.2 : 층밀리기 강도 20%
- zoom_range = 0.2 : 무작위 줌 범위 20%
- horizontal_flip = True : 무작위로 가로로 뒤짚는다.
이렇게 파라미터들을 정의한다. ( 아직 한거 틀만 만들어진 것. )
ImageDataGenerator - 이미지 변형
train_generator = train_datagen.flow(
x=x_train, y=y_train,
batch_size=32,
shuffle=True
)
train_datagen 이라는 틀에 flow 함수를 사용해서 실제 데이터를 파라미터를 넣어주면 이미지 변형이 완료된다.
- batch_size : 배치사이즈
- shuffle : 랜덤 여부
그 밖에
- target_size : 이미지 사이즈
- color_mode : 이미지 채널 수 ex) 'rgb'
- class_mode : Y 값 변화방법 ex) 'categorical'
ImageDataGenerator - 출력결과 뽑아내기
augs = train_generator.__getitem__(8)
plt.figure(figsize=(16, 8))
for i, img in enumerate(augs[0]):
plt.subplot(4, 8, i+1)
plt.title('%.2f' % augs[1][i])
plt.axis('off')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img.squeeze())
결과를 보면 원본 학습데이터 보다 조금씩 변형되어있다는 것을 알 수 있다.
결과를 가져올 때는 train_generator.__getitem__(idx) 를 사용해서 결과를 얻어올 수 있다.
ImageDataGenerator - 모델 학습
start_time = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
model.fit_generator(
train_generator,
epochs=50,
validation_data=val_generator,
callbacks=[
ModelCheckpoint('models/%s.h5' % (start_time), monitor='val_loss', save_best_only=True, mode='min', verbose=1)
]
)
나중에 모델을 fitting 할 때도 이런식으로 제너레이터를 통해 학습시킬 수 있다.
반응형
'Computer Vision' 카테고리의 다른 글
[이미지 전처리] BGR and RGB (0) | 2020.12.22 |
---|---|
[이미지 전처리] Pillow PIL , Opencv cv2 , 이미지 형태 정규화(RGB, RGBA) (0) | 2020.12.04 |
[이미지 전처리]. 이미지 차원 추가하기 , np.append_dim() (0) | 2020.12.04 |
[이미지 전처리] Url to image , url 주소를 통한 이미지 처리 (0) | 2020.11.25 |
[이미지 전처리]. image to base64 , base64 to image 변환하는 방법 (2) | 2020.11.25 |