[딥러닝 Express] Chapter 10. 영상 인식 - (2)

배규리·2024년 6월 17일

AI 기초

목록 보기
29/32
post-thumbnail

5. 데이터 증대

현실 세계에서 사용되는 신경망에는 수십만 개의 가중치가 있고, 이 가중치들은 아주 큰 훈련 데이터로 학습되어야 한다. 하지만, 훈련 데이터는 한정적이다. 만약 훈련 데이터가 충분하지 않다면 신경망은 과잉 적합에 빠지게 된다. 이것을 막는 기법 중 하나가 데이터 증대이다.

데이터 증대(Data Augmentation)는 한정된 데이터에서 여러 가지로 변형된 데이터를 만들어내는 기법이다. 특히 영상의 경우에는 한정된 데이터를 만들기가 비교적 쉽다.
영상을 회전시키거나, 반사시키거나, 크기의 변화를 줄 수 있다.

케라스에서는 원본 영상에서 좌우 반전, 밝기 조절, 좌표 이동, 회전, 확대 등을 통해 새로운 영상을 만들어주는 함수를 제공하고 있다.
ImageDataGenerator()이다.

사용 방법은 아래와 같다.

(1) 라이브러리 포함

import tensorflow as tf
import matplotlib.pyplot as plt
from numpy import expand_dims
from tensorflow.keras.preprocessing.image import load_img, img_to_array

(2) 영상 읽기

image = load_img("dog.jpg")
array = img_to_array(image)
sample = expand_dims(array, axis = 0)

(3) ImageDataGenerator()을 이용하여 영상 변형을 정의

매개변수들이 의미하는 바는 아래와 같다.

  • rotation_range = 90: 회전 한도
  • brightness_range = [0.2, 1.0] : 밝기 변형 비율
  • width_shift_range = 0.2: 좌우 이동 한도
  • height_shift_range = 0.2: 상하 이동 한도
  • zoom_range = [0.2, 1.2]: 확대 한도
from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(rescale = 1./255,
                             rotation_range = 90,
                             brightness_range = [0.8, 1.0],
                             width_shift_range=0.2,
                             zoom_range=[0.8, 1.2],
                             height_shift_range=0.2)

(4) ImageDataGenerator()로부터 제너레이터 객체를 얻는다.

ImageDataGenerator()의 출력은 파이썬의 제너레이더 형식이다.
영상을 생성하는 제너레이터 객체를 생성하며,
next()가 호출되면 변형된 영상을 하나씩 보내게 된다.

obj = datagen.flow(sample, batch_size = 1)

(5) 변형된 영상을 표시한다.

8개의 영상을 생성하여 출력해주었다.

fig = plt.figure(figsize = (20,5))
for i in range(8):
    plt.subplot(1, 8, i+1)
    image= obj.next()
    plt.imshow(image[0])


데이터 증강을 이론적으로만 알고 있었는데, 실제로 적용해보니까 간단하고 쉬웠다 ㅎㅎ
나중에 연구할 때 데이터 부족할 상황이 많이 생길 것같은데 애용하게 될 방법인 것같다!😊👍

profile
백엔드 개발은 취미인 AI 개발자🥹

0개의 댓글