이번 포스팅에서는
ImageDataGenerator를 이용한
이미지 데이터 증강을 다뤄보겠습니다.
이전 포스팅과 마찬가지로
deprecated 된 방식이므로
변경된 방식은 추가로 학습해서 포스팅하겠습니다.
1. 이미지 데이터 증강
CNN 모델은 이미지 데이터가 최대한 다양하고
양이 많으면 학습을 잘 할수 있습니다.
그렇지만 데이터가 컬럼에 따라 한쪽으로 쏠려있거나 그 양이 적다면
원본이미지를 다양한 형태로 변형해서
생성하므로서 데이터의 양을 늘리는
데이터 증강을 해줍니다.
2. ImageDataGenerator()를 이용해 데이터 증강하기
이전 포스팅에 이어서 코드를 작성해보겠습니다.
이전 포스팅에서는 이미지 데이터를 전처리하고 읽어왔습니다.
https://aigaeddo.tistory.com/32
27. ImageDataGenerator 1) 이미지 데이터 전처리(Preprocessing)
이번 포스팅에서는 ImageDataGenerator() 를 이용해서 이미지 데이터를 불러와 전처리해보겠습니다. (학습하려고 찾아보니 ImageDataGenerator가 deprecated 되었군요. 찾아보니 2.9 버전 이상부터는 utils.image_d
aigaeddo.tistory.com
읽어온 데이터가 고양이 이미지가 5개, 강아지 이미지가 11개로
데이터가 쏠려있다고 생각되어
고양이 이미지 6개를 증강해보겠습니다.
keras의 utils모듈의
load_img(), img_to_array()를 사용해서
증강 대상 이미지를 가져오겠습니다.
from keras.utils import load_img #이미지를 가져옴
from keras.utils import img_to_array #이미지를 수치화
path = "c:/_data/image/test_cat/\Cat/1.jpg"
img = load_img(path,
target_size = (300, 300)
)
#시각화
plt.imshow(img)
plt.show()
img_arr = img_to_array(img)
(요런 귀여운 고양이 이미지입니다,)
np.tile() 을 이용해서 증강 데상 이미지 데이터를 6개로 복사했습니다.
images = np.tile(img_arr.reshape(300*300*3), 6) #이미지 복사
images = images.reshape(-1,300,300,3)
ImageDantaGenerator()를 생성해
증강할 이미지를 어떻게 변형을 해줄지 설정해주고
from keras.preprocessing.image import ImageDataGenerator
#증강이미지 변형 설정
augument_data_gen = ImageDataGenerator(
horizontal_flip=True, #좌우반전
vertical_flip=True, #상하반전
brightness_range= [0.1, 0.9], #밝기조절
fill_mode='reflect', #회전,이동,축소시 생긴 공간을 채우는 방식
zoom_range=0.3, #확대
rotation_range=30, #회전
rescale=1./255
)
ImageDataGeneration()클래스의
flow() 함수를 사용해서
증강대상 이미지 데이터를 넣어 이미지를 생성 해보겠습니다.
고양이는 y가 0인 값이므로 0을 채워줬습니다.
augument_iter = augument_data_gen.flow(
images,
np.zeros(6), #y값
batch_size=6, #1배치 자를 사이즈
shuffle=True #섞기
)
변형된 데이터 6개가 잘 생성되었는지
시각화해서 확인해보겠습니다
import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=2, ncols=3, figsize = (9,6))
for i in range(6):
(batch) = augument_iter.next()
ax[i//3, i%3].imshow(batch[i])
ax[i//3, i%3].axis('off')
plt.show()
각각 서로 다른 이미지로 이미지 데이터 생성이
되었습니다.
그럼 생성된 데이터를 아까 말한
비대칭 데이터와 합쳐보겠습니다.
#데이터 합치기
x = np.concatenate((x,augumented_x))
y = np.concatenate((y,augumented_y))
데이터를 확인해보면
11개 11개로
고양이 이미지를 증강해서 강아지 이미지 개수와 같아진 것을
확인할 수 있습니다.
print(x.shape, y.shape) #(27, 300, 300, 3) (27,)
unique , count = np.unique(y, return_counts=True)
print(unique, count) #[0. 1.] [11 11]
'인공지능 개발하기 > Machine Learning' 카테고리의 다른 글
[Tensorflow] 30. keras RNN 모델 살펴보기 (0) | 2024.02.03 |
---|---|
[Tensorflow] 29. RNN(Recurrent neural network) (1) | 2024.02.03 |
[Tensorflow] 27. ImageDataGenerator 이미지 데이터 전처리(preprocessing) (2) | 2024.01.27 |
[Tensorflow] 26. CNN 이미지 분류하기 (mnist) (1) | 2024.01.22 |
[Tensorflow] 25. CNN(Convolutional neural network) (0) | 2024.01.22 |