TensorFlow에서 (이미지, 레이블) 쌍은 경로 구성 요소 목록을 변환한 후, 레이블을 정수 형식으로 인코딩하여 생성됩니다. 이때 map 메서드를 활용하면 (이미지, 레이블) 쌍에 해당하는 데이터셋을 손쉽게 만들 수 있습니다.
사용할 데이터셋: 꽃(flower) 데이터셋
이 튜토리얼에서는 수천 장의 꽃 이미지를 포함하는 꽃 데이터셋을 사용합니다. 이 데이터셋은 5개의 하위 디렉터리로 구성되어 있으며, 각 하위 디렉터리는 하나의 클래스(꽃 종류)에 해당합니다.
아래 코드는 Google Colaboratory(Colab) 환경에서 실행합니다. Colab은 브라우저에서 별도 설정 없이 Python 코드를 실행할 수 있게 해주며, GPU에 무료로 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.
Dataset.map으로 데이터셋 변환하기
print("'num_parallel_calls'를 설정하면 여러 이미지를 병렬로 로드하고 처리할 수 있습니다")
train_ds = train_ds.map(process_path, num_parallel_calls=AUTOTUNE)
val_ds = val_ds.map(process_path, num_parallel_calls=AUTOTUNE)
for image, label in train_ds.take(1):
print("이미지의 shape : ", image.numpy().shape)
print("레이블 : ", label.numpy())실행 결과
'num_parallel_calls'를 설정하면 여러 이미지를 병렬로 로드하고 처리할 수 있습니다 이미지의 shape : (180, 180, 3) 레이블 : 0
코드 출처: https://www.tensorflow.org/tutorials/load_data/images
코드 설명
num_parallel_calls=AUTOTUNE옵션 덕분에 여러 이미지가 동시에 로드되고 처리되어 데이터 파이프라인 성능이 크게 향상됩니다.map메서드는 각 요소에process_path함수를 적용하여 (이미지, 레이블) 쌍으로 구성된 새로운 데이터셋을 생성합니다.- 생성된 데이터셋을 순회(iteration)하면서 첫 번째 샘플의 이미지 shape과 레이블 값을 콘솔에 출력해 확인합니다.
이처럼 Dataset.map을 활용하면 파일 경로 기반의 원시 데이터를 학습에 바로 사용할 수 있는 형태로 효율적으로 변환할 수 있으며, 병렬 처리 옵션과 함께 사용하면 대규모 이미지 데이터 전처리 작업도 빠르게 수행할 수 있습니다.