Path: blob/master/site/ko/tutorials/load_data/images.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
이미지 로드 및 전처리하기
이 튜토리얼에서는 세 가지 방법으로 이미지 데이터세트를 로드하고 전처리하는 방법을 보여줍니다.
먼저 고급 Keras 사전 처리 유틸리티(예:
tf.keras.utils.image_dataset_from_directory
) 및 레이어(예:tf.keras.layers.Rescaling
)를 사용하여 디스크에서 이미지 디렉터리를 읽습니다.다음으로 tf.data를 사용하여 처음부터 고유한 입력 파이프라인을 작성합니다.
마지막으로 TensorFlow Datasets에서 사용할 수 있는 대규모 카탈로그에서 데이터세트를 다운로드합니다.
설정
꽃 데이터세트 다운로드하기
이 튜토리얼은 수천 장의 꽃 사진 데이터세트를 사용합니다. 꽃 데이터세트에는 클래스당 하나씩 5개의 하위 디렉터리가 있습니다.
참고: 모든 이미지에는 CC-BY 라이선스가 있으며 크리에이터는 LICENSE.txt 파일에 나열됩니다.
다운로드한 후 (218MB), 이제 꽃 사진의 사본을 사용할 수 있습니다. 총 3670개의 이미지가 있습니다.
각 디렉토리에는 해당 유형의 꽃 이미지가 포함되어 있습니다. 다음은 장미입니다.
Keras 유틸리티를 사용하여 데이터 로드
유용한 tf.keras.utils.image_dataset_from_directory
유틸리티를 사용하여 디스크에서 이러한 이미지를 로드해 보겠습니다.
데이터세트 만들기
로더를 위해 일부 매개변수를 정의합니다.
모델을 개발할 때 검증 분할을 사용하는 것이 좋습니다. 이미지의 80%를 훈련에 사용하고 20%를 유효성 검사에 사용합니다.
이러한 데이터세트의 class_names
속성에서 클래스 이름을 찾을 수 있습니다.
데이터 시각화하기
다음은 훈련 데이터세트의 처음 9개 이미지입니다.
이러한 데이터세트를 사용하는 모델을 model.fit
(이 튜토리얼의 뒷부분에 표시)에 전달하여 모델을 훈련할 수 있습니다. 원하는 경우, 데이터세트를 수동으로 반복하고 이미지 배치를 검색할 수도 있습니다.
image_batch
는 (32, 180, 180, 3)
형상의 텐서이며, 180x180x3
형상의 32개 이미지 묶음으로 되어 있습니다(마지막 차원은 색상 채널 RGB를 나타냄). label_batch
는 형상 (32,)
의 텐서이며 32개 이미지에 해당하는 레이블입니다.
이들 텐서 중 하나에서 .numpy()
를 호출하여 numpy.ndarray
로 변환할 수 있습니다.
데이터 표준화하기
RGB 채널 값은 [0, 255]
범위에 있습니다. 이것은 신경망에 이상적이지 않습니다. 일반적으로 입력 값을 작게 만들어야 합니다.
여기에서 tf.keras.layers.Rescaling
을 사용하여 값을 [0, 1]
범위로 표준화합니다.
이 레이어를 사용하는 방법에는 두 가지가 있습니다. Dataset.map
을 호출하여 데이터세트에 이를 적용할 수 있습니다.
또는 모델 정의 내에 레이어를 포함하여 배포를 단순화할 수 있습니다. 여기서는 두 번째 접근법을 사용할 것입니다.
참고: 픽셀 값을 [-1,1]
로 조정하려면 대신 tf.keras.layers.Rescaling(1./127.5, offset=-1)
을 작성할 수 있습니다.
참고: 이전에 tf.keras.utils.image_dataset_from_directory
의 image_size
인수를 사용하여 이미지 크기를 조정했습니다. 해당 모델에도 크기 조정 논리를 포함하려면 tf.keras.layers.Resizing
레이어를 사용할 수 있습니다.
성능을 위한 데이터세트 구성하기
버퍼링된 프리페치를 사용하여 I/O를 차단하지 않고 디스크에서 데이터를 생성할 수 있도록 하겠습니다. 데이터를 로드할 때 다음 두 가지 중요한 메서드를 사용해야 합니다.
Dataset.cache()
는 첫 epoch 동안 디스크에서 이미지를 로드한 후 이미지를 메모리에 유지합니다. 이렇게 하면 모델을 훈련하는 동안 데이터세트가 병목 상태가 되지 않습니다. 데이터세트가 너무 커서 메모리에 맞지 않는 경우, 이 메서드를 사용하여 성능이 높은 온디스크 캐시를 생성할 수도 있습니다.Dataset.prefetch
는 훈련 중에 데이터 전처리 및 모델 실행과 겹칩니다.
관심 있는 독자는 tf.data API를 통한 성능 향상 가이드의 프리페치 섹션에서 두 가지 메서드와 데이터를 디스크에 캐시하는 방법에 대해 자세히 알아볼 수 있습니다.
모델 훈련하기
완성을 위해 방금 준비한 데이터세트를 사용하여 간단한 모델을 훈련하는 방법을 보여줍니다.
순차 모델은 각각에 최대 풀링 레이어(tf.keras.layers.MaxPooling2D
)가 있는 세 개의 컨볼루션 블록(tf.keras.layers.Conv2D
)으로 구성됩니다. ReLU 활성화 함수('relu'
)에 의해 활성화되는 128개 유닛이 있는 완전 연결된 레이어(tf.keras.layers.Dense
)가 있습니다. 이 모델은 어떤 식으로든 조정되지 않았습니다. 목표는 방금 만든 데이터세트를 사용하여 역학을 보여주는 것입니다. 이미지 분류에 대해 자세히 알아보려면 이미지 분류 튜토리얼을 방문하세요.
tf.keras.optimizers.Adam
옵티마이저 및 tf.keras.losses.SparseCategoricalCrossentropy
손실 함수를 선택합니다. 각 훈련 epoch에 대한 훈련 및 검증 정확도를 보려면 metrics
인수를 Model.compile
에 전달하세요.
참고: 몇 개의 epoch에 대해서만 훈련하므로 이 튜토리얼은 빠르게 진행됩니다.
참고: Model.fit
을 사용하는 대신 사용자 지정 훈련 루프를 작성할 수도 있습니다. 자세히 알아보려면 처음부터 훈련 루프 작성하기 튜토리얼을 방문하세요.
검증 정확도가 훈련 정확도에 비해 낮으므로 모델이 과대적합되었음을 알 수 있습니다. 이 튜토리얼에서 과대적합 및 이를 줄이는 방법에 대해 자세히 알아볼 수 있습니다.
미세 제어를 위해 tf.data
사용하기
위의 Keras 전처리 유틸리티 tf.keras.utils.image_dataset_from_directory
는 이미지 디렉터리에서 tf.data.Dataset
을 생성하는 편리한 방법입니다.
더 세밀한 제어를 위해 tf.data
를 사용하여 고유한 입력 파이프라인을 작성할 수 있습니다. 이 섹션에서는 이전에 다운로드한 TGZ 파일의 파일 경로부터 시작하여 이를 수행하는 방법을 보여줍니다.
파일의 트리 구조를 사용하여 class_names
목록을 컴파일할 수 있습니다.
데이터세트를 학습 및 검증 세트로 분할합니다.
다음과 같이 각 데이터세트의 길이를 인쇄할 수 있습니다.
파일 경로를 (img, label)
쌍으로 변환하는 간단한 함수를 작성합니다.
Dataset.map
을 사용하여 image, label
쌍의 데이터세트를 작성합니다.
성능을 위한 데이터세트 구성하기
이 데이터세트로 모델을 훈련하려면 데이터에 대해 다음이 필요합니다.
잘 섞는다.
배치 처리한다.
가능한 빨리 배치를 사용할 수 있어야 한다.
이러한 기능은 tf.data
API를 사용하여 추가할 수 있습니다. 자세한 내용은 입력 파이프 라인 성능 가이드를 참조하세요.
데이터 시각화하기
이 데이터세트를 이전에 작성한 데이터 세트와 유사하게 시각화할 수 있습니다.
모델 계속 훈련하기
이제 위의 tf.keras.utils.image_dataset_from_directory
에 의해 생성된 것과 유사한 tf.data.Dataset
을 수동으로 구축했습니다. 이를 사용하여 모델을 계속 학습할 수 있습니다. 이전과 마찬가지로 실행 시간을 짧게 유지하기 위해 몇 epoch 동안만 훈련합니다.
TensorFlow 데이터세트 사용하기
지금까지 이 튜토리얼은 디스크에서 데이터를 로드하는 데 중점을 두었습니다. TensorFlow Datasets에서 다운로드하기 쉬운 대규모 데이터세트 카탈로그를 탐색하여 사용할 데이터세트를 찾을 수도 있습니다.
이전에 디스크에서 꽃 데이터세트를 로드했으므로 이제 TensorFlow 데이터세트로 가져오겠습니다.
TensorFlow 데이터세트를 사용하여 꽃 데이터세트를 다운로드합니다.
꽃 데이터세트에는 5가지 클래스가 있습니다.
데이터세트에서 이미지를 검색합니다.
이전과 마찬가지로 성능을 위해 훈련, 검증 및 테스트 세트를 일괄 처리, 셔플 및 구성해야 합니다.
데이터 강화 가이드를 방문하여 꽃 데이터세트 및 TensorFlow 데이터세트를 처리하는 전체 예제를 찾을 수 있습니다.
다음 단계
이 튜토리얼에서는 디스크에서 이미지를 로드하는 두 가지 방법을 보여주었습니다. 먼저 Keras 사전 처리 레이어 및 유틸리티를 사용하여 이미지 데이터세트를 로드하고 사전 처리하는 방법을 배웠습니다. 다음으로 tf.data
를 사용하여 처음부터 입력 파이프라인을 작성하는 방법을 배웠습니다. 마지막으로 TensorFlow Datasets에서 데이터세트를 다운로드하는 방법을 배웠습니다.
다음 단계:
데이터 증강을 추가하는 방법을 배울 수 있습니다.
tf.data
에 대해 자세히 알아보려면 tf.data: Build TensorFlow 입력 파이프라인 가이드를 방문하세요.