프로젝트/코드프레소 체험단

이미지 데이터 처리를 위한 CNN 완벽 가이드 - ImageDataGenerator API

KimCookieYa 2022. 3. 8. 00:41

Data Pipeline

 

 

* 여태까지는 tensor 형태의 잘 정제된 데이터를 사용했지만, 실무에서는 jpg와 png 같이 정제되지 않은 바이너리 데이터를 사용해야한다. 이렇게 이미지 파일을 읽어서 텐서 객체로 바꿔서 모델에게 전달하는 과정을 데이터 파이프라이닝이라고 한다. 이를 편리하게 할 수 있게 keras에서 지원하는 api가 imagedatagenerator이다.

 

from tensorflow import keras
import os

 

1. Cats and Dogs 데이터셋 다운로드

url = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip'
keras.utils.get_file(fname='cats_and_dogs_filtered.zip', origin=url, extract=True, cache_dir='')

 

2. ImageDataGenerator를 이용해 이미지 파일을 load 하기 위한 경로 지정

train_dir = '/content/datasets/cats_and_dogs_filtered/train'

 

3. ImageDataGenerator 객체 생성

from tensorflow.keras.preprocessing.image import imageDataGenerator
datagen = ImageDataGenerator()

 

4. ImagDataGenerator.flow_from_directory() 함수 사용

 - ImageDataGenerator에 데이터를 읽어오는 경로 연결

 - 이미지 데이터를 읽어 텐서 객체로 변환하는 파이프라인 설정

 - DirectoryIterator 객체로 변화됨

train_generator = datagen.flow_from_directory(
	directory=train_dir,
    target_size=(150, 150),
    batch_size=32,
    shuffle=True,
    class_mode='binary'
)

 

5. DirectoryIterator 객체의 속성 및 메서드

 - .samples : 연결된 경로에서 읽어들일 이미지 파일의 개수

 - len() : batch 덩어리의 개수 확인

 - next() : batch 데이터 호출

 - .getitem(idx) : 원하는 index의 batch 데이터 호출

train_generator.samples # 2000
len(train_generator) # 63 === 2000/32 = 62.5
next(train_generator) # 다음 batch 데이터
train_generator.__getitem__(0) # 원하는 index의 batch 데이터