AI Platform Training의 기본 제공 알고리즘을 사용하여 학습하면 학습 코드를 작성하지 않고도 데이터세트를 제출하고 모델을 학습시킬 수 있습니다. 이 페이지에서는 기본 제공 이미지 객체 감지 알고리즘의 작동 방식과 사용 방법을 설명합니다.
개요
기본 제공 이미지 객체 감지 알고리즘은 학습 및 검증 데이터세트를 사용하여 모델을 지속적으로 학습시킨 후 학습 작업 중에 생성된 가장 정확한 저장된 모델을 출력합니다. 또한 초매개변수 조정을 사용하여 최고의 모델 정확성을 얻을 수 있습니다. 내보낸 저장된 모델은 로컬에서 사용하거나 프로덕션 서비스의 AI Platform Prediction에 배포하여 예측에 직접 사용할 수 있습니다.
제한사항
이미지 기본 제공 알고리즘은 단일 CPU, GPU 또는 TPU로 학습을 지원합니다. 이로 인해 저장된 모델은 CPU 및 GPU에서의 작업과 호환됩니다.
기본 제공 이미지 객체 알고리즘을 사용한 학습에서는 다음 기능이 지원되지 않습니다.
- 분산 학습. AI Platform Training에서 TensorFlow 분산 학습 작업을 실행하려면 학습 애플리케이션을 만들어야 합니다.
- 멀티 GPU 학습. 기본 제공 알고리즘은 GPU를 한 번에 하나만 사용합니다. 머신 하나에서 GPU를 여러 개 사용하는 학습을 최대한 활용하려면 학습 애플리케이션을 만들어야 합니다. 자세한 내용은 머신 유형을 참조하세요.
지원되는 머신 유형
지원되는 AI Platform Training 확장 등급과 머신 유형은 다음과 같습니다.
BASIC
확장 등급BASIC_TPU
확장 등급- AI Platform Training에서 지원하는 Compute Engine 머신 유형을 사용하는
CUSTOM
확장 등급 - 다음 기존 머신 유형이 있는
CUSTOM
확장 등급:standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
complex_model_m_gpu
complex_model_l_gpu
complex_model_m_p100
complex_model_m_v100
complex_model_l_v100
TPU_V2
(코어 8개)
프로젝트에 액세스하도록 Cloud TPU 승인
다음 단계를 수행하여 Google Cloud 프로젝트와 연결된 Cloud TPU 서비스 계정 이름을 승인합니다.
projects.getConfig
를 호출하여 Cloud TPU 서비스 계정 이름을 가져옵니다. 예를 들면 다음과 같습니다.PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
API에서 반환한
serviceAccountProject
및tpuServiceAccount
필드 값을 저장합니다.Cloud TPU 서비스 계정을 초기화합니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
이제 Cloud TPU 서비스 계정을 Cloud ML 서비스 에이전트 역할이 있는 구성원으로 프로젝트에 추가합니다. Google Cloud Console에서 또는 gcloud
명령어를 사용하여 다음 단계를 완료합니다.
Console
- Google Cloud Console에 로그인하고 TPU를 사용 중인 프로젝트를 선택합니다.
- IAM 및 관리자 > IAM을 선택합니다.
- 추가 버튼을 클릭하여 프로젝트에 멤버를 추가합니다.
- 멤버 입력란에 TPU 서비스 계정을 입력합니다.
- 역할 드롭다운 목록을 클릭합니다.
- Cloud ML 서비스 에이전트 역할을 사용 설정합니다(서비스 에이전트 > Cloud ML 서비스 에이전트).
gcloud
프로젝트 ID 및 Cloud TPU 서비스 계정이 포함된 환경 변수를 설정합니다.
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Cloud TPU 서비스 계정에
ml.serviceAgent
역할을 부여합니다.gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
서비스 계정에 역할을 부여하는 방법에 대한 자세한 내용은 IAM 문서를 참조하세요.
학습용 입력 데이터 형식 지정
기본 제공 이미지 객체 감지 알고리즘을 사용하려면 입력 데이터를 tf.Examples
형식으로 지정하고 TFRecord 파일에 저장해야 합니다. tf.Example
데이터 구조 및 TFRecord 파일 형식 모두 TensorFlow를 통해 데이터를 효율적으로 읽도록 설계되었습니다.
TFRecord 형식은 바이너리 레코드 시퀀스를 저장하는 데 사용되는 단순 형식입니다.
이 경우 모든 레코드는 이미지의 바이너리 표현을 포함합니다. 각 이미지는 클래스 라벨과 함께 tf.Example
로 표현됩니다. 많은 tf.Example
를 하나의 TFRecord 파일에 저장할 수 있습니다. 또한 여러 TFRecord 파일에서 대량의 데이터세트를 샤딩할 수도 있습니다.
TFRecord 및 tf.Example
에 대해 자세히 알아보세요.
이미지를 TFRecords로 변환
예측을 수행하는 데 필요한 형식으로 이미지를 변환하려면 TensorFlow Model Garden 가이드에 따라 객체 감지를 위한 입력을 준비합니다.
Cloud Storage 버킷 권한 확인
데이터를 저장하려면 AI Platform Training 작업을 실행하는 데 사용하는 것과 동일한 Google Cloud 프로젝트에서 Cloud Storage 버킷을 사용합니다. 그렇지 않으면 데이터가 저장된 Cloud Storage 버킷에 AI Platform Training 액세스 권한을 부여합니다.
필수 입력 형식
기본 제공 이미지 객체 감지 알고리즘을 학습시키려면 이미지 데이터가 다음 필드를 포함한 tf.Example
로 구성되어야 합니다.
image/encoded
는 문자열로 인코딩된 원시 이미지입니다.image/object/class/label
은 해당 이미지의 정수 라벨 목록입니다(상자당 하나의 라벨).데이터 세트에 사용되는 정수 라벨 세트는
1
부터 시작하는 연속 시퀀스여야 합니다. 예를 들어 데이터 세트에 5개의 클래스가 있는 경우 각 라벨은[1, 5]
간격의 정수여야 합니다.image/object/bbox/xmin
은 해당 이미지의 정규화된 왼쪽 x 좌표 목록입니다(상자당 하나의 좌표). 각 좌표는[0, 1]
간격이어야 합니다.image/object/bbox/xmax
은 해당 이미지의 정규화된 오른쪽 x 좌표 목록입니다(상자당 하나의 좌표). 각 좌표는[0, 1]
간격이어야 합니다.image/object/bbox/ymin
는 해당 이미지의 정규화된 위쪽 y 좌표 목록입니다(상자당 하나의 좌표). 각 좌표는[0, 1]
간격이어야 합니다.image/object/bbox/ymax
은 해당 이미지의 정규화된 아래쪽 x 좌표 목록입니다(상자당 하나의 좌표). 각 좌표는[0, 1]
간격이어야 합니다.
다음 예에서는 두 개의 경계 상자가 포함된 이미지의 tf.Example
구조를 보여줍니다. 첫 번째 상자에는 1
라벨이 있고, 왼쪽 위 모서리는 정규화된 좌표 (0.1, 0.4)
에 있고, 오른쪽 아래 모서리는 정규화된 좌표 (0.5, 0.8)
에 있습니다. 두 번째 상자에는 2
라벨이 있고, 왼쪽 위 모서리는 정규화된 좌표 (0.3, 0.5)
에 있고, 오른쪽 아래 모서리는 정규화된 좌표 (0.4, 0.7)
에 있습니다.
{
'image/encoded': '<encoded image data>',
'image/object/class/label': [1, 2],
'image/object/bbox/xmin': [0.1, 0.3],
'image/object/bbox/xmax': [0.5, 0.4],
'image/object/bbox/ymin': [0.4, 0.5],
'image/object/bbox/ymax': [0.8, 0.7]
}
이 tf.Example
형식은 TFRecord 객체 감지 스크립트에서 사용한 형식과 동일해야 합니다.
출력으로 최적의 저장된 모델 가져오기
학습 작업이 완료되면 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['encoded_image'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: encoded_image_string_tensor:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['detection_boxes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100, 4)
name: detection_boxes:0
outputs['detection_classes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_classes:0
outputs['detection_scores'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_scores:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['num_detections'] tensor_info:
dtype: DT_FLOAT
shape: (-1)
name: num_detections:0
Method name is: tensorflow/serving/predict
입력:
encoded_image
: 디코딩되지 않은 원시 이미지 바이트입니다. tf.Example에 저장된image/encoded
와 동일합니다.key
: 예측 입력의 문자열 값 식별자입니다. 이 값은 출력key
로 전달되며, 일괄 예측에서 예측 출력을 입력에 매핑하는 데 유용합니다.
출력:
num_detections
: 감지된 경계 상자의 수입니다.detection_boxes
: 감지 경계 상자의 상대([0,1
]의 값) 좌표([ymin, xmin, ymax, xmax
]) 목록입니다.detection_classes
:detection_boxes
의 각 감지 상자에 대해 예측된 클래스(정수) 라벨 목록입니다.detection_scores
:detection_boxes
의 각 감지 상자에 대한scores
목록입니다.key
: 출력 키입니다.
예측 출력의 예시는 다음과 같습니다.
{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}
구성 예시
gcloud
를 사용하여 작업을 제출하려면 머신 유형 및 초매개변수 조정 사양에 맞는 config.yaml
파일을 만들어야 합니다. Google Cloud Console을 사용하는 경우에는 이 파일을 만들 필요가 없습니다. 학습 작업 제출 방법에 대해 알아보세요.
다음 예시 config.yaml
파일은 학습 작업에 TPU 리소스를 할당하는 방법을 보여줍니다.
cat << EOF > config.yaml
trainingInput:
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
tpuTfVersion: 1.14
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-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: "AP"
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
EOF
이미지 객체 감지 학습 작업 제출
이 섹션에서는 기본 제공 이미지 객체 감지 알고리즘을 사용하여 학습 작업을 제출하는 방법을 설명합니다.
Console
알고리즘 선택
Google Cloud Console의 AI Platform Training 작업 페이지로 이동합니다.
새 학습 작업 버튼을 클릭합니다. 아래 표시된 옵션 중에서 기본 제공 알고리즘 학습을 클릭합니다.
새 학습 작업 만들기 페이지에서 이미지 객체 감지를 선택하고 다음을 클릭합니다.
학습 및 검증 데이터 선택
학습 데이터 아래의 드롭다운 메뉴에서 단일 파일을 사용할지 아니면 여러 파일을 사용할지 지정합니다.
- 단일 파일의 경우 'GCS 버킷의 단일 파일 사용'을 선택한 상태로 둡니다.
- 여러 파일의 경우 'Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용'을 선택합니다.
디렉터리 경로는 찾아보기를 클릭합니다. 오른쪽 패널에서 학습 데이터를 업로드한 버킷의 이름을 클릭하고 파일로 이동합니다.
여러 파일을 선택한 경우 와일드 카드 이름에 와일드 카드 문자를 넣습니다. 경로가 올바른지 확인하는 데 도움이 되도록 아래에 '전체 GCS 경로'가 표시됩니다.
검증 데이터 아래의 드롭다운 메뉴에서 단일 파일을 사용할지 아니면 여러 파일을 사용할지 지정합니다.
- 단일 파일의 경우 'GCS 버킷의 단일 파일 사용'을 선택한 상태로 둡니다.
- 여러 파일의 경우 'Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용'을 선택합니다.
디렉터리 경로는 찾아보기를 클릭합니다. 오른쪽 패널에서 학습 데이터를 업로드한 버킷의 이름을 클릭하고 파일로 이동합니다.
여러 파일을 선택한 경우 와일드 카드 이름에 와일드 카드 문자를 넣습니다. 경로가 올바른지 확인하는 데 도움이 되도록 아래에 '전체 GCS 경로'가 표시됩니다.
출력 디렉터리에 AI Platform Training이 학습 작업의 출력을 저장할 개발자의 Cloud Storage 버킷 경로를 입력합니다. Cloud Storage 버킷 경로를 직접 입력하거나 찾아보기 버튼을 클릭하여 선택할 수 있습니다.
쉽게 관리할 수 있도록 이 학습 작업을 저장할 새 디렉터리를 개발자의 Cloud Storage 버킷에 만듭니다. 찾아보기 창에서 이 작업을 수행할 수 있습니다.
다음을 클릭합니다.
알고리즘 인수 설정
각 알고리즘별 인수는 초매개변수 조정 없이 학습 작업에 대한 기본값을 표시합니다. 알고리즘 인수에서 초매개변수 조정을 사용 설정하는 경우에는 최솟값과 최댓값을 지정해야 합니다.
모든 알고리즘 인수에 대해 자세히 알아보려면 Google Cloud Console의 링크를 클릭해 기본 제공 이미지 객체 감지 참조의 세부정보를 참조하세요.
작업 제출
작업 설정 탭에서 다음을 수행합니다.
- 고유한 작업 ID를 입력합니다.
- 사용 가능한 리전을 입력합니다(예: 'us-central1').
- 머신 유형을 선택하려면 확장 등급으로 'CUSTOM'을 선택합니다.
커스텀 클러스터 사양을 제공하는 섹션이 표시됩니다.
- 마스터 유형에서 사용 가능한 머신 유형을 선택합니다.
- TPU를 사용하려면 작업자 유형을 cloud_tpu로 설정합니다. 작업자 수의 기본값은 1입니다.
완료를 클릭하여 학습 작업을 제출합니다.
gcloud
작업의 환경 변수 설정
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_object_detection:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="coco" ALGORITHM="object_detection" 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}"
작업을 제출합니다.
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --job-dir=$JOB_DIR \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --train_batch_size=64 \ --num_eval_images=500 \ --train_steps_per_eval=2000 \ --max_steps=22500 \ --num_classes=90 \ --warmup_steps=500 \ --initial_learning_rate=0.08 \ --fpn_type="nasfpn" \ --aug_scale_min=0.8 \ --aug_scale_max=1.2
작업이 성공적으로 제출되면 다음
gcloud
명령어를 사용하여 로그를 볼 수 있습니다.gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
다음 단계
- TFRecord 객체 감지 스크립트로 자체 데이터 세트를 사용하는 방법 알아보기
- 기본 제공 이미지 객체 감지 참조를 참조하여 모든 다른 매개변수 알아보기