기본 제공 이미지 분류 알고리즘을 사용한 학습

AI Platform Training의 기본 제공 알고리즘을 사용하여 학습하면 학습 코드를 작성하지 않고도 데이터세트를 제출하고 모델을 학습시킬 수 있습니다. 이 페이지에서는 기본 제공 이미지 분류 알고리즘 작동 방식과 이를 사용하는 방법을 설명합니다.

개요

기본 제공 이미지 분류 알고리즘은 학습 및 검증 데이터세트를 사용하여 모델을 지속적으로 학습시킨 후 학습 작업 중에 생성된 가장 정확한 저장된 모델을 출력합니다. 또한 초매개변수 조정을 사용하여 최고의 모델 정확성을 얻을 수 있습니다. 내보낸 저장된 모델은 로컬에서 사용하거나 프로덕션 서비스의 AI Platform Prediction에 배포하여 예측에 직접 사용할 수 있습니다.

제한사항

이미지 기본 제공 알고리즘은 단일 CPU, GPU 또는 TPU로 학습을 지원합니다. 이로 인해 저장된 모델은 CPU 및 GPU에서의 작업과 호환됩니다.

기본 제공 이미지 분류 알고리즘을 사용한 학습에서는 다음 기능이 지원되지 않습니다.

  • 분산 학습. AI Platform Training에서 TensorFlow 분산 학습 작업을 실행하려면 학습 애플리케이션을 만들어야 합니다.
  • 멀티 GPU 학습. 기본 제공 알고리즘은 GPU를 한 번에 하나만 사용합니다. 머신 하나에서 GPU를 여러 개 사용하는 학습을 최대한 활용하려면 학습 애플리케이션을 만들어야 합니다. 자세한 내용은 머신 유형을 참조하세요.

지원되는 머신 유형

지원되는 AI Platform Training 확장 등급과 머신 유형은 다음과 같습니다.

프로젝트에 액세스하도록 Cloud TPU 승인

학습용 입력 데이터 형식 지정

기본 제공 이미지 분류 알고리즘을 사용하려면 입력 데이터를 tf.Examples 형식으로 지정하고 TFRecord 파일에 저장해야 합니다. tf.Example 데이터 구조 및 TFRecord 파일 형식 모두 TensorFlow를 통해 데이터를 효율적으로 읽도록 설계되었습니다.

TFRecord 형식은 바이너리 레코드 시퀀스를 저장하는 데 사용되는 단순 형식입니다. 이 경우 모든 레코드는 이미지의 바이너리 표현을 포함합니다. 각 이미지는 클래스 라벨과 함께 tf.Example로 표현됩니다. 많은 tf.Example를 하나의 TFRecord 파일에 저장할 수 있습니다. 또한 여러 TFRecord 파일에서 대량의 데이터세트를 샤딩할 수도 있습니다.

TFRecord 및 tf.Example에 대해 자세히 알아보세요.

이미지를 TFRecords로 변환

TensorFlow는 JPEG에서 TFRecord 형식으로 이미지를 변환하는 데 사용할 수 있는 스크립트를 제공합니다.

다음과 같은 경우 스크립트를 사용할 수 있습니다.

  • Cloud Storage에 이미지를 저장하는 경우
  • Cloud Storage의 이미지 경로와 해당 라벨에 CSV 파일이 있는 경우 예를 들면 다음과 같습니다.

    gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy
    gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
    
  • 이러한 CSV 파일을 Cloud Storage에 저장합니다.

다음 예시에서는 스크립트를 실행하는 방법을 보여줍니다.

  1. 스크립트 다운로드:

    curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
    
  2. 아직 실행하지 않았다면 프로젝트 ID 및 버킷 이름의 변수를 설정합니다.

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
  3. 임시 파일에서 데이터세트에 사용할 수 있는 모든 라벨 목록을 만듭니다.

    cat << EOF > /tmp/labels.txt
    daisy
    dandelion
    roses
    sunflowers
    tulips
    EOF
    
  4. 공개 cloud-ml-data 버킷과 라벨 목록에서 꽃 데이터를 사용하여 스크립트를 실행합니다.

    python -m jpeg_to_tf_record.py \
           --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \
           --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \
           --labels_file /tmp/labels.txt \
           --project_id $PROJECT_ID \
           --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
    

Cloud Storage 버킷 권한 확인

데이터를 저장하려면 AI Platform Training 작업을 실행하는 데 사용하는 것과 동일한 Google Cloud 프로젝트에서 Cloud Storage 버킷을 사용합니다. 그렇지 않으면 데이터가 저장된 Cloud Storage 버킷에 AI Platform Training 액세스 권한을 부여합니다.

필수 입력 형식

