Cloud TPU에서 사용할 이미지 분류 데이터 세트 변환

이 튜토리얼에서는 이미지 분류 데이터 변환기 샘플 스크립트를 사용하여 원시 이미지 분류 데이터 세트를 Cloud TPU 모델 학습에 사용하는 TFRecord 형식으로 변환하는 방법을 설명합니다.

TFRecord는 각 이미지를 개별 파일로 읽는 것보다 효율적으로 Cloud Storage에서 큰 파일을 읽습니다. tf.data.Dataset 파이프라인을 사용하는 모든 곳에서 TFRecord를 사용할 수 있습니다.

TFRecord 사용에 대한 자세한 내용은 다음 TensorFlow 문서를 참조하세요.

PyTorch 또는 JAX 프레임워크를 사용하고 데이터 세트 스토리지에 Cloud Storage를 사용하지 않는 경우 TFRecord에서 동일한 이점을 얻지 못할 수 있습니다.

변환 개요

GitHub의 데이터 변환기 저장소 내의 이미지 분류 폴더에는 converter 스크립트, image_classification_data.py, 샘플 구현, simple_example.py가 포함되어 있습니다. 복사하고 수정하여 자체 데이터 변환을 수행하세요.

이미지 분류 데이터 변환기 샘플은 두 개의 클래스 ImageClassificationConfigImageClassificationBuilder를 정의합니다. 이들 클래스는 tpu/tools/data_converter/image_classification_data.py에 정의됩니다.

ImageClassificationConfig는 추상 기본 클래스입니다. ImageClassificationConfig를 서브클래스로 만들어서 ImageClassificationBuilder를 인스턴스화하는데 필요한 구성을 정의합니다.

ImageClassificationBuilder는 이미지 분류 데이터 세트의 TensorFlow 데이터 세트 빌더입니다. tdfs.core.GeneratorBasedBuilder의 서브클래스입니다. 데이터 세트에서 데이터 예를 검색하여 TFRecord로 변환합니다. TFRecord는 ImageClassificationBuilder__init__ 메서드에 대한 data_dir 파라미터로 지정된 경로에 기록됩니다.

simple_example.py에서 SimpleDatasetConfigImageClassificationConfig의 서브클래스를 만들어 지원 모드, 이미지 클래스 수, 데이터 세트의 각 예에 대한 이미지 데이터와 이미지 클래스를 포함하는 사전을 생성하는 예 생성기를 정의하는 속성을 구현합니다.

main() 함수는 무작위로 생성된 이미지 데이터의 데이터 세트를 만들고 클래스 수와 디스크의 데이터 세트 경로를 지정하는 SimpleDatasetConfig 객체를 인스턴스화합니다. 다음으로, main()SimpleDatasetConfig 인스턴스를 전달하며 ImageClassificationBuilder 객체를 인스턴스화합니다. 마지막으로 main()download_and_prepare()를 호출합니다. 이 메서드가 호출되면 ImageClassificationBuilder 인스턴스는 SimpleDatasetConfig에서 구현한 데이터 예 생성기를 사용하여 각 예를 로드하고 일련의 TFRecord 파일에 저장합니다.

자세한 내용은 분류 변환기 노트북을 참조하세요.

데이터 세트를 로드하도록 데이터 변환 샘플 수정

데이터 세트를 TFRecord 형식으로 변환하려면 다음 속성을 정의하는 ImageClassificationConfig 클래스의 서브클래스를 만듭니다.

  • num_labels: 이미지 클래스 수를 반환합니다.
  • supported_modes: 데이터 세트에서 지원하는 모드 목록을 반환합니다(예: 테스트, 학습, 검증).
  • text_label_map: 텍스트 클래스 라벨과 정수 클래스 라벨 간의 매핑을 모델링하는 사전을 반환합니다. 매핑이 필요하지 않으므로 SimpleDatasetConfig는 이 속성을 사용하지 않습니다.
  • download_path: 데이터 세트를 다운로드할 경로이며 SimpleDatasetConfig는 이 속성을 사용하지 않고 example_generator는 디스크에서 데이터를 로드합니다.

example_generator 생성기 함수를 구현합니다. 이 메서드는 각 예마다 이미지 데이터와 이미지 클래스 이름이 포함된 사전을 생성해야 합니다. ImageClassificationBuilderexample_generator() 함수를 사용하여 각 예를 검색하고 이를 TFRecord 형식으로 디스크에 씁니다.

데이터 변환 샘플 실행

  1. 다음 명령어를 사용하여 Cloud Storage 버킷을 만듭니다.

    gcloud storage buckets create gs://bucket-name --project=your-project-id --location=us-central2
  2. gcloud 명령어를 사용하여 Cloud TPU를 실행합니다.

    $ gcloud compute tpus tpu-vm create tpu-name \
        --zone=us-central2-b \
        --accelerator-type=v4-8 \
        --version=tpu-vm-tf-2.17.1-pjrt

    명령어 플래그 설명

    zone
    Cloud TPU를 만들려는 영역입니다.
    accelerator-type
    가속기 유형은 만들려는 Cloud TPU의 버전과 크기를 지정합니다. 각 TPU 버전에서 지원되는 가속기 유형에 대한 자세한 내용은 TPU 버전을 참조하세요.
    version
    Cloud TPU 소프트웨어 버전입니다.
  3. SSH를 사용하여 TPU에 연결합니다.

    $ gcloud compute tpus tpu-vm ssh tpu-name --zone=us-central2-b

    TPU에 연결하면 셸 프롬프트가 username@projectname에서 username@vm-name으로 변경됩니다.

  4. 필수 패키지를 설치합니다.

    (vm)$ pip3 install opencv-python-headless pillow
    (vm)$ pip3 install tensorflow-datasets
  5. 스크립트에 사용되는 다음 환경변수를 만듭니다.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export