#12 of AI and Deep Learning - 이미지 데이터 부풀리기 / Augmentation

ImageDataGenerator

개요

  • 필요한 케이스
    • 수동 및 크롤링 한 이미지 데이터 갯수가 부족할 때
    • 보다 정확한 모델 학습을 위해 training dataset 의 누락 최소화
  • 적용방법
    • 기존 이미지의 다양한 특성을 조작
    • 조작 파라미터
      • 각도 조절
      • 뒤집기
      • 확대
      • 축소
      • 이동
  • keras_preprocessing 패키지 내 image 모듈 사용
    • ImageDataGenerator 클래스 활용
      • 개별 이미지당 부풀리기 적용하게 됨

순서

  • 이미지를 저장해놓은 디렉토리로부터 파일 호출
    • 디렉토리가 여러개라면 for 문 적용
      • 이미지 다중분류의 경우, 사전에 정한 카테고리 종류 = 개별 디렉토리명
        • ex) 테마별 인테리어 이미지 분류의 경우
          • classic / vintage / modern 등 다양한 디렉토리 존재 가능 
    • glob.glob 함수를 활용하여 디렉토리 경로 내 있는 모든 이미지 읽어들이기 (.jpg)
    • ImageDataGenerator 객체 생성
      • 위 개요에서 언급한 각 파리미터 설정 세팅
    • load_img 함수로 읽어들인 이미지 파일 로드
    • img_to_array 함수로 로드된 이미지 파일 배열로 변환
    • 개인 기호에 따라 원본 이미지 파일명 추출
      • 부풀리기로 생성된 이미지들이 어디에서 파생된 것인지 확인하기 위해
    • for 문 돌면서 각 이미지 파일 부풀리기 실행 by flow 함수
      • flow 함수 파라미터
        • batch_size = 동시에 몇개씩 실행할 것인지
          • 디폴트 = 32개
        • save_to_dir = 어디에 저장할 것인지
        • save_prefix = 파일명 prefix 설정
        • save_format = 파일 확장자 설정
          • jpg / png 등

소스예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# image generating test
 
import glob
from keras_preprocessing.image import ImageDataGenerator, load_img, img_to_array
 
img_each_dir = "C:/cafe-img/ethnic"
img_files = glob.glob(img_each_dir + "/*.jpg")
 
# call dataset
data_aug_gen = ImageDataGenerator(rescale=1./255,
                                  rotation_range=15,
                                  width_shift_range=0.1,
                                  height_shift_range=0.1,
                                  shear_range=0.5,
                                  zoom_range=[0.80.2],
                                  horizontal_flip=True,
                                  vertical_flip=True,
                                  fill_mode="nearest")
 
for i, f in enumerate(img_files):
 
    img = load_img(f)
    x = img_to_array(img)
    x = x.reshape((1,) + x.shape)
 
    n = 1
    img_file_name = f.split("\\")[1].split(".")[0]
    # control eternal loop by break
    for batch in data_aug_gen.flow(x,
                                   batch_size=1,
                                   save_to_dir='C:/cafe-img/ethnic',
                                   save_prefix=img_file_name,
                                   save_format='jpg'):
        n += 1
        # generate 5 more images for every images
        if n > 5:
            break
cs


부풀리기 된 결과



References




댓글