기본 제공 이미지 분류 알고리즘을 학습시키려면 이미지 데이터가 다음 필드를 포함한 tf.Example로 구성되어야 합니다.

  • image/encoded는 원시 이미지 문자열입니다.

  • image/class/label은 해당 이미지의 단일 정수 라벨입니다. 인스턴스당 여러 라벨이 지원되지 않습니다.

    데이터 세트에 사용되는 정수 라벨 집합은 1부터 시작하는 연속 시퀀스여야 합니다. 예를 들어 데이터 세트에 5개의 클래스가 있는 경우 각 라벨은 [1, 5] 간격의 정수여야 합니다.

예를 들면 다음과 같습니다.

{
    'image/encoded': '<encoded image data>',
    'image/class/label': 2
}

출력으로 최적의 저장된 모델 가져오기

학습 작업이 완료되면 AI Platform Training은 작업을 제출할 때 jobDir로 지정한 Cloud Storage 버킷에 TensorFlow 저장된 모델을 작성합니다. 저장된 모델은 jobDir/model에 작성됩니다. 예를 들어 작업을 gs://your-bucket-name/your-job-dir에 제출한 경우 AI Platform Training은 저장된 모델을 gs://your-bucket-name/your-job-dir/model에 작성합니다.

초매개변수 조정을 사용 설정한 경우 AI Platform Training은 학습 과정에서 얻은 최고의 정확성으로 TensorFlow 저장된 모델을 반환합니다. 예를 들어 2,500개의 학습 단계가 포함된 학습 작업을 제출했고 2,000단계에서 가장 높은 정확성을 얻은 경우 특정 지점에서 TensorFlow 저장된 모델이 저장됩니다.

AI Platform Training의 각 시도는 Cloud Storage 버킷의 자체 디렉터리에 최고의 정확성을 갖춘 TensorFlow 저장된 모델을 작성합니다. 예를 들면 gs://your-bucket-name/your-job-dir/model/trial_{trial_id}입니다.

출력 저장된 모델 서명은 다음과 같습니다.

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['image_bytes'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Placeholder:0
    inputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: key:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['classes'] tensor_info:
        dtype: DT_INT64
        shape: (-1)
        name: ArgMax:0
    outputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Identity:0
    outputs['probabilities'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1000)
        name: softmax_tensor:0
  Method name is: tensorflow/serving/predict

입력:

  • image_bytes: 디코딩되지 않은 원시 이미지 바이트입니다. tf.Example에 저장된 image/encoded와 동일합니다.
  • key: 예측 입력의 문자열 값 식별자입니다. 이 값은 출력 key로 전달되며, 일괄 예측에서 예측 출력을 입력에 매핑하는 데 유용합니다.

출력:

  • classes: 확률이 가장 높은 예측 클래스(정수) 라벨입니다.
  • key: 출력 키입니다.
  • probabilities: 각 class(0부터 num_classes까지)의 probability(0~1)입니다.

다음은 예측 입력 및 출력의 예시입니다.

prediction_input: {
  'image_bytes': 'some_raw_image_bytes',
  'key': ['test_key'])
}

prediction_output: {
  'probabilities': [[0.1, 0.3, 0.6]],
  'classes': [2],
  'key': ['test_key'],
}

구성 예시

gcloud를 사용하여 작업을 제출하려면 머신 유형 및 초매개변수 조정 사양에 맞는 config.yaml 파일을 만들어야 합니다. Google Cloud Console을 사용하는 경우에는 이 파일을 만들 필요가 없습니다. 학습 작업 제출 방법에 대해 알아보세요.

다음 예시 config.yaml 파일은 학습 작업에 TPU 리소스를 할당하는 방법을 보여줍니다.

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
EOF

그 다음 config.yaml 파일을 사용하여 학습 작업을 제출합니다.

초매개변수 조정 구성

초매개변수 조정을 사용하려면 머신 구성과 동일한 config.yaml 파일에 초매개변수 조정 구성을 포함시킵니다.

Google Cloud Console에서 각 초매개변수에 대한 간략한 설명과 기본 제공 이미지 분류 알고리즘의 참조에서 자세한 설명을 확인할 수 있습니다.

다음 예시 config.yaml 파일은 학습 작업에 TPU 리소스를 할당하는 방법과 초매개변수 조정 구성을 포함하는 방법을 보여줍니다.

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   tpuTfVersion: 1.14
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
  # The following are hyperparameter configs.
  hyperparameters:
   goal: MAXIMIZE
   hyperparameterMetricTag: top_1_accuracy
   maxTrials: 6
   maxParallelTrials: 3
   enableTrialEarlyStopping: True
   params:
   - parameterName: initial_learning_rate
     type: DOUBLE
     minValue: 0.001
     maxValue: 0.2
     scaleType: UNIT_LOG_SCALE
EOF

이미지 분류 학습 작업 제출

이 섹션에서는 기본 제공 이미지 분류 알고리즘을 사용하는 학습 작업을 제출하는 방법을 설명합니다.

Console

알고리즘 선택

  1. Google Cloud Console의 AI Platform Training 작업 페이지로 이동합니다.

    AI Platform Training 작업 페이지

  2. 새 학습 작업 버튼을 클릭합니다. 아래 표시된 옵션 중에서 기본 제공 알고리즘 학습을 클릭합니다.

  3. 새 학습 작업 만들기 페이지에서 이미지 분류를 선택하고 다음을 클릭합니다.

학습 및 검증 데이터 선택

  1. 학습 데이터 아래의 드롭다운 메뉴에서 단일 파일을 사용할지 아니면 여러 파일을 사용할지 지정합니다.

    • 단일 파일의 경우 'GCS 버킷의 단일 파일 사용'을 선택한 상태로 둡니다.
    • 여러 파일의 경우 'Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용'을 선택합니다.
  2. 디렉터리 경로찾아보기를 클릭합니다. 오른쪽 패널에서 학습 데이터를 업로드한 버킷의 이름을 클릭하고 파일로 이동합니다.

    여러 파일을 선택한 경우 와일드 카드 이름에 와일드 카드 문자를 넣습니다. 경로가 올바른지 확인하는 데 도움이 되도록 아래에 '전체 GCS 경로'가 표시됩니다.

  3. 검증 데이터 아래의 드롭다운 메뉴에서 단일 파일을 사용할지 아니면 여러 파일을 사용할지 지정합니다.

    • 단일 파일의 경우 'GCS 버킷의 단일 파일 사용'을 선택한 상태로 둡니다.
    • 여러 파일의 경우 'Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용'을 선택합니다.
  4. 디렉터리 경로찾아보기를 클릭합니다. 오른쪽 패널에서 학습 데이터를 업로드한 버킷의 이름을 클릭하고 파일로 이동합니다.

    여러 파일을 선택한 경우 와일드 카드 이름에 와일드 카드 문자를 넣습니다. 경로가 올바른지 확인하는 데 도움이 되도록 아래에 '전체 GCS 경로'가 표시됩니다.

  5. 출력 디렉터리에 AI Platform Training이 학습 작업의 출력을 저장할 개발자의 Cloud Storage 버킷 경로를 입력합니다. Cloud Storage 버킷 경로를 직접 입력하거나 찾아보기 버튼을 클릭하여 선택할 수 있습니다.

    쉽게 관리할 수 있도록 이 학습 작업을 저장할 새 디렉터리를 개발자의 Cloud Storage 버킷에 만듭니다. 찾아보기 창에서 이 작업을 수행할 수 있습니다.

    다음을 클릭합니다.

알고리즘 인수 설정

각 알고리즘별 인수는 초매개변수 조정 없이 학습 작업에 대한 기본값을 표시합니다. 알고리즘 인수에서 초매개변수 조정을 사용 설정하는 경우에는 최솟값과 최댓값을 지정해야 합니다.

모든 알고리즘 인수에 대해 자세히 알아보려면 Google Cloud Console의 링크를 클릭해 기본 제공 이미지 분류 참조의 자세한 설명을 참조하세요.

작업 제출

작업 설정 탭에서 다음을 수행합니다.

  1. 고유한 작업 ID를 입력합니다.
  2. 사용 가능한 리전을 입력합니다(예: 'us-central1').
  3. 머신 유형을 선택하려면 확장 등급으로 'CUSTOM'을 선택합니다. 커스텀 클러스터 사양을 제공하는 섹션이 표시됩니다.
    1. 마스터 유형에서 사용 가능한 머신 유형을 선택합니다.
    2. TPU를 사용하려면 작업자 유형cloud_tpu로 설정합니다. 작업자 수의 기본값은 1입니다.

완료를 클릭하여 학습 작업을 제출합니다.

gcloud

  1. 작업의 환경 변수 설정

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
    # Specify the same region where your data is stored
    REGION="YOUR_REGION"
    
    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    
    # Set Cloud Storage paths to your training and validation data
    # Include a wildcard if you select multiple files.
    TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord"
    VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord"
    
    # Specify the Docker container for your built-in algorithm selection
    IMAGE_URI="gcr.io/cloud-ml-algos/image_classification:latest"
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME="flowers"
    ALGORITHM="image_classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}"
    DATE="$(date '+%Y%m%d_%H%M%S')"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
    
  2. 작업을 제출합니다.

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --master-image-uri=$IMAGE_URI \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --job-dir=$JOB_DIR \
      --max_steps=30000 \
      --train_batch_size=128 \
      --num_classes=5 \
      --num_eval_images=100 \
      --initial_learning_rate=0.128 \
      --warmup_steps=1000 \
      --model_type='efficientnet-b4'
  3. 작업이 성공적으로 제출되면 다음 gcloud 명령어를 사용하여 로그를 볼 수 있습니다.

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

다음 단계