

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Rekognition Custom Labels 모델 생성
<a name="creating-model"></a>

모델은 비즈니스에 고유한 개념, 장면 및 객체를 찾도록 훈련되는 소프트웨어입니다. Amazon Rekognition Custom Labels 콘솔 또는 AWS SDK를 사용하여 모델을 생성할 수 있습니다. Amazon Rekognition Custom Labels 모델을 만들기 전에 [Amazon Rekognition Custom Labels의 이해](understanding-custom-labels.md) 항목을 먼저 읽어 보는 것이 좋습니다.

이 항목은 프로젝트 생성, 다양한 모델 유형에 대한 훈련 및 테스트 데이터 세트 생성, 모델 훈련에 대한 콘솔 및 SDK 정보를 제공합니다. 이후 항목은 모델을 개선하고 사용하는 방법을 보여줍니다. 콘솔에서 특정 유형의 모델을 생성하고 사용하는 방법을 보여주는 튜토리얼은 [이미지 분류](tutorial-classification.md) 항목을 참조하세요.

**Topics**
+ [프로젝트 생성](mp-create-project.md)
+ [훈련 및 테스트 데이터 세트 생성](creating-datasets.md)
+ [Amazon Rekognition Custom Labels 모델 훈련](training-model.md)
+ [실패한 모델 훈련 디버깅](tm-debugging.md)

# 프로젝트 생성
<a name="mp-create-project"></a>

프로젝트는 모델의 모델 버전, 훈련 데이터 세트, 테스트 데이터 세트를 관리합니다. Amazon Rekognition Custom Labels 콘솔 또는 API를 사용하여 프로젝트를 생성할 수 있습니다. 프로젝트 삭제와 같은 다른 프로젝트 작업에 대해서는 [Amazon Rekognition Custom Labels 프로젝트 관리](managing-project.md) 항목을 참조하세요.

 태그를 사용하여 프로젝트를 포함한 Amazon Rekognition Custom Labels 리소스를 분류하고 관리할 수 있습니다.

 [CreateProject](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProject) 작업을 사용하면 새 프로젝트를 생성할 때 선택적으로 태그를 지정할 수 있습니다. 키-값 페어로 태그를 제공하여 리소스를 분류하고 관리하는 데 사용할 수 있습니다.

## Amazon Rekognition Custom Labels 프로젝트 생성(콘솔)
<a name="mp-create-project-console"></a>

Amazon Rekognition Custom Labels 콘솔을 사용하여 모델을 생성할 수 있습니다. 새 AWS 리전에서 콘솔을 처음 사용할 때 Amazon Rekognition Custom Labels는 AWS 계정에 Amazon S3 버킷(콘솔 버킷)을 생성하도록 요청합니다. 버킷은 프로젝트 파일을 저장하는 데 사용됩니다. 콘솔 버킷을 생성하지 않으면 Amazon Rekognition Custom Labels 콘솔을 사용할 수 없습니다.

Amazon Rekognition Custom Labels 콘솔을 사용하여 모델을 생성할 수 있습니다.

**프로젝트 생성(콘솔)**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/) Amazon Rekognition 콘솔을 엽니다.

1. 왼쪽 창에서 **사용자 지정 레이블** 사용을 선택합니다. Amazon Rekognition Custom Labels 랜딩 페이지가 표시됩니다.

1. Amazon Rekognition Custom Labels 랜딩 페이지에서 **시작하기**를 선택합니다.

1. 왼쪽 창에서 **프로젝트**를 선택합니다.

1. **프로젝트 생성**을 선택합니다.

1. **프로젝트 이름**에 프로젝트의 이름을 입력합니다.

1. 프로젝트를 생성하려면 **프로젝트 생성**을 선택합니다.

1. [훈련 및 테스트 데이터 세트 생성](creating-datasets.md)에 나온 단계에 따라 프로젝트를 위한 훈련 및 테스트 데이터 세트를 만드세요.

## Amazon Rekognition Custom Labels 프로젝트 생성(SDK)
<a name="mp-create-project-sdk"></a>

[CreateProject](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProject)를 직접 호출하여 Amazon Rekognition Custom Labels 프로젝트를 생성합니다. 응답은 프로젝트를 식별하는 Amazon 리소스 이름(ARN)입니다. 프로젝트를 생성한 후 모델 훈련 및 테스트를 위한 데이터 세트를 생성합니다. 자세한 내용은 [이미지를 사용하여 훈련 및 테스트 데이터 세트 생성](md-create-dataset.md) 단원을 참조하십시오.

**프로젝트 (SDK) 생성**

1. 아직 설치하지 않은 경우 및 AWS SDKs AWS CLI 를 설치하고 구성합니다. 자세한 내용은 [4단계: AWS CLI 및 AWS SDKs 설정](su-awscli-sdk.md) 단원을 참조하십시오.

1. 다음 코드를 사용하여 프로젝트를 생성합니다.

------
#### [ AWS CLI ]

   다음 예제는 프로젝트를 생성하고 해당 ARN을 표시하는 방법을 보여줍니다.

   `project-name`의 값을 생성하려는 프로젝트의 이름으로 변경합니다.

   ```
   aws rekognition create-project --project-name my_project \
    --profile custom-labels-access --"CUSTOM_LABELS" --tags'{"key1":"value1","key2":"value2"}'
   ```

------
#### [ Python ]

   다음 예제는 프로젝트를 생성하고 해당 ARN을 표시하는 방법을 보여줍니다. 다음 명령줄 인수를 제공하세요.
   + `project_name`: 생성하려는 프로젝트의 이름

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   import argparse
   import logging
   import boto3
   
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   def create_project(rek_client, project_name):
       """
       Creates an Amazon Rekognition Custom Labels project
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_name: A name for the new prooject.
       """
   
       try:
           #Create the project.
           logger.info("Creating project: %s",project_name)
           
           response=rek_client.create_project(ProjectName=project_name)
           
           logger.info("project ARN: %s",response['ProjectArn'])
   
           return response['ProjectArn']
      
       
       except ClientError as err:  
           logger.exception("Couldn't create project - %s: %s", project_name, err.response['Error']['Message'])
           raise
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_name", help="A name for the new project."
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(f"Creating project: {args.project_name}")
   
           # Create the project.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           project_arn=create_project(rekognition_client, 
               args.project_name)
   
           print(f"Finished creating project: {args.project_name}")
           print(f"ARN: {project_arn}")
   
       except ClientError as err:
           logger.exception("Problem creating project: %s", err)
           print(f"Problem creating project: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   다음 예제는 프로젝트를 생성하고 해당 ARN을 표시하는 방법을 보여줍니다.

   다음 명령줄 인수를 제공하세요.
   + `project_name`: 생성하려는 프로젝트의 이름

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   package com.example.rekognition;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.CreateProjectRequest;
   import software.amazon.awssdk.services.rekognition.model.CreateProjectResponse;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class CreateProject {
   
       public static final Logger logger = Logger.getLogger(CreateProject.class.getName());
   
       public static String createMyProject(RekognitionClient rekClient, String projectName) {
   
           try {
   
               logger.log(Level.INFO, "Creating project: {0}", projectName);
               CreateProjectRequest createProjectRequest = CreateProjectRequest.builder().projectName(projectName).build();
   
               CreateProjectResponse response = rekClient.createProject(createProjectRequest);
   
               logger.log(Level.INFO, "Project ARN: {0} ", response.projectArn());
   
               return response.projectArn();
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not create project: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String[] args) {
   
           final String USAGE = "\n" + "Usage: " + "<project_name> <bucket> <image>\n\n" + "Where:\n"
                   + "   project_name - A name for the new project\n\n";
   
           if (args.length != 1) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           String projectName = args[0];
           String projectArn = null;
           ;
   
           try {
   
               // Get the Rekognition client.
               RekognitionClient rekClient = RekognitionClient.builder()
                   .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
                   .region(Region.US_WEST_2)
                   .build();
   
               // Create the project
               projectArn = createMyProject(rekClient, projectName);
   
               System.out.println(String.format("Created project: %s %nProject ARN: %s", projectName, projectArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

1. 응답에 표시된 프로젝트 ARN의 이름을 기록해 둡니다. 모델을 생성할 때 필요합니다.

1. [훈련 및 테스트 데이터 세트 생성(SDK)](md-create-dataset.md#cd-create-dataset-sdk)에 나온 단계에 따라 프로젝트를 위한 훈련 및 테스트 데이터 세트를 만드세요.

## CreateProject 작업 요청
<a name="create-project-request"></a>

 다음은 CreateProject 작업 요청의 형식입니다.

```
{
 "AutoUpdate": "string",
 "Feature": "string", 
 "ProjectName": "string",
 "Tags": {
 "string": "string"
 }
}
```

# 훈련 및 테스트 데이터 세트 생성
<a name="creating-datasets"></a>



데이터 세트는 해당 이미지를 설명하는 이미지와 레이블의 집합입니다. 프로젝트에는 훈련 데이터 세트와 테스트 데이터 세트가 필요합니다. Amazon Rekognition Custom Labels는 훈련 데이터 세트를 사용하여 모델을 훈련합니다. Amazon Rekognition Custom Labels는 교육 후 테스트 데이터 세트를 사용하여 훈련된 모델이 올바른 레이블을 얼마나 잘 예측하는지 확인합니다.

Amazon Rekognition Custom Labels 콘솔 또는 AWS SDK를 사용하여 데이터 세트를 생성할 수 있습니다. 데이터 세트를 생성하기 전에 [Amazon Rekognition Custom Labels의 이해](understanding-custom-labels.md) 항목을 먼저 읽어보는 것이 좋습니다. 다른 데이터 세트 작업에 대해서는 [데이터 세트 관리](managing-dataset.md) 항목을 참조하세요.

프로젝트의 훈련 및 테스트 데이터 세트를 만드는 단계는 다음과 같습니다.

**프로젝트를 위한 훈련 및 테스트 데이터 세트를 만들려면**

1. 훈련 및 테스트 데이터 세트에 레이블을 지정하는 방법을 결정하세요. 자세한 내용은 [데이터 세트 목적 설정](md-dataset-purpose.md) 항목을 참조하세요.

1. 훈련 및 테스트 데이터 세트에 사용할 이미지를 수집하세요. 자세한 내용은 [이미지 준비](md-prepare-images.md) 단원을 참조하십시오.

1. 훈련 및 테스트 데이터 세트를 만드세요. 자세한 내용은 [이미지를 사용하여 훈련 및 테스트 데이터 세트 생성](md-create-dataset.md) 단원을 참조하십시오. AWS SDK를 사용하는 경우 섹션을 참조하세요[훈련 및 테스트 데이터 세트 생성(SDK)](md-create-dataset.md#cd-create-dataset-sdk).

1. 필요한 경우 데이터 세트 이미지에 이미지 수준 레이블 또는 경계 상자를 추가하세요. 자세한 내용은 [이미지 레이블 지정](md-labeling-images.md) 단원을 참조하십시오.

데이터 세트를 만든 후 모델을 [훈련할](training-model.md) 수 있습니다.

**Topics**
+ [데이터 세트 목적 설정](md-dataset-purpose.md)
+ [이미지 준비](md-prepare-images.md)
+ [이미지를 사용하여 훈련 및 테스트 데이터 세트 생성](md-create-dataset.md)
+ [이미지 레이블 지정](md-labeling-images.md)
+ [데이터 세트 디버깅](debugging-datasets.md)

# 데이터 세트 목적 설정
<a name="md-dataset-purpose"></a>

프로젝트의 훈련 및 테스트 데이터 세트에 레이블을 지정하는 방법에 따라 생성되는 모델의 유형이 결정됩니다. Amazon Rekognition Custom Labels를 사용하면 다음을 수행하는 모델을 생성할 수 있습니다.
+ [객체, 장면 및 개념 찾기](#md-dataset-purpose-classification)
+ [객체 위치 찾기](#md-dataset-purpose-localization)
+ [브랜드 위치 찾기](#md-dataset-purpose-brands)

## 객체, 장면 및 개념 찾기
<a name="md-dataset-purpose-classification"></a>

모델은 전체 이미지와 관련된 객체, 장면, 개념을 분류합니다.

이미지 분류**와 다중 레이블 분류**라는 두 가지 유형의 분류 모델을 만들 수 있습니다. 두 가지 유형의 분류 모델 모두에 대해 모델은 훈련에 사용된 전체 레이블 집합에서 일치하는 레이블을 하나 이상 찾습니다. 훈련 데이터 세트와 테스트 데이터 세트에는 둘 이상의 레이블이 필요합니다.

### 이미지 분류
<a name="md-dataset-image-classification"></a>

 

모델은 이미지를 미리 정의된 레이블 세트에 속하는 것으로 분류합니다. 예를 들어, 이미지에 거실이 포함되어 있는지 확인하는 모델이 필요할 수 있습니다. 다음 이미지에는 living\$1space** 이미지 수준 레이블이 있을 수 있습니다.

![\[대형 창문을 통해 뒷마당 안뜰이 보이고 벽난로가 있는 아늑한 거실입니다. 뉴트럴 톤, 우드 액센트입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/living_space1.jpeg)


이 유형의 모델에는 훈련 및 테스트 데이터 세트 이미지 각각에 하나의 이미지 수준 레이블을 추가하세요. 예제 프로젝트에 관해서는 [이미지 분류](getting-started.md#gs-image-classification-example) 항목을 참조하세요.

### 다중 레이블 분류
<a name="md-dataset-image-classification-multi-label"></a>

모델은 이미지를 여러 카테고리(예: 꽃 종류, 잎 유무)로 분류합니다. 예를 들어, 다음 이미지에는 mediterranean\$1spurge** 및 no\$1leaves** 이미지 레벨 레이블이 있을 수 있습니다.

![\[촘촘하게 채워진 작은 꽃들이 있는 녹색 비브리움 꽃송이의 클로즈업입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/mediterranean_spurge3.jpg)


이 유형의 모델에는 각 범주의 이미지 수준 레이블을 훈련 및 테스트 데이터 세트 이미지에 할당하세요. 예제 프로젝트에 관해서는 [다중 레이블 이미지 분류](getting-started.md#gs-multi-label-image-classification-example) 항목을 참조하세요.

### 이미지 수준 레이블 지정
<a name="w2aac20c17c21b7c11"></a>

이미지가 Amazon S3 버킷에 저장되어 있는 경우 [폴더 이름](md-create-dataset-s3.md)을 사용하여 이미지 수준 레이블을 자동으로 추가할 수 있습니다. 자세한 내용은 [Amazon S3 버킷에서 이미지 가져오기](md-create-dataset-s3.md) 단원을 참조하십시오. 데이터 세트를 생성한 후 이미지에 이미지 수준 레이블을 추가할 수도 있습니다. 자세한 내용은 [이미지에 이미지 수준 레이블 지정](md-assign-image-level-labels.md) 섹션을 참조하세요. 필요에 따라 새 레이블을 추가할 수 있습니다. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오.

## 객체 위치 찾기
<a name="md-dataset-purpose-localization"></a>

이미지에서 객체의 위치를 예측하는 모델을 만들려면 훈련 및 테스트 데이터 세트의 이미지에 대한 객체 위치 경계 상자와 레이블을 정의하세요. 경계 상자는 객체를 꾹 둘러싸는 상자입니다. 예를 들어 다음 이미지는 Amazon Echo 및 Amazon Echo Dot 주위의 경계 상자를 보여줍니다. 각 경계 상자에는 지정된 레이블(Amazon Echo** 또는 Amazon Echo Dot**)이 있습니다.

![\[목재 표면 위에 있는 두 개의 Amazon 스마트 스피커로, 각각 녹색 경계 상자와 파란색 경계 상자가 있습니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/echos.png)


객체 위치를 찾으려면 데이터 세트에 레이블이 하나 이상 있어야 합니다. 모델 훈련 중에 이미지의 경계 상자 외부 영역을 나타내는 추가 레이블이 자동으로 생성됩니다.

### 경계 상자 지정
<a name="w2aac20c17c21b9b9"></a>

 데이터 세트를 만들 때 이미지에 경계 상자 정보를 포함할 수 있습니다. 예를 들어 경계 상자가 포함된 SageMaker AI Ground Truth 형식 [매니페스트 파일을](md-create-manifest-file.md) 가져올 수 있습니다. 데이터 세트를 만든 후 경계 상자를 추가할 수도 있습니다. 자세한 내용은 [경계 상자로 객체에 레이블 지정](md-localize-objects.md) 단원을 참조하십시오. 필요에 따라 새 레이블을 추가할 수 있습니다. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오.

## 브랜드 위치 찾기
<a name="md-dataset-purpose-brands"></a>

로고 및 애니메이션 캐릭터 같은 브랜드 위치를 찾으려 한다면 훈련 데이터 세트 이미지에 두 가지 유형의 이미지를 사용할 수 있습니다.
+  로고만 포함된 이미지 각 이미지에는 로고 이름을 나타내는 하나의 이미지 수준 레이블이 필요합니다. 예를 들어, 다음 이미지의 이미지 수준 레이블은 Lambda**일 수 있습니다.  
![\[주황색 바탕의 흰색 Lambda 로고입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/lambda-logo.jpg)
+ 축구 경기나 건축 도표와 같은 전형적인 위치에 로고가 포함된 이미지 각 훈련 이미지에는 로고의 각 인스턴스를 둘러싸는 경계 상자가 필요합니다. 예를 들어 다음 이미지는 AWS Lambda 및 Amazon Pinpoint 로고를 둘러싸는 레이블이 지정된 경계 상자가 있는 아키텍처 다이어그램을 보여줍니다.  
![\[권장 사항을 위해 사용자 활동을 Amazon Pinpoint로 피드하는 AWS Lambda 서비스를 보여주는 다이어그램 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/brand-detection-lambda.png)

훈련 이미지에는 이미지 수준 레이블과 경계 상자를 함께 사용하지 않는 것이 좋습니다.

테스트 이미지에는 찾으려는 브랜드 인스턴스 주위에 경계 상자가 있어야 합니다. 훈련 이미지에 레이블이 지정된 경계 상자가 포함된 경우에만 훈련 데이터 세트를 분할하여 테스트 데이터 세트를 만들 수 있습니다. 훈련 영상에 이미지 수준 레이블만 있는 경우에는 경계 상자 레이블이 지정된 영상이 포함된 테스트 데이터 세트를 만들어야 합니다. 브랜드 위치를 찾도록 모델을 훈련하는 경우 이미지에 레이블을 지정하는 방법에 따라 [경계 상자로 객체에 레이블 지정](md-localize-objects.md) 및 [이미지에 이미지 수준 레이블 지정](md-assign-image-level-labels.md) 항목을 수행하세요.

[브랜드 감지](getting-started.md#gs-brand-detection-example) 예제 프로젝트는 Amazon Rekognition Custom Labels가 레이블이 있는 경계 상자를 사용하여 객체 위치를 찾는 모델을 훈련하는 방법을 보여줍니다.

## 모델 유형에 대한 레이블 요구 사항
<a name="md-model-types-table"></a>

다음 표를 사용하여 이미지에 레이블을 지정하는 방법을 확인하세요.

이미지 수준 레이블과 경계 상자 레이블이 지정된 이미지를 하나의 데이터 세트로 결합할 수 있습니다. 이 경우 Amazon Rekognition Custom Labels는 이미지 수준 모델을 생성할지 아니면 객체 위치 모델을 생성할지 여부를 선택합니다.


| 예제 | 훈련 이미지 | 테스트 이미지 | 
| --- | --- | --- | 
|  [이미지 분류](#md-dataset-image-classification)  |  이미지당 이미지 수준 레이블 1개  |  이미지당 이미지 수준 레이블 1개   | 
|  [다중 레이블 분류](#md-dataset-image-classification-multi-label)  |  이미지당 이미지 수준 레이블 여러 개  |  이미지당 이미지 수준 레이블 여러 개  | 
|  [브랜드 위치 찾기](#md-dataset-purpose-brands)  |  이미지 수준 레이블(레이블이 지정된 경계 상자도 사용할 수 있음)  |  레이블이 지정된 경계 상자  | 
|  [객체 위치 찾기](#md-dataset-purpose-localization)  |  레이블이 지정된 경계 상자  |  레이블이 지정된 경계 상자  | 

# 이미지 준비
<a name="md-prepare-images"></a>

 훈련 및 테스트 데이터 세트의 이미지에는 모델로 찾고자 하는 객체, 장면 또는 개념이 포함되어 있습니다.

이미지에는 훈련된 모델이 식별해야 할 이미지의 표본이 되는 다양한 배경과 조명이 나타나 있어야 합니다.

이 항목에서는 훈련 및 테스트 데이터 세트의 이미지에 대한 정보를 제공합니다.

## 이미지 형식
<a name="pi-image-format"></a>

PNG 및 JPEG 형식의 이미지를 사용하여 Amazon Rekognition Custom Labels 모델을 훈련할 수 있습니다. 마찬가지로 `DetectCustomLabels`를 사용하여 사용자 지정 레이블을 감지하려면 PNG 및 JPEG 형식의 이미지가 필요합니다.

## 이미지 권장 사항 입력
<a name="md-image-recommendations"></a>

Amazon Rekognition Custom Labels에는 모델을 훈련하고 테스트하기 위한 이미지가 필요합니다. 이미지를 준비하려면 다음을 고려하세요.
+ 생성하려는 모델의 특정 도메인을 선택합니다. 예를 들어 경치에 사용할 모델을 선택하고, 기계 부품과 같은 객체에 사용할 모델을 하나 더 선택할 수 있습니다. Amazon Rekognition Custom Labels는 사용자의 이미지가 선택한 도메인에 있는 경우에 가장 잘 작동합니다.
+ 최소 10개 이상의 이미지를 사용하여 모델을 훈련하세요.
+ 이미지는 PNG 또는 JPEG 형식이어야 합니다.
+ 다양한 조명, 배경, 해상도로 객체를 보여주는 이미지를 사용하세요.
+ 훈련 및 테스트 이미지는 모델이 감지할 이미지와 비슷해야 합니다.
+ 이미지에 지정할 레이블을 결정합니다.
+ 이미지 해상도가 충분히 커야 합니다. 자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 단원을 참조하십시오.
+ 오클루전이 감지하려는 객체를 가리지 않도록 하세요.
+ 배경과 충분한 대비를 보이는 이미지를 사용하세요.
+ 밝고 선명한 이미지를 사용하세요. 피사체와 카메라 움직임 때문에 흐려진 이미지는 되도록 사용하지 않아야 합니다.
+ 객체가 이미지에서 많은 부분을 차지하는 이미지를 사용하세요.
+ 테스트 데이터 세트의 이미지는 훈련 데이터 세트에 있는 이미지가 아니어야 합니다. 여기에는 모델이 분석하도록 훈련된 객체, 장면 및 개념이 포함되어야 합니다.

## 이미지 세트 크기
<a name="md-set"></a>

Amazon Rekognition Custom Labels는 이미지 세트를 사용하여 모델을 훈련합니다. 훈련에는 10개 이상의 이미지를 사용해야 합니다. Amazon Rekognition Custom Labels는 훈련 및 테스트 이미지를 데이터 세트에 저장합니다. 자세한 내용은 [이미지를 사용하여 훈련 및 테스트 데이터 세트 생성](md-create-dataset.md) 단원을 참조하십시오.

# 이미지를 사용하여 훈련 및 테스트 데이터 세트 생성
<a name="md-create-dataset"></a>

데이터 세트가 하나인 프로젝트 또는 훈련 데이터 세트와 테스트 데이터 세트가 분리된 프로젝트로 시작할 수 있습니다. 단일 데이터 세트로 시작하는 경우 Amazon Rekognition Custom Labels는 훈련 중에 데이터 세트를 분할하여 프로젝트에 사용할 훈련 데이터 세트(80%)와 테스트 데이터 세트(20%)를 생성합니다. Amazon Rekognition Custom Labels가 훈련 및 테스트에 사용할 이미지를 결정하게 하려면 단일 데이터 세트로 시작하세요. 훈련, 테스트 및 성능 튜닝을 완벽하게 제어하려면 별도의 훈련 및 테스트 데이터 세트로 프로젝트를 시작하는 것이 좋습니다.

다음 위치 중 하나에서 이미지를 가져와서 프로젝트에 대한 훈련 및 테스트 데이터 세트를 만들 수 있습니다.
+ [Amazon S3 버킷에서 이미지 가져오기](md-create-dataset-s3.md)
+ [로컬 컴퓨터에서 이미지 가져오기](md-create-dataset-computer.md)
+ [매니페스트 파일을 사용하여 이미지 가져오기](md-create-dataset-ground-truth.md)
+ [기존 데이터세트에서 콘텐츠 복사](md-create-dataset-existing-dataset.md)

별도의 훈련 및 테스트 데이터 세트로 프로젝트를 시작하는 경우 데이터 세트마다 다른 소스 위치를 사용할 수 있습니다.

이미지를 가져온 위치에 따라 이미지에 레이블이 지정되지 않을 수 있습니다. 예를 들어 로컬 컴퓨터에서 가져온 이미지에는 레이블이 지정되지 않습니다. Amazon SageMaker AI Ground Truth 매니페스트 파일에서 가져온 이미지에는 레이블이 지정됩니다. Amazon Rekognition Custom Labels 콘솔을 사용하여 레이블을 추가, 변경 및 할당할 수 있습니다. 자세한 내용은 [이미지 레이블 지정](md-labeling-images.md) 단원을 참조하십시오.

이미지 업로드 중에 오류가 발생하거나, 이미지가 누락되었거나, 이미지에 레이블이 누락된 경우 [실패한 모델 훈련 디버깅](tm-debugging.md) 항목을 읽어보세요.

데이터 세트에 관한 자세한 내용은 [데이터 세트 관리](managing-dataset.md) 항목을 참조하세요.

## 훈련 및 테스트 데이터 세트 생성(SDK)
<a name="cd-create-dataset-sdk"></a>

 AWS SDK를 사용하여 훈련 및 테스트 데이터 세트를 생성할 수 있습니다.

`CreateDataset` 작업을 사용하면 리소스를 분류하고 관리할 목적으로 새 데이터세트를 생성할 때 선택적으로 태그를 지정할 수 있습니다.

### 훈련 데이터 세트
<a name="cd-create-training-dataset"></a>

 AWS SDK를 사용하여 다음과 같은 방법으로 훈련 데이터 세트를 생성할 수 있습니다.
+ 사용자가 제공하는 Amazon Sagemaker 형식 매니페스트 파일로 [CreateDataset](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateDataset)를 사용하세요. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오. 예제 코드는 [SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk) 항목을 참조하세요.
+ `CreateDataset`를 사용하여 기존 Amazon Rekognition Custom Labels 데이터 세트를 복사하세요. 예제 코드는 [기존 데이터 세트를 사용하여 데이터 세트 생성(SDK)](md-create-dataset-existing-dataset-sdk.md) 항목을 참조하세요.
+ `CreateDataset`를 사용하여 빈 데이터 세트를 생성하고 나중에 [UpdateDataSetEntries](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_UpdateDatasetEntries)로 데이터 세트 항목을 추가할 수 있습니다. 빈 데이터 세트를 만들려면 [프로젝트에 데이터 세트 추가](md-add-dataset.md) 항목을 참조하세요. 데이터 세트에 이미지를 추가하려면 [더 많은 이미지 추가(SDK)](md-add-images.md#md-add-images-sdk) 항목을 참조하세요. 모델을 훈련하려면 먼저 데이터 세트 항목을 추가해야 합니다.

### 테스트 데이터 세트
<a name="cd-create-test-dataset"></a>

 AWS SDK를 사용하여 다음과 같은 방법으로 테스트 데이터 세트를 생성할 수 있습니다.
+ 사용자가 제공하는 Amazon Sagemaker 형식 매니페스트 파일로 [CreateDataset](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateDataset)를 사용하세요. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오. 예제 코드는 [SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk) 항목을 참조하세요.
+ `CreateDataset`를 사용하여 기존 Amazon Rekognition Custom Labels 데이터 세트를 복사하세요. 예제 코드는 [기존 데이터 세트를 사용하여 데이터 세트 생성(SDK)](md-create-dataset-existing-dataset-sdk.md) 항목을 참조하세요.
+ `CreateDataset`를 사용하여 빈 데이터 세트를 생성하고 나중에 `UpdateDatasetEntries`로 데이터 세트 항목을 추가합니다. 빈 데이터 세트를 만들려면 [프로젝트에 데이터 세트 추가](md-add-dataset.md) 항목을 참조하세요. 데이터 세트에 이미지를 추가하려면 [더 많은 이미지 추가(SDK)](md-add-images.md#md-add-images-sdk) 항목을 참조하세요. 모델을 훈련하려면 먼저 데이터 세트 항목을 추가해야 합니다.
+ 훈련 데이터 세트를 별도의 훈련 데이터 세트와 테스트 데이터 세트로 분할합니다. 먼저 `CreateDataset`를 사용하여 빈 테스트 데이터 세트를 만듭니다. 그런 다음 [DistributeDatasetEntries](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DistributeDatasetEntries)를 직접 호출하여 훈련 데이터 세트 항목의 20%를 테스트 데이터 세트로 이동합니다. 빈 데이터 세트를 만들려면 [프로젝트에 데이터 세트 추가(SDK)](md-add-dataset.md#md-add-dataset-sdk) 항목을 참조하세요. 훈련 데이터 세트를 분할하려면 [훈련 데이터 세트 배포(SDK)](md-distributing-datasets.md) 항목을 참조하세요.

# Amazon S3 버킷에서 이미지 가져오기
<a name="md-create-dataset-s3"></a>

Amazon S3 버킷에서 이미지를 가져옵니다. 콘솔 버킷 또는 AWS 계정의 다른 Amazon S3 버킷을 사용할 수 있습니다. 콘솔 버킷을 사용하는 경우 필요한 권한은 이미 설정되어 있습니다. 콘솔 버킷을 사용하지 않는 경우 [외부 Amazon S3 버킷에 액세스](su-console-policy.md#su-external-buckets) 항목을 참조하세요.

**참고**  
 AWS SDK를 사용하여 Amazon S3 버킷의 이미지에서 직접 데이터 세트를 생성할 수 없습니다. 대신 이미지의 원본 위치를 참조하는 매니페스트 파일을 생성하세요. 자세한 내용은 [매니페스트 파일을 사용하여 이미지 가져오기](md-create-dataset-ground-truth.md) 섹션을 참조하세요.

데이터 세트를 만드는 동안 이미지가 포함된 폴더의 이름을 기반으로 이미지에 레이블 이름을 할당할 수 있습니다. 폴더는 데이터 세트 생성 시 **S3 폴더 위치**에 지정하는 Amazon S3 폴더 경로의 하위 폴더여야 합니다. 데이터 세트를 생성하려면 [S3 버킷에서 이미지를 가져와서 데이터 세트를 생성합니다.](#cd-procedure) 항목을 참조하세요.

예를 들어 Amazon S3 버킷에 다음과 같은 폴더 구조가 있다고 가정합니다. Amazon S3 폴더 위치를 S3-bucket/alexa-devices**로 지정하는 경우, 폴더 echo**에 있는 이미지에 echo** 레이블이 할당됩니다. 마찬가지로 echo-dot** 폴더의 이미지에는 echo-dot**라는 레이블이 지정됩니다. 더 깊은 하위 폴더의 이름은 이미지에 레이블을 지정하는 데 사용되지 않습니다. 대신 Amazon S3 폴더 위치의 적절한 하위 폴더가 사용됩니다. 예를 들어, white-echo-dots** 폴더의 이미지에는 echo-dot**라는 레이블이 지정됩니다. S3 폴더 위치 수준의 이미지(alexa-devices**)에는 레이블이 지정되어 있지 않습니다.

 폴더 구조의 하위 폴더에 더 깊은 S3 폴더 위치를 지정하여 이미지에 레이블을 지정할 수 있습니다. 예를 들어 S3-bucket/alexa-devices/echo-dot**를 지정하는 경우 white-echo-dot** 폴더의 이미지에는 white-echo-dot** 레이블이 지정됩니다. 지정된 s3 폴더 위치 외부의 이미지(예: echo**)는 가져올 수 없습니다.

```
S3-bucket
└── alexa-devices
    ├── echo
    │   ├── echo-image-1.png
    │   └── echo-image-2.png
    │   ├── .
    │   └── .
    └── echo-dot
        ├── white-echo-dot
        │   ├── white-echo-dot-image-1.png
        │   ├── white-echo-dot-image-2.png
        │
        ├── echo-dot-image-1.png
        ├── echo-dot-image-2.png
        ├── .
        └── .
```

현재 AWS 리전에서 콘솔을 처음 열 때 Amazon Rekognition에서 생성한 Amazon Amazon S3 버킷(콘솔 버킷)을 사용하는 것이 좋습니다. 사용 중인 Amazon S3 버킷이 콘솔 버킷과 다른 경우(외부), 콘솔은 데이터 세트 생성 중에 적절한 권한을 설정하라는 메시지를 표시합니다. 자세한 내용은 [2단계: Amazon Rekognition Custom Labels 콘솔 권한 설정](su-console-policy.md) 단원을 참조하십시오.

## S3 버킷에서 이미지를 가져와서 데이터 세트를 생성합니다.
<a name="cd-procedure"></a>

다음 절차는 콘솔 S3 버킷에 저장된 이미지를 사용하여 데이터 세트를 생성하는 방법을 보여줍니다. 이미지는 저장되는 폴더의 이름으로 레이블이 자동 지정됩니다.

이미지를 가져온 후에는 데이터 세트의 갤러리 페이지에서 이미지를 더 추가하고, 레이블을 지정하고, 경계 상자를 추가할 수 있습니다. 자세한 내용은 [이미지 레이블 지정](md-labeling-images.md) 단원을 참조하십시오.<a name="cd-upload-s3-bucket"></a>

**이미지를 Amazon Simple Storage Service 버킷에 업로드합니다.**

1. 로컬 파일 시스템에 폴더를 생성합니다. alexa-devices** 같은 폴더 이름을 사용하세요.

1. 방금 만든 폴더 내에 사용하려는 각 레이블의 이름을 딴 폴더를 생성합니다. echo** 및 echo-dot**를 예로 들 수 있습니다. 폴더 구조는 다음과 비슷한 모습이어야 합니다.

   ```
   alexa-devices
   ├── echo
   │   ├── echo-image-1.png
   │   ├── echo-image-2.png
   │   ├── .
   │   └── .
   └── echo-dot
       ├── echo-dot-image-1.png
       ├── echo-dot-image-2.png
       ├── .
       └── .
   ```

1. 레이블에 상응하는 이미지를 레이블 이름이 같은 폴더에 넣습니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) Amazon S3 콘솔을 엽니다.

1. 최초 설정** 시 Amazon Rekognition Custom Labels가 생성한 Amazon S3 버킷(콘솔 버킷)에 1단계에서 생성한 [폴더를 추가](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)하세요. 자세한 내용은 [Amazon Rekognition Custom Labels 프로젝트 관리](managing-project.md) 단원을 참조하십시오.

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 데이터 세트에 추가하려는 프로젝트를 선택합니다. 프로젝트 세부 정보 페이지가 열립니다.

1. **데이터 세트 생성**을 선택합니다. **데이터 세트 생성** 페이지가 표시됩니다.

1. **시작 구성**에서 **단일 데이터 세트로 시작** 또는 **훈련 데이터 세트로 시작**을 선택합니다. 더 높은 품질의 모델을 만들려면 별도의 훈련 및 테스트 데이터 세트로 시작하는 것이 좋습니다.

------
#### [ Single dataset ]

   1. **훈련 데이터 세트 세부 정보** 항목에서 **S3 버킷에서 이미지 가져오기**를 선택합니다.

   1. **훈련 데이터 세트 세부 정보** 항목에서 **이미지 소스 구성** 항목의 13\$115단계를 위한 정보를 입력합니다.

------
#### [ Separate training and test datasets ]

   1. **훈련 데이터 세트 세부 정보** 항목에서 **S3 버킷에서 이미지 가져오기**를 선택합니다.

   1. **훈련 데이터 세트 세부 정보** 항목에서 **이미지 소스 구성** 항목의 13\$115단계를 위한 정보를 입력합니다.

   1. **테스트 데이터 세트 세부 정보** 항목에서 **S3 버킷에서 이미지 가져오기**를 선택합니다.

   1. **테스트 데이터 세트 세부 정보** 항목에서 **이미지 소스 구성** 항목의 13\$115단계를 위한 정보를 입력합니다.

------

1. **Amazon S3 버킷에서 이미지 가져오기**를 선택합니다.

1. **S3 URI**에 Amazon S3 버킷 위치 및 폴더 경로를 입력합니다.

1. **폴더를 기반으로 이미지에 레이블 자동 지정**을 선택합니다.

1. **데이터 세트 생성**을 선택합니다. 프로젝트의 데이터 세트 페이지가 열립니다.

1. 레이블을 추가하거나 변경해야 하면 [이미지 레이블 지정](md-labeling-images.md) 항목을 수행합니다.

1. [모델 훈련(콘솔)](training-model.md#tm-console)에 나온 단계에 따라 모델을 훈련하세요.

# 로컬 컴퓨터에서 이미지 가져오기
<a name="md-create-dataset-computer"></a>

이미지는 컴퓨터에서 직접 로드됩니다. 한 번에 최대 30개의 이미지를 업로드할 수 있습니다.

업로드하는 이미지에는 연결된 레이블이 없을 것입니다. 자세한 내용은 [이미지 레이블 지정](md-labeling-images.md) 단원을 참조하십시오. 업로드할 이미지가 많은 경우 Amazon S3 버킷을 사용하는 것이 좋습니다. 자세한 내용은 [Amazon S3 버킷에서 이미지 가져오기](md-create-dataset-s3.md) 단원을 참조하십시오.

**참고**  
 AWS SDK를 사용하여 로컬 이미지로 데이터 세트를 생성할 수 없습니다. 대신 매니페스트 파일을 생성하여 Amazon S3 버킷에 이미지를 업로드합니다. 자세한 내용은 [매니페스트 파일을 사용하여 이미지 가져오기](md-create-dataset-ground-truth.md) 단원을 참조하십시오.

**로컬 컴퓨터의 이미지를 사용하여 데이터 세트를 만들려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 데이터 세트에 추가하려는 프로젝트를 선택합니다. 프로젝트 세부 정보 페이지가 열립니다.

1. **데이터 세트 생성**을 선택합니다. **데이터 세트 생성** 페이지가 표시됩니다.

1. **시작 구성**에서 **단일 데이터 세트로 시작** 또는 **훈련 데이터 세트로 시작**을 선택합니다. 더 높은 품질의 모델을 만들려면 별도의 훈련 및 테스트 데이터 세트로 시작하는 것이 좋습니다.

------
#### [ Single dataset ]

   1. **훈련 데이터 세트 세부 정보** 항목에서 **컴퓨터에서 이미지 업로드**를 선택합니다.

   1. **데이터 세트 생성**을 선택합니다.

   1. 프로젝트의 데이터 세트 페이지에서 **이미지 추가**를 선택합니다.

   1. 사용자의 컴퓨터 파일에서 온 데이트 세트에 업로드할 이미지를 선택합니다. 이미지를 드래그하거나 로컬 컴퓨터에서 업로드할 이미지를 선택할 수 있습니다.

   1. **이미지 업로드**를 선택합니다.

------
#### [ Separate training and test datasets ]

   1. **훈련 데이터 세트 세부 정보** 항목에서 **컴퓨터에서 이미지 업로드**를 선택합니다.

   1. **테스트 데이터 세트 세부정보** 섹션에서 **컴퓨터에서 이미지 업로드를** 선택합니다.
**참고**  
훈련 데이터 세트와 테스트 데이터 세트에는 서로 다른 이미지 소스가 있을 수 있습니다.

   1. **데이터 세트 생성**을 선택합니다. 각 데이터 세트에 대한 **훈련** 탭과 **테스트** 탭이 있는 사용자 프로젝트의 데이터 세트 페이지가 나타납니다.

   1. **작업**을 선택한 다음 **훈련 데이터 세트에 이미지 추가**를 선택합니다.

   1. 데이터 세트에 업로드하려는 이미지를 선택합니다. 이미지를 드래그하거나 로컬 컴퓨터에서 업로드할 이미지를 선택할 수 있습니다.

   1. **이미지 업로드를** 선택합니다.

   1. 5e\$15g단계를 반복합니다. 5e단계에서는 **작업**을 선택한 다음 **테스트 데이터 세트에 이미지 추가**를 선택합니다.

------

1. [이미지 레이블 지정](md-labeling-images.md)에 나온 단계에 따라 이미지에 레이블을 지정합니다.

1. [모델 훈련(콘솔)](training-model.md#tm-console)에 나온 단계에 따라 모델을 훈련하세요.

# 매니페스트 파일을 사용하여 이미지 가져오기
<a name="md-create-dataset-ground-truth"></a>

Amazon SageMaker AI Ground Truth 형식 매니페스트 파일을 사용하여 데이터 세트를 생성할 수 있습니다. Amazon SageMaker AI Ground Truth 작업의 매니페스트 파일을 사용할 수 있습니다. 이미지와 레이블이 SageMaker AI Ground Truth 매니페스트 파일 형식이 아닌 경우 SageMaker AI 형식 매니페스트 파일을 생성하고 이를 사용하여 레이블이 지정된 이미지를 가져올 수 있습니다.

새 데이터세트를 생성할 때 선택적으로 태그를 지정할 수 있도록 `CreateDataset` 작업이 업데이트되었습니다. 태그는 리소스를 분류하고 관리하는 데 도움이 될 수 있는 키-값 페어입니다.

**Topics**
+ [SageMaker AI Ground Truth 매니페스트 파일을 사용하여 데이터 세트 생성(콘솔)](#md-create-dataset-ground-truth-console)
+ [SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](#md-create-dataset-ground-truth-sdk)
+ [데이터세트 생성 요청](#create-dataset-ground-truth-request)
+ [Amazon SageMaker AI Ground Truth 작업을 사용하여 이미지 레이블 지정](md-create-dataset-ground-truth-job.md)
+ [매니페스트 파일 생성](md-create-manifest-file.md)
+ [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md)
+ [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md)
+ [매니페스트 파일의 검증 규칙](md-create-manifest-file-validation-rules.md)
+ [다른 데이터 세트 형식을 매니페스트 파일로 변환](md-converting-to-sm-format.md)

## SageMaker AI Ground Truth 매니페스트 파일을 사용하여 데이터 세트 생성(콘솔)
<a name="md-create-dataset-ground-truth-console"></a>

다음 절차에서는 SageMaker AI Ground Truth 형식 매니페스트 파일을 사용하여 데이터 세트를 생성하는 방법을 보여줍니다.

1. 다음 중 하나를 수행하여 훈련 데이터 세트의 매니페스트 파일을 생성합니다.
   + 의 지침에 따라 SageMaker AI GroundTruth 작업으로 매니페스트 파일을 생성합니다[Amazon SageMaker AI Ground Truth 작업을 사용하여 이미지 레이블 지정](md-create-dataset-ground-truth-job.md).
   + [매니페스트 파일 생성](md-create-manifest-file.md)의 지침에 따라 사용자 고유의 매니페스트 파일을 생성하세요.

   테스트 데이터 세트를 만들려면 1단계를 반복하여 테스트 데이터 세트를 만드세요.

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 데이터 세트에 추가하려는 프로젝트를 선택합니다. 프로젝트 세부 정보 페이지가 열립니다.

1. **데이터 세트 생성**을 선택합니다. **데이터 세트 생성** 페이지가 표시됩니다.

1. **시작 구성**에서 **단일 데이터 세트로 시작** 또는 **훈련 데이터 세트로 시작**을 선택합니다. 더 높은 품질의 모델을 만들려면 별도의 훈련 및 테스트 데이터 세트로 시작하는 것이 좋습니다.

------
#### [ Single dataset ]

   1. **훈련 데이터 세트 세부 정보** 항목에서 **SageMaker Ground Truth로 레이블이 지정된 이미지 가져오기**를 선택합니다.

   1. **매니페스트 파일 위치**에 1단계에서 생성한 매니페스트 파일의 위치를 입력하세요.

   1. **데이터 세트 생성**을 선택합니다. 프로젝트의 데이터 세트 페이지가 열립니다.

------
#### [ Separate training and test datasets ]

   1. **훈련 데이터 세트 세부 정보** 항목에서 **SageMaker Ground Truth로 레이블이 지정된 이미지 가져오기**를 선택합니다.

   1. **.manifest 파일 위치**에 1단계에서 생성한 훈련 데이터 세트 매니페스트 파일의 위치를 입력하세요.

   1. **테스트 데이터 세트 세부 정보** 항목에서 **SageMaker Ground Truth로 레이블이 지정된 이미지 가져오기**를 선택합니다.
**참고**  
훈련 데이터 세트와 테스트 데이터 세트에는 서로 다른 이미지 소스가 있을 수 있습니다.

   1. **.manifest 파일 위치**에 1단계에서 생성한 테스트 데이터 세트 매니페스트 파일의 위치를 입력하세요.

   1. **데이터 세트 생성**을 선택합니다. 프로젝트의 데이터 세트 페이지가 열립니다.

------

1. 레이블을 추가하거나 변경해야 하면 [이미지 레이블 지정](md-labeling-images.md) 항목을 수행합니다.

1. [모델 훈련(콘솔)](training-model.md#tm-console)에 나온 단계에 따라 모델을 훈련하세요.

## SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성
<a name="md-create-dataset-ground-truth-sdk"></a>

다음 절차는 [CreateDataset API](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateDataset)를 사용하여 매니페스트 파일에서 훈련 데이터 세트 또는 테스트 데이터 세트를 생성하는 방법을 보여줍니다.

[SageMaker AI Ground Truth 작업](md-create-dataset-ground-truth-job.md)의 출력과 같은 기존 매니페스트 파일을 사용하거나 자체 [매니페스트 파일을](md-create-manifest-file.md) 생성할 수 있습니다.

1. 아직 설치하지 않은 경우 및 AWS SDKs AWS CLI 를 설치하고 구성합니다. 자세한 내용은 [4단계: AWS CLI 및 AWS SDKs 설정](su-awscli-sdk.md) 단원을 참조하십시오.

1. 다음 중 하나를 수행하여 훈련 데이터 세트의 매니페스트 파일을 생성합니다.
   + 의 지침에 따라 SageMaker AI GroundTruth 작업으로 매니페스트 파일을 생성합니다[Amazon SageMaker AI Ground Truth 작업을 사용하여 이미지 레이블 지정](md-create-dataset-ground-truth-job.md).
   + [매니페스트 파일 생성](md-create-manifest-file.md)의 지침에 따라 사용자 고유의 매니페스트 파일을 생성하세요.

   테스트 데이터 세트를 만들려면 2단계를 반복하여 테스트 데이터 세트를 만드세요.

1. 다음 예제 코드를 사용하여 훈련 및 테스트 데이터 세트를 만드세요.

------
#### [ AWS CLI ]

   다음 코드를 사용하여 데이터 세트를 생성하세요. 다음을 바꿉니다.
   + `project_arn`: 테스트 데이터 세트를 추가하려는 프로젝트의 ARN입니다.
   + `type`: 생성하려는 데이터 세트의 유형(훈련 또는 테스트)
   + `bucket`: 데이터 세트의 매니페스트 파일이 들어 있는 버킷
   + `manifest_file`: 매니페스트의 경로 및 파일 이름

   ```
   aws rekognition create-dataset --project-arn project_arn \
     --dataset-type type \
     --dataset-source '{ "GroundTruthManifest": { "S3Object": { "Bucket": "bucket", "Name": "manifest_file" } } }' \
     --profile custom-labels-access
     --tags '{"key1": "value1", "key2": "value2"}'
   ```

------
#### [ Python ]

   다음 값을 사용하여 데이터 세트를 생성하세요. 다음 명령줄 파라미터를 제공하세요.
   + `project_arn`: 테스트 데이터 세트를 추가하려는 프로젝트의 ARN
   + `dataset_type`: 생성하려는 데이터 세트 유형(`train` 또는 `test`)
   + `bucket`: 데이터 세트의 매니페스트 파일이 들어 있는 버킷
   + `manifest_file`: 매니페스트의 경로 및 파일 이름

   ```
   #Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   
   import argparse
   import logging
   import time
   import json
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   def create_dataset(rek_client, project_arn, dataset_type, bucket, manifest_file):
       """
       Creates an Amazon Rekognition Custom Labels dataset.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_arn: The ARN of the project in which you want to create a dataset.
       :param dataset_type: The type of the dataset that you want to create (train or test).
       :param bucket: The S3 bucket that contains the manifest file.
       :param manifest_file: The path and filename of the manifest file.
       """
   
       try:
           #Create the project
           logger.info("Creating %s dataset for project %s",dataset_type, project_arn)
   
           dataset_type = dataset_type.upper()
   
           dataset_source = json.loads(
               '{ "GroundTruthManifest": { "S3Object": { "Bucket": "'
               + bucket
               + '", "Name": "'
               + manifest_file
               + '" } } }'
           )
   
           response = rek_client.create_dataset(
               ProjectArn=project_arn, DatasetType=dataset_type, DatasetSource=dataset_source
           )
   
           dataset_arn=response['DatasetArn']
   
           logger.info("dataset ARN: %s",dataset_arn)
   
           finished=False
           while finished is False:
   
               dataset=rek_client.describe_dataset(DatasetArn=dataset_arn)
   
               status=dataset['DatasetDescription']['Status']
               
               if status == "CREATE_IN_PROGRESS":
                   logger.info("Creating dataset: %s ",dataset_arn)
                   time.sleep(5)
                   continue
   
               if status == "CREATE_COMPLETE":
                   logger.info("Dataset created: %s", dataset_arn)
                   finished=True
                   continue
   
               if status == "CREATE_FAILED":
                   error_message = f"Dataset creation failed: {status} : {dataset_arn}"
                   logger.exception(error_message)
                   raise Exception (error_message)
                   
               error_message = f"Failed. Unexpected state for dataset creation: {status} : {dataset_arn}"
               logger.exception(error_message)
               raise Exception(error_message)
               
           return dataset_arn
      
       
       except ClientError as err:
           logger.exception("Couldn't create dataset: %s",err.response['Error']['Message'])
           raise
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn", help="The ARN of the project in which you want to create the dataset."
       )
   
       parser.add_argument(
           "dataset_type", help="The type of the dataset that you want to create (train or test)."
       )
   
       parser.add_argument(
           "bucket", help="The S3 bucket that contains the manifest file."
       )
       
       parser.add_argument(
           "manifest_file", help="The path and filename of the manifest file."
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
   
       try:
   
           #Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(f"Creating {args.dataset_type} dataset for project {args.project_arn}")
   
           #Create the dataset.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           dataset_arn=create_dataset(rekognition_client, 
               args.project_arn,
               args.dataset_type,
               args.bucket,
               args.manifest_file)
   
           print(f"Finished creating dataset: {dataset_arn}")
   
   
       except ClientError as err:
           logger.exception("Problem creating dataset: %s", err)
           print(f"Problem creating dataset: {err}")
   
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   다음 값을 사용하여 데이터 세트를 생성하세요. 다음 명령줄 파라미터를 제공하세요.
   + `project_arn`: 테스트 데이터 세트를 추가하려는 프로젝트의 ARN
   + `dataset_type`: 생성하려는 데이터 세트 유형(`train` 또는 `test`)
   + `bucket`: 데이터 세트의 매니페스트 파일이 들어 있는 버킷
   + `manifest_file`: 매니페스트의 경로 및 파일 이름

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.CreateDatasetRequest;
   import software.amazon.awssdk.services.rekognition.model.CreateDatasetResponse;
   import software.amazon.awssdk.services.rekognition.model.DatasetDescription;
   import software.amazon.awssdk.services.rekognition.model.DatasetSource;
   import software.amazon.awssdk.services.rekognition.model.DatasetStatus;
   import software.amazon.awssdk.services.rekognition.model.DatasetType;
   import software.amazon.awssdk.services.rekognition.model.DescribeDatasetRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeDatasetResponse;
   import software.amazon.awssdk.services.rekognition.model.GroundTruthManifest;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.model.S3Object;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class CreateDatasetManifestFiles {
   
       public static final Logger logger = Logger.getLogger(CreateDatasetManifestFiles.class.getName());
   
       public static String createMyDataset(RekognitionClient rekClient, String projectArn, String datasetType,
               String bucket, String name) throws Exception, RekognitionException {
   
           try {
   
               logger.log(Level.INFO, "Creating {0} dataset for project : {1} from s3://{2}/{3} ",
                       new Object[] { datasetType, projectArn, bucket, name });
   
               DatasetType requestDatasetType = null;
   
               switch (datasetType) {
               case "train":
                   requestDatasetType = DatasetType.TRAIN;
                   break;
               case "test":
                   requestDatasetType = DatasetType.TEST;
                   break;
               default:
                   logger.log(Level.SEVERE, "Could not create dataset. Unrecognized dataset type: {0}", datasetType);
                   throw new Exception("Could not create dataset. Unrecognized dataset type: " + datasetType);
   
               }
   
               GroundTruthManifest groundTruthManifest = GroundTruthManifest.builder()
                       .s3Object(S3Object.builder().bucket(bucket).name(name).build()).build();
   
               DatasetSource datasetSource = DatasetSource.builder().groundTruthManifest(groundTruthManifest).build();
   
               CreateDatasetRequest createDatasetRequest = CreateDatasetRequest.builder().projectArn(projectArn)
                       .datasetType(requestDatasetType).datasetSource(datasetSource).build();
   
               CreateDatasetResponse response = rekClient.createDataset(createDatasetRequest);
   
               boolean created = false;
   
               do {
   
                   DescribeDatasetRequest describeDatasetRequest = DescribeDatasetRequest.builder()
                           .datasetArn(response.datasetArn()).build();
                   DescribeDatasetResponse describeDatasetResponse = rekClient.describeDataset(describeDatasetRequest);
   
                   DatasetDescription datasetDescription = describeDatasetResponse.datasetDescription();
   
                   DatasetStatus status = datasetDescription.status();
   
                   logger.log(Level.INFO, "Creating dataset ARN: {0} ", response.datasetArn());
   
                   switch (status) {
   
                   case CREATE_COMPLETE:
                       logger.log(Level.INFO, "Dataset created");
                       created = true;
                       break;
   
                   case CREATE_IN_PROGRESS:
                       Thread.sleep(5000);
                       break;
   
                   case CREATE_FAILED:
                       String error = "Dataset creation failed: " + datasetDescription.statusAsString() + " "
                               + datasetDescription.statusMessage() + " " + response.datasetArn();
                       logger.log(Level.SEVERE, error);
                       throw new Exception(error);
   
                   default:
                       String unexpectedError = "Unexpected creation state: " + datasetDescription.statusAsString() + " "
                               + datasetDescription.statusMessage() + " " + response.datasetArn();
                       logger.log(Level.SEVERE, unexpectedError);
                       throw new Exception(unexpectedError);
                   }
   
               } while (created == false);
   
               return response.datasetArn();
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not create dataset: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String[] args) {
   
           String datasetType = null;
           String bucket = null;
           String name = null;
           String projectArn = null;
           String datasetArn = null;
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <dataset_type> <dataset_arn>\n\n" + "Where:\n"
                   + "   project_arn - the ARN of the project that you want to add copy the datast to.\n\n"
                   + "   dataset_type - the type of the dataset that you want to create (train or test).\n\n"
                   + "   bucket - the S3 bucket that contains the manifest file.\n\n"
                   + "   name - the location and name of the manifest file within the bucket.\n\n";
   
           if (args.length != 4) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
           datasetType = args[1];
           bucket = args[2];
           name = args[3];
   
           try {
   
               // Get the Rekognition client
               RekognitionClient rekClient = RekognitionClient.builder()
                   .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
                   .region(Region.US_WEST_2)
                   .build();
   
   
                // Create the dataset
               datasetArn = createMyDataset(rekClient, projectArn, datasetType, bucket, name);
   
               System.out.println(String.format("Created dataset: %s", datasetArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           } catch (Exception rekError) {
               logger.log(Level.SEVERE, "Error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

1. 레이블을 추가하거나 변경해야 하면 [레이블 관리(SDK)](md-labels.md#md-labels-sdk) 항목을 참조하세요.

1. [모델 훈련(SDK)](training-model.md#tm-sdk)에 나온 단계에 따라 모델을 훈련하세요.

## 데이터세트 생성 요청
<a name="create-dataset-ground-truth-request"></a>

 다음은 CreateDataset 작업 요청의 형식입니다.

```
{
"DatasetSource": {
"DatasetArn": "string",
"GroundTruthManifest": {
"S3Object": {
"Bucket": "string",
"Name": "string",
"Version": "string"
}
}
},
"DatasetType": "string",
"ProjectArn": "string",
"Tags": {
"string": "string"
}
}
```

# Amazon SageMaker AI Ground Truth 작업을 사용하여 이미지 레이블 지정
<a name="md-create-dataset-ground-truth-job"></a>

Amazon SageMaker AI Ground Truth를 사용하면 레이블이 지정된 이미지 세트를 생성할 수 있는 기계 학습과 함께 선택한 공급업체인 Amazon Mechanical Turk 또는 내부 프라이빗 작업 인력의 작업자를 사용할 수 있습니다. Amazon Rekognition Custom Labels는 지정한 Amazon S3 버킷에서 SageMaker AI Ground Truth 매니페스트 파일을 가져옵니다.

Amazon Rekognition Custom Labels는 다음과 같은 SageMaker AI Ground Truth 작업을 지원합니다.
+ [이미지 분류](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-image-classification.html)
+ [경계 상자](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-bounding-box.html)

가져오는 파일은 이미지와 매니페스트 파일입니다. 매니페스트 파일에는 가져온 이미지에 대한 레이블 및 경계 상자 정보가 들어 있습니다.

Amazon Rekognition은 이미지가 저장되는 Amazon S3 버킷에 액세스할 수 있는 권한이 필요합니다. Amazon Rekognition Custom Labels가 자동으로 설정한 콘솔 버킷을 사용하는 경우, 필요한 권한은 이미 설정되어 있습니다. 콘솔 버킷을 사용하지 않는 경우 [외부 Amazon S3 버킷에 액세스](su-console-policy.md#su-external-buckets) 항목을 참조하세요.

## SageMaker AI Ground Truth 작업을 사용하여 매니페스트 파일 생성(콘솔)
<a name="md-create-dataset-ground-truth-job-console"></a>

다음 절차에서는 SageMaker AI Ground Truth 작업으로 레이블이 지정된 이미지를 사용하여 데이터 세트를 생성하는 방법을 보여줍니다. 작업 출력 파일은 Amazon Rekognition Custom Labels 콘솔 버킷에 저장됩니다.<a name="create-dataset-procedure-ground-truth"></a>

**SageMaker AI Ground Truth 작업으로 레이블이 지정된 이미지를 사용하여 데이터 세트를 생성하려면(콘솔)**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) Amazon S3 콘솔을 엽니다.

1. 콘솔 버킷에서 훈련 이미지를 보관할 [폴더를 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-folder.html)합니다.
**참고**  
콘솔 버킷은 AWS 리전에서 Amazon Rekognition Custom Labels 콘솔을 처음 열 때 생성됩니다. 자세한 내용은 [Amazon Rekognition Custom Labels 프로젝트 관리](managing-project.md) 단원을 참조하십시오.

1. 방금 생성한 폴더에 [이미지를 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)합니다.

1. 콘솔 버킷에서 Ground Truth 작업의 출력을 보관할 폴더를 생성합니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 SageMaker AI 콘솔을 엽니다.

1. Ground Truth 레이블 지정 작업을 생성하세요. 2단계와 4단계에서 생성한 폴더의 Amazon S3 URL이 필요합니다. 자세한 내용은 [데이터 레이블링을 위한 Amazon SageMaker Ground Truth 사용](https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html)을 참조하세요.

1. 4단계에서 생성한 폴더의 `output.manifest` 파일 위치를 기록해 두세요. 해당 파일은 하위 폴더 `Ground-Truth-Job-Name/manifests/output`에 있을 것입니다.

1. [SageMaker AI Ground Truth 매니페스트 파일을 사용하여 데이터 세트 생성(콘솔)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console)의 지침에 따라 업로드된 매니페스트 파일로 데이터 세트를 생성하세요. 8단계로 **.manifest 파일 위치**에 이전 단계에서 기록해 둔 위치의 Amazon S3 URL을 입력합니다. AWS SDK를 사용하는 경우를 수행합니다[SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).

1. 1\$16단계를 반복하여 테스트 데이터 세트에 대한 SageMaker AI Ground Truth 작업을 생성합니다.

# 매니페스트 파일 생성
<a name="md-create-manifest-file"></a>

SageMaker AI Ground Truth 형식 매니페스트 파일을 가져와서 테스트 또는 훈련 데이터 세트를 생성할 수 있습니다. 이미지에 SageMaker AI Ground Truth 매니페스트 파일이 아닌 형식으로 레이블이 지정된 경우 다음 정보를 사용하여 SageMaker AI Ground Truth 형식 매니페스트 파일을 생성합니다.

매니페스트 파일은 [JSON 라인](http://jsonlines.org) 형식이며, 각 라인은 이미지의 레이블 정보를 나타내는 완전한 JSON 객체입니다. Amazon Rekognition Custom Labels는 다음 형식의 JSON 라인이 있는 SageMaker AI Ground Truth 매니페스트를 지원합니다.
+ [분류 작업 출력](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-class): 이미지에 이미지 수준 레이블을 추가하는 데 사용합니다. 이미지 수준 레이블은 이미지에 있는 장면, 개념 또는 객체(객체 위치 정보가 필요하지 않은 경우)의 클래스를 정의합니다. 이미지에는 이미지 수준 레이블이 두 개 이상 있을 수 있습니다. 자세한 내용은 [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md) 단원을 참조하십시오.
+ [경계 상자 작업 출력](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-box): 이미지에 있는 하나 이상의 객체의 클래스와 위치에 레이블을 지정하는 데 사용합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

이미지 수준 및 위치 파악(경계 상자) JSON 라인을 동일한 매니페스트 파일에 연결할 수 있습니다.

**참고**  
이 항목의 JSON 라인 예제는 가독성을 위해 형식이 지정되었습니다.

매니페스트 파일을 가져올 때 Amazon Rekognition Custom Labels는 제한, 구문 및 시맨틱에 대한 검증 규칙을 적용합니다. 자세한 내용은 [매니페스트 파일의 검증 규칙](md-create-manifest-file-validation-rules.md) 단원을 참조하십시오.

매니페스트 파일이 참조하는 이미지는 동일한 Amazon S3 버킷에 있어야 합니다. 매니페스트 파일은 이미지를 저장하는 Amazon S3 버킷과 다른 Amazon S3 버킷에 있을 수 있습니다. JSON 라인의 `source-ref` 필드에 이미지 위치를 지정합니다.

Amazon Rekognition은 이미지가 저장되는 Amazon S3 버킷에 액세스할 수 있는 권한이 필요합니다. Amazon Rekognition Custom Labels가 자동으로 설정한 콘솔 버킷을 사용하는 경우, 필요한 권한은 이미 설정되어 있습니다. 콘솔 버킷을 사용하지 않는 경우 [외부 Amazon S3 버킷에 액세스](su-console-policy.md#su-external-buckets) 항목을 참조하세요.

**Topics**
+ [매니페스트 파일 생성](#md-create-manifest-file-console)

## 매니페스트 파일 생성
<a name="md-create-manifest-file-console"></a>

다음 절차는 훈련 및 테스트 데이터 세트가 포함된 프로젝트를 생성합니다. 데이터 세트는 사용자가 만든 훈련 및 테스트 매니페스트 파일에서 생성됩니다.

<a name="create-dataset-procedure-manifest-file"></a>

**SageMaker AI Ground Truth 형식 매니페스트 파일을 사용하여 데이터 세트를 생성하려면(콘솔)**

1. 콘솔 버킷에서 매니페스트 파일을 보관할 [폴더를 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-folder.html)합니다.

1. 콘솔 버킷에서 이미지를 보관할 폴더를 생성합니다.

1. 방금 생성한 폴더에 이미지를 업로드합니다.

1. 훈련 데이터 세트에 대한 SageMaker AI Ground Truth 형식 매니페스트 파일을 생성합니다. 자세한 내용은 [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md) 및 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.
**중요**  
각 JSON 라인의 `source-ref` 필드 값은 업로드한 이미지에 매핑되어야 합니다.

1. 테스트 데이터 세트에 대한 SageMaker AI Ground Truth 형식 매니페스트 파일을 생성합니다.

1. 방금 생성한 폴더에 [매니페스트 파일을 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)합니다.

1. 매니페스트 파일의 위치를 기록해 둡니다.

1. [SageMaker AI Ground Truth 매니페스트 파일을 사용하여 데이터 세트 생성(콘솔)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console)의 지침에 따라 업로드된 매니페스트 파일로 데이터 세트를 생성하세요. 8단계로 **.manifest 파일 위치**에 이전 단계에서 기록해 둔 위치의 Amazon S3 URL을 입력합니다. AWS SDK를 사용하는 경우를 수행합니다[SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).

# 매니페스트 파일의 이미지 수준 레이블 가져오기
<a name="md-create-manifest-file-classification"></a>

이미지 수준 레이블(현지화 정보가 필요하지 않은 장면, 개념 또는 객체로 레이블이 지정된 이미지)을 가져오려면 매니페스트 파일에 SageMaker AI Ground Truth [분류 작업 출력](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-class) 형식 JSON 라인을 추가합니다. 매니페스트 파일은 가져오려는 이미지당 하나씩, 하나 이상의 JSON 라인으로 구성됩니다.

**작은 정보**  
매니페스트 파일 생성을 단순화하기 위해 CSV 파일에서 매니페스트 파일을 만드는 Python 스크립트가 제공됩니다. 자세한 내용은 [CSV 파일로 매니페스트 파일 생성](ex-csv-manifest.md) 단원을 참조하십시오.

**이미지 수준 레이블을 위한 매니페스트 파일 생성**

1. 빈 텍스트 파일을 생성합니다.

1. 가져올 각 이미지에 JSON 라인을 추가합니다. 각 JSON 라인은 다음과 비슷한 모습이어야 합니다.

   ```
   {"source-ref":"s3://custom-labels-console-us-east-1-nnnnnnnnnn/gt-job/manifest/IMG_1133.png","TestCLConsoleBucket":0,"TestCLConsoleBucket-metadata":{"confidence":0.95,"job-name":"labeling-job/testclconsolebucket","class-name":"Echo Dot","human-annotated":"yes","creation-date":"2020-04-15T20:17:23.433061","type":"groundtruth/image-classification"}}
   ```

1. 파일을 저장합니다. `.manifest` 확장을 사용할 수 있지만 필수는 아닙니다.

1. 생성한 매니페스트 파일을 사용하여 데이터 세트를 생성하세요. 자세한 내용은 [SageMaker AI Ground Truth 형식 매니페스트 파일을 사용하여 데이터 세트를 생성하려면(콘솔)](md-create-manifest-file.md#create-dataset-procedure-manifest-file) 단원을 참조하십시오.

 

## 이미지 레벨 JSON 라인
<a name="md-manifest-classification-json"></a>

이 항목은 하나의 이미지에 JSON 라인을 생성하는 방법을 보여줍니다. 다음 이미지를 고려하세요. 다음 이미지의 장면은 Sunrise**라고 부르겠습니다.

![\[산으로 둘러싸인 선착장과 작은 배가 있는 호수 위의 석양입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/sunrise.png)


Sunrise** 장면이 포함된 이전 이미지의 JSON 라인은 다음과 같을 수 있습니다.

```
{
    "source-ref": "s3://bucket/images/sunrise.png",
    "testdataset-classification_Sunrise": 1,
    "testdataset-classification_Sunrise-metadata": {
        "confidence": 1,
        "job-name": "labeling-job/testdataset-classification_Sunrise",
        "class-name": "Sunrise",
        "human-annotated": "yes",
        "creation-date": "2020-03-06T17:46:39.176",
        "type": "groundtruth/image-classification"
    }
}
```

다음 정보를 참고하세요.

### source-ref
<a name="w2aac20c17c25c27c19c11c13"></a>

(필수) 이미지의 Amazon S3 위치입니다. 형식은 `"s3://BUCKET/OBJECT_PATH"`입니다. 가져온 데이터 세트의 이미지는 동일한 Amazon S3 버킷에 저장되어야 합니다.

### *testdataset-classification\$1Sunrise*
<a name="w2aac20c17c25c27c19c11c15"></a>

(필수) 레이블 속성 필드 이름을 선택합니다. 필드 값(위 예제의 1)은 레이블 속성 식별자입니다. Amazon Rekognition Custom Labels에서는 사용되지 않으며 임의의 정수 값일 수 있습니다. -metadata**가 추가된 필드 이름으로 식별되는 상응하는 메타데이터가 있어야 합니다. 예를 들어 `"testdataset-classification_Sunrise-metadata"`입니다.

### *testdataset-classification\$1Sunrise*-metadata
<a name="w2aac20c17c25c27c19c11c17"></a>

(필수) 레이블 속성에 대한 메타데이터 필드 이름은 *-metadata*가 추가된 레이블 속성과 동일해야 합니다.

confidence**  
(필수) Amazon Rekognition Custom Labels에서는 현재 사용되지 않지만 0에서 1 사이의 값을 제공해야 합니다.

job-name**  
(선택 사항) 이미지를 처리하는 작업에 원하는 이름을 붙이세요.

class-name**  
(필수) 이미지에 적용되는 장면이나 개념에 원하는 클래스 이름을 붙이세요. 예를 들어 `"Sunrise"`입니다.

human-annotated**  
(필수) 사람이 주석을 완성했으면 `"yes"`를 지정하세요. 그렇지 않을 경우 `"no"`입니다.

creation-date**   
(필수) 레이블이 생성된 협정 세계시(UTC) 날짜와 시간 

type**  
(필수) 이미지에 적용해야 하는 처리 유형 이미지 수준 레이블의 경우 값은 `"groundtruth/image-classification"`입니다.

### 이미지에 여러 이미지 수준 레이블 추가
<a name="md-dataset-purpose-classification-multiple-labels"></a>

이미지에 레이블을 여러 개 추가할 수 있습니다. 예를 들어 다음 JSON은 하나의 이미지에 축구**와 공**이라는 두 개의 레이블을 추가합니다.

```
{
    "source-ref": "S3 bucket location", 
    "sport0":0, # FIRST label
    "sport0-metadata": { 
        "class-name": "football", 
        "confidence": 0.8, 
        "type":"groundtruth/image-classification", 
        "job-name": "identify-sport", 
        "human-annotated": "yes", 
        "creation-date": "2018-10-18T22:18:13.527256" 
    },
    "sport1":1, # SECOND label
    "sport1-metadata": { 
        "class-name": "ball", 
        "confidence": 0.8, 
        "type":"groundtruth/image-classification", 
        "job-name": "identify-sport", 
        "human-annotated": "yes", 
        "creation-date": "2018-10-18T22:18:13.527256" 
    }
}  # end of annotations for 1 image
```

# 매니페스트 파일의 객체 위치 파악
<a name="md-create-manifest-file-object-detection"></a>

SageMaker AI Ground Truth [경계 상자 작업 출력](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-box) 형식 JSON 라인을 매니페스트 파일에 추가하여 객체 현지화 정보로 레이블이 지정된 이미지를 가져올 수 있습니다.

위치 파악 정보는 이미지 상의 객체 위치를 나타냅니다. 위치는 객체를 둘러싸는 경계 상자로 표시됩니다. 경계 상자 구조에는 경계 상자의 왼쪽 위 좌표와 경계 상자의 너비 및 높이가 포함됩니다. 경계 상자 형식의 JSON 라인에는 이미지에 있는 각 객체의 클래스와 이미지에 있는 하나 이상의 객체 위치에 대한 경계 상자가 포함됩니다.

매니페스트 파일은 하나 이상의 JSON 라인으로 구성되며, 각 라인에는 하나의 이미지에 대한 정보가 들어 있습니다.

**객체 위치 파악을 위한 매니페스트 파일을 만들려면**

1. 빈 텍스트 파일을 생성합니다.

1. 가져올 각 이미지에 JSON 라인을 추가합니다. 각 JSON 라인은 다음과 비슷한 모습이어야 합니다.

   ```
   {"source-ref": "s3://bucket/images/IMG_1186.png", "bounding-box": {"image_size": [{"width": 640, "height": 480, "depth": 3}], "annotations": [{ "class_id": 1,	"top": 251,	"left": 399, "width": 155, "height": 101}, {"class_id": 0, "top": 65, "left": 86, "width": 220,	"height": 334}]}, "bounding-box-metadata": {"objects": [{ "confidence": 1}, {"confidence": 1}],	"class-map": {"0": "Echo",	"1": "Echo Dot"}, "type": "groundtruth/object-detection", "human-annotated": "yes",	"creation-date": "2013-11-18T02:53:27", "job-name": "my job"}}
   ```

1. 파일을 저장합니다. `.manifest` 확장을 사용할 수 있지만 필수는 아닙니다.

1. 방금 생성한 파일을 사용하여 데이터 세트를 생성합니다. 자세한 내용은 [SageMaker AI Ground Truth 형식 매니페스트 파일을 사용하여 데이터 세트를 생성하려면(콘솔)](md-create-manifest-file.md#create-dataset-procedure-manifest-file) 단원을 참조하십시오.



## 객체 경계 상자 JSON 라인
<a name="md-manifest-object-localization-json"></a>

이 항목은 하나의 이미지에 JSON 라인을 생성하는 방법을 보여줍니다. 다음 이미지는 Amazon Echo 및 Amazon Echo Dot 디바이스 주변의 경계 상자를 보여줍니다.

![\[목재 표면 위에 있는 두 개의 Amazon 스마트 스피커로, 각각 녹색 경계 상자와 파란색 경계 상자가 있습니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/echos.png)


다음은 이전 이미지의 경계 상자 JSON 라인입니다.

```
{
	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
	"bounding-box": {
		"image_size": [{
			"width": 640,
			"height": 480,
			"depth": 3
		}],
		"annotations": [{
			"class_id": 1,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}, {
			"class_id": 0,
			"top": 65,
			"left": 86,
			"width": 220,
			"height": 334
		}]
	},
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
		"class-map": {
			"0": "Echo",
			"1": "Echo Dot"
		},
		"type": "groundtruth/object-detection",
		"human-annotated": "yes",
		"creation-date": "2013-11-18T02:53:27",
		"job-name": "my job"
	}
}
```

다음 정보를 참고하세요.

### source-ref
<a name="cd-manifest-source-ref"></a>

(필수) 이미지의 Amazon S3 위치입니다. 형식은 `"s3://BUCKET/OBJECT_PATH"`입니다. 가져온 데이터 세트의 이미지는 동일한 Amazon S3 버킷에 저장되어야 합니다.

### *bounding-box*
<a name="md-manifest-source-bounding-box"></a>

(필수) 레이블 속성 필드 이름을 선택합니다. 이미지에서 감지된 각 객체의 이미지 크기 및 경계 상자를 포함합니다. -metadata**가 추가된 필드 이름으로 식별되는 상응하는 메타데이터가 있어야 합니다. 예를 들어 `"bounding-box-metadata"`입니다.

image\$1size**  
(필수) 이미지 크기(픽셀 단위)를 포함하는 단일 요소 배열   
+ height**: (필수) 이미지의 높이(픽셀 단위) 
+ width**: (필수) 이미지의 깊이(픽셀 단위) 
+ depth**: (필수) 이미지의 채널 수 RGB 이미지의 경우 값은 3입니다. Amazon Rekognition Custom Labels에서는 현재 사용하지 않지만 값이 필요합니다.

주석**  
(필수) 이미지에서 감지된 각 객체에 대한 경계 상자 정보의 배열  
+ class\$1id**: (필수) class-map**의 레이블에 매핑됩니다. 위 예제에서 class\$1id**가 `1`인 객체는 이미지의 Echo Dot입니다.
+ top**: (필수) 이미지 상단에서 경계 상자 상단까지의 거리(픽셀 단위) 
+ left**: (필수) 이미지 왼쪽에서 경계 상자 왼쪽까지의 거리(픽셀 단위) 
+ width**: (필수) 경계 상자의 너비(픽셀 단위) 
+ height**: (필수) 경계 상자의 높이(픽셀 단위) 

### *bounding-box*-metadata
<a name="md-manifest-source-bounding-box-metadata"></a>

(필수) 레이블 속성에 대한 메타데이터 필드 이름은 -metadata**가 추가된 레이블 속성과 동일해야 합니다. 이미지에서 감지된 각 객체에 대한 경계 상자 정보의 배열

Objects**  
(필수) 이미지에 있는 객체의 배열입니다. 인덱스를 기준으로 주석** 배열에 매핑합니다. Amazon Rekognition Custom Labels는 신뢰도 속성을 사용하지 않습니다.

class-map**  
(필수) 이미지에서 감지된 객체에 적용되는 클래스 맵 

type**  
(필수) 분류 작업 유형입니다. `"groundtruth/object-detection"`은 작업을 객체 감지로 식별합니다.

creation-date**   
(필수) 레이블이 생성된 협정 세계시(UTC) 날짜와 시간 

human-annotated**  
(필수) 사람이 주석을 완성했으면 `"yes"`를 지정하세요. 그렇지 않을 경우 `"no"`입니다.

job-name**  
(선택 사항) 이미지를 처리하는 작업의 이름입니다.

# 매니페스트 파일의 검증 규칙
<a name="md-create-manifest-file-validation-rules"></a>

 매니페스트 파일을 가져올 때 Amazon Rekognition Custom Labels는 제한, 구문 및 시맨틱에 대한 검증 규칙을 적용합니다. SageMaker AI Ground Truth 스키마는 구문 검증을 적용합니다. 자세한 내용은 [출력](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html)을 참조하세요. 다음은 제한 및 시맨틱에 대한 검증 규칙입니다.

**참고**  
20% 무효 규칙은 모든 검증 규칙에 누적되어 적용됩니다. 잘못된 JSON 15%, 잘못된 이미지 15%와 같은 조합으로 인해 가져오기가 20% 제한을 초과하는 경우 가져오기가 실패합니다.
각 데이터 세트 객체는 매니페스트의 한 라인입니다. 비어 있거나 유효하지 않은 라인도 데이터 세트 객체로 간주됩니다.
겹치는 부분은 (테스트와 훈련 간의 공통 레이블)/(훈련 레이블)입니다.

**Topics**
+ [한도](#md-validation-rules-limits)
+ [시맨틱](#md-validation-rules-semantics)

## 한도
<a name="md-validation-rules-limits"></a>


| 검증 | 제한 | 발생한 오류 | 
| --- | --- | --- | 
|  매니페스트 파일 크기  |  최대 1GB  |  오류  | 
|  매니페스트 파일의 최대 라인 수  |  매니페스트에는 최대 250,000개의 데이터 세트 객체가 한 라인으로 표시됩니다.  |  오류  | 
|  레이블당 유효한 데이터 세트 객체 총 수의 하한   |  >= 1  |  오류  | 
|  레이블의 하한  |  >=2  |  오류  | 
|  레이블의 상한  |  <= 250  |  오류  | 
|  이미지당 최소 경계 상자  |  0  |  없음  | 
|  이미지당 최대 경계 상자  |  50  |  없음  | 

## 시맨틱
<a name="md-validation-rules-semantics"></a>




| 검증 | 제한 | 발생한 오류 | 
| --- | --- | --- | 
|  빈 매니페스트  |    |  오류  | 
|  누락되거나 액세스할 수 없는 source-ref 객체  |  객체 수 20% 미만  |  경고  | 
|  누락되거나 액세스할 수 없는 source-ref 객체  |  객체 수 > 20%  |  오류  | 
|  훈련 데이터 세트에 테스트 레이블이 없습니다.  |  레이블이 50% 이상 겹쳐야 합니다.  |  오류  | 
|  데이터 세트의 동일한 레이블에 대한 레이블과 객체 예제의 혼합 데이터 세트 객체의 동일한 클래스에 대한 분류 및 탐지   |    |  오류나 경고 없음  | 
|  테스트와 트레이닝 간에 중첩되는 자산   |  테스트 데이터 세트와 훈련 데이터 세트 간에 중첩되는 부분이 없어야 합니다.  |    | 
|  데이터 세트의 이미지는 동일한 버킷에서 가져온 것이어야 합니다.  |  객체가 다른 버킷에 있는 경우 오류가 발생합니다.  |  오류  | 

# 다른 데이터 세트 형식을 매니페스트 파일로 변환
<a name="md-converting-to-sm-format"></a>

다음 정보를 사용하여 다양한 소스 데이터 세트 형식에서 Amazon SageMaker AI 형식 매니페스트 파일을 생성할 수 있습니다. 매니페스트 파일을 생성한 후 이를 사용하여 데이터 세트에 생성합니다. 자세한 내용은 [매니페스트 파일을 사용하여 이미지 가져오기](md-create-dataset-ground-truth.md) 단원을 참조하십시오.

**Topics**
+ [COCO 데이터세트를 매니페스트 파일 형식으로 변환](md-transform-coco.md)
+ [다중 레이블 SageMaker AI Ground Truth 매니페스트 파일 변환](md-gt-cl-transform.md)
+ [CSV 파일로 매니페스트 파일 생성](ex-csv-manifest.md)

# COCO 데이터세트를 매니페스트 파일 형식으로 변환
<a name="md-transform-coco"></a>

[COCO](http://cocodataset.org/#home)는 대규모 객체 감지, 세분화, 캡션 데이터 세트를 지정하는 데 사용되는 형식입니다. 이 Python [예제](md-coco-transform-example.md)는 COCO 객체 감지 형식 데이터 세트를 Amazon Rekognition Custom Labels [경계 상자 형식 매니페스트 파일](md-create-manifest-file-object-detection.md)로 변환하는 방법을 보여줍니다. 이 항목에는 직접 코드를 작성하는 데 사용할 수 있는 정보도 포함되어 있습니다.

COCO 형식 JSON 파일은 전체 데이터 세트**에 대한 정보를 제공하는 5개 항목으로 구성되어 있습니다. 자세한 내용은 [COCO 데이터세트 형식](md-coco-overview.md) 단원을 참조하십시오.
+ `info`: 데이터 세트에 대한 일반 정보 
+ `licenses `: 데이터 세트의 이미지에 대한 라이선스 정보
+ [`images`](md-coco-overview.md#md-coco-images): 데이터 세트의 이미지 목록
+ [`annotations`](md-coco-overview.md#md-coco-annotations): 데이터 세트의 모든 이미지에 있는 주석 목록(테두리 상자 포함)
+ [`categories`](md-coco-overview.md#md-coco-categories): 레이블 카테고리 목록

Amazon Rekognition Custom Labels 매니페스트 파일을 생성하려면 `images`, `annotations` 및 `categories` 목록의 정보가 필요합니다.

Amazon Rekognition Custom Labels 매니페스트 파일은 JSON 라인 형식이며, 각 줄에는 이미지에 있는** 하나 이상의 객체에 대한 경계 상자와 레이블 정보가 있습니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

## COCO 객체를 사용자 지정 레이블 JSON 라인에 매핑
<a name="md-mapping-coco"></a>

COCO 형식 데이터 세트를 변환하려면 객체 위치 파악을 위해 COCO 데이터 세트를 Amazon Rekognition Custom Labels 매니페스트 파일에 매핑하세요. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오. 각 이미지에 대한 JSON 라인을 구축하려면 매니페스트 파일에 COCO 데이터 세트 `image`, `annotation`, `category` 객체 필드 ID를 매핑해야 합니다.

다음은 COCO 매니페스트 파일의 예제입니다. 자세한 내용은 [COCO 데이터세트 형식](md-coco-overview.md) 단원을 참조하십시오.

```
{
    "info": {
        "description": "COCO 2017 Dataset","url": "http://cocodataset.org","version": "1.0","year": 2017,"contributor": "COCO Consortium","date_created": "2017/09/01"
    },
    "licenses": [
        {"url": "http://creativecommons.org/licenses/by/2.0/","id": 4,"name": "Attribution License"}
    ],
    "images": [
        {"id": 242287, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg", "flickr_url": "http://farm3.staticflickr.com/2626/xxxxxxxxxxxx.jpg", "width": 426, "height": 640, "file_name": "xxxxxxxxx.jpg", "date_captured": "2013-11-15 02:41:42"},
        {"id": 245915, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg", "flickr_url": "http://farm1.staticflickr.com/88/xxxxxxxxxxxx.jpg", "width": 640, "height": 480, "file_name": "nnnnnnnnnn.jpg", "date_captured": "2013-11-18 02:53:27"}
    ],
    "annotations": [
        {"id": 125686, "category_id": 0, "iscrowd": 0, "segmentation": [[164.81, 417.51,......167.55, 410.64]], "image_id": 242287, "area": 42061.80340000001, "bbox": [19.23, 383.18, 314.5, 244.46]},
        {"id": 1409619, "category_id": 0, "iscrowd": 0, "segmentation": [[376.81, 238.8,........382.74, 241.17]], "image_id": 245915, "area": 3556.2197000000015, "bbox": [399, 251, 155, 101]},
        {"id": 1410165, "category_id": 1, "iscrowd": 0, "segmentation": [[486.34, 239.01,..........495.95, 244.39]], "image_id": 245915, "area": 1775.8932499999994, "bbox": [86, 65, 220, 334]}
    ],
    "categories": [
        {"supercategory": "speaker","id": 0,"name": "echo"},
        {"supercategory": "speaker","id": 1,"name": "echo dot"}
    ]
}
```

다음 다이어그램은 데이터 세트**의 COCO 데이터세트 목록이 Amazon Rekognition Custom Labels JSON 라인에 매핑되는 이미지**를 보여줍니다. 이미지의 모든 JSON 라인에는 소스 참조, 작업, 작업 메타데이터 필드가 있습니다. 일치하는 색상은 단일 이미지에 대한 정보를 나타냅니다. 매니페스트에서 각 이미지에 여러 주석과 메타데이터/범주가 있을 수 있습니다.

![\[이미지, 주석, 범주가 포함된 Coco 매니페스트의 구조를 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/coco-transform.png)


**단일 JSON 라인에 대한 COCO 객체를 가져오려면**

1. 이미지 목록의 각 이미지에 대해 주석 필드 `image_id`의 값이 이미지 `id` 필드와 일치하는 주석 목록에서 주석을 가져옵니다.

1. 1단계에서 일치하는 각 주석에 대해 `categories` 목록을 읽고 `category` 필드 `id` 값이 `annotation` 객체 `category_id` 필드와 일치하는 `category`를 각각 가져옵니다.

1. 일치하는 `image`, `annotation`, `category` 객체를 사용하여 이미지의 JSON 라인을 생성합니다. 필드를 매핑하려면 [COCO 객체 필드를 사용자 지정 레이블 JSON 라인 객체 필드에 매핑하기](#md-mapping-fields-coco) 항목을 참조하세요.

1. `images` 목록의 각 `image` 객체에 대해 JSON 라인을 생성할 때까지 1\$13단계를 반복합니다.

예제 코드는 [COCO 데이터 세트 변환](md-coco-transform-example.md) 항목을 참조하세요.

## COCO 객체 필드를 사용자 지정 레이블 JSON 라인 객체 필드에 매핑하기
<a name="md-mapping-fields-coco"></a>

Amazon Rekognition Custom Labels JSON 라인의 COCO 객체를 식별한 후에는 COCO 객체 필드를 상응하는 Amazon Rekognition Custom Labels JSON 라인 객체 필드에 매핑해야 합니다. 다음 예제 Amazon Rekognition Custom Labels JSON 라인은 하나의 이미지(`id`=`000000245915`)를 위의 COCO JSON 예제에 매핑합니다. 다음 정보를 참고하세요.
+ `source-ref`는 Amazon S3 버킷의 이미지 위치입니다. Amazon S3 버킷에 COCO 이미지가 저장되지 않은 경우, 이미지를 Amazon S3 버킷으로 이동해야 합니다.
+ `annotations` 목록에는 이미지의 각 객체에 대해 `annotation` 객체가 포함되어 있습니다. `annotation` 객체에는 경계 상자 정보(`top`, `left`, `width`, `height`) 및 레이블 식별자(`class_id`)가 포함됩니다.
+ 레이블 식별자(`class_id`)는 메타데이터의 `class-map` 목록에 매핑됩니다. 그것은 이미지에 사용된 레이블을 나열합니다.

```
{
	"source-ref": "s3://custom-labels-bucket/images/000000245915.jpg",
	"bounding-box": {
		"image_size": {
			"width": 640,
			"height": 480,
			"depth": 3
		},
		"annotations": [{
			"class_id": 0,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}, {
			"class_id": 1,
			"top": 65,
			"left": 86,
			"width": 220,
			"height": 334
		}]
	},
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
		"class-map": {
			"0": "Echo",
			"1": "Echo Dot"
		},
		"type": "groundtruth/object-detection",
		"human-annotated": "yes",
		"creation-date": "2018-10-18T22:18:13.527256",
		"job-name": "my job"
	}
}
```

다음 정보를 사용하여 Amazon Rekognition Custom Labels 매니페스트 파일 필드를 COCO 데이터 세트 JSON 필드에 매핑할 수 있습니다.

### source-ref
<a name="md-source-ref-coco"></a>

이미지 위치의 S3 형식 URL입니다. 이미지는 S3 버킷에 저장되어야 합니다. 자세한 내용은 [source-ref](md-create-manifest-file-object-detection.md#cd-manifest-source-ref) 단원을 참조하십시오. `coco_url` COCO 필드가 S3 버킷 위치를 가리키는 경우 `coco_url`의 값을 `source-ref`의 값으로 사용할 수 있습니다. 또는 `file_name`(COCO) 필드에 `source-ref`를 매핑하고, 변환 코드에서 이미지가 저장되는 위치에 필요한 S3 경로를 추가할 수 있습니다.

### *bounding-box*
<a name="md-label-attribute-id-coco"></a>

사용자가 선택한 레이블 속성 이름 자세한 내용은 [*bounding-box*](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box) 단원을 참조하십시오.

#### image\$1size
<a name="md-image-size-coco"></a>

이미지 크기(픽셀 단위) [이미지](md-coco-overview.md#md-coco-images) 목록의 `image` 객체에 매핑됩니다.
+ `height`-> `image.height`
+ `width`-> `image.width`
+ `depth`-> Amazon Rekognition Custom Labels에는 사용되지 않지만 값을 입력해야 합니다.

#### 주석
<a name="md-annotations-coco"></a>

`annotation` 객체의 목록. 이미지의 각 객체마다 `annotation`이 하나씩 있습니다.

#### annotation
<a name="md-annotation-coco"></a>

이미지에 있는 객체의 한 인스턴스에 대한 경계 상자 정보가 들어 있습니다.
+ `class_id` -> 사용자 지정 레이블의 `class-map` 목록에 매핑되는 숫자 ID
+ `top` -> `bbox[1]`
+ `left` -> `bbox[0]`
+ `width` -> `bbox[2]`
+ `height` -> `bbox[3]`

### *bounding-box*-metadata
<a name="md-metadata-coco"></a>

레이블 속성의 메타데이터 레이블 및 레이블 식별자를 포함합니다. 자세한 내용은 [*bounding-box*-metadata](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box-metadata) 단원을 참조하십시오.

#### Objects
<a name="cd-metadata-objects-coco"></a>

이미지에 있는 객체의 배열입니다. 인덱스를 기준으로 `annotations` 목록에 매핑됩니다.

##### 객체
<a name="cd-metadata-object-coco"></a>
+ `confidence`->Amazon Rekognition Custom Labels에는 사용되지 않지만 값(1)이 필요합니다.

#### class-map
<a name="md-metadata-class-map-coco"></a>

이미지에서 감지된 객체에 적용되는 레이블(클래스)의 맵입니다. [카테고리](md-coco-overview.md#md-coco-categories) 목록에 있는 카테고리 개체에 매핑됩니다.
+ `id` -> `category.id`
+ `id value` -> `category.name`

#### type
<a name="md-type-coco"></a>

`groundtruth/object-detection`이어야 합니다.

#### human-annotated
<a name="md-human-annotated-coco"></a>

`yes` 또는 `no`을 지정합니다. 자세한 내용은 [*bounding-box*-metadata](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box-metadata) 단원을 참조하십시오.

#### creation-date -> [image](md-coco-overview.md#md-coco-images).date\$1captured
<a name="md-creation-date-coco"></a>

이미지가 생성된 날짜 및 시간입니다. COCO 이미지 목록에 있는 이미지의 [image](md-coco-overview.md#md-coco-images).date\$1captured 필드에 매핑됩니다. Amazon Rekognition Custom Labels의 `creation-date`의 형식은 Y-M-DTH:MS:S**일 것으로 예상합니다.

#### job-name
<a name="md-job-name-coco"></a>

사용자가 선택한 직무 이름 

# COCO 데이터세트 형식
<a name="md-coco-overview"></a>

COCO 데이터 세트는 전체 데이터 세트에 대한 정보를 제공하는 다섯 개의 항목으로 구성됩니다. COCO 객체 감지 데이터 세트의 형식은 [COCO 데이터 형식](http://cocodataset.org/#format-data)에 문서화되어 있습니다.
+ 정보: 데이터 세트에 대한 일반 정보입니다.
+ 라이선스: 데이터 세트의 이미지에 대한 라이선스 정보입니다.
+ [이미지](#md-coco-images): 데이터 세트에 있는 이미지 목록
+ [주석](#md-coco-annotations): 데이터 세트의 모든 이미지에 있는 주석(경계 상자 포함)의 목록
+ [카테고리](#md-coco-categories): 레이블 카테고리 목록

사용자 지정 레이블 매니페스트를 만들려면 COCO 매니페스트 파일의 `images`, `annotations`, `categories` 목록을 사용하세요. 다른 항목(`info`, `licences`)은 필수가 아닙니다. 다음은 COCO 매니페스트 파일의 예제입니다.

```
{
    "info": {
        "description": "COCO 2017 Dataset","url": "http://cocodataset.org","version": "1.0","year": 2017,"contributor": "COCO Consortium","date_created": "2017/09/01"
    },
    "licenses": [
        {"url": "http://creativecommons.org/licenses/by/2.0/","id": 4,"name": "Attribution License"}
    ],
    "images": [
        {"id": 242287, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg", "flickr_url": "http://farm3.staticflickr.com/2626/xxxxxxxxxxxx.jpg", "width": 426, "height": 640, "file_name": "xxxxxxxxx.jpg", "date_captured": "2013-11-15 02:41:42"},
        {"id": 245915, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg", "flickr_url": "http://farm1.staticflickr.com/88/xxxxxxxxxxxx.jpg", "width": 640, "height": 480, "file_name": "nnnnnnnnnn.jpg", "date_captured": "2013-11-18 02:53:27"}
    ],
    "annotations": [
        {"id": 125686, "category_id": 0, "iscrowd": 0, "segmentation": [[164.81, 417.51,......167.55, 410.64]], "image_id": 242287, "area": 42061.80340000001, "bbox": [19.23, 383.18, 314.5, 244.46]},
        {"id": 1409619, "category_id": 0, "iscrowd": 0, "segmentation": [[376.81, 238.8,........382.74, 241.17]], "image_id": 245915, "area": 3556.2197000000015, "bbox": [399, 251, 155, 101]},
        {"id": 1410165, "category_id": 1, "iscrowd": 0, "segmentation": [[486.34, 239.01,..........495.95, 244.39]], "image_id": 245915, "area": 1775.8932499999994, "bbox": [86, 65, 220, 334]}
    ],
    "categories": [
        {"supercategory": "speaker","id": 0,"name": "echo"},
        {"supercategory": "speaker","id": 1,"name": "echo dot"}
    ]
}
```

## 이미지 목록
<a name="md-coco-images"></a>

COCO 데이터 세트에서 참조하는 이미지는 이미지 배열에 나열됩니다. 각 이미지 객체에는 이미지 파일 이름과 같은 이미지에 대한 정보가 들어 있습니다. 다음 예제 이미지 객체에서 다음 정보와 Amazon Rekognition Custom Labels 매니페스트 파일을 생성하는 데 필요한 필드를 기록해 둡니다.
+ `id`: (필수) 이미지의 고유 식별자 `id` 필드는 주석 배열(경계 상자 정보가 저장되는 위치)의 `id` 필드에 매핑됩니다.
+ `license`: (필수 아님) 라이선스 어레이에 매핑됩니다.
+ `coco_url`: (선택 사항) 이미지의 위치
+ `flickr_url`: (필수 아님) Flickr에서의 이미지 위치
+ `width`: (필수) 이미지의 너비
+ `height`: (필수) 이미지의 높이
+ `file_name`: (필수) 이미지 파일 이름 이 예제에서 `file_name`과 `id`는 일치하지만 COCO 데이터 세트의 요구 사항은 아닙니다.
+ `date_captured`: (필수) 이미지를 캡처한 날짜 및 시간 

```
{
    "id": 245915,
    "license": 4,
    "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg",
    "flickr_url": "http://farm1.staticflickr.com/88/nnnnnnnnnnnnnnnnnnn.jpg",
    "width": 640,
    "height": 480,
    "file_name": "000000245915.jpg",
    "date_captured": "2013-11-18 02:53:27"
}
```

## 주석(경계 상자) 목록
<a name="md-coco-annotations"></a>

모든 이미지에 있는 모든 객체의 경계 상자 정보는 주석 목록에 저장됩니다. 단일 주석 개체에는 단일 개체에 대한 경계 상자 정보와 이미지의 개체 레이블이 포함됩니다. 이미지에 있는 객체의 각 인스턴스에는 주석 개체가 있습니다.

다음 예제에서 다음 정보와 Amazon Rekognition Custom Labels 매니페스트 파일을 생성하는 데 필요한 필드를 기록해 둡니다.
+ `id`: (필수 아님) 주석의 식별자
+ `image_id`: (필수) 이미지 배열의 `id` 이미지에 대응합니다.
+ `category_id`: (필수) 경계 상자 내의 객체를 식별하는 레이블의 식별자입니다. 카테고리 배열의 `id` 필드에 매핑됩니다.
+ `iscrowd`: (필수 아님) 이미지에 많은 객체가 포함되어 있는지 여부를 지정합니다.
+ `segmentation`: (필수 아님) 이미지 상의 객체에 대한 세그멘트화 정보입니다. Amazon Rekognition Custom Labels는 세그멘트화를 지원하지 않습니다.
+ `area`: (필수 아님) 주석의 영역
+ `bbox`: (필수) 이미지에 있는 객체 주위의 경계 상자 좌표(픽셀 단위)를 포함합니다.

```
{
    "id": 1409619,
    "category_id": 1,
    "iscrowd": 0,
    "segmentation": [
        [86.0, 238.8,..........382.74, 241.17]
    ],
    "image_id": 245915,
    "area": 3556.2197000000015,
    "bbox": [86, 65, 220, 334]
}
```

## 카테고리 목록
<a name="md-coco-categories"></a>

레이블 정보는 카테고리 배열에 저장됩니다. 다음 예제 카테고리 객체에서 다음 정보와 Amazon Rekognition Custom Labels 매니페스트 파일을 생성하는 데 필요한 필드를 기록해 둡니다.
+ `supercategory`: (필수 아님) 레이블의 상위 카테고리 
+ `id`: (필수) 레이블 식별자 `id` 필드는 `annotation` 객체의 `category_id` 필드에 매핑됩니다. 다음 예제에서 에코 도트의 식별자는 2입니다.
+ `name`: (필수) 레이블 이름 

```
        {"supercategory": "speaker","id": 2,"name": "echo dot"}
```

# COCO 데이터 세트 변환
<a name="md-coco-transform-example"></a>

다음 Python 예제를 사용하여 COCO 형식 데이터 세트의 경계 상자 정보를 Amazon Rekognition Custom Labels 매니페스트 파일로 변환합니다. 해당 코드는 생성된 매니페스트 파일을 Amazon S3 버킷에 업로드합니다. 해당 코드는 이미지를 업로드하는 데 사용할 수 있는 AWS CLI 명령도 제공합니다.

**COCO 데이터 세트를 변환하려면(SDK)**

1. 아직 설정하지 않았다면 다음과 같이 하세요.

   1. `AmazonS3FullAccess` 권한이 있는지 확인합니다. 자세한 내용은 [SDK 권한 설정](su-sdk-permissions.md) 단원을 참조하십시오.

   1.  AWS CLI 및 AWS SDKs를 설치하고 구성합니다. 자세한 내용은 [4단계: AWS CLI 및 AWS SDKs 설정](su-awscli-sdk.md) 단원을 참조하십시오.

1. 다음 Python 코드를 사용하여 COCO 데이터 세트를 변환합니다. 다음 값을 설정하세요.
   + `s3_bucket`: 이미지 및 Amazon Rekognition Custom Labels 매니페스트 파일을 저장할 S3 버킷의 이름입니다.
   + `s3_key_path_images`: S3 버킷(`s3_bucket`) 내에서 이미지를 배치하려는 위치의 경로
   + `s3_key_path_manifest_file`: S3 버킷(`s3_bucket`) 내에서 사용자 지정 레이블 매니페스트 파일을 배치할 경로
   + `local_path`: 예제에서 입력 COCO 데이터 세트를 열고 새 사용자 지정 레이블 매니페스트 파일도 저장하는 로컬 경로
   + `local_images_path`: 훈련에 사용할 이미지의 로컬 경로
   + `coco_manifest`: 입력 COCO 데이터 세트 파일 이름
   + `cl_manifest_file`: 예제에서 만든 매니페스트 파일의 이름 `local_path`에서 지정한 위치에 파일이 저장됩니다. 일반적으로 파일에는 `.manifest` 확장자가 있지만 필수는 아닙니다.
   + `job_name`: 사용자 정의 레이블 작업의 이름

   ```
   import json
   import os
   import random
   import shutil
   import datetime
   import botocore
   import boto3
   import PIL.Image as Image
   import io
   
   #S3 location for images
   s3_bucket = 'bucket'
   s3_key_path_manifest_file = 'path to custom labels manifest file/'
   s3_key_path_images = 'path to images/'
   s3_path='s3://' + s3_bucket  + '/' + s3_key_path_images
   s3 = boto3.resource('s3')
   
   #Local file information
   local_path='path to input COCO dataset and output Custom Labels manifest/'
   local_images_path='path to COCO images/'
   coco_manifest = 'COCO dataset JSON file name'
   coco_json_file = local_path + coco_manifest
   job_name='Custom Labels job name'
   cl_manifest_file = 'custom_labels.manifest'
   
   label_attribute ='bounding-box'
   
   open(local_path + cl_manifest_file, 'w').close()
   
   # class representing a Custom Label JSON line for an image
   class cl_json_line:  
       def __init__(self,job, img):  
   
           #Get image info. Annotations are dealt with seperately
           sizes=[]
           image_size={}
           image_size["width"] = img["width"]
           image_size["depth"] = 3
           image_size["height"] = img["height"]
           sizes.append(image_size)
   
           bounding_box={}
           bounding_box["annotations"] = []
           bounding_box["image_size"] = sizes
   
           self.__dict__["source-ref"] = s3_path + img['file_name']
           self.__dict__[job] = bounding_box
   
           #get metadata
           metadata = {}
           metadata['job-name'] = job_name
           metadata['class-map'] = {}
           metadata['human-annotated']='yes'
           metadata['objects'] = [] 
           date_time_obj = datetime.datetime.strptime(img['date_captured'], '%Y-%m-%d %H:%M:%S')
           metadata['creation-date']= date_time_obj.strftime('%Y-%m-%dT%H:%M:%S') 
           metadata['type']='groundtruth/object-detection'
           
           self.__dict__[job + '-metadata'] = metadata
   
   
   print("Getting image, annotations, and categories from COCO file...")
   
   with open(coco_json_file) as f:
   
       #Get custom label compatible info    
       js = json.load(f)
       images = js['images']
       categories = js['categories']
       annotations = js['annotations']
   
       print('Images: ' + str(len(images)))
       print('annotations: ' + str(len(annotations)))
       print('categories: ' + str(len (categories)))
   
   
   print("Creating CL JSON lines...")
       
   images_dict = {image['id']: cl_json_line(label_attribute, image) for image in images}
   
   print('Parsing annotations...')
   for annotation in annotations:
   
       image=images_dict[annotation['image_id']]
   
       cl_annotation = {}
       cl_class_map={}
   
       # get bounding box information
       cl_bounding_box={}
       cl_bounding_box['left'] = annotation['bbox'][0]
       cl_bounding_box['top'] = annotation['bbox'][1]
    
       cl_bounding_box['width'] = annotation['bbox'][2]
       cl_bounding_box['height'] = annotation['bbox'][3]
       cl_bounding_box['class_id'] = annotation['category_id']
   
       getattr(image, label_attribute)['annotations'].append(cl_bounding_box)
   
   
       for category in categories:
            if annotation['category_id'] == category['id']:
               getattr(image, label_attribute + '-metadata')['class-map'][category['id']]=category['name']
           
       
       cl_object={}
       cl_object['confidence'] = int(1)  #not currently used by Custom Labels
       getattr(image, label_attribute + '-metadata')['objects'].append(cl_object)
   
   print('Done parsing annotations')
   
   # Create manifest file.
   print('Writing Custom Labels manifest...')
   
   for im in images_dict.values():
   
       with open(local_path+cl_manifest_file, 'a+') as outfile:
               json.dump(im.__dict__,outfile)
               outfile.write('\n')
               outfile.close()
   
   # Upload manifest file to S3 bucket.
   print ('Uploading Custom Labels manifest file to S3 bucket')
   print('Uploading'  + local_path + cl_manifest_file + ' to ' + s3_key_path_manifest_file)
   print(s3_bucket)
   s3 = boto3.resource('s3')
   s3.Bucket(s3_bucket).upload_file(local_path + cl_manifest_file, s3_key_path_manifest_file + cl_manifest_file)
   
   # Print S3 URL to manifest file,
   print ('S3 URL Path to manifest file. ')
   print('\033[1m s3://' + s3_bucket + '/' + s3_key_path_manifest_file + cl_manifest_file + '\033[0m') 
   
   # Display aws s3 sync command.
   print ('\nAWS CLI s3 sync command to upload your images to S3 bucket. ')
   print ('\033[1m aws s3 sync ' + local_images_path + ' ' + s3_path + '\033[0m')
   ```

1. 코드를 실행합니다.

1. 프로그램 출력에서 `s3 sync` 명령을 기록해 둡니다. 이 정보는 다음 단계에서 필요합니다.

1. 명령 프롬프트에서 `s3 sync` 명령을 실행합니다. 이미지는 S3 버킷에 업로드됩니다. 업로드 중에 명령이 실패하면 로컬 이미지가 S3 버킷과 동기화될 때까지 명령을 다시 실행하세요.

1. 프로그램 출력에서 매니페스트 파일의 S3 URL 경로를 기록해 둡니다. 이 정보는 다음 단계에서 필요합니다.

1. [SageMaker AI Ground Truth 매니페스트 파일을 사용하여 데이터 세트 생성(콘솔)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console)의 지침에 따라 업로드된 매니페스트 파일로 데이터 세트를 생성하세요. 8단계로 **.manifest 파일 위치**에 이전 단계에서 기록해 둔 Amazon S3 URL을 입력합니다. AWS SDK를 사용하고 있다면 [SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk) 항목을 수행하세요.

# 다중 레이블 SageMaker AI Ground Truth 매니페스트 파일 변환
<a name="md-gt-cl-transform"></a>

이 주제에서는 다중 레이블 Amazon SageMaker AI Ground Truth 매니페스트 파일을 Amazon Rekognition Custom Labels 형식 매니페스트 파일로 변환하는 방법을 보여줍니다.

다중 레이블 작업에 대한 SageMaker AI Ground Truth 매니페스트 파일의 형식은 Amazon Rekognition Custom Labels 형식 매니페스트 파일과 다릅니다. 다중 레이블 분류란 어떤 이미지가 일련의 클래스로 분류되지만 동시에 여러 클래스에 속할 수 있는 경우를 말합니다. 이 경우 이미지에 축구공**, 공**과 같은 여러 레이블(다중 레이블)이 있을 수 있습니다.

다중 레이블 SageMaker AI Ground Truth 작업에 대한 자세한 내용은 [이미지 분류(다중 레이블)를 참조하세요](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-image-classification-multilabel.html). 다중 레이블 형식 Amazon Rekognition Custom Labels 매니페스트 파일에 대한 자세한 내용은 [이미지에 여러 이미지 수준 레이블 추가](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels) 항목을 참조하세요.

## SageMaker AI Ground Truth 작업에 대한 매니페스트 파일 가져오기
<a name="md-get-gt-manifest"></a>

다음 절차에서는 Amazon SageMaker AI Ground Truth 작업에 대한 출력 매니페스트 파일(`output.manifest`)을 가져오는 방법을 보여줍니다. `output.manifest`를 다음 절차의 입력으로 사용합니다.

**SageMaker AI Ground Truth 작업 매니페스트 파일을 다운로드하려면**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 링크를 엽니다.

1. 탐색 창에서 **Ground Truth**를 선택한 다음 **레이블 지정 작업**을 선택합니다.

1. 사용할 매니페스트 파일이 들어 있는 레이블 지정 작업을 선택합니다.

1. 세부 정보 페이지의 **출력 데이터 세트 위치** 아래에 있는 링크를 선택합니다. Amazon S3 콘솔이 데이터 세트 위치에서 열립니다.

1. `Manifests`, `output`, 다음 `output.manifest`을 선택합니다.

1. 매니페스트 파일을 다운로드하려면 **객체 작업**을 선택하고 **다운로드**를 선택합니다.

## 다중 레이블 SageMaker AI 매니페스트 파일 변환
<a name="md-transform-ml-gt"></a>

다음 절차에서는 기존 다중 레이블 형식 SageMaker AI GroundTruth 매니페스트 파일에서 다중 레이블 형식 Amazon Rekognition Custom Labels 매니페스트 파일을 생성합니다.

**참고**  
코드를 실행하려면 Python 버전 3 이상이 필요합니다.<a name="md-procedure-multi-label-transform"></a>

**다중 레이블 SageMaker AI 매니페스트 파일을 변환하려면**

1. 다음 Python 코드를 실행합니다. [SageMaker AI Ground Truth 작업에 대한 매니페스트 파일 가져오기](#md-get-gt-manifest)에서 생성한 매니페스트 파일의 이름을 명령줄 인수로 제공합니다.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier:  Apache-2.0
   """
   Purpose
   Shows how to create and Amazon Rekognition Custom Labels format
   manifest file from an Amazon SageMaker Ground Truth Image
   Classification (Multi-label) format manifest file.
   """
   import json
   import logging
   import argparse
   import os.path
   
   logger = logging.getLogger(__name__)
   
   def create_manifest_file(ground_truth_manifest_file):
       """
       Creates an Amazon Rekognition Custom Labels format manifest file from
       an Amazon SageMaker Ground Truth Image Classification (Multi-label) format
       manifest file.
       :param: ground_truth_manifest_file: The name of the Ground Truth manifest file,
       including the relative path.
       :return: The name of the new Custom Labels manifest file.
       """
   
       logger.info('Creating manifest file from %s', ground_truth_manifest_file)
       new_manifest_file = f'custom_labels_{os.path.basename(ground_truth_manifest_file)}'
   
       # Read the SageMaker Ground Truth manifest file into memory.
       with open(ground_truth_manifest_file) as gt_file:
           lines = gt_file.readlines()
   
       #Iterate through the lines one at a time to generate the
       #new lines for the Custom Labels manifest file.
       with open(new_manifest_file, 'w') as the_new_file:
           for line in lines:
               #job_name - The of the Amazon Sagemaker Ground Truth job.
               job_name = ''
               # Load in the old json item from the Ground Truth manifest file
               old_json = json.loads(line)
   
               # Get the job name
               keys = old_json.keys()
               for key in keys:
                   if 'source-ref' not in key and '-metadata' not in key:
                       job_name = key
   
               new_json = {}
               # Set the location of the image
               new_json['source-ref'] = old_json['source-ref']
   
               # Temporarily store the list of labels
               labels = old_json[job_name]
   
               # Iterate through the labels and reformat to Custom Labels format
               for index, label in enumerate(labels):
                   new_json[f'{job_name}{index}'] = index
                   metadata = {}
                   metadata['class-name'] = old_json[f'{job_name}-metadata']['class-map'][str(label)]
                   metadata['confidence'] = old_json[f'{job_name}-metadata']['confidence-map'][str(label)]
                   metadata['type'] = 'groundtruth/image-classification'
                   metadata['job-name'] = old_json[f'{job_name}-metadata']['job-name']
                   metadata['human-annotated'] = old_json[f'{job_name}-metadata']['human-annotated']
                   metadata['creation-date'] = old_json[f'{job_name}-metadata']['creation-date']
                   # Add the metadata to new json line
                   new_json[f'{job_name}{index}-metadata'] = metadata
               # Write the current line to the json file
               the_new_file.write(json.dumps(new_json))
               the_new_file.write('\n')
   
       logger.info('Created %s', new_manifest_file)
       return  new_manifest_file
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "manifest_file", help="The Amazon SageMaker Ground Truth manifest file"
           "that you want to use."
       )
   
   
   def main():
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
       try:
           # get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
           # Create the manifest file
           manifest_file = create_manifest_file(args.manifest_file)
           print(f'Manifest file created: {manifest_file}')
       except FileNotFoundError as err:
           logger.exception('File not found: %s', err)
           print(f'File not found: {err}. Check your manifest file.')
   
   if __name__ == "__main__":
       main()
   ```

1. 스크립트에 표시되는 새 매니페스트 파일의 이름을 기록해 둡니다. 다음 단계에서 해당 항목을 사용합니다.

1. 매니페스트 파일을 저장하는 데 사용할 Amazon S3 버킷에 [매니페스트 파일을 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)합니다.
**참고**  
Amazon Rekognition Custom Labels가 매니페스트 파일 JSON 라인의 `source-ref` 필드에서 참조되는 Amazon S3 버킷에 액세스할 수 있는지 확인하세요. 자세한 내용은 [외부 Amazon S3 버킷에 액세스](su-console-policy.md#su-external-buckets) 단원을 참조하십시오. Ground Truth 작업이 Amazon Rekognition Custom Labels 콘솔 버킷에 이미지를 저장하는 경우 권한을 추가할 필요가 없습니다.

1. [SageMaker AI Ground Truth 매니페스트 파일을 사용하여 데이터 세트 생성(콘솔)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console)의 지침에 따라 업로드된 매니페스트 파일로 데이터 세트를 생성하세요. 8단계로 **.manifest 파일 위치**에 매니페스트 파일의 위치로 사용할 Amazon S3 URL을 입력합니다. AWS SDK를 사용하고 있다면 [SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk) 항목을 수행하세요.

# CSV 파일로 매니페스트 파일 생성
<a name="ex-csv-manifest"></a>

이 예제 Python 스크립트는 Comma Separated Values(CSV) 파일을 사용하여 이미지에 레이블을 지정함으로써 매니페스트 파일 생성을 간소화합니다. 사용자가 CSV 파일을 생성합니다. 매니페스트 파일은 [다중 레이블 이미지 분류](getting-started.md#gs-multi-label-image-classification-example) 또는 [다중 레이블 이미지 분류](getting-started.md#gs-multi-label-image-classification-example) 용도에 적합합니다. 자세한 내용은 [객체, 장면 및 개념 찾기](understanding-custom-labels.md#tm-classification) 단원을 참조하십시오.

**참고**  
이 스크립트는 [객체 위치](understanding-custom-labels.md#tm-object-localization) 또는 [브랜드 위치](understanding-custom-labels.md#tm-brand-detection-localization)를 찾는 데 적합한 매니페스트 파일을 생성하지 않습니다.

매니페스트 파일은 모델 학습에 사용되는 이미지를 설명합니다. 이미지 위치와 이미지에 지정된 레이블을 예로 들 수 있습니다. 매니페스트 파일은 하나 이상의 JSON 라인으로 구성됩니다. 각 JSON 라인은 단일 이미지를 설명합니다. 자세한 내용은 [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md) 단원을 참조하십시오.

CSV 파일은 텍스트 파일의 여러 행에 대한 표 형식 데이터를 나타냅니다. 행의 필드는 쉼표로 구분합니다. 자세한 내용은 [comma separated values](https://en.wikipedia.org/wiki/Comma-separated_values)를 참조하세요. 이 스크립트에서 CSV 파일의 각 행은 단일 이미지를 나타내며 매니페스트 파일의 JSON 라인에 매핑됩니다. [다중 레이블 이미지 분류](getting-started.md#gs-multi-label-image-classification-example)를 지원하는 매니페스트 파일의 CSV 파일을 만들려면 각 행에 하나 이상의 이미지 수준 레이블을 추가하세요. [이미지 분류](getting-started.md#gs-image-classification-example)에 적합한 매니페스트 파일을 만들려면 각 행에 단일 이미지 수준 레이블을 추가하세요.

예를 들어, 다음 CSV 파일은 [다중 레이블 이미지 분류](getting-started.md#gs-multi-label-image-classification-example)(꽃) 시작하기** 프로젝트의 이미지를 설명합니다.

```
camellia1.jpg,camellia,with_leaves
camellia2.jpg,camellia,with_leaves
camellia3.jpg,camellia,without_leaves
helleborus1.jpg,helleborus,without_leaves,not_fully_grown
helleborus2.jpg,helleborus,with_leaves,fully_grown
helleborus3.jpg,helleborus,with_leaves,fully_grown
jonquil1.jpg,jonquil,with_leaves
jonquil2.jpg,jonquil,with_leaves
jonquil3.jpg,jonquil,with_leaves
jonquil4.jpg,jonquil,without_leaves
mauve_honey_myrtle1.jpg,mauve_honey_myrtle,without_leaves
mauve_honey_myrtle2.jpg,mauve_honey_myrtle,with_leaves
mauve_honey_myrtle3.jpg,mauve_honey_myrtle,with_leaves
mediterranean_spurge1.jpg,mediterranean_spurge,with_leaves
mediterranean_spurge2.jpg,mediterranean_spurge,without_leaves
```

스크립트는 각 행에 대해 JSON 라인을 생성합니다. 예를 들어, 다음은 첫 번째 행(`camellia1.jpg,camellia,with_leaves`)의 JSON 라인입니다.

```
{"source-ref": "s3://bucket/flowers/train/camellia1.jpg","camellia": 1,"camellia-metadata":{"confidence": 1,"job-name": "labeling-job/camellia","class-name": "camellia","human-annotated": "yes","creation-date": "2022-01-21T14:21:05","type": "groundtruth/image-classification"},"with_leaves": 1,"with_leaves-metadata":{"confidence": 1,"job-name": "labeling-job/with_leaves","class-name": "with_leaves","human-annotated": "yes","creation-date": "2022-01-21T14:21:05","type": "groundtruth/image-classification"}}
```

예제 CSV에는 이미지에 대한 Amazon S3 경로가 없습니다. CSV 파일에 이미지의 Amazon S3 경로가 포함되어 있지 않은 경우 `--s3_path` 명령줄 인수를 사용하여 이미지에 대한 Amazon S3 경로를 지정하세요.

스크립트는 각 이미지의 첫 번째 항목을 중복 제거된 이미지 CSV 파일에 기록합니다. 중복 제거된 이미지 CSV 파일에는 입력 CSV 파일에 있는 각 이미지의 단일 인스턴스가 포함됩니다. 입력 CSV 파일에서 이미지가 추가로 나타나는 경우 중복 이미지 CSV 파일에 기록됩니다. 스크립트가 중복된 이미지를 발견하면 중복 이미지 CSV 파일을 검토하고 필요에 따라 중복 제거된 이미지 CSV 파일을 업데이트하세요. 중복 제거된 파일을 사용하여 스크립트를 다시 실행합니다. 입력 CSV 파일에 중복이 없는 경우 스크립트는 중복 제거된 이미지 CSV 파일과 중복 이미지 CSV 파일이 비어 있으므로 해당 파일을 삭제합니다.

 이 절차에서 사용자는 CSV 파일을 만들고 Python 스크립트를 실행하여 매니페스트 파일을 만듭니다.

**CSV 파일에서 매니페스트 파일을 생성하려면**

1. 각 행에 다음 필드를 포함하는 CSV 파일을 생성합니다 (이미지당 한 행). CSV 파일에 헤더 행을 추가하지 마세요.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/ex-csv-manifest.html)

   예: `camellia1.jpg,camellia,with_leaves` 또는 `s3://my-bucket/flowers/train/camellia1.jpg,camellia,with_leaves` 

1. CSV 파일을 저장합니다.

1. 다음 Python 스크립트를 실행합니다. 다음 인수를 제공하세요.
   + `csv_file`: 1단계에서 생성한 CSV 파일 
   + `manifest_file`: 생성할 매니페스트 파일의 이름
   + (선택 사항)`--s3_path s3://path_to_folder/`: 이미지 파일 이름에 추가할 Amazon S3 경로(필드 1) 필드 1의 이미지에 아직 S3 경로가 포함되어 있지 않은 경우 `--s3_path`를 사용합니다.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier:  Apache-2.0
   
   from datetime import datetime, timezone
   import argparse
   import logging
   import csv
   import os
   import json
   
   """
   Purpose
   Amazon Rekognition Custom Labels model example used in the service documentation.
   Shows how to create an image-level (classification) manifest file from a CSV file.
   You can specify multiple image level labels per image.
   CSV file format is
   image,label,label,..
   If necessary, use the bucket argument to specify the S3 bucket folder for the images.
   https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-gt-cl-transform.html
   """
   
   logger = logging.getLogger(__name__)
   
   
   def check_duplicates(csv_file, deduplicated_file, duplicates_file):
       """
       Checks for duplicate images in a CSV file. If duplicate images
       are found, deduplicated_file is the deduplicated CSV file - only the first
       occurence of a duplicate is recorded. Other duplicates are recorded in duplicates_file.
       :param csv_file: The source CSV file.
       :param deduplicated_file: The deduplicated CSV file to create. If no duplicates are found
       this file is removed.
       :param duplicates_file: The duplicate images CSV file to create. If no duplicates are found
       this file is removed.
       :return: True if duplicates are found, otherwise false.
       """
   
       logger.info("Deduplicating %s", csv_file)
   
       duplicates_found = False
   
       # Find duplicates.
       with open(csv_file, 'r', newline='', encoding="UTF-8") as f,\
               open(deduplicated_file, 'w', encoding="UTF-8") as dedup,\
               open(duplicates_file, 'w', encoding="UTF-8") as duplicates:
   
           reader = csv.reader(f, delimiter=',')
           dedup_writer = csv.writer(dedup)
           duplicates_writer = csv.writer(duplicates)
   
           entries = set()
           for row in reader:
               # Skip empty lines.
               if not ''.join(row).strip():
                   continue
   
               key = row[0]
               if key not in entries:
                   dedup_writer.writerow(row)
                   entries.add(key)
               else:
                   duplicates_writer.writerow(row)
                   duplicates_found = True
   
       if duplicates_found:
           logger.info("Duplicates found check %s", duplicates_file)
   
       else:
           os.remove(duplicates_file)
           os.remove(deduplicated_file)
   
       return duplicates_found
   
   
   def create_manifest_file(csv_file, manifest_file, s3_path):
       """
       Reads a CSV file and creates a Custom Labels classification manifest file.
       :param csv_file: The source CSV file.
       :param manifest_file: The name of the manifest file to create.
       :param s3_path: The S3 path to the folder that contains the images.
       """
       logger.info("Processing CSV file %s", csv_file)
   
       image_count = 0
       label_count = 0
   
       with open(csv_file, newline='', encoding="UTF-8") as csvfile,\
               open(manifest_file, "w", encoding="UTF-8") as output_file:
   
           image_classifications = csv.reader(
               csvfile, delimiter=',', quotechar='|')
   
           # Process each row (image) in CSV file.
           for row in image_classifications:
               source_ref = str(s3_path)+row[0]
   
               image_count += 1
   
               # Create JSON for image source ref.
               json_line = {}
               json_line['source-ref'] = source_ref
   
               # Process each image level label.
               for index in range(1, len(row)):
                   image_level_label = row[index]
   
                   # Skip empty columns.
                   if image_level_label == '':
                       continue
                   label_count += 1
   
                  # Create the JSON line metadata.
                   json_line[image_level_label] = 1
                   metadata = {}
                   metadata['confidence'] = 1
                   metadata['job-name'] = 'labeling-job/' + image_level_label
                   metadata['class-name'] = image_level_label
                   metadata['human-annotated'] = "yes"
                   metadata['creation-date'] = \
                       datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')
                   metadata['type'] = "groundtruth/image-classification"
   
                   json_line[f'{image_level_label}-metadata'] = metadata
   
                   # Write the image JSON Line.
               output_file.write(json.dumps(json_line))
               output_file.write('\n')
   
       output_file.close()
       logger.info("Finished creating manifest file %s\nImages: %s\nLabels: %s",
                   manifest_file, image_count, label_count)
   
       return image_count, label_count
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "csv_file", help="The CSV file that you want to process."
       )
   
       parser.add_argument(
           "--s3_path", help="The S3 bucket and folder path for the images."
           " If not supplied, column 1 is assumed to include the S3 path.", required=False
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           s3_path = args.s3_path
           if s3_path is None:
               s3_path = ''
   
           # Create file names.
           csv_file = args.csv_file
           file_name = os.path.splitext(csv_file)[0]
           manifest_file = f'{file_name}.manifest'
           duplicates_file = f'{file_name}-duplicates.csv'
           deduplicated_file = f'{file_name}-deduplicated.csv'
   
           # Create manifest file, if there are no duplicate images.
           if check_duplicates(csv_file, deduplicated_file, duplicates_file):
               print(f"Duplicates found. Use {duplicates_file} to view duplicates "
                     f"and then update {deduplicated_file}. ")
               print(f"{deduplicated_file} contains the first occurence of a duplicate. "
                     "Update as necessary with the correct label information.")
               print(f"Re-run the script with {deduplicated_file}")
           else:
               print("No duplicates found. Creating manifest file.")
   
               image_count, label_count = create_manifest_file(csv_file,
                                                               manifest_file,
                                                               s3_path)
   
               print(f"Finished creating manifest file: {manifest_file} \n"
                     f"Images: {image_count}\nLabels: {label_count}")
   
       except FileNotFoundError as err:
           logger.exception("File not found: %s", err)
           print(f"File not found: {err}. Check your input CSV file.")
   
   
   if __name__ == "__main__":
       main()
   ```

1. 테스트 데이터 세트를 사용하려는 경우 1\$13단계를 반복하여 테스트 데이터 세트의 매니페스트 파일을 생성하세요.

1. 필요한 경우 CSV 파일의 열 1에서 지정한(또는 `--s3_path` 명령줄에서 지정한) Amazon S3 버킷 경로에 이미지를 복사합니다. 다음 AWS S3 명령을 사용할 수 있습니다.

   ```
   aws s3 cp --recursive your-local-folder s3://your-target-S3-location
   ```

1. 매니페스트 파일을 저장하는 데 사용할 Amazon S3 버킷에 [매니페스트 파일을 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)합니다.
**참고**  
Amazon Rekognition Custom Labels가 매니페스트 파일 JSON 라인의 `source-ref` 필드에서 참조되는 Amazon S3 버킷에 액세스할 수 있는지 확인하세요. 자세한 내용은 [외부 Amazon S3 버킷에 액세스](su-console-policy.md#su-external-buckets) 단원을 참조하십시오. Ground Truth 작업이 Amazon Rekognition Custom Labels 콘솔 버킷에 이미지를 저장하는 경우 권한을 추가할 필요가 없습니다.

1. [SageMaker AI Ground Truth 매니페스트 파일을 사용하여 데이터 세트 생성(콘솔)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console)의 지침에 따라 업로드된 매니페스트 파일로 데이터 세트를 생성하세요. 8단계로 **.manifest 파일 위치**에 매니페스트 파일의 위치로 사용할 Amazon S3 URL을 입력합니다. AWS SDK를 사용하고 있다면 [SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk) 항목을 수행하세요.

# 기존 데이터세트에서 콘텐츠 복사
<a name="md-create-dataset-existing-dataset"></a>

이전에 데이터 세트를 만든 경우 해당 콘텐츠를 새 데이터 세트에 복사할 수 있습니다. AWS SDK를 사용하여 기존 데이터 세트에서 데이터 세트를 생성하려면 섹션을 참조하세요[기존 데이터 세트를 사용하여 데이터 세트 생성(SDK)](md-create-dataset-existing-dataset-sdk.md).

**기존 Amazon Rekognition Custom Labels 데이터 세트를 사용하여 데이터 세트를 생성하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 데이터 세트에 추가하려는 프로젝트를 선택합니다. 프로젝트 세부 정보 페이지가 열립니다.

1. **데이터 세트 생성**을 선택합니다. **데이터 세트 생성** 페이지가 표시됩니다.

1. **시작 구성**에서 **단일 데이터 세트로 시작** 또는 **훈련 데이터 세트로 시작**을 선택합니다. 더 높은 품질의 모델을 만들려면 별도의 훈련 및 테스트 데이터 세트로 시작하는 것이 좋습니다.

------
#### [ Single dataset ]

   1. **훈련 데이터 세트 세부 정보** 섹션에서 **기존 Amazon Rekognition Custom Labels 데이터 세트 복사**를 선택합니다.

   1. **훈련 데이터 세트 세부 정보** 섹션의 **데이터 세트** 편집 상자에서 복사하려는 데이터 세트의 이름을 입력하거나 선택합니다.

   1. **데이터 세트 생성**을 선택합니다. 프로젝트의 데이터 세트 페이지가 열립니다.

------
#### [ Separate training and test datasets ]

   1. **훈련 데이터 세트 세부 정보** 항목에서 **기존 Amazon Rekognition Custom Labels 데이터 세트 복사**를 선택합니다.

   1. **훈련 데이터 세트 세부 정보** 항목의 **데이터 세트** 편집 상자에서 복사하려는 데이터 세트의 이름을 입력하거나 선택합니다.

   1. **테스트 데이터 세트 세부 정보** 항목에서 **기존 Amazon Rekognition Custom Labels 데이터 세트 복사**를 선택합니다.

   1. **테스트 데이터 세트 세부 정보** 항목의 **데이터 세트** 편집 상자에서 복사하려는 데이터 세트의 이름을 입력하거나 선택합니다.
**참고**  
훈련 데이터 세트와 테스트 데이터 세트에는 서로 다른 이미지 소스가 있을 수 있습니다.

   1. **데이터 세트 생성**을 선택합니다. 프로젝트의 데이터 세트 페이지가 열립니다.

------

1. 레이블을 추가하거나 변경해야 하면 [이미지 레이블 지정](md-labeling-images.md) 항목을 수행합니다.

1. [모델 훈련(콘솔)](training-model.md#tm-console)에 나온 단계에 따라 모델을 훈련하세요.

# 이미지 레이블 지정
<a name="md-labeling-images"></a>

레이블은 이미지에서 객체, 장면, 개념 또는 객체 주위의 경계 상자를 식별합니다. 예를 들어 데이터 세트에 개 이미지가 포함된 경우 개 품종에 대한 레이블을 추가할 수 있습니다.

이미지를 데이터 세트로 가져온 후 이미지에 레이블을 추가하거나 레이블이 잘못된 이미지를 수정해야 할 수 있습니다. 예를 들어 로컬 컴퓨터에서 가져온 이미지는 레이블이 지정되지 않습니다. 데이터 세트 갤러리를 사용하여 데이터 세트에 새 레이블을 추가하고 데이터 세트의 이미지에 레이블과 경계 상자를 지정합니다.

데이터 세트의 이미지에 레이블을 지정하는 방식에 따라 Amazon Rekognition Custom Labels가 훈련하는 모델 유형이 결정됩니다. 자세한 내용은 [데이터 세트 목적 설정](md-dataset-purpose.md) 단원을 참조하십시오.

**Topics**
+ [레이블 관리](md-labels.md)
+ [이미지에 이미지 수준 레이블 지정](md-assign-image-level-labels.md)
+ [경계 상자로 객체에 레이블 지정](md-localize-objects.md)

# 레이블 관리
<a name="md-labels"></a>

Amazon Rekognition Custom Labels 콘솔을 사용하여 레이블을 관리할 수 있습니다. 레이블 관리를 위한 특정 API는 없습니다. 레이블은 `CreateDataset`로 데이터 세트를 생성하거나 `UpdateDatasetEntries`로 데이터 세트에 이미지를 더 추가할 때 데이터 세트에 추가됩니다.

**Topics**
+ [레이블 관리(콘솔)](#md-labels-console)
+ [레이블 관리(SDK)](#md-labels-sdk)

## 레이블 관리(콘솔)
<a name="md-labels-console"></a>

Amazon Rekognition Custom Labels 콘솔을 사용하여 데이터 세트에 레이블을 추가, 변경 또는 제거할 수 있습니다. 데이터 세트에 레이블을 추가하려면 새로 만든 레이블을 추가하거나 Rekognition의 기존 데이터 세트에서 레이블을 가져올 수 있습니다.

**Topics**
+ [새 레이블 추가(콘솔)](#md-add-new-labels)
+ [레이블 변경 및 제거(콘솔)](#md-edit-labels-after-adding)

### 새 레이블 추가(콘솔)
<a name="md-add-new-labels"></a>

데이터 세트에 추가하려는 새 레이블을 지정할 수 있습니다.

#### 편집 창을 사용하여 레이블을 추가합니다.
<a name="add-with-modal"></a>

**새 레이블을 추가하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 사용할 프로젝트를 선택합니다. 프로젝트의 세부 정보 페이지가 표시됩니다.

1. 훈련 데이터 세트에 레이블을 추가하려면 **훈련** 탭을 선택합니다. 그렇지 않으면 **테스트** 탭을 선택하여 테스트 데이터 세트에 레이블을 추가하세요.

1. **레이블 지정 시작**을 선택하여 레이블 지정 모드로 전환합니다.

1. 데이터 세트 갤러리의 **레이블** 항목에서 **레이블 관리**를 선택하여 **레이블 관리** 대화 상자를 엽니다.

1. 편집 상자에 새 레이블 이름을 입력합니다.

1. **레이블 추가**를 선택합니다.

1. 필요한 레이블을 모두 만들 때까지 9단계와 10단계를 반복합니다.

1. **저장**을 선택하여 추가한 레이블을 저장합니다.

### 레이블 변경 및 제거(콘솔)
<a name="md-edit-labels-after-adding"></a>

데이터 세트에 레이블을 추가한 후 이름을 바꾸거나 레이블을 제거할 수 있습니다. 이미지에 지정되지 않은 레이블만 제거할 수 있습니다.

**기존 레이블의 이름을 바꾸거나 제거하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 사용할 프로젝트를 선택합니다. 프로젝트의 세부 정보 페이지가 표시됩니다.

1. 훈련 데이터 세트에 레이블을 변경하거나 삭제하려면 **훈련** 탭을 선택합니다. 그렇지 않으면 **테스트** 탭을 선택하여 테스트 데이터 세트의 레이블을 변경하거나 삭제할 수 있습니다.

1. **레이블 지정 시작**을 선택하여 레이블 지정 모드로 전환합니다.

1. 데이터 세트 갤러리의 **레이블** 항목에서 **레이블 관리**를 선택하여 **레이블 관리** 대화 상자를 엽니다.

1. 편집 또는 삭제할 레이블을 선택합니다.  
![\[변경 사항을 저장하거나 취소할 수 있는 옵션과 함께 새 레이블을 추가하는 텍스트 필드와 “test”라는 기존 레이블을 보여주는 레이블 관리 대화 상자입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/change-delete-label.jpg)

   1. 삭제 아이콘(X)을 선택하면 목록에서 레이블이 제거됩니다.

   1. 레이블을 변경하려면 편집 아이콘(연필과 종이 패드)을 선택하고 편집 상자에 새 레이블 이름을 입력합니다.

1. **저장**을 선택하여 변경 사항을 저장합니다.

## 레이블 관리(SDK)
<a name="md-labels-sdk"></a>

데이터 세트 레이블을 관리하는 고유한 API는 없습니다. `CreateDataset`로 데이터 세트를 생성하면 매니페스트 파일 또는 복사된 데이터 세트에 있는 레이블이 초기 레이블 세트를 생성합니다. `UpdateDatasetEntries` API를 사용하여 이미지를 더 추가하면 항목에 있는 새 레이블이 데이터 세트에 추가됩니다. 자세한 내용은 [더 많은 이미지 추가(SDK)](md-add-images.md#md-add-images-sdk) 단원을 참조하십시오. 데이터 세트에서 레이블을 삭제하려면 데이터 세트에서 모든 레이블 주석을 제거해야 합니다.

**데이터 세트에서 레이블을 삭제하려면**

1. `ListDatasetEntries`를 직접 호출하여 데이터 세트 항목을 가져옵니다. 예제 코드는 [데이터 세트 항목 나열(SDK)](md-listing-dataset-entries-sdk.md) 항목을 참조하세요.

1. 파일에서 모든 레이블 주석을 제거합니다. 자세한 정보는 [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md) 및 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.

1. 파일을 사용하여 `UpdateDatasetEntries` API로 데이터 세트를 업데이트하세요. 자세한 내용은 [더 많은 이미지 추가(SDK)](md-add-images.md#md-add-images-sdk) 단원을 참조하십시오.

# 이미지에 이미지 수준 레이블 지정
<a name="md-assign-image-level-labels"></a>

이미지 수준 레이블을 사용하여 이미지를 카테고리로 분류하는 모델을 훈련할 수 있습니다. 이미지 수준 레이블은 이미지에 객체, 장면 또는 개념이 포함되어 있음을 나타냅니다. 예를 들어 다음 이미지에는 강이 있습니다. 모델이 이미지를 강을 포함하는 것으로 분류하는 경우 강** 이미지 수준 레이블을 추가합니다. 자세한 내용은 [데이터 세트 목적 설정](md-dataset-purpose.md) 단원을 참조하십시오.

![\[일몰 또는 일출 시 구름과 산이 반사되어 비치는 잔잔한 호수입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/pateros.jpg)


이미지 수준 레이블이 포함된 데이터 세트에는 레이블이 두 개 이상 정의되어 있어야 합니다. 각 이미지에는 이미지의 객체, 장면 또는 개념을 식별하는 레이블이 하나 이상 지정되어야 합니다.

**이미지에 이미지 수준 레이블을 지정하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 사용할 프로젝트를 선택합니다. 프로젝트의 세부 정보 페이지가 표시됩니다.

1. 왼쪽 탐색 창에서 **데이터 세트**를 선택합니다.

1. 훈련 데이터 세트에 레이블을 추가하려면 **훈련** 탭을 선택합니다. 그렇지 않으면 **테스트** 탭을 선택하여 테스트 데이터 세트에 레이블을 추가하세요.

1. **레이블 지정 시작**을 선택하여 레이블 지정 모드로 전환합니다.

1. 이미지 갤러리에서 레이블을 추가할 이미지를 하나 이상 선택합니다. 한 번에 하나의 페이지에 있는 이미지만 선택할 수 있습니다. 한 페이지에서 연속된 이미지 범위를 선택하려면:

   1. 범위에 있는 첫 번째 이미지를 선택합니다.

   1. Shift 키를 길게 누릅니다.

   1. 마지막 이미지 범위를 선택합니다. 첫 번째 이미지와 두 번째 이미지 사이의 이미지도 선택됩니다.

   1. Shift 키를 놓습니다.

1. **이미지 수준 레이블 지정**을 선택합니다.

1. **선택한 이미지에 이미지 수준 레이블 지정** 대화 상자에서 이미지에 할당하려는 레이블을 선택합니다.

1. **지정**을 선택하여 이미지에 레이블을 지정합니다.

1. 모든 이미지에 필요한 레이블이 주석으로 달릴 때까지 레이블 지정을 반복합니다.

1. 변경 사항을 저장하려면 **변경 사항 저장**을 선택합니다.

## 이미지 수준 레이블 지정(SDK)
<a name="md-assign-image-level-labels-sdk"></a>

`UpdateDatasetEntries` API를 사용하여 이미지에 할당된 이미지 수준 레이블을 추가하거나 업데이트할 수 있습니다. `UpdateDatasetEntries`는 하나 이상의 JSON 라인을 사용합니다. 각 JSON 라인은 하나의 이미지를 나타냅니다. 이미지 수준 레이블이 있는 이미지의 경우 JSON 라인은 다음과 비슷합니다.

```
{"source-ref":"s3://custom-labels-console-us-east-1-nnnnnnnnnn/gt-job/manifest/IMG_1133.png","TestCLConsoleBucket":0,"TestCLConsoleBucket-metadata":{"confidence":0.95,"job-name":"labeling-job/testclconsolebucket","class-name":"Echo Dot","human-annotated":"yes","creation-date":"2020-04-15T20:17:23.433061","type":"groundtruth/image-classification"}}
```

`source-ref` 필드는 이미지 위치를 나타냅니다. JSON 라인에는 이미지에 지정된 이미지 수준 레이블도 포함됩니다. 자세한 내용은 [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md) 단원을 참조하십시오.

**이미지에 이미지 수준 레이블을 지정하려면**

1. `ListDatasetEntries`를 사용하여 기존 이미지의 get JSON 라인을 가져옵니다. `source-ref` 필드에 레이블을 지정하려는 이미지의 위치를 지정합니다. 자세한 내용은 [데이터 세트 항목 나열(SDK)](md-listing-dataset-entries-sdk.md) 단원을 참조하십시오.

1. [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md)의 정보를 사용하여 이전 단계에서 반환된 JSON 라인을 업데이트하세요.

1. 이미지를 업데이트하려면 `UpdateDatasetEntries`를 직접 호출하세요. 자세한 내용은 [데이터 세트에 더 많은 이미지 추가](md-add-images.md) 단원을 참조하십시오.

# 경계 상자로 객체에 레이블 지정
<a name="md-localize-objects"></a>

모델이 이미지 내 객체의 위치를 감지하도록 하려면 객체가 무엇이고 이미지 내 어디에 있는지 식별해야 합니다. 경계 상자는 이미지에서 객체를 분리하는 상자입니다. 경계 상자를 사용하여 동일한 이미지에서 서로 다른 객체를 감지하도록 모델을 훈련할 수 있습니다. 경계 상자에 레이블을 지정하여 객체를 식별합니다.

**참고**  
이미지 수준 레이블로 객체, 장면, 개념을 찾도록 모델을 훈련하는 경우에는 이 단계를 수행할 필요가 없습니다.

예를 들어 Amazon Echo Dot 디바이스를 탐지하는 모델을 훈련하려면 이미지의 각 Echo Dot** 주위에 경계 상자를 그리고 Echo Dot이라는 레이블을 경계 상자에 지정합니다. 다음 이미지는 Echo Dot 디바이스 주위의 경계 상자를 보여줍니다. 이미지에는 경계 상자가 없는 Amazon Echo도 포함되어 있습니다.

![\[Amazon Echo Dot 및 Echo 디바이스로, Echo Dot 주위에 경계 상자가 있습니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/dot.jpg)


## 경계 상자가 있는 객체 찾기(콘솔)
<a name="md-localize-objects-console"></a>

 이 절차에서는 콘솔을 사용하여 이미지의 객체 주위에 경계 상자를 그립니다. 경계 상자에 레이블을 지정하여 이미지 내의 객체를 식별할 수도 있습니다.

**참고**  
Safari 브라우저를 사용하여 이미지에 경계 상자를 추가할 수는 없습니다. 지원되는 브라우저에 대한 내용은 [Amazon Rekognition Custom Labels 설정](setting-up.md) 항목을 참조하세요.

경계 상자를 추가하려면 먼저 데이터 세트에 하나 이상의 레이블을 추가해야 합니다. 자세한 내용은 [새 레이블 추가(콘솔)](md-labels.md#md-add-new-labels) 단원을 참조하십시오.

****

**이미지에 경계 박스를 추가하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 사용할 프로젝트를 선택합니다. 프로젝트의 세부 정보 페이지가 표시됩니다.

1. 프로젝트 세부 정보 페이지에서 **레이블 이미지**를 선택합니다.

1. 훈련 데이터 세트 이미지에 경계 상자를 추가하려면 **훈련** 탭을 선택하세요. 그렇지 않으면 **테스트** 탭을 선택하여 테스트 데이터 세트 이미지에 경계 상자를 추가할 수 있습니다.

1. **레이블 지정 시작**을 선택하여 레이블 지정 모드로 전환합니다.

1. 이미지 갤러리에서 경계 상자를 추가할 이미지를 선택합니다.

1. **경계 상자 그리기**를 선택합니다. 경계 상자 편집기가 표시되기 전에 일련의 팁이 표시됩니다.

1. 오른쪽의 **레이블** 창에서 경계 상자에 지정할 레이블을 선택합니다.

1. 그리기 도구에서 원하는 객체의 왼쪽 상단 영역에 포인터를 놓습니다.

1. 마우스 왼쪽 버튼을 누르고 객체 주위에 상자를 그립니다. 경계 상자를 객체에 최대한 가깝게 그리세요.

1. 마우스 버튼을 놓습니다. 경계 상자가 강조 표시됩니다.

1. 레이블을 지정할 이미지가 더 많으면 **다음**을 선택합니다. 그렇지 않으면 **완료**를 선택하여 레이블 지정을 마칩니다.  
![\[이미지 주위에 경계 상자를 그리는 UI로, 이미지는 목재 표면에 있는 Amazon Echo 및 Echo Dot 스마트 스피커입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/draw-bounding-box.png)

1. 객체가 포함된 각 이미지에 경계 상자를 만들 때까지 1\$17단계를 반복합니다.

1. 변경 사항을 저장하려면 **변경 사항 저장**을 선택합니다.

1. **종료**를 선택하여 레이블 지정 모드를 종료합니다.

## 경계 상자로 객체 찾기(SDK)
<a name="md-localize-objects-sdk"></a>

`UpdateDatasetEntries` API를 사용하여 이미지에 대한 객체 위치 정보를 추가하거나 업데이트할 수 있습니다. `UpdateDatasetEntries`는 하나 이상의 JSON 라인을 사용합니다. 각 JSON 라인은 하나의 이미지를 나타냅니다. 객체 위치 파악의 경우 JSON 라인은 다음과 유사합니다.

```
{"source-ref": "s3://bucket/images/IMG_1186.png", "bounding-box": {"image_size": [{"width": 640, "height": 480, "depth": 3}], "annotations": [{ "class_id": 1,	"top": 251,	"left": 399, "width": 155, "height": 101}, {"class_id": 0, "top": 65, "left": 86, "width": 220,	"height": 334}]}, "bounding-box-metadata": {"objects": [{ "confidence": 1}, {"confidence": 1}],	"class-map": {"0": "Echo",	"1": "Echo Dot"}, "type": "groundtruth/object-detection", "human-annotated": "yes",	"creation-date": "2013-11-18T02:53:27", "job-name": "my job"}}
```

`source-ref` 필드는 이미지 위치를 나타냅니다. JSON 라인에는 이미지의 각 객체에 대한 레이블이 지정된 경계 상자도 포함됩니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

**이미지에 경계 상자를 지정하려면**

1. `ListDatasetEntries`를 사용하여 기존 이미지의 get JSON 라인을 가져옵니다. `source-ref` 필드에 이미지 수준 레이블을 지정할 이미지의 위치를 지정합니다. 자세한 내용은 [데이터 세트 항목 나열(SDK)](md-listing-dataset-entries-sdk.md) 단원을 참조하십시오.

1. [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md)의 정보를 사용하여 이전 단계에서 반환된 JSON 라인을 업데이트하세요.

1. 이미지를 업데이트하려면 `UpdateDatasetEntries`를 직접 호출하세요. 자세한 내용은 [데이터 세트에 더 많은 이미지 추가](md-add-images.md) 단원을 참조하십시오.

# 데이터 세트 디버깅
<a name="debugging-datasets"></a>

데이터 세트 생성 중에는 터미널 오류**와 비터미널 오류**라는 두 가지 유형의 오류가 발생할 수 있습니다. 터미널 오류로 인해 데이터 세트 생성 또는 업데이트가 중단될 수 있습니다. 비터미널 오류는 발생해도 데이터 세트 생성 또는 업데이트가 중단되지 않습니다.

**Topics**
+ [터미널 데이터세트 오류 디버깅](debugging-datasets-terminal-errors.md)
+ [비터미널 데이터세트 오류 디버깅](debugging-datasets-non-terminal-errors.md)

# 터미널 데이터세트 오류 디버깅
<a name="debugging-datasets-terminal-errors"></a>

 터미널 오류에는 두 가지 유형이 있습니다. 하나는 데이터 세트 생성에 실패하게 하는 파일 오류이고, 다른 하나는 Amazon Rekognition Custom Labels가 데이터 세트에서 제거하는 콘텐츠 오류입니다. 콘텐츠 오류가 너무 많으면 데이터 세트 생성이 실패합니다.

**Topics**
+ [터미널 파일 오류](#debugging-datasets-terminal-file-errors)
+ [터미널 콘텐츠 오류](#debugging-datasets-terminal-content-errors)

## 터미널 파일 오류
<a name="debugging-datasets-terminal-file-errors"></a>

다음은 파일 오류입니다. `DescribeDataset`를 직접 호출하고 `Status` 및 `StatusMessage` 필드를 확인하여 파일 오류에 대한 정보를 얻을 수 있습니다. 예제 코드는 [데이터 세트 설명(SDK)](md-describing-dataset-sdk.md) 항목을 참조하세요.
+ [ERROR\$1MANIFEST\$1INACCESSIBLE\$1OR\$1UNSUPPORTED\$1FORMAT](#md-error-status-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT)
+ [ERROR\$1MANIFEST\$1SIZE\$1TOO\$1LARGE](#md-error-status-ERROR_MANIFEST_SIZE_TOO_LARGE).
+ [ERROR\$1MANIFEST\$1ROWS\$1EXCEEDS\$1MAXIMUM](#md-error-status-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM)
+ [ERROR\$1INVALID\$1PERMISSIONS\$1MANIFEST\$1S3\$1BUCKET](#md-error-status-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET)
+ [ERROR\$1TOO\$1MANY\$1RECORDS\$1IN\$1ERROR](#md-error-status-ERROR_TOO_MANY_RECORDS_IN_ERROR)
+ [ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS](#md-error-status-ERROR_MANIFEST_TOO_MANY_LABELS)
+ [ERROR\$1INSUFFICIENT\$1IMAGES\$1PER\$1LABEL\$1FOR\$1DISTRIBUTE](#md-error-status-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_DISTRIBUTE)

### ERROR\$1MANIFEST\$1INACCESSIBLE\$1OR\$1UNSUPPORTED\$1FORMAT
<a name="md-error-status-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT"></a>

#### 오류 메시지
<a name="md-error-message-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT"></a>

매니페스트 파일 확장명 또는 콘텐츠가 유효하지 않습니다.

훈련 또는 테스트 매니페스트 파일에 파일 확장자가 없거나 해당 내용이 유효하지 않습니다.

**ERROR\$1MANIFEST\$1INACCESSIBLE\$1OR\$1UNSUPPORTED\$1FORMAT** 오류를 수정하려면**
+ 훈련 매니페스트 파일과 테스트 매니페스트 파일 모두에서 다음과 같은 가능한 원인을 확인하세요.
  + 매니페스트 파일에 파일 확장명이 없습니다. 일반적으로 파일 확장자는 `.manifest`입니다.
  +  매니페스트 파일의 Amazon S3 버킷 또는 키를 찾을 수 없습니다.

### ERROR\$1MANIFEST\$1SIZE\$1TOO\$1LARGE
<a name="md-error-status-ERROR_MANIFEST_SIZE_TOO_LARGE"></a>

#### 오류 메시지
<a name="md-error-message-ERROR_MANIFEST_SIZE_TOO_LARGE"></a>

매니페스트 파일 크기가 지원되는 최대 크기를 초과합니다.

훈련 또는 테스트 매니페스트 파일 크기(바이트)가 너무 큽니다. 자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 단원을 참조하십시오. 매니페스트 파일은 최대 JSON 라인 수보다 적으면서도 최대 파일 크기를 초과할 수 있습니다.

Amazon Rekognition Custom Labels 콘솔로는 매니페스트 파일 크기가 지원되는 최대 크기를 초과합니다** 오류를 수정할 수 없습니다.

**ERROR\$1MANIFEST\$1SIZE\$1TOO\$1LARGE** 오류를 수정하려면**

1. 훈련 및 테스트 매니페스트 중에 어떤 것이 최대 파일 크기를 초과하는지 확인하세요.

1. 매니페스트 파일에서 너무 큰 JSON 라인 수를 줄이세요. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.

### ERROR\$1MANIFEST\$1ROWS\$1EXCEEDS\$1MAXIMUM
<a name="md-error-status-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM"></a>

#### 오류 메시지
<a name="md-error-message-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM"></a>

매니페스트 파일에 행이 너무 많습니다.

#### 추가 정보
<a name="md-error-description-ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM"></a>

매니페스트 파일의 JSON 라인 수(이미지 수)가 허용 한도보다 큽니다. 이미지 수준 모델과 객체 위치 모델의 한도는 다릅니다. 자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 단원을 참조하십시오.

JSON 라인 수가 `ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM` 한도에 도달할 때까지 JSON 라인 오류가 검증됩니다.

Amazon Rekognition Custom Labels로는 `ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM` 오류를 수정할 수 없습니다.

**`ERROR_MANIFEST_ROWS_EXCEEDS_MAXIMUM` 오류를 수정하려면**
+ 매니페스트에 있는 JSON 라인 수를 줄입니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.



### ERROR\$1INVALID\$1PERMISSIONS\$1MANIFEST\$1S3\$1BUCKET
<a name="md-error-status-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET"></a>

#### 오류 메시지
<a name="md-error-message-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET"></a>

S3 버킷 권한이 올바르지 않습니다.

Amazon Rekognition Custom Labels가 훈련 및 테스트 매니페스트 파일이 들어 있는 하나 이상의 버킷에 대한 권한이 없습니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

**ERROR\$1INVALID\$1PERMISSIONS\$1MANIFEST\$1S3\$1BUCKET** 오류를 수정하려면**
+ 훈련 및 테스트 매니페스트가 포함된 버킷의 권한을 확인하세요. 자세한 내용은 [2단계: Amazon Rekognition Custom Labels 콘솔 권한 설정](su-console-policy.md) 단원을 참조하십시오.

### ERROR\$1TOO\$1MANY\$1RECORDS\$1IN\$1ERROR
<a name="md-error-status-ERROR_TOO_MANY_RECORDS_IN_ERROR"></a>

#### 오류 메시지
<a name="md-error-message-ERROR_TOO_MANY_RECORDS_IN_ERROR"></a>

 매니페스트 파일에 터미널 오류가 너무 많습니다.

**`ERROR_TOO_MANY_RECORDS_IN_ERROR` 오류를 수정하려면**
+ 터미널 콘텐츠 오류가 있는 JSON 라인(이미지) 수를 줄이세요. 자세한 내용은 [터미널 매니페스트 콘텐츠 오류](tm-debugging-aggregate-errors.md) 단원을 참조하십시오.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

### ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS
<a name="md-error-status-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

#### 오류 메시지
<a name="md-error-message-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

매니페스트 파일에 레이블이 너무 많습니다.

##### 추가 정보
<a name="md-error-description-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

매니페스트(데이터 세트)의 고유 레이블 수가 허용된 한도를 초과했습니다. 훈련 데이터 세트를 분할하여 테스트 데이터 세트를 만드는 경우 분할 후 레이블 수가 결정됩니다.

**ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS 오류를 수정하려면(콘솔)**
+ 데이터 세트에서 레이블을 제거합니다. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오. 데이터 세트의 이미지와 경계 상자에서 레이블이 자동으로 제거됩니다.



**ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS 오류를 수정하려면(JSON 라인)**
+ 이미지 수준 JSON 라인이 있는 매니페스트: 이미지에 하나의 레이블이 있는 경우 원하는 레이블을 사용하는 이미지의 JSON 라인을 제거하세요. JSON 라인에 여러 레이블이 포함된 경우 원하는 레이블의 JSON 객체만 제거하세요. 자세한 내용은 [이미지에 여러 이미지 수준 레이블 추가](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels) 단원을 참조하십시오.

  객체 위치가 있는 매니페스트 JSON 라인: 제거하려는 레이블의 경계 상자 및 관련 레이블 정보를 제거합니다. 원하는 레이블이 포함된 각 JSON 라인에 대해 이 작업을 수행하세요. `class-map` 배열과 `objects` 및 `annotations` 배열의 해당 객체를 레이블에서 제거해야 합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

### ERROR\$1INSUFFICIENT\$1IMAGES\$1PER\$1LABEL\$1FOR\$1DISTRIBUTE
<a name="md-error-status-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_DISTRIBUTE"></a>

#### 오류 메시지
<a name="md-error-message-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

매니페스트 파일에 레이블 지정된 이미지가 부족하여 데이터 세트를 배포할 수 없습니다.



Amazon Rekognition Custom Labels가 훈련 데이터 세트를 분할하여 테스트 데이터 세트를 생성할 때 데이터 세트 배포가 발생합니다. `DistributeDatasetEntries` API를 직접 호출하여 데이터 세트를 분할할 수도 있습니다.

**ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS** 오류를 수정하려면**
+ 훈련 데이터 세트에 레이블이 지정된 이미지를 더 추가하세요.

## 터미널 콘텐츠 오류
<a name="debugging-datasets-terminal-content-errors"></a>

다음은 터미널 콘텐츠 오류입니다. 데이터 세트를 생성하는 동안 터미널 콘텐츠 오류가 있는 이미지는 데이터 세트에서 제거됩니다. 해당 데이터 세트는 여전히 훈련에 사용할 수 있습니다. 콘텐츠 오류가 너무 많으면 데이터 세트 또는 업데이트가 실패합니다. 데이터 세트 작업과 관련된 터미널 콘텐츠 오류는 콘솔에 표시되지 않으며 `DescribeDataset` 또는 다른 API에서 반환되지 않습니다. 데이터 세트에서 이미지나 주석이 누락된 것을 발견하면 데이터 세트 매니페스트 파일에 다음과 같은 문제가 있는지 확인하세요.
+ JSON 라인 길이가 너무 깁니다. 최대 길이는 100,000자입니다.
+ JSON 라인에서 `source-ref` 값이 누락되었습니다.
+ JSON 라인의 `source-ref` 값 형식이 잘못되었습니다.
+ JSON 라인의 내용이 유효하지 않습니다.
+ `source-ref` 필드의 값이 두 번 이상 나타납니다. 데이터 세트에서 이미지는 한 번만 참조될 수 있습니다.

`source-ref` 필드에 대한 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 항목을 참조하세요.

# 비터미널 데이터세트 오류 디버깅
<a name="debugging-datasets-non-terminal-errors"></a>

다음은 데이터 세트 생성 또는 업데이트 중에 발생할 수 있는 비터미널 오류입니다. 이러한 오류는 전체 JSON 라인을 무효화하거나 JSON 라인 내의 주석을 무효화할 수 있습니다. JSON 라인에 오류가 있는 경우 훈련에 사용되지 않습니다. JSON 라인 내의 주석에 오류가 있는 경우에도 JSON 라인은 여전히 학습에 사용되지만 주석이 깨지지는 않습니다. JSON 라인에 관한 자세한 정보는 [매니페스트 파일 생성](md-create-manifest-file.md) 항목을 참조하세요.

콘솔에서 `ListDatasetEntries` API를 직접 호출하여 비터미널 오류에 액세스할 수 있습니다. 자세한 내용은 [데이터 세트 항목 나열(SDK)](md-listing-dataset-entries-sdk.md) 단원을 참조하십시오.

훈련 중에 다음과 같은 오류도 반환됩니다. 모델을 훈련하기 전에 이러한 오류를 수정하는 것이 좋습니다. 자세한 내용은 [비터미널 JSON 라인 검증 오류](tm-debugging-json-line-errors.md) 섹션을 참조하세요.
+ [ERROR\$1NO\$1LABEL\$1ATTRIBUTES](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_LABEL_ATTRIBUTES)
+ [ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1FORMAT](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT)
+ [ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1METADATA\$1FORMAT](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_METADATA_FORMAT)
+ [ERROR\$1NO\$1VALID\$1LABEL\$1ATTRIBUTES](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_VALID_LABEL_ATTRIBUTES)
+ [ERROR\$1INVALID\$1BOUNDING\$1BOX](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_BOUNDING_BOX)
+ [ERROR\$1INVALID\$1IMAGE\$1DIMENSION](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_IMAGE_DIMENSION)
+ [ERROR\$1BOUNDING\$1BOX\$1TOO\$1SMALL](tm-debugging-json-line-errors.md#tm-error-ERROR_BOUNDING_BOX_TOO_SMALL)
+ [ERROR\$1NO\$1VALID\$1ANNOTATIONS](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_VALID_ANNOTATIONS)
+ [ERROR\$1MISSING\$1BOUNDING\$1BOX\$1CONFIDENCE](tm-debugging-json-line-errors.md#tm-error-ERROR_MISSING_BOUNDING_BOX_CONFIDENCE)
+ [ERROR\$1MISSING\$1CLASS\$1MAP\$1ID](tm-debugging-json-line-errors.md#tm-error-ERROR_MISSING_CLASS_MAP_ID)
+ [ERROR\$1TOO\$1MANY\$1BOUNDING\$1BOXES](tm-debugging-json-line-errors.md#tm-error-ERROR_TOO_MANY_BOUNDING_BOXES)
+ [ERROR\$1UNSUPTED\$1USE\$1CASE\$1TYPE](tm-debugging-json-line-errors.md#tm-error-ERROR_UNSUPPORTED_USE_CASE_TYPE)
+ [ERROR\$1INVALID\$1LABEL\$1NAME\$1LENGTH](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_NAME_LENGTH)

## 비터미널 오류에 액세스
<a name="debugging-dataset-access-non-terminal-errors"></a>

콘솔을 사용하여 데이터 세트에서 비터미널 오류가 있는 이미지를 찾을 수 있습니다. `ListDatasetEntries` API를 직접 호출하여 오류 메시지를 받을 수도 있습니다. 자세한 내용은 [데이터 세트 항목 나열(SDK)](md-listing-dataset-entries-sdk.md) 단원을 참조하십시오.

**비터미널 오류에 액세스하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 사용할 프로젝트를 선택합니다. 프로젝트의 세부 정보 페이지가 표시됩니다.

1. 훈련 데이터 세트의 비터미널 오류를 보려면 **훈련** 탭을 선택하세요. 그렇지 않으면 **테스트** 탭을 선택하여 테스트 데이터 세트의 비터미널 오류를 확인할 수 있습니다.

1. 데이터 세트 갤러리의 **레이블** 항목에서 **오류**를 선택합니다. 데이터 세트 갤러리는 오류가 있는 이미지만 표시하도록 필터링됩니다.

1. 이미지 아래에 있는 **오류**를 선택하면 오류 코드를 확인할 수 있습니다. [비터미널 JSON 라인 검증 오류](tm-debugging-json-line-errors.md)의 정보를 사용하여 오류를 수정하세요.  
![\[‘데이터세트 레코드 오류’ 아래에 'ERROR_UNSUPPORTED_USE_CASE_TYPE' 및 'ERROR_NO_VALID_LABEL_ATTRIBUTES'가 표시된 오류 대화 상자입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/dataset-non-terminal-error.jpg)

# Amazon Rekognition Custom Labels 모델 훈련
<a name="training-model"></a>

Amazon Rekognition Custom Labels 콘솔 또는 Amazon Rekognition Custom Labels API를 사용하여 모델을 훈련할 수 있습니다. 모델 훈련이 실패할 경우 [실패한 모델 훈련 디버깅](tm-debugging.md)의 정보를 사용하여 실패 원인을 찾아내세요.

**참고**  
모델을 성공적으로 훈련하는 데 걸리는 시간만큼 요금이 부과됩니다. 일반적으로 교육을 완료하는 데 30분에서 24시간이 소요됩니다. 자세한 정보는 [훈련 시간](https://aws.amazon.com/rekognition/pricing/#Amazon_Rekognition_Custom_Labels_pricing) 섹션을 참조하세요.

모델을 훈련할 때마다 새 버전의 모델이 생성됩니다. Amazon Rekognition Custom Labels는 프로젝트 이름과 모델 생성 당시의 타임스탬프를 조합하여 모델 이름을 생성합니다.

모델을 훈련하기 위해 Amazon Rekognition Custom Labels는 소스 훈련 및 테스트 이미지의 사본을 만듭니다. 기본적으로 복사된 이미지는 AWS가 소유하고 관리하는 키로 암호화됩니다. 사용자의 AWS KMS key를 사용하는 방법도 있습니다. 자체 KMS 키를 사용하는 경우 KMS 키에 다음 권한이 필요합니다.
+ kms:CreateGrant
+ kms:DescribeKey

자세한 내용은 [AWS Key Management Service 개념](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)을 참조하세요. 소스 이미지는 영향을 받지 않습니다.

KMS 서버 측 암호화(SSE-KMS)를 사용하여 Amazon S3 버킷의 훈련 및 테스트 이미지를 암호화한 후 Amazon Rekognition Custom Labels에서 복사할 수 있습니다. Amazon Rekognition Custom Labels가 이미지에 액세스할 수 있도록 하려면 AWS 계정에 KMS 키에 대한 다음 권한이 필요합니다.
+ kms:GenerateDataKey
+ kms:Decrypt

자세한 내용은 [AWS Key Management Service에 저장된 KMS 키를 사용한 서버 측 암호화(SSE-KMS)를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)를 참조하세요.

모델을 훈련한 후 성능을 평가하고 개선할 수 있습니다. 자세한 내용은 [훈련된 Amazon Rekognition Custom Labels 모델 개선](improving-model.md) 섹션을 참조하세요.

모델 태그 지정과 같은 다른 모델 작업에 대한 내용은 [Amazon Rekognition Custom Labels 모델 관리](managing-model.md) 항목을 참조하세요.

**Topics**
+ [모델 훈련(콘솔)](#tm-console)
+ [모델 훈련(SDK)](#tm-sdk)

## 모델 훈련(콘솔)
<a name="tm-console"></a>

Amazon Rekognition Custom Labels 콘솔을 사용하여 모델을 훈련할 수 있습니다.

훈련을 하려면 훈련 데이터 세트와 테스트 데이터 세트를 갖춘 프로젝트가 필요합니다. 프로젝트에 테스트 데이터 세트가 없는 경우 Amazon Rekognition Custom Labels 콘솔은 훈련 중에 훈련 데이터 세트를 분할하여 프로젝트용 데이터 세트를 생성합니다. 선택한 이미지는 대표적인 샘플이며 훈련 데이터 세트에 사용되지 않습니다. 사용할 수 있는 대체 테스트 데이터 세트가 없는 경우에만 훈련 데이터 세트를 분할하는 것이 좋습니다. 훈련 데이터 세트를 분할하면 훈련에 사용할 수 있는 이미지 수가 줄어듭니다.

**참고**  
모델을 훈련하는 데 걸리는 시간만큼 요금이 부과됩니다. 자세한 정보는 [훈련 시간](https://aws.amazon.com/rekognition/pricing/#Amazon_Rekognition_Custom_Labels_pricing) 섹션을 참조하세요.

**모델을 훈련하려면(콘솔)**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다.

1. **프로젝트** 페이지에서 훈련하려는 모델이 포함된 프로젝트를 선택합니다.

1. **프로젝트** 페이지에서 **Train model**을 선택합니다.  
![\[현재 프로젝트의 데이터세트로 기계 학습 모델을 훈련하기 위한 ‘모델 훈련’ 버튼입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/tutorial-train-model.jpg)

1. (선택 사항) 자체 AWS KMS 암호화 키를 사용하려면 다음을 수행하세요.

   1. **이미지 데이터 암호화**에서 **암호화 설정 사용자 지정 (고급)**을 선택합니다.

   1. **암호화.aws\$1kms\$1key**에서 키의 Amazon Resource Name (ARN)을 입력하거나 기존 AWS KMS 키를 선택합니다. 새 키를 생성하려면 **AWS IMS 키 생성**을 선택합니다.

1. (선택 사항) 태그를 모델에 추가하려면 다음을 수행합니다.

   1. **태그** 항목에서 **새로운 태그 추가**를 선택합니다.

   1. 다음을 입력합니다.

      1. **키**에 있는 키의 이름.

      1. **값**에 있는 키의 값

   1. 태그를 더 추가하려면 6a단계와 6b단계를 반복합니다.

   1. (선택 사항) 태그를 제거하려면 제거할 태그 옆의 **제거**를 선택합니다. 이전에 저장한 태그를 제거하는 경우 변경 내용을 저장하면 해당 태그가 제거됩니다.

1. **모델 훈련** 페이지에서 **모델 훈련**을 선택합니다. **프로젝트 선택** 편집 상자에 프로젝트의 Amazon 리소스 이름(ARN)이 보일 겁니다. 그렇지 않은 경우 프로젝트의 ARN을 입력합니다.  
![\[Amazon Rekognition Custom Labels 서비스에서 AI 모델의 훈련을 시작하기 위한 모델 훈련 버튼입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/tutorial-train-model-page-train-model.jpg)

1. **모델을 훈련하고 싶으신가요?** 대화 상자에서 **모델 훈련**을 선택합니다.  
![\[모델 훈련 버튼이 표시된 모델 훈련 구성 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/tutorial-dialog-train-model.jpg)

1. 프로젝트 페이지의 **모델** 항목에서 훈련이 진행 중인 `Model Status` 열의 현재 상태를 확인할 수 있습니다. 모델 훈련은 완료하는 데 다소 시간이 걸립니다.  
![\[모델 상태가 ‘TRAINING_IN_PROGRESS’로, 모델이 현재 훈련 중임을 나타냅니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/tutorial-training-progress.jpg)

1. 훈련이 완료되면 모델 이름을 선택합니다. 모델 상태가 **TRAINING\$1COMPLETED**로 표시되면 훈련이 끝났다는 뜻입니다. 훈련이 실패하면 [실패한 모델 훈련 디버깅](tm-debugging.md) 항목을 읽어 보세요.  
![\[모델을 실행할 준비가 되었음을 나타내는 TRAINING_COMPLETED 상태와 훈련된 모델을 보여주는 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/get-started-choose-model.jpg)

1. 다음 단계: 모델 평가 자세한 내용은 [훈련된 Amazon Rekognition Custom Labels 모델 개선](improving-model.md) 항목을 참조하세요.

## 모델 훈련(SDK)
<a name="tm-sdk"></a>

[CreateProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProjectVersion)을 직접 호출하여 모델을 훈련합니다. 모델을 훈련하려면 다음 정보가 필요합니다.
+ 이름: 모델 버전의 고유 이름
+ 프로젝트 ARN: 모델을 관리하는 프로젝트의 Amazon 리소스 이름(ARN)
+ 훈련 결과 위치: 결과가 배치되는 Amazon S3 위치 콘솔 Amazon S3 버킷과 동일한 위치를 사용하거나 다른 위치를 선택할 수 있습니다. 다른 위치를 선택하는 것이 좋습니다. 이렇게 하면 권한을 설정하고 Amazon Rekognition Custom Labels 콘솔 사용의 훈련 출력과 이름 충돌이 발생할 가능성을 방지할 수 있기 때문입니다.

훈련은 프로젝트와 관련된 훈련 및 테스트 데이터 세트를 사용합니다. 자세한 내용은 [데이터 세트 관리](managing-dataset.md) 섹션을 참조하세요.

**참고**  
선택 사항으로 프로젝트 외부에 있는 훈련 및 테스트 데이터 세트 매니페스트 파일을 지정할 수 있습니다. 외부 매니페스트 파일로 모델을 훈련한 후 콘솔을 열면 Amazon Rekognition Custom Labels가 훈련에 사용된 마지막 매니페스트 파일 세트를 사용하여 데이터 세트를 생성합니다. 더 이상 외부 매니페스트 파일을 지정하여 프로젝트의 모델 버전을 훈련할 수 없습니다. 자세한 내용은 [CreatePrjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProjectVersion)을 참조하세요.

`CreateProjectVersion`의 응답은 후속 요청에서 모델 버전을 식별하는 데 사용하는 ARN입니다. ARN을 사용하여 모델 버전을 보호할 수도 있습니다. 자세한 내용은 [Amazon Rekognition Custom Labels 프로젝트의 보안](sc-introduction.md#sc-resources) 섹션을 참조하세요.

모델 버전 훈련을 완료하는 데 시간이 걸립니다. 이 주제의 Python 및 Java 예제는 훈련이 완료될 때까지 기다리는 데에 waiter를 사용합니다. Waiter는 특정 상태에 대해 폴링되는 유틸리티 메서드입니다. 또는 `DescribeProjectVersions`를 직접 호출하여 현재 훈련 상태를 확인할 수도 있습니다. `Status` 필드 값이 `TRAINING_COMPLETED`면 훈련이 완료된 것입니다. 훈련을 완료한 후 평가 결과를 검토하여 모델의 품질을 평가할 수 있습니다.

### 모델 훈련(SDK)
<a name="tm-sdk-datasets"></a>

다음 예제는 프로젝트와 관련된 훈련 및 테스트 데이터 세트를 사용하여 모델을 훈련하는 방법을 보여줍니다.

**모델을 훈련하려면(SDK)**

1. 아직 설치하지 않은 경우 AWS CLI 및 AWS SDKs를 설치하고 구성합니다. 자세한 내용은 [4단계: AWS CLI 및 AWS SDKs 설정](su-awscli-sdk.md) 단원을 참조하십시오.

1. 프로젝트를 훈련하려면 다음 예제 코드를 사용하세요.

------
#### [ AWS CLI ]

   다음 예제에서는 모델을 생성합니다. 훈련 데이터 세트를 분할하여 테스트 데이터 세트를 생성합니다. 다음을 바꿉니다.
   + `my_project_arn`을 프로젝트의 Amazon 리소스 이름(ARN)으로 바꿉니다.
   + `version_name`을 선택한 고유한 버전 이름으로 바꿉니다.
   + `output_bucket`을 Amazon Rekognition Custom Labels 훈련 결과를 저장하는 Amazon S3 버킷의 이름으로 바꿉니다.
   + `output_folder`를 훈련 결과가 저장되는 폴더의 이름으로 변경합니다.
   + (선택적 파라미터) `--kms-key-id`를 AWS Key Management Service 고객 마스터 키의 식별자로 변경합니다.

   ```
   aws rekognition create-project-version \
     --project-arn project_arn \
     --version-name version_name \
     --output-config '{"S3Bucket":"output_bucket", "S3KeyPrefix":"output_folder"}' \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   다음 예제에서는 모델을 생성합니다. 다음 명령줄 인수를 제공하세요.
   + `project_arn`: 프로젝트의 Amazon 리소스 이름(ARN)
   + `version_name`: 선택한 모델의 고유한 버전 이름
   + `output_bucket`: Amazon Rekognition Custom Labels가 훈련 결과를 저장하는 Amazon S3 버킷의 이름
   + `output_folder`: 훈련 결과가 저장되는 폴더의 이름

   다음 명령줄 파라미터를 제공하여 모델에 태그를 첨부할 수도 있습니다.
   + `tag`: 모델에 첨부할 태그의 이름
   + `tag_value`: 태그 값 

   ```
   #Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   
   import argparse
   import logging
   import json
   import boto3
   
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   def train_model(rek_client, project_arn, version_name, output_bucket, output_folder, tag_key, tag_key_value):
       """
       Trains an Amazon Rekognition Custom Labels model.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_arn: The ARN of the project in which you want to train a model.
       :param version_name: A version for the model.
       :param output_bucket: The S3 bucket that hosts training output.
       :param output_folder: The path for the training output within output_bucket
       :param tag_key: The name of a tag to attach to the model. Pass None to exclude
       :param tag_key_value: The value of the tag. Pass None to exclude
   
       """
   
       try:
           #Train the model
   
           status=""
           logger.info("training model version %s for project %s",
               version_name, project_arn)
   
   
           output_config = json.loads(
               '{"S3Bucket": "'
               + output_bucket
               + '", "S3KeyPrefix": "'
               + output_folder
               + '" }  '
           )
   
           tags={}
   
           if tag_key is not None and tag_key_value is not None:
               tags = json.loads(
                   '{"' + tag_key + '":"' + tag_key_value + '"}'
               )
   
   
           response=rek_client.create_project_version(
               ProjectArn=project_arn, 
               VersionName=version_name,
               OutputConfig=output_config,
               Tags=tags
           )
   
           logger.info("Started training: %s", response['ProjectVersionArn'])
   
           # Wait for the project version training to complete.
   
           project_version_training_completed_waiter = rek_client.get_waiter('project_version_training_completed')
           project_version_training_completed_waiter.wait(ProjectArn=project_arn,
           VersionNames=[version_name])
       
   
           # Get the completion status.
           describe_response=rek_client.describe_project_versions(ProjectArn=project_arn,
               VersionNames=[version_name])
           for model in describe_response['ProjectVersionDescriptions']:
               logger.info("Status: %s", model['Status'])
               logger.info("Message: %s", model['StatusMessage'])
               status=model['Status']
   
   
           logger.info("finished training")
   
           return response['ProjectVersionArn'], status
       
       except ClientError as err:
           logger.exception("Couldn't create model: %s", err.response['Error']['Message'] )
           raise
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn", help="The ARN of the project in which you want to train a model"
       )
   
       parser.add_argument(
           "version_name", help="A version name of your choosing."
       )
   
       parser.add_argument(
           "output_bucket", help="The S3 bucket that receives the training results."
       )
   
       parser.add_argument(
           "output_folder", help="The folder in the S3 bucket where training results are stored."
       )
   
       parser.add_argument(
           "--tag_name",  help="The name of a tag to attach to the model", required=False
       )
   
       parser.add_argument(
           "--tag_value",  help="The value for the tag.", required=False
       )
   
   
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(f"Training model version {args.version_name} for project {args.project_arn}")
   
           # Train the model.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           model_arn, status=train_model(rekognition_client, 
               args.project_arn,
               args.version_name,
               args.output_bucket,
               args.output_folder,
               args.tag_name,
               args.tag_value)
   
   
           print(f"Finished training model: {model_arn}")
           print(f"Status: {status}")
   
   
       except ClientError as err:
           logger.exception("Problem training model: %s", err)
           print(f"Problem training model: {err}")
       except Exception as err:
           logger.exception("Problem training model: %s", err)
           print(f"Problem training model: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   다음 예제는 모델을 훈련합니다. 다음 명령줄 인수를 제공하세요.
   + `project_arn`: 프로젝트의 Amazon 리소스 이름(ARN)
   + `version_name`: 선택한 모델의 고유한 버전 이름
   + `output_bucket`: Amazon Rekognition Custom Labels가 훈련 결과를 저장하는 Amazon S3 버킷의 이름
   + `output_folder`: 훈련 결과가 저장되는 폴더의 이름

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   package com.example.rekognition;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.core.waiters.WaiterResponse;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.CreateProjectVersionRequest;
   import software.amazon.awssdk.services.rekognition.model.CreateProjectVersionResponse;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.OutputConfig;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.waiters.RekognitionWaiter;
   
   import java.util.Optional;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class TrainModel {
   
       public static final Logger logger = Logger.getLogger(TrainModel.class.getName());
   
       public static String trainMyModel(RekognitionClient rekClient, String projectArn, String versionName,
               String outputBucket, String outputFolder) {
   
           try {
   
               OutputConfig outputConfig = OutputConfig.builder().s3Bucket(outputBucket).s3KeyPrefix(outputFolder).build();
   
               logger.log(Level.INFO, "Training Model for project {0}", projectArn);
               CreateProjectVersionRequest createProjectVersionRequest = CreateProjectVersionRequest.builder()
                       .projectArn(projectArn).versionName(versionName).outputConfig(outputConfig).build();
   
               CreateProjectVersionResponse response = rekClient.createProjectVersion(createProjectVersionRequest);
   
               logger.log(Level.INFO, "Model ARN: {0}", response.projectVersionArn());
               logger.log(Level.INFO, "Training model...");
   
               // wait until training completes
   
               DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder()
                       .versionNames(versionName)
                       .projectArn(projectArn)
                       .build();
   
               RekognitionWaiter waiter = rekClient.waiter();
   
               WaiterResponse<DescribeProjectVersionsResponse> waiterResponse = waiter
                       .waitUntilProjectVersionTrainingCompleted(describeProjectVersionsRequest);
   
               Optional<DescribeProjectVersionsResponse> optionalResponse = waiterResponse.matched().response();
   
               DescribeProjectVersionsResponse describeProjectVersionsResponse = optionalResponse.get();
   
               for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse
                       .projectVersionDescriptions()) {
                   System.out.println("ARN: " + projectVersionDescription.projectVersionArn());
                   System.out.println("Status: " + projectVersionDescription.statusAsString());
                   System.out.println("Message: " + projectVersionDescription.statusMessage());
               }
   
               return response.projectVersionArn();
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not train model: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           String versionName = null;
           String projectArn = null;
           String projectVersionArn = null;
           String bucket = null;
           String location = null;
   
           final String USAGE = "\n" + "Usage: " + "<project_name> <version_name> <output_bucket> <output_folder>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that you want to use. \n\n"
                   + "   version_name - A version name for the model.\n\n"
                   + "   output_bucket - The S3 bucket in which to place the training output. \n\n"
                   + "   output_folder - The folder within the bucket that the training output is stored in. \n\n";
   
           if (args.length != 4) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
           versionName = args[1];
           bucket = args[2];
           location = args[3];
   
           try {
   
               // Get the Rekognition client.
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
   
               // Train model
               projectVersionArn = trainMyModel(rekClient, projectArn, versionName, bucket, location);
   
               System.out.println(String.format("Created model: %s for Project ARN: %s", projectVersionArn, projectArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

1. 훈련이 실패하면 [실패한 모델 훈련 디버깅](tm-debugging.md) 항목을 읽어 보세요.

# 실패한 모델 훈련 디버깅
<a name="tm-debugging"></a>

모델 훈련 중에 오류가 발생할 수 있습니다. [Amazon Rekognition Custom Labels는 콘솔과 DescribeProjectVersions의 응답에서 훈련 오류를 보고합니다.](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)

오류는 터미널(훈련을 계속할 수 없음)이거나 비터미널(훈련 계속 가능)입니다. 훈련 및 테스트 데이터 세트의 내용과 관련된 오류의 경우 검증 결과([매니페스트 요약](tm-debugging-summary.md), [훈련 및 테스트 검증 매니페스트](tm-debugging-scope-json-line.md))를 다운로드할 수 있습니다. 검증 결과의 오류 코드를 사용하여 이 항목에서 추가 정보를 찾아보세요. 이 항목에서는 매니페스트 파일 오류(매니페스트 파일 내용이 검증되기 전에 발생하는 터미널 오류)에 대한 정보도 제공합니다.

**참고**  
매니페스트는 데이터 세트의 콘텐츠를 저장하는 데 사용되는 파일입니다.

Amazon Rekognition Custom Labels 콘솔을 사용하여 일부 오류를 수정할 수 있습니다. 다른 오류의 경우 훈련 또는 테스트 매니페스트 파일을 업데이트해야 할 수도 있습니다. IAM 권한과 같은 기타 변경이 필요할 수 있습니다. 자세한 내용은 개별 오류에 대한 설명서를 참조하세요.

## 터미널 오류
<a name="tm-error-categories-terminal"></a>

터미널 오류로 인해 모델 훈련이 중단됩니다. 터미널 훈련 오류에는 서비스 오류, 매니페스트 파일 오류, 매니페스트 콘텐츠 오류의 세 가지 범주가 있습니다.

콘솔에서 Amazon Rekognition Custom Labels는 프로젝트 페이지의 **상태 메시지** 열에 모델의 터미널 오류를 표시합니다. 이름, 버전, 생성 날짜, 모델 성능, 훈련 완료 또는 실패와 같은 모델 상태를 나타내는 상태 메시지가 포함된 프로젝트 목록을 보여주는 프로젝트 관리 대시보드입니다.

![\[프로젝트 관리 대시보드의 스크린샷입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/terminal-errors.png)


 AWS SDK를 사용하는 경우 [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)의 응답을 확인하여 터미널 매니페스트 파일 오류 또는 터미널 매니페스트 콘텐츠 오류가 발생했는지 확인할 수 있습니다. 이 경우 `Status` 값은 `TRAINING_FAILED`이고 `StatusMessage` 필드에는 오류가 포함됩니다.

### 서비스 오류
<a name="tm-error-category-service"></a>

Amazon Rekognition에서 서비스 문제가 발생하여 훈련을 계속할 수 없을 때 터미널 서비스 오류가 발생합니다. Amazon Rekognition Custom Labels가 의존하는 다른 서비스의 장애를 예로 들 수 있습니다. Amazon Rekognition에서 서비스 문제가 발생함**에 따라 Amazon Rekognition Custom Labels가 콘솔에서 서비스 오류를 보고합니다. AWS SDK를 사용하는 경우 [CreateProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProjectVersion) 및 [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)에서 훈련 중에 발생하는 서비스 오류가 `InternalServerError` 예외로 발생합니다.

서비스 오류가 발생하는 경우 모델 훈련을 다시 시도하세요. 훈련이 계속 실패하는 경우, [AWS Support](https://aws.amazon.com/premiumsupport/)**에 연락하여 서비스 오류와 함께 보고된 오류 정보를 제공하세요.

### 터미널 매니페스트 파일 오류 목록
<a name="tm-error-category-terminal"></a>

매니페스트 파일 오류는 훈련 및 테스트 데이터 세트에서 파일 수준 또는 여러 파일에서 발생하는 터미널 오류입니다. 매니페스트 파일 오류는 훈련 및 테스트 데이터 세트의 내용이 검증되기 전에 감지됩니다. 매니페스트 파일 오류로 인해 [비터미널 검증 오류](#tm-error-category-non-terminal-errors)가 보고되지 않습니다. 예를 들어, 빈 훈련 매니페스트 파일은 매니페스트 파일이 비어 있습니다** 오류가 발생합니다. 파일이 비어 있으므로 비터미널 JSON 라인 검증 오류는 보고될 수 없습니다. 매니페스트 요약도 생성되지 않습니다.

모델을 훈련하려면 먼저 매니페스트 파일 오류를 수정해야 합니다.

다음은 매니페스트 파일 오류 목록입니다.
+ [매니페스트 파일 확장명 또는 콘텐츠가 유효하지 않습니다.](tm-terminal-errors-reference.md#tm-error-message-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT)
+ [매니페스트 파일이 비어 있습니다.](tm-terminal-errors-reference.md#tm-error-message-ERROR_EMPTY_MANIFEST)
+ [매니페스트 파일 크기가 지원되는 최대 크기를 초과합니다.](tm-terminal-errors-reference.md#tm-error-message-ERROR_MANIFEST_SIZE_TOO_LARGE)
+ [출력 S3 버킷에 쓸 수 없습니다.](tm-terminal-errors-reference.md#tm-error-message-ERROR_CANNOT_WRITE_OUTPUT_S3_BUCKET)
+ [S3 버킷 권한이 올바르지 않습니다.](tm-terminal-errors-reference.md#tm-error-message-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET)

### 터미널 매니페스트 콘텐츠 오류 목록
<a name="tm-error-category-combined-terminal"></a>

매니페스트 콘텐츠 오류는 매니페스트 내의 콘텐츠와 관련된 터미널 오류입니다. 예를 들어 [매니페스트 파일에 레이블당 레이블이 지정된 이미지가 충분하지 않아 자동 분할을 수행할 수 없습니다](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_AUTOSPLIT)라는 오류가 발생하는 경우, 훈련 데이터 세트에 테스트 데이터 세트를 생성할 만큼 레이블이 지정된 이미지가 충분하지 않으므로 훈련을 완료할 수 없습니다.

오류는 콘솔과 `DescribeProjectVersions` 응답 양식에 보고될 뿐 아니라 다른 터미널 매니페스트 콘텐츠 오류와 함께 매니페스트 요약에도 보고됩니다. 자세한 내용은 [매니페스트 요약 이해](tm-debugging-summary.md) 단원을 참조하십시오.

비터미널 JSON 라인 오류는 별도의 훈련 및 테스트 검증 결과 매니페스트에도 보고됩니다. Amazon Rekognition Custom Labels에서 발견된 비터미널 JSON 라인 오류는 훈련을 중단시키는 매니페스트 콘텐츠 오류와 반드시 관련이 있는 것은 아닙니다. 자세한 내용은 [훈련 및 테스트 검증 결과 매니페스트의 이해](tm-debugging-scope-json-line.md) 단원을 참조하십시오.

모델을 훈련하려면 먼저 매니페스트 콘텐츠 오류를 수정해야 합니다.

다음은 매니페스트 콘텐츠 오류에 대한 오류 메시지입니다.
+ [매니페스트 파일에 잘못된 행이 너무 많습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST)
+ [매니페스트 파일에는 여러 S3 버킷의 이미지가 포함되어 있습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_IMAGES_IN_MULTIPLE_S3_BUCKETS)
+ [이미지 S3 버킷의 소유자 ID가 잘못되었습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_INVALID_IMAGES_S3_BUCKET_OWNER)
+ [매니페스트 파일에 레이블당 레이블이 지정된 이미지가 부족하여 자동 분할을 수행할 수 없습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_AUTOSPLIT)
+ [매니페스트 파일에 레이블이 너무 적습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_MANIFEST_TOO_FEW_LABELS)
+ [매니페스트 파일에 레이블이 너무 많습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_MANIFEST_TOO_MANY_LABELS)
+ [훈련 매니페스트 파일과 테스트 매니페스트 파일 간에 겹치는 레이블이 \$1\$1% 미만입니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_INSUFFICIENT_LABEL_OVERLAP)
+ [매니페스트 파일에 사용 가능한 레이블이 너무 적습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_MANIFEST_TOO_FEW_USABLE_LABELS)
+ [훈련 매니페스트 파일과 테스트 매니페스트 파일 간에 겹치는 사용 가능한 레이블이 \$1\$1% 미만입니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_INSUFFICIENT_USABLE_LABEL_OVERLAP)
+ [S3 버킷에서 이미지를 복사하지 못했습니다.](tm-debugging-aggregate-errors.md#tm-error-message-ERROR_FAILED_IMAGES_S3_COPY)

## 비터미널 JSON 라인 검증 오류 목록
<a name="tm-error-category-non-terminal-errors"></a>

JSON 라인 검증 오류는 Amazon Rekognition Custom Labels가 모델 훈련을 중단할 필요가 없는 비터미널 오류입니다.

JSON 라인 검증 오류는 콘솔에 표시되지 않습니다.

훈련 및 테스트 데이터 세트에서 JSON 라인은 하나의 이미지에 대한 훈련 또는 테스트 정보를 나타냅니다. 잘못된 이미지와 같은 JSON 라인의 검증 오류는 훈련 및 테스트 검증 매니페스트에 보고됩니다. Amazon Rekognition Custom Labels는 매니페스트에 있는 다른 유효한 JSON 라인을 사용하여 훈련을 완료합니다. 자세한 내용은 [훈련 및 테스트 검증 결과 매니페스트의 이해](tm-debugging-scope-json-line.md) 단원을 참조하십시오. 검증 규칙에 대한 자세한 내용은 [매니페스트 파일의 검증 규칙](md-create-manifest-file-validation-rules.md) 항목을 참조하세요.

**참고**  
JSON 라인 오류가 너무 많으면 훈련이 실패합니다.

향후 오류를 유발하거나 모델 훈련에 영향을 미칠 수 있으므로 비터미널 JSON 라인 오류도 수정하는 것이 좋습니다.

Amazon Rekognition Custom Labels는 다음과 같은 비터미널 JSON 라인 검증 오류를 생성할 수 있습니다.
+ [source-ref 키가 누락되었습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_MISSING_SOURCE_REF)
+ [source-ref 값의 형식이 잘못되었습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_SOURCE_REF_FORMAT)
+ [레이블 속성을 찾을 수 없습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_LABEL_ATTRIBUTES)
+ [레이블 속성 \$1\$1의 형식이 잘못되었습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT)
+ [레이블 attributemetadata의 형식이 잘못되었습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_METADATA_FORMAT)
+ [유효한 레이블 속성을 찾을 수 없습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_VALID_LABEL_ATTRIBUTES)
+ [하나 이상의 경계 상자에 신뢰도 값이 누락되었습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_MISSING_BOUNDING_BOX_CONFIDENCE)
+ [클래스 맵에서 하나 이상의 클래스 ID가 누락되었습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_MISSING_CLASS_MAP_ID)
+ [JSON 라인의 형식이 잘못되었습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_JSON_LINE)
+ [이미지가 유효하지 않습니다. S3 경로 및/또는 이미지 속성을 확인하세요.](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_IMAGE)
+ [경계 상자에 오프 프레임 값이 있습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_BOUNDING_BOX)
+ [경계 상자의 높이와 너비가 너무 작습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_BOUNDING_BOX_TOO_SMALL)
+ [경계 상자가 허용된 최대 값보다 많습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_TOO_MANY_BOUNDING_BOXES)
+ [유효한 주석을 찾을 수 없습니다.](tm-debugging-json-line-errors.md#tm-error-ERROR_NO_VALID_ANNOTATIONS)

# 매니페스트 요약 이해
<a name="tm-debugging-summary"></a>

매니페스트 요약에는 다음 정보가 포함되어 있습니다.
+ 검증 중에 발생한 [터미널 매니페스트 콘텐츠 오류 목록](tm-debugging.md#tm-error-category-combined-terminal)에 관한 오류 정보 
+ 훈련 및 테스트 데이터 세트에 있는 [비터미널 JSON 라인 검증 오류 목록](tm-debugging.md#tm-error-category-non-terminal-errors)에 대한 오류 위치 정보
+ 훈련 및 테스트 데이터 세트에서 발견된 잘못된 JSON 라인의 총 개수와 같은 오류 통계 

[터미널 매니페스트 파일 오류 목록](tm-debugging.md#tm-error-category-terminal) 항목이 없는 경우 훈련 중에 매니페스트 요약이 생성됩니다. 매니페스트 요약 파일(manifest\$1summary.json**)의 위치를 가져오려면 [검증 결과 가져오기](tm-debugging-getting-validation-data.md) 항목을 참조하세요.

**참고**  
[서비스 오류](tm-debugging.md#tm-error-category-service) 및 [매니페스트 파일 오류](tm-debugging.md#tm-error-category-terminal)는 매니페스트 요약에 보고되지 않습니다. 자세한 내용은 [터미널 오류](tm-debugging.md#tm-error-categories-terminal) 단원을 참조하십시오.

특정 매니페스트 콘텐츠 오류에 대한 자세한 내용은 [터미널 매니페스트 콘텐츠 오류](tm-debugging-aggregate-errors.md) 항목을 참조하세요.

## 매니페스트 요약 파일 형식
<a name="tm-manifest-summary-file"></a>

매니페스트 파일은 `statistics` 및 `errors`의 2개 항목으로 구성되어 있습니다.

### 통계
<a name="tm-manifest-summary-statistics"></a>

`statistics`에는 훈련 및 테스트 데이터 세트의 오류에 대한 정보가 들어 있습니다.
+ `training`: 훈련 데이터 세트에서 발견된 통계 및 오류 
+ `testing`: 테스트 데이터 세트에서 발견된 통계 및 오류



`errors` 배열의 객체에는 매니페스트 콘텐츠 오류에 대한 오류 코드와 메시지가 포함됩니다. `` 

`error_line_indices` 배열에는 오류가 있는 훈련 또는 테스트 매니페스트의 각 JSON 행에 대한 줄 번호가 포함됩니다. 자세한 내용은 [훈련 오류 수정](tm-debugging-fixing-validation-errors.md) 단원을 참조하십시오.

### 오류
<a name="tm-manifest-summary-errors"></a>

훈련 데이터 세트와 테스트 데이터 세트 모두에 관련된 오류가 있습니다. 예를 들어, 훈련 및 테스트 데이터 세트와 겹치는 사용 가능한 레이블이 충분하지 않을 때 [ERROR\$1INSUFFICIENT\$1USABLE\$1LABEL\$1OVERLAP](tm-debugging-aggregate-errors.md#tm-error-ERROR_INSUFFICIENT_USABLE_LABEL_OVERLAP) 오류가 발생합니다.

```
{
    "statistics": {
        "training": 
            {
                "use_case": String, # Possible values are IMAGE_LEVEL_LABELS, OBJECT_LOCALIZATION and NOT_DETERMINED
                "total_json_lines": Number,   # Total number json lines (images) in the  training manifest.
                "valid_json_lines": Number,   # Total number of JSON Lines (images) that can be used for training.
                "invalid_json_lines": Number, # Total number of invalid JSON Lines. They are not used for training.
                "ignored_json_lines": Number, # JSON Lines that have a valid schema but have no annotations. The aren't used for training and aren't counted as invalid.
                "error_json_line_indices": List[int], # Contains a list of line numbers for JSON line errors in the training dataset.
                "errors": [
                    {
                        "code": String, # Error code for a training manifest content error.
                        "message": String # Description for a training manifest content error.
                    }
                ]
            },
        "testing": 
            {
                "use_case": String, # Possible values are IMAGE_LEVEL_LABELS, OBJECT_LOCALIZATION and NOT_DETERMINED
                "total_json_lines": Number, # Total number json lines (images) in the manifest.
                "valid_json_lines": Number,  # Total number of JSON Lines (images) that can be used for testing.
                "invalid_json_lines": Number, # Total number of invalid JSON Lines. They are not used for testing.
                "ignored_json_lines": Number, # JSON Lines that have a valid schema but have no annotations. They aren't used for testing and aren't counted as invalid.
                "error_json_line_indices": List[int], # contains a list of error record line numbers in testing dataset.
                "errors": [
                    {
                        "code": String,   # # Error code for a testing manifest content error.
                        "message": String # Description for a testing manifest content error.
                    }
                ]  
            }
    },
    "errors": [
        {
            "code": String, # # Error code for errors that span the training and testing datasets.
            "message": String # Description of the error.
        }
    ]
}
```

## 예제 매니페스트 요약
<a name="tm-debugging-manifest-summary-example"></a>

다음 예제는 터미널 매니페스트 콘텐츠 오류([ERROR\$1TOO\$1MANY\$1INVALID\$1ROWS\$1IN\$1MANIFEST](tm-debugging-aggregate-errors.md#tm-error-ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST))를 보여주는 부분 매니페스트 요약입니다. `error_json_line_indices` 배열에는 해당하는 훈련 또는 테스트 검증 매니페스트에 있는 비터미널 JSON 라인 오류의 줄 번호가 포함됩니다.

```
{
    "errors": [],
    "statistics": {
        "training": {
            "use_case": "NOT_DETERMINED",
            "total_json_lines": 301,
            "valid_json_lines": 146,
            "invalid_json_lines": 155,
            "ignored_json_lines": 0,
            "errors": [
                {
                    "code": "ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST",
                    "message": "The manifest file contains too many invalid rows."
                }
            ],
            "error_json_line_indices": [ 
                15,
                16,
                17,
                22,
                23,
                24,
                 .
                 .
                 .
                 .                 
                300
            ]
        },
        "testing": {
            "use_case": "NOT_DETERMINED",
            "total_json_lines": 15,
            "valid_json_lines": 13,
            "invalid_json_lines": 2,
            "ignored_json_lines": 0,
            "errors": [],
            "error_json_line_indices": [ 
                13,
                15
            ]
        }
    }
}
```

# 훈련 및 테스트 검증 결과 매니페스트의 이해
<a name="tm-debugging-scope-json-line"></a>

Amazon Rekognition Custom Labels는 훈련 중에 비터미널 JSON 라인 오류를 보관하기 위한 검증 결과 매니페스트를 생성합니다. 검증 결과 매니페스트는 오류 정보가 추가된 훈련 및 테스트 데이터 세트의 사본입니다. 훈련이 완료된 후 검증 매니페스트에 액세스할 수 있습니다. 자세한 내용은 [검증 결과 가져오기](tm-debugging-getting-validation-data.md) 단원을 참조하십시오. Amazon Rekognition Custom Labels는 오류 위치 및 JSON 라인 오류 수와 같은 JSON 라인 오류에 대한 개요 정보가 포함된 매니페스트 요약도 생성합니다. 자세한 내용은 [매니페스트 요약 이해](tm-debugging-summary.md) 단원을 참조하십시오.

**참고**  
검증 결과(훈련 및 테스트 검증 결과 매니페스트와 매니페스트 요약)는 [터미널 매니페스트 파일 오류 목록](tm-debugging.md#tm-error-category-terminal) 항목이 없는 경우에만 생성됩니다.

매니페스트에는 데이터 세트의 각 이미지에 대한 JSON 라인이 포함됩니다. 검증 결과 매니페스트 내에서 오류가 발생한 JSON 라인에 JSON 라인 오류 정보가 추가됩니다.

JSON 라인 오류는 하나의 이미지와 관련된 비터미널 오류입니다. 비터미널 검증 오류로 인해 JSON 라인 전체 또는 일부가 무효화될 수 있습니다. 예를 들어 JSON 라인에서 참조된 이미지가 PNG 또는 JPG 형식이 아닌 경우 [ERROR\$1INVALID\$1IMAGE](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_IMAGE) 오류가 발생하고 전체 JSON 라인이 훈련에서 제외됩니다. 다른 유효한 JSON 라인을 사용하여 훈련이 계속됩니다.

JSON 라인 내에서 오류가 발생하면 JSON 라인을 여전히 훈련에 사용할 수 있다는 의미일 수 있습니다. 예를 들어 레이블과 관련된 네 개의 경계 상자 중 하나의 왼쪽 값이 음수인 경우에도 모델은 다른 유효한 경계 상자를 사용하여 훈련됩니다. 잘못된 경계 상자([ERROR\$1INVALID\$1BOUNDING\$1BOX](tm-debugging-json-line-errors.md#tm-error-ERROR_INVALID_BOUNDING_BOX))에 대한 JSON 라인 오류 정보가 반환됩니다. 이 예제에서는 오류가 발생한 `annotation` 객체에 오류 정보가 추가됩니다.

[WARNING\$1NO\$1ANNOTATIONS](tm-debugging-json-line-errors.md#tm-warning-WARNING_NO_ANNOTATIONS) 항목과 같은 경고 오류는 훈련에 사용되지 않으며 매니페스트 요약에서 무시된 JSON 라인(`ignored_json_lines`)으로 간주됩니다. 자세한 내용은 [매니페스트 요약 이해](tm-debugging-summary.md) 단원을 참조하십시오. 또한 무시된 JSON 라인은 훈련 및 테스트의 20% 오류 임계값에 포함되지 않습니다.

 특정 비터미널 데이터 검증 오류에 대한 자세한 내용은 [비터미널 JSON 라인 검증 오류](tm-debugging-json-line-errors.md) 항목을 참조하세요.

**참고**  
데이터 검증 오류가 너무 많으면 훈련이 중단되고 매니페스트 요약에 [ERROR\$1TOO\$1MANY\$1INVALID\$1ROWS\$1IN\$1MANIFEST](tm-debugging-aggregate-errors.md#tm-error-ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST) 터미널 오류가 보고됩니다.

JSON Line 오류 수정에 대한 자세한 내용은 [훈련 오류 수정](tm-debugging-fixing-validation-errors.md) 항목을 참조하세요.



## JSON 라인 오류 형식
<a name="tm-json-line-error-format"></a>

Amazon Rekognition Custom Labels는 비터미널 검증 오류 정보를 이미지 수준 및 객체 위치 파악 형식의 JSON 라인에 추가합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.

### 이미지 수준 오류
<a name="tm-debugging-image-level"></a>

다음 예제는 이미지 수준 JSON 라인의 `Error` 배열을 보여줍니다. 두 세트의 오류가 있습니다. 레이블 속성 메타데이터(이 예제에서는 스포츠 메타데이터)와 관련된 오류와 이미지와 관련된 오류가 있습니다. 오류에는 오류 코드(코드), 오류 메시지(메시지)가 포함됩니다. 자세한 내용은 [매니페스트 파일의 이미지 수준 레이블 가져오기](md-create-manifest-file-classification.md) 단원을 참조하십시오.

```
{
    "source-ref": String,
    "sport": Number,
    "sport-metadata": {
        "class-name": String,
        "confidence": Float,
        "type": String,
        "job-name": String,
        "human-annotated": String,
        "creation-date": String,
        "errors": [
            {
                "code": String, # error codes for label
                "message": String # Description and additional contextual details of the error
            }
        ] 
    },
    "errors": [
        {
            "code": String, # error codes for image
            "message": String # Description and additional contextual details of the error
        }
    ]
}
```

### 객체 위치 파악 오류
<a name="tm-debugging-object-localization"></a>

다음 예제는 객체 위치 파악 JSON 라인의 오류 배열을 보여줍니다. JSON 라인은 다음 JSON 라인 항목의 필드에 대한 `Errors` 배열 정보를 포함합니다. 각 `Error` 객체에는 오류 코드와 오류 메시지가 들어 있습니다.
+ 레이블 속성**: 레이블 속성 필드의 오류입니다. 예제의 `bounding-box`를 참조하세요.
+ 주석**: 주석 오류(경계 상자)는 레이블 속성 내 `annotations` 배열에 저장됩니다.
+ 레이블 attribute-metadata**: 레이블 속성 필드의 오류입니다. 예제의 `bounding-box-metadata`를 참조하세요.
+ 이미지**: 레이블 속성, 주석 및 레이블 속성 메타데이터 필드와 관련이 없는 오류입니다.

자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

```
{
    "source-ref": String,
    "bounding-box": {
        "image_size": [
            {
                "width": Int,
                "height": Int,
                "depth":Int,
            }
        ],
        "annotations": [
            {
                "class_id": Int,
                "left": Int,
                "top": Int,
                "width": Int,
                "height": Int,
                "errors": [   # annotation field errors
                    {
                        "code": String, # annotation field error code
                        "message": String # Description and additional contextual details of the error
                    }
                ]
            }
        ],
        "errors": [ #label attribute field errors
            {
                "code": String, # error code
                "message": String # Description and additional contextual details of the error
            }
        ] 
    },
    "bounding-box-metadata": {
        "objects": [
            {
                "confidence": Float
            }
        ],
        "class-map": {
            String: String
        }, 
        "type": String,
        "human-annotated": String,
        "creation-date": String,
        "job-name": String,
        "errors": [  #metadata field errors
            {
                "code": String, # error code
                "message": String # Description and additional contextual details of the error
            }
        ] 
    },
   "errors": [  # image errors
        {
            "code": String, # error code
            "message": String # Description and additional contextual details of the error
        }
    ] 
 }
```

## 예제 JSON 라인 오류
<a name="tm-debugging-scope-json-line-example"></a>

다음 객체 위치 파악 JSON 라인(가독성을 위해 형식 지정)에는 [ERROR\$1BOUNDING\$1BOX\$1TOO\$1SMALL](tm-debugging-json-line-errors.md#tm-error-ERROR_BOUNDING_BOX_TOO_SMALL) 오류가 표시됩니다. 이 예제에서 경계 상자 크기(높이 및 너비)는 1 x 1보다 크지 않습니다.

```
{
    "source-ref": "s3://bucket/Manifests/images/199940-1791.jpg",
    "bounding-box": {
        "image_size": [
            {
                "width": 3000,
                "height": 3000,
                "depth": 3
            }
        ],
        "annotations": [
            {
                "class_id": 1,
                "top": 0,
                "left": 0,
                "width": 1,
                "height": 1, 
                "errors": [
                    {
                        "code": "ERROR_BOUNDING_BOX_TOO_SMALL",
                        "message": "The height and width of the bounding box is too small."
                    }
                ]
            },
            {
                "class_id": 0,
                "top": 65,
                "left": 86,
                "width": 220,
                "height": 334
            }
        ]
    },
    "bounding-box-metadata": {
        "objects": [
            {
                "confidence": 1
            },
            {
                "confidence": 1
            }
        ],
        "class-map": {
            "0": "Echo",
            "1": "Echo Dot"
        },
        "type": "groundtruth/object-detection",
        "human-annotated": "yes",
        "creation-date": "2019-11-20T02:57:28.288286",
        "job-name": "my job"
    }
}
```

# 검증 결과 가져오기
<a name="tm-debugging-getting-validation-data"></a>

검증 결과에는 [터미널 매니페스트 콘텐츠 오류 목록](tm-debugging.md#tm-error-category-combined-terminal) 및 [비터미널 JSON 라인 검증 오류 목록](tm-debugging.md#tm-error-category-non-terminal-errors)에 대한 오류 정보가 포함됩니다. 세 개의 검증 결과 파일이 있습니다.
+ training\$1manifest\$1with\$1validation.json**: JSON 라인 오류 정보가 추가된 훈련 데이터 세트 매니페스트 파일의 복사본입니다.
+ testing\$1manifest\$1with\$1validation.json**: JSON 라인 오류 정보가 추가된 테스트 데이터 세트 매니페스트 파일의 복사본입니다.
+ manifest\$1summary.json**: 훈련 및 테스트 데이터 세트에서 발견된 매니페스트 콘텐츠 오류 및 JSON 라인 오류에 대한 요약입니다. 자세한 내용은 [매니페스트 요약 이해](tm-debugging-summary.md) 단원을 참조하십시오.

훈련 및 테스트 검증 매니페스트의 내용에 대한 자세한 내용은 [실패한 모델 훈련 디버깅](tm-debugging.md) 항목을 참조하세요.

**참고**  
검증 결과는 훈련 중에 생성된 [터미널 매니페스트 파일 오류 목록](tm-debugging.md#tm-error-category-terminal) 항목이 없는 경우에만 생성됩니다.
훈련 및 테스트 매니페스트가 검증된 후 [서비스 오류](tm-debugging.md#tm-error-category-service)가 발생하는 경우 검증 결과는 생성되지만 [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)의 응답에는 검증 결과 파일 위치가 포함되지 않습니다.

훈련이 완료되거나 실패한 후에는 Amazon Rekognition Custom Labels 콘솔을 사용하여 검증 결과를 다운로드하거나 [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions) API를 직접 호출하여 Amazon S3 버킷 위치를 가져올 수 있습니다.

## 검증 결과 가져오기(콘솔)
<a name="tm-debugging-getting-validation-data-console"></a>

콘솔을 사용하여 모델을 훈련하는 경우 다음 다이어그램과 같이 프로젝트의 모델 목록에서 검증 결과를 다운로드할 수 있습니다. 모델 패널에는 검증 결과를 다운로드할 수 있는 옵션과 함께 모델 훈련 및 검증 결과가 표시됩니다.

![\[검증 결과를 다운로드할 수 있는 옵션과 함께 모델 훈련 및 검증 결과를 보여주는 인터페이스입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/models-validation-results.jpg)


모델의 세부 정보 페이지에서 검증 결과 다운로드에 액세스할 수도 있습니다. 세부 정보 페이지에는 상태, 훈련 및 테스트 데이터세트를 포함한 데이터세트 세부 정보와 매니페스트 요약, 훈련 검증 매니페스트 및 테스트 검증 매니페스트에 대한 다운로드 링크가 표시됩니다.

![\[상태, 훈련 및 테스트 데이터세트 링크, 매니페스트 항목 다운로드 링크가 포함된 데이터세트 세부 정보 패널의 스크린샷입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/customlabels-dg/images/model-validation-results.jpg)


자세한 내용은 [모델 훈련(콘솔)](training-model.md#tm-console) 단원을 참조하십시오.

## 검증 결과 가져오기(SDK)
<a name="tm-debugging-getting-validation-data-sdk"></a>

모델 훈련이 완료되면 Amazon Rekognition Custom Labels는 훈련 중에 지정된 Amazon S3 버킷에 검증 결과를 저장합니다. 훈련이 완료된 후 [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions) API를 직접 호출하여 S3 버킷 위치를 가져올 수 있습니다. 모델을 훈련하려면 [모델 훈련(SDK)](training-model.md#tm-sdk) 항목을 참조하세요.

훈련 데이터 세트([TrainingDataResult](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_TrainingDataResult))와 테스트 데이터 세트([TestingDataResult](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_TestingDataResult))에 대해 [ValidationData](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ValidationData) 객체가 반환됩니다. 매니페스트 요약이 `ManifestSummary`에 반환됩니다.

Amazon S3 버킷 위치를 확인한 후 검증 결과를 다운로드할 수 있습니다. 자세한 내용은 [S3 버킷에서 객체를 다운로드하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/download-objects.html)를 참조하세요. 또한 [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/dev/GettingObjectsUsingAPIs.html) 작업을 사용할 수도 있습니다.

**검증 데이터를 가져오려면(SDK)**

1. 아직 설치하지 않은 경우 및 AWS SDKs AWS CLI 를 설치하고 구성합니다. 자세한 내용은 [4단계: AWS CLI 및 AWS SDKs 설정](su-awscli-sdk.md) 단원을 참조하십시오.

1. 다음 예제를 사용하여 검증 결과의 위치를 가져옵니다.

------
#### [ Python ]

   `project_arn`을 모델이 포함된 프로젝트의 Amazon 리소스 이름(ARN)으로 바꿉니다. 자세한 내용은 [Amazon Rekognition Custom Labels 프로젝트 관리](managing-project.md) 단원을 참조하십시오. `version_name`을 모델 버전의 이름으로 바꿉니다. 자세한 내용은 [모델 훈련(SDK)](training-model.md#tm-sdk) 단원을 참조하십시오.

   ```
   import boto3
   import io
   from io import BytesIO
   import sys
   import json
   
   
   def describe_model(project_arn, version_name):
   
       client=boto3.client('rekognition')
       
       response=client.describe_project_versions(ProjectArn=project_arn,
           VersionNames=[version_name])
   
       for model in response['ProjectVersionDescriptions']:
           print(json.dumps(model,indent=4,default=str))
          
   def main():
   
       project_arn='project_arn'
       version_name='version_name'
   
       describe_model(project_arn, version_name)
   
   if __name__ == "__main__":
       main()
   ```

------

1. 프로그램 출력에서 `TestingDataResult` 및 `TrainingDataResult` 객체 내의 `Validation` 필드를 기록해 둡니다. 매니페스트 요약은 `ManifestSummary`에 있습니다.

# 훈련 오류 수정
<a name="tm-debugging-fixing-validation-errors"></a>

매니페스트 요약을 사용하여 훈련 중에 발생한 [터미널 매니페스트 콘텐츠 오류 목록](tm-debugging.md#tm-error-category-combined-terminal) 및 [비터미널 JSON 라인 검증 오류 목록](tm-debugging.md#tm-error-category-non-terminal-errors) 항목을 식별할 수 있습니다. 매니페스트 콘텐츠 오류는 반드시 수정해야 합니다. 비터미널 JSON 라인 오류도 수정하는 것이 좋습니다. 구체적인 오류와 해결책에 대해서는 [비터미널 JSON 라인 검증 오류](tm-debugging-json-line-errors.md) 및 [터미널 매니페스트 콘텐츠 오류](tm-debugging-aggregate-errors.md) 항목을 참조하세요.

훈련에 사용되는 훈련 또는 테스트 데이터 세트를 수정할 수 있습니다. 또는 훈련 및 테스트 검증 매니페스트 파일에서 필요한 부분을 수정하고 이를 사용하여 모델을 훈련할 수 있습니다.

수정한 후에는 업데이트된 매니페스트를 가져와서 모델을 재훈련해야 합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.

다음 절차는 매니페스트 요약을 사용하여 터미널 매니페스트 콘텐츠 오류를 수정하는 방법을 보여줍니다. 이 절차는 훈련 및 테스트 검증 매니페스트에서 JSON 라인 오류를 찾아 수정하는 방법도 보여줍니다.

**Amazon Rekognition Custom Labels 훈련 오류를 수정하려면**

1. 검증 결과 파일을 다운로드하세요. 파일 이름은 training\$1manifest\$1with\$1validation.json**, testing\$1manifest\$1with\$1validation.json**, manifest\$1summary.json**입니다. 자세한 내용은 [검증 결과 가져오기](tm-debugging-getting-validation-data.md) 단원을 참조하십시오.

1. 매니페스트 요약 파일(manifest\$1summary.json**)을 엽니다.

1. 매니페스트 요약의 모든 오류를 수정합니다. 자세한 내용은 [매니페스트 요약 이해](tm-debugging-summary.md) 단원을 참조하십시오.

1. 매니페스트 요약에서 `training`의 `error_line_indices` 배열을 반복하여 해당 JSON 라인 번호에서 `training_manifest_with_validation.json`의 오류를 수정하세요. 자세한 내용은 [훈련 및 테스트 검증 결과 매니페스트의 이해](tm-debugging-scope-json-line.md) 단원을 참조하십시오.

1. `testing`의 `error_line_indices` 배열을 반복하여 해당 JSON 라인 번호에서 `testing_manifest_with_validation.json`의 오류를 수정하세요.

1. 검증 매니페스트 파일을 훈련 및 테스트 데이터 세트로 사용하여 모델을 다시 훈련합니다. 자세한 내용은 [Amazon Rekognition Custom Labels 모델 훈련](training-model.md) 단원을 참조하십시오.

 AWS SDK를 사용 중이고 훈련 또는 테스트 검증 데이터 매니페스트 파일의 오류를 수정하도록 선택한 경우 [TrainingData](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_TrainingData) 및 [TestingData](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_TestingData) 입력 파라미터에서 검증 데이터 매니페스트 파일의 위치를 [CreateProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProjectVersion)으로 사용합니다. 자세한 내용은 [모델 훈련(SDK)](training-model.md#tm-sdk) 단원을 참조하십시오.

## JSON 라인 오류 우선순위
<a name="tm-debugging-json-line-error-precedence"></a>

다음 JSON 라인 오류가 먼저 감지됩니다. 이러한 오류가 발생하면 JSON 라인 오류 검증이 중지됩니다. 다른 JSON 라인 오류를 수정하려면 먼저 이러한 오류를 수정해야 합니다.
+ MISSING\$1SOURCE\$1REF
+ ERROR\$1INVALID\$1SOURCE\$1REF\$1FORMAT
+ ERROR\$1NO\$1LABEL\$1ATTRIBUTES
+ ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1FORMAT
+ ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1METADATA\$1FORMAT
+ ERROR\$1MISSING\$1BOUNDING\$1BOX\$1CONFIDENCE
+ ERROR\$1MISSING\$1CLASS\$1MAP\$1ID
+ ERROR\$1INVALID\$1JSON\$1LINE

# 터미널 매니페스트 파일 오류
<a name="tm-terminal-errors-reference"></a>

이 주제는 [터미널 매니페스트 파일 오류 목록](tm-debugging.md#tm-error-category-terminal)에 대해 설명합니다. 매니페스트 파일 오류에는 관련 오류 코드가 없습니다. 터미널 매니페스트 파일 오류가 발생하면 검증 결과 매니페스트가 생성되지 않습니다. 자세한 내용은 [매니페스트 요약 이해](tm-debugging-summary.md) 단원을 참조하십시오. 터미널 매니페스트 오류로 인해 [비터미널 JSON 라인 검증 오류](tm-debugging-json-line-errors.md) 보고가 불가능합니다.

## 매니페스트 파일 확장명 또는 콘텐츠가 유효하지 않습니다.
<a name="tm-error-message-ERROR_MANIFEST_INACCESSIBLE_OR_UNSUPPORTED_FORMAT"></a>

훈련 또는 테스트 매니페스트 파일에 파일 확장자가 없거나 해당 내용이 유효하지 않습니다.

**매니페스트 파일 확장명 또는 콘텐츠가 유효하지 않습니다** 오류를 수정하려면**
+ 훈련 매니페스트 파일과 테스트 매니페스트 파일 모두에서 다음과 같은 가능한 원인을 확인하세요.
  + 매니페스트 파일에 파일 확장명이 없습니다. 일반적으로 파일 확장자는 `.manifest`입니다.
  +  매니페스트 파일의 Amazon S3 버킷 또는 키를 찾을 수 없습니다.

## 매니페스트 파일이 비어 있습니다.
<a name="tm-error-message-ERROR_EMPTY_MANIFEST"></a>



훈련에 사용되는 훈련 또는 테스트 매니페스트 파일이 존재하지만 비어 있습니다. 매니페스트 파일에는 훈련 및 테스트에 사용하는 각 이미지에 대한 JSON 라인이 필요합니다.

**매니페스트 파일이 비어 있습니다** 오류를 수정하려면**

1. 훈련 매니페스트와 테스트 매니페스트 중 어느 것이 비어 있는지 확인하세요.

1. 빈 매니페스트 파일에 JSON 라인을 추가합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오. 또는 콘솔을 사용하여 새 데이터 세트를 생성합니다. 자세한 내용은 [이미지를 사용하여 훈련 및 테스트 데이터 세트 생성](md-create-dataset.md) 단원을 참조하십시오.



## 매니페스트 파일 크기가 지원되는 최대 크기를 초과합니다.
<a name="tm-error-message-ERROR_MANIFEST_SIZE_TOO_LARGE"></a>



훈련 또는 테스트 매니페스트 파일 크기(바이트)가 너무 큽니다. 자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 단원을 참조하십시오. 매니페스트 파일은 최대 JSON 라인 수보다 적으면서도 최대 파일 크기를 초과할 수 있습니다.

Amazon Rekognition Custom Labels 콘솔로는 매니페스트 파일 크기가 지원되는 최대 크기를 초과합니다** 오류를 수정할 수 없습니다.

**매니페스트 파일 크기가 지원되는 최대 크기를 초과합니다** 오류를 수정하려면**

1. 훈련 및 테스트 매니페스트 중에 어떤 것이 최대 파일 크기를 초과하는지 확인하세요.

1. 매니페스트 파일에서 너무 큰 JSON 라인 수를 줄이세요. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.

## S3 버킷 권한이 올바르지 않습니다.
<a name="tm-error-message-ERROR_INVALID_PERMISSIONS_MANIFEST_S3_BUCKET"></a>

Amazon Rekognition Custom Labels가 훈련 및 테스트 매니페스트 파일이 들어 있는 하나 이상의 버킷에 대한 권한이 없습니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

**S3 버킷 권한이 올바르지 않습니다** 오류를 수정하려면**
+ 훈련 및 테스트 매니페스트가 포함된 버킷의 권한을 확인하세요. 자세한 내용은 [2단계: Amazon Rekognition Custom Labels 콘솔 권한 설정](su-console-policy.md) 단원을 참조하십시오.

## 출력 S3 버킷에 쓸 수 없습니다.
<a name="tm-error-message-ERROR_CANNOT_WRITE_OUTPUT_S3_BUCKET"></a>



서비스가 훈련 출력 파일을 생성할 수 없습니다.

**출력 S3 버킷에 쓸 수 없습니다** 오류를 수정하려면**
+ [CreateProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProjectVersion)을 생성하기 위한 [OutputConfig](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_OutputConfig) 입력 파라미터의 Amazon S3 버킷 정보가 정확한지 확인하세요.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

# 터미널 매니페스트 콘텐츠 오류
<a name="tm-debugging-aggregate-errors"></a>

이 주제는 매니페스트 요약에 보고된 [터미널 매니페스트 콘텐츠 오류 목록](tm-debugging.md#tm-error-category-combined-terminal) 항목을 설명합니다. 매니페스트 요약에는 탐지된 각 오류에 대한 오류 코드와 메시지가 포함됩니다. 자세한 내용은 [매니페스트 요약 이해](tm-debugging-summary.md) 단원을 참조하십시오. 터미널 매니페스트 콘텐츠 오류는 [비터미널 JSON 라인 검증 오류 목록](tm-debugging.md#tm-error-category-non-terminal-errors) 보고를 중단하지 않습니다.

## ERROR\$1TOO\$1MANY\$1INVALID\$1ROWS\$1IN\$1MANIFEST
<a name="tm-error-ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST"></a>

매니페스트 파일에 잘못된 행이 너무 많습니다.

### 추가 정보
<a name="tm-error-description-ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST"></a>

잘못된 콘텐츠가 포함된 JSON 라인이 너무 많으면 `ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST` 오류가 발생합니다.

Amazon Rekognition Custom Labels로는 `ERROR_TOO_MANY_INVALID_ROWS_IN_MANIFEST` 오류를 수정할 수 없습니다.

**ERROR\$1TOO\$1MANY\$1INVALID\$1ROWS\$1IN\$1MANIFEST를 수정하려면**

1. 매니페스트에서 JSON 라인 오류가 있는지 확인하세요. 자세한 내용은 [훈련 및 테스트 검증 결과 매니페스트의 이해](tm-debugging-scope-json-line.md) 단원을 참조하십시오.

1.  오류가 있는 JSON 라인을 수정하세요. 자세한 내용은 [비터미널 JSON 라인 검증 오류](tm-debugging-json-line-errors.md) 섹션을 참조하세요.



## ERROR\$1IMAGES\$1IN\$1MULTIPLE\$1S3\$1BUCKETS
<a name="tm-error-ERROR_IMAGES_IN_MULTIPLE_S3_BUCKETS"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_IMAGES_IN_MULTIPLE_S3_BUCKETS"></a>

매니페스트 파일에는 여러 S3 버킷의 이미지가 포함되어 있습니다.

### 추가 정보
<a name="tm-error-description-ERROR_IMAGES_IN_MULTIPLE_S3_BUCKETS"></a>

매니페스트는 하나의 버킷에 저장된 이미지만 참조할 수 있습니다. 각 JSON 라인은 이미지 위치의 Amazon S3 위치를 `source-ref`의 값으로 저장합니다. 다음 예제에서 버킷 이름은 my-bucket**입니다.

```
"source-ref": "s3://my-bucket/images/sunrise.png"
```

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

**`ERROR_IMAGES_IN_MULTIPLE_S3_BUCKETS` 오류를 수정하려면**
+ 모든 이미지가 동일한 Amazon S3 버킷에 있고 모든 JSON 라인의 `source-ref` 값이 이미지가 저장된 버킷을 참조하는지 확인하세요. 또는 선호하는 Amazon S3 버킷을 선택하고 선호하는 버킷을 참조하지 않는 `source-ref` JSON 라인을 제거하세요.



## ERROR\$1INVALID\$1PERMISSIONS\$1IMAGES\$1S3\$1BUCKET
<a name="tm-error-ERROR_INVALID_PERMISSIONS_IMAGES_S3_BUCKET"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_PERMISSIONS_IMAGES_S3_BUCKET"></a>

이미지 S3 버킷에 대한 권한이 유효하지 않습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_PERMISSIONS_IMAGES_S3_BUCKET"></a>

이미지가 포함된 Amazon S3 버킷에 대한 권한이 잘못되었습니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

**`ERROR_INVALID_PERMISSIONS_IMAGES_S3_BUCKET` 오류를 수정하려면**
+ 이미지가 들어 있는 버킷의 권한을 확인하세요. 이미지의 `source-ref` 값에는 버킷 위치가 포함됩니다.



## ERROR\$1INVALID\$1IMAGES\$1S3\$1BUCKET\$1OWNER
<a name="tm-error-ERROR_INVALID_IMAGES_S3_BUCKET_OWNER"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_IMAGES_S3_BUCKET_OWNER"></a>

이미지 S3 버킷의 소유자 ID가 잘못되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_IMAGES_S3_BUCKET_OWNER"></a>

훈련 또는 테스트 이미지가 포함된 버킷의 소유자가 훈련 또는 테스트 매니페스트가 포함된 버킷의 소유자와 다릅니다. 다음 명령을 사용하여 버킷의 소유자를 찾을 수 있습니다.

```
aws s3api get-bucket-acl --bucket amzn-s3-demo-bucket
```

`OWNER` 및 `ID`가 이미지와 매니페스트 파일을 저장하는 버킷과 일치해야 합니다.

**ERROR\$1INVALID\$1IMAGES\$1S3\$1BUCKET\$1OWNER 오류를 수정하려면**

1. 훈련, 테스트, 출력, 이미지 버킷의 원하는 소유자를 선택합니다. 소유자에게는 Amazon Rekognition Custom Labels를 사용할 권한이 있어야 합니다.

1. 원하는 소유자가 현재 소유하지 않은 각 버킷에 대해 원하는 소유자가 소유한 새 Amazon S3 버킷을 생성합니다.

1. 이전 버킷 콘텐츠를 새 버킷에 복사합니다. 자세한 내용은 [Amazon S3 버킷 간에 객체를 복사하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/move-objects-s3-bucket/)를 참조하세요.



Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1INSUFFICIENT\$1IMAGES\$1PER\$1LABEL\$1FOR\$1AUTOSPLIT
<a name="tm-error-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_AUTOSPLIT"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_AUTOSPLIT"></a>

매니페스트 파일에 레이블당 레이블이 지정된 이미지가 부족하여 자동 분할을 수행할 수 없습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INSUFFICIENT_IMAGES_PER_LABEL_FOR_AUTOSPLIT"></a>

모델 훈련 중에 훈련 데이터 세트의 이미지 중 20%를 사용하여 테스트 데이터 세트를 만들 수 있습니다. 이미지가 충분하지 않아 수용 가능한 테스트 데이터 세트를 만들 수 없을 때 ERROR\$1INFFICIENT\$1IMAGES\$1PER\$1LABEL\$1FOR\$1AUTOSPLIT이 발생합니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

**ERROR\$1INSUFFICIENT\$1IMAGES\$1PER\$1LABEL\$1FOR\$1AUTOSPLIT을 수정하려면**
+ 훈련 데이터 세트에 레이블이 지정된 이미지를 더 추가하세요. Amazon Rekognition Custom Labels 콘솔에서 훈련 데이터세트에 이미지를 추가하거나 훈련 매니페스트에 JSON 라인을 추가하여 이미지를 추가할 수 있습니다. 자세한 내용은 [데이터 세트 관리](managing-dataset.md) 단원을 참조하십시오.



## ERROR\$1MANIFEST\$1TOO\$1FEW\$1LABELS
<a name="tm-error-ERROR_MANIFEST_TOO_FEW_LABELS"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_MANIFEST_TOO_FEW_LABELS"></a>

매니페스트 파일에 레이블이 너무 적습니다.

### 추가 정보
<a name="tm-error-description-ERROR_MANIFEST_TOO_FEW_LABELS"></a>

훈련 및 테스트 데이터 세트에는 필요한 최소 개수의 레이블이 있습니다. 최솟값은 데이터 세트가 모델을 훈련/테스트하여 이미지 수준 레이블(분류)을 탐지하는지 또는 모델이 객체 위치를 감지하는지 여부에 따라 달라집니다. 훈련 데이터 세트를 분할하여 테스트 데이터 세트를 만드는 경우, 훈련 데이터 세트가 분할된 후 데이터 세트의 레이블 개수가 결정됩니다. 자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 단원을 참조하십시오.

**ERROR\$1MANIFEST\$1TOO\$1FEW\$1LABELS 오류를 수정하려면(콘솔)**

1. 데이터 세트에 새 레이블을 더 추가하세요. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오.

1. 데이터 세트의 이미지에 새 레이블을 추가합니다. 모델이 이미지 수준 레이블을 감지하는 경우 [이미지에 이미지 수준 레이블 지정](md-assign-image-level-labels.md) 항목을 참조하세요. 모델이 객체 위치를 감지하는 경우 [경계 상자로 객체에 레이블 지정](md-localize-objects.md) 항목을 참조하세요.



**ERROR\$1MANIFEST\$1TOO\$1FEW\$1LABELS 오류를 해결하려면(JSON 라인)**
+ 새 레이블이 붙은 새 이미지에 JSON 라인을 추가하세요. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오. 모델이 이미지 수준 레이블을 감지하는 경우 `class-name` 필드에 새 레이블 이름을 추가합니다. 예를 들어, 다음 이미지의 레이블은 Sunrise**입니다.

  ```
  {
      "source-ref": "s3://bucket/images/sunrise.png",
      "testdataset-classification_Sunrise": 1,
      "testdataset-classification_Sunrise-metadata": {
          "confidence": 1,
          "job-name": "labeling-job/testdataset-classification_Sunrise",
          "class-name": "Sunrise",
          "human-annotated": "yes",
          "creation-date": "2018-10-18T22:18:13.527256",
          "type": "groundtruth/image-classification"
      }
  }
  ```

   모델이 객체 위치를 감지하는 경우 다음 예제와 같이 `class-map`에 새 레이블을 추가합니다.

  ```
  {
  	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
  	"bounding-box": {
  		"image_size": [{
  			"width": 640,
  			"height": 480,
  			"depth": 3
  		}],
  		"annotations": [{
  			"class_id": 1,
  			"top": 251,
  			"left": 399,
  			"width": 155,
  			"height": 101
  		}, {
  			"class_id": 0,
  			"top": 65,
  			"left": 86,
  			"width": 220,
  			"height": 334
  		}]
  	},
  	"bounding-box-metadata": {
  		"objects": [{
  			"confidence": 1
  		}, {
  			"confidence": 1
  		}],
  		"class-map": {
  			"0": "Echo",
  			"1": "Echo Dot"
  		},
  		"type": "groundtruth/object-detection",
  		"human-annotated": "yes",
  		"creation-date": "2018-10-18T22:18:13.527256",
  		"job-name": "my job"
  	}
  }
  ```

  클래스 맵 테이블을 경계 상자 주석에 매핑해야 합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

## ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS
<a name="tm-error-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

매니페스트 파일에 레이블이 너무 많습니다.

#### 추가 정보
<a name="tm-error-description-ERROR_MANIFEST_TOO_MANY_LABELS"></a>

매니페스트(데이터 세트)의 고유 레이블 수가 허용된 한도를 초과했습니다. 훈련 데이터 세트를 분할하여 테스트 데이터 세트를 만드는 경우 분할 후 레이블 수가 결정됩니다.

**ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS 오류를 수정하려면(콘솔)**
+ 데이터 세트에서 레이블을 제거합니다. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오. 데이터 세트의 이미지와 경계 상자에서 레이블이 자동으로 제거됩니다.



**ERROR\$1MANIFEST\$1TOO\$1MANY\$1LABELS 오류를 수정하려면(JSON 라인)**
+ 이미지 수준 JSON 라인이 있는 매니페스트: 이미지에 하나의 레이블이 있는 경우 원하는 레이블을 사용하는 이미지의 JSON 라인을 제거하세요. JSON 라인에 여러 레이블이 포함된 경우 원하는 레이블의 JSON 객체만 제거하세요. 자세한 내용은 [이미지에 여러 이미지 수준 레이블 추가](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels) 단원을 참조하십시오.

  객체 위치가 있는 매니페스트 JSON 라인: 제거하려는 레이블의 경계 상자 및 관련 레이블 정보를 제거합니다. 원하는 레이블이 포함된 각 JSON 라인에 대해 이 작업을 수행하세요. `class-map` 배열과 `objects` 및 `annotations` 배열의 해당 객체를 레이블에서 제거해야 합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

## ERROR\$1INSUFFICIENT\$1LABEL\$1OVERLAP
<a name="tm-error-ERROR_INSUFFICIENT_LABEL_OVERLAP"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INSUFFICIENT_LABEL_OVERLAP"></a>

훈련 매니페스트 파일과 테스트 매니페스트 파일 간에 겹치는 레이블이 \$1\$1% 미만입니다.

### 추가 정보
<a name="tm-error-description-ERROR_INSUFFICIENT_LABEL_OVERLAP"></a>

테스트 데이터 세트 레이블 이름과 훈련 데이터 세트 레이블 이름 간의 중첩이 50% 미만입니다.

**ERROR\$1INSUFFICIENT\$1LABEL\$1OVERLAP 오류를 수정하려면(콘솔)**
+ 훈련 데이터 세트에서 레이블을 제거하세요. 또는 테스트 데이터 세트에 더 일반적인 레이블을 추가할 수도 있습니다. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오. 데이터 세트의 이미지와 경계 상자에서 레이블이 자동으로 제거됩니다.



**훈련 데이터 세트에서 레이블을 제거하여 ERROR\$1INSUFFICIENT\$1LABEL\$1OVERLAP 오류를 수정하려면(JSON 라인)**
+ 이미지 수준 JSON 라인이 있는 매니페스트: 이미지에 하나의 레이블이 있는 경우 원하는 레이블을 사용하는 이미지의 JSON 라인을 제거하세요. JSON 라인에 여러 레이블이 포함된 경우 원하는 레이블의 JSON 객체만 제거하세요. 자세한 내용은 [이미지에 여러 이미지 수준 레이블 추가](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels) 단원을 참조하십시오. 제거하려는 레이블이 들어 있는 매니페스트의 각 JSON 라인에 대해 이 작업을 수행하세요.

  객체 위치가 있는 매니페스트 JSON 라인: 제거하려는 레이블의 경계 상자 및 관련 레이블 정보를 제거합니다. 원하는 레이블이 포함된 각 JSON 라인에 대해 이 작업을 수행하세요. `class-map` 배열과 `objects` 및 `annotations` 배열의 해당 객체를 레이블에서 제거해야 합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

**테스트 데이터 세트에 일반적인 레이블을 추가하여 ERROR\$1INSUFFICIENT\$1LABEL\$1OVERLAP 오류를 수정하려면(JSON 라인)**
+ 훈련 데이터 세트에 이미 레이블이 지정된 이미지가 포함된 JSON 라인을 테스트 데이터 세트에 추가합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.

## ERROR\$1MANIFEST\$1TOO\$1FEW\$1USABLE\$1LABELS
<a name="tm-error-ERROR_MANIFEST_TOO_FEW_USABLE_LABELS"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_MANIFEST_TOO_FEW_USABLE_LABELS"></a>

매니페스트 파일에 사용 가능한 레이블이 너무 적습니다.

### 추가 정보
<a name="tm-error-description-ERROR_MANIFEST_TOO_FEW_USABLE_LABELS"></a>

훈련 매니페스트에는 이미지 수준 레이블 형식과 객체 위치 형식의 JSON 라인이 포함될 수 있습니다. Amazon Rekognition Custom Labels는 훈련 매니페스트에 있는 JSON 라인 유형에 따라 이미지 수준 레이블을 감지하는 모델 또는 객체 위치를 감지하는 모델을 생성합니다. Amazon Rekognition Custom Labels는 선택한 형식이 아닌 JSON 라인에 대해 유효한 JSON 레코드를 필터링합니다. 선택한 모델 유형 매니페스트의 레이블 수가 모델을 훈련하기에 충분하지 않은 경우 ERROR\$1MANIFEST\$1TOO\$1FEW\$1USABLE\$1LABELS가 발생합니다.

이미지 수준 레이블을 감지하는 모델을 훈련하려면 최소 1개의 레이블이 필요합니다. 위치를 파악하는 모델을 훈련하려면 최소 2개의 레이블이 필요합니다.

**ERROR\$1MANIFEST\$1TOO\$1FEW\$1USABLE\$1LABELS 오류를 수정하려면(콘솔)**

1. 매니페스트 요약에서 `use_case` 필드를 확인하세요.

1. `use_case`의 값과 일치하는 사용 사례(이미지 수준 또는 객체 위치 파악)의 훈련 데이터 세트에 레이블을 더 추가하세요. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오. 데이터 세트의 이미지와 경계 상자에서 레이블이 자동으로 제거됩니다.

**ERROR\$1MANIFEST\$1TOO\$1FEW\$1USABLE\$1LABELS 오류를 수정하려면(JSON 라인)**

1. 매니페스트 요약에서 `use_case` 필드를 확인하세요.

1. `use_case`의 값과 일치하는 사용 사례(이미지 수준 또는 객체 위치 파악)의 훈련 데이터 세트에 레이블을 더 추가하세요. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.



## ERROR\$1INSUFFICIENT\$1USABLE\$1LABEL\$1OVERLAP
<a name="tm-error-ERROR_INSUFFICIENT_USABLE_LABEL_OVERLAP"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INSUFFICIENT_USABLE_LABEL_OVERLAP"></a>

훈련 매니페스트 파일과 테스트 매니페스트 파일 간에 겹치는 사용 가능한 레이블이 \$1\$1% 미만입니다.

### 추가 정보
<a name="tm-error-description-ERROR_INSUFFICIENT_USABLE_LABEL_OVERLAP"></a>

 

훈련 매니페스트에는 이미지 수준 레이블 형식과 객체 위치 형식의 JSON 라인이 포함될 수 있습니다. Amazon Rekognition Custom Labels는 훈련 매니페스트에 있는 형식에 따라 이미지 수준 레이블을 감지하는 모델 또는 객체 위치를 감지하는 모델을 생성합니다. Amazon Rekognition Custom Labels가 선택한 모델 형식이 아닌 JSON 라인에 대해 유효한 JSON 레코드를 사용하지 않습니다. 사용되는 테스트 레이블과 훈련 레이블 간에 겹치는 부분이 50% 미만이면 ERROR\$1INFFICIENT\$1USABLE\$1LABEL\$1OVERLAP이 발생합니다.

**ERROR\$1INSUFFICIENT\$1USABLE\$1LABEL\$1OVERLAP 오류를 수정하려면(콘솔)**
+ 훈련 데이터 세트에서 레이블을 제거하세요. 또는 테스트 데이터 세트에 더 일반적인 레이블을 추가할 수도 있습니다. 자세한 내용은 [레이블 관리](md-labels.md) 단원을 참조하십시오. 데이터 세트의 이미지와 경계 상자에서 레이블이 자동으로 제거됩니다.



**훈련 데이터세트에서 레이블을 제거하여 ERROR\$1INSUFFICIENT\$1USABLE\$1LABEL\$1OVERLAP을 수정하려면(JSON 라인)**
+ 이미지 수준 레이블을 감지하는 데 사용되는 데이터 세트: 이미지에 하나의 레이블이 있는 경우 원하는 레이블을 사용하는 이미지의 JSON 라인을 삭제하세요. JSON 라인에 여러 레이블이 포함된 경우 원하는 레이블의 JSON 객체만 제거하세요. 자세한 내용은 [이미지에 여러 이미지 수준 레이블 추가](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels) 단원을 참조하십시오. 제거하려는 레이블이 들어 있는 매니페스트의 각 JSON 라인에 대해 이 작업을 수행하세요.

  객체 위치를 감지하는 데 사용되는 데이터 세트: 제거하려는 레이블의 경계 상자 및 관련 레이블 정보를 제거하세요. 원하는 레이블이 포함된 각 JSON 라인에 대해 이 작업을 수행하세요. `class-map` 배열과 `objects` 및 `annotations` 배열의 해당 객체를 레이블에서 제거해야 합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 단원을 참조하십시오.

**테스트 데이터세트에 공통 레이블을 추가하여 ERROR\$1INSUFFICIENT\$1USABLE\$1LABEL\$1OVERLAP을 수정하려면(JSON 라인)**
+ 훈련 데이터 세트에 이미 레이블이 지정된 이미지가 포함된 JSON 라인을 테스트 데이터 세트에 추가합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 단원을 참조하십시오.



## ERROR\$1FAILED\$1IMAGES\$1S3\$1COPY
<a name="tm-error-ERROR_FAILED_IMAGES_S3_COPY"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_FAILED_IMAGES_S3_COPY"></a>

S3 버킷에서 이미지를 복사하지 못했습니다.

### 추가 정보
<a name="tm-error-description-ERROR_FAILED_IMAGES_S3_COPY"></a>

서비스가 데이터 세트에 있는 이미지를 복사하지 못했습니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

**ERROR\$1FAILED\$1IMAGES\$1S3\$1COPY 오류를 수정하려면**

1. 이미지의 권한을 확인하세요.

1. 를 사용하는 경우 버킷 정책을 AWS KMS확인합니다. 자세한 내용은 [로 암호화된 파일 복호화 AWS Key Management Service](su-encrypt-bucket.md#su-kms-encryption) 단원을 참조하십시오.

## 매니페스트 파일에 터미널 오류가 너무 많습니다.
<a name="tm-error-message-ERROR_TOO_MANY_RECORDS_IN_ERROR"></a>



터미널 콘텐츠 오류가 있는 JSON 라인이 너무 많습니다.

**`ERROR_TOO_MANY_RECORDS_IN_ERROR` 오류를 수정하려면**
+ 터미널 콘텐츠 오류가 있는 JSON 라인(이미지) 수를 줄이세요. 자세한 내용은 [터미널 매니페스트 콘텐츠 오류](#tm-debugging-aggregate-errors) 단원을 참조하십시오.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

# 비터미널 JSON 라인 검증 오류
<a name="tm-debugging-json-line-errors"></a>

이 주제에는 Amazon Rekognition Custom Labels가 훈련 중에 보고한 비터미널 JSON 라인 검증 오류가 나열되어 있습니다. 오류는 훈련 및 테스트 검증 매니페스트에 보고됩니다. 자세한 내용은 [훈련 및 테스트 검증 결과 매니페스트의 이해](tm-debugging-scope-json-line.md) 단원을 참조하십시오. 훈련 또는 테스트 매니페스트 파일에서 JSON 라인을 업데이트하여 터미널이 아닌 JSON 라인 오류를 수정할 수 있습니다. 매니페스트에서 JSON 라인을 제거할 수도 있지만 이렇게 하면 모델 품질이 저하될 수 있습니다. 터미널이 아닌 검증 오류가 많으면 매니페스트 파일을 다시 만드는 것이 더 쉬울 수 있습니다. 검증 오류는 일반적으로 수동으로 만든 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요. 검증 오류 수정에 대한 자세한 내용은 [훈련 오류 수정](tm-debugging-fixing-validation-errors.md) 항목을 참조하세요. Amazon Rekognition Custom Labels 콘솔을 사용하여 일부 오류를 수정할 수 있습니다.

## ERROR\$1MISSING\$1SOURCE\$1REF
<a name="tm-error-ERROR_MISSING_SOURCE_REF"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_MISSING_SOURCE_REF"></a>

source-ref 키가 누락되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_MISSING_SOURCE_REF"></a>

JSON 라인 `source-ref` 필드는 이미지의 Amazon S3 위치를 제공합니다. 이 오류는 `source-ref` 키가 누락되었거나 철자가 잘못되었을 때 발생합니다. 이 오류는 일반적으로 수동으로 만든 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

**`ERROR_MISSING_SOURCE_REF` 오류를 수정하려면**

1. `source-ref` 키가 있고 철자가 올바른지 확인하세요. 완전한 `source-ref` 키와 값은 `"source-ref": "s3://bucket/path/image"`와 비슷합니다.

1. JSON 라인의 `source-ref` 키를 업데이트하세요. 또는 매니페스트 파일에서 JSON 라인을 제거해도 됩니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1INVALID\$1SOURCE\$1REF\$1FORMAT
<a name="tm-error-ERROR_INVALID_SOURCE_REF_FORMAT"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_SOURCE_REF_FORMAT"></a>

source-ref 값의 형식이 잘못되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_SOURCE_REF_FORMAT"></a>

`source-ref` 키가 JSON 라인에 있지만 Amazon S3 경로의 스키마가 올바르지 않습니다. 예를 들어, 경로가 `https://....` 대신 `S3://....`입니다. ERROR\$1INVALID\$1SOURCE\$1REF\$1FORMAT 오류는 일반적으로 수동으로 생성한 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

**`ERROR_INVALID_SOURCE_REF_FORMAT` 오류를 수정하려면**

1. 스키마가 `"source-ref": "s3://bucket/path/image"`인지 확인하세요. 예를 들어 `"source-ref": "s3://custom-labels-console-us-east-1-1111111111/images/000000242287.jpg"`입니다.

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

 Amazon Rekognition Custom Labels 콘솔로는 `ERROR_INVALID_SOURCE_REF_FORMAT`을 수정할 수 없습니다.

## ERROR\$1NO\$1LABEL\$1ATTRIBUTES
<a name="tm-error-ERROR_NO_LABEL_ATTRIBUTES"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_NO_LABEL_ATTRIBUTES"></a>

레이블 속성을 찾을 수 없습니다.

### 추가 정보
<a name="tm-error-description-ERROR_NO_LABEL_ATTRIBUTES"></a>

레이블 속성 또는 레이블 속성 `-metadata` 키 이름(또는 둘 다)이 잘못되었거나 누락되었습니다. 다음 예제에서는 `bounding-box` 또는 `bounding-box-metadata` 키(또는 둘 다)가 누락될 때마다 `ERROR_NO_LABEL_ATTRIBUTES`가 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

```
{
	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
	"bounding-box": {
		"image_size": [{
			"width": 640,
			"height": 480,
			"depth": 3
		}],
		"annotations": [{
			"class_id": 1,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}, {
			"class_id": 0,
			"top": 65,
			"left": 86,
			"width": 220,
			"height": 334
		}]
	},
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
		"class-map": {
			"0": "Echo",
			"1": "Echo Dot"
		},
		"type": "groundtruth/object-detection",
		"human-annotated": "yes",
		"creation-date": "2018-10-18T22:18:13.527256",
		"job-name": "my job"
	}
}
```

 `ERROR_NO_LABEL_ATTRIBUTES` 오류는 일반적으로 수동으로 만든 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

**`ERROR_NO_LABEL_ATTRIBUTES` 오류를 수정하려면**

1. 레이블 속성 식별자와 레이블 속성 식별자 `-metadata` 키가 있고 키 이름의 철자가 올바른지 확인하세요.

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

Amazon Rekognition Custom Labels 콘솔로는 `ERROR_NO_LABEL_ATTRIBUTES`를 수정할 수 없습니다.

## ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1FORMAT
<a name="tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT"></a>

레이블 속성 \$1\$1의 형식이 잘못되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT"></a>

레이블 속성 키의 스키마가 누락되었거나 유효하지 않습니다. ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1FORMAT 오류는 일반적으로 수동으로 생성한 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

**`ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT` 오류를 수정하려면**

1. 레이블 속성 키의 JSON 라인 섹션이 올바른지 확인하세요. 다음 예제 객체 위치 예제에서는 `image_size` 및 `annotations` 객체가 정확해야 합니다. 레이블 속성 키는 `bounding-box` 이름이 지정되어 있습니다.

   ```
   	"bounding-box": {
   		"image_size": [{
   			"width": 640,
   			"height": 480,
   			"depth": 3
   		}],
   		"annotations": [{
   			"class_id": 1,
   			"top": 251,
   			"left": 399,
   			"width": 155,
   			"height": 101
   		}, {
   			"class_id": 0,
   			"top": 65,
   			"left": 86,
   			"width": 220,
   			"height": 334
   		}]
   	},
   ```

   

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1METADATA\$1FORMAT
<a name="tm-error-ERROR_INVALID_LABEL_ATTRIBUTE_METADATA_FORMAT"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_LABEL_ATTRIBUTE_METADATA_FORMAT"></a>

레이블 속성 메타데이터의 형식이 잘못되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_LABEL_ATTRIBUTE_METADATA_FORMAT"></a>

레이블 속성 메타데이터 키의 스키마가 누락되었거나 유효하지 않습니다. ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1METADATA\$1FORMAT 오류는 일반적으로 수동으로 생성한 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

**`ERROR_INVALID_LABEL_ATTRIBUTE_FORMAT` 오류를 수정하려면**

1. 레이블 속성 메타데이터 키의 JSON 라인 스키마가 다음 예와 비슷한지 확인하세요. 레이블 속성 메타데이터 키는 `bounding-box-metadata` 이름이 지정되어 있습니다.

   ```
   	"bounding-box-metadata": {
   		"objects": [{
   			"confidence": 1
   		}, {
   			"confidence": 1
   		}],
   		"class-map": {
   			"0": "Echo",
   			"1": "Echo Dot"
   		},
   		"type": "groundtruth/object-detection",
   		"human-annotated": "yes",
   		"creation-date": "2018-10-18T22:18:13.527256",
   		"job-name": "my job"
   	}
   ```

   

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.



Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1NO\$1VALID\$1LABEL\$1ATTRIBUTES
<a name="tm-error-ERROR_NO_VALID_LABEL_ATTRIBUTES"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_NO_VALID_LABEL_ATTRIBUTES"></a>

유효한 레이블 속성을 찾을 수 없습니다.

### 추가 정보
<a name="tm-error-description-ERROR_NO_VALID_LABEL_ATTRIBUTES"></a>

JSON 라인에서 유효한 레이블 속성을 찾을 수 없습니다. Amazon Rekognition Custom Labels는 레이블 속성과 레이블 속성 식별자를 모두 확인합니다. ERROR\$1INVALID\$1LABEL\$1ATTRIBUTE\$1FORMAT 오류는 일반적으로 수동으로 생성한 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

JSON 라인이 지원되는 SageMaker AI 매니페스트 형식이 아닌 경우 Amazon Rekognition Custom Labels는 JSON 라인을 유효하지 않은 것으로 표시하고 `ERROR_NO_VALID_LABEL_ATTRIBUTES` 오류가 보고됩니다. 현재 Amazon Rekognition Custom Labels는 분류 작업 및 경계 상자 형식을 지원합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

**`ERROR_NO_VALID_LABEL_ATTRIBUTES` 오류를 수정하려면**

1. 레이블 속성 키와 레이블 속성 메타데이터의 JSON이 올바른지 확인하세요.

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1MISSING\$1BOUNDING\$1BOX\$1CONFIDENCE
<a name="tm-error-ERROR_MISSING_BOUNDING_BOX_CONFIDENCE"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_MISSING_BOUNDING_BOX_CONFIDENCE"></a>

하나 이상의 경계 상자에 신뢰도 값이 누락되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_MISSING_BOUNDING_BOX_CONFIDENCE"></a>

하나 이상의 객체 위치 경계 상자에 대한 신뢰도 키가 누락되었습니다. 경계 상자의 신뢰도 키는 다음 예제와 같이 레이블 속성 메타데이터에 있습니다. ERROR\$1MISSING\$1BOUNDING\$1BOX\$1CONFIDENCE 오류는 일반적으로 수동으로 만든 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.

```
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
```

**`ERROR_MISSING_BOUNDING_BOX_CONFIDENCE` 오류를 수정하려면**

1. 레이블 속성의 `objects` 배열에 레이블 속성 `annotations` 배열에 있는 객체와 동일한 개수의 신뢰도 키가 포함되어 있는지 확인하세요.

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.



Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1MISSING\$1CLASS\$1MAP\$1ID
<a name="tm-error-ERROR_MISSING_CLASS_MAP_ID"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_MISSING_CLASS_MAP_ID"></a>

클래스 맵에서 하나 이상의 클래스 ID가 누락되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_MISSING_CLASS_MAP_ID"></a>

주석(경계 상자) 객체 내의 `class_id`가 레이블 속성 메타데이터 클래스 맵(`class-map`)에 일치하는 항목이 없습니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요. ERROR\$1MISSING\$1CLASS\$1MAP\$1ID 오류는 일반적으로 수동으로 만든 매니페스트 파일에서 발생합니다.

**ERROR\$1MISSING\$1CLASS\$1MAP\$1ID 오류를 수정하려면**

1. 다음 예와 같이 각 주석(경계 상자) 객체의 `class_id` 값에 대해 `class-map` 배열 안에 상응하는 값이 있는지 확인하세요. `annotations` 배열과 `class_map` 배열의 요소 개수는 같아야 합니다.

   ```
   {
   	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
   	"bounding-box": {
   		"image_size": [{
   			"width": 640,
   			"height": 480,
   			"depth": 3
   		}],
   		"annotations": [{
   			"class_id": 1, 
   			"top": 251,
   			"left": 399,
   			"width": 155,
   			"height": 101
   		}, {
   			"class_id": 0,
   			"top": 65,
   			"left": 86,
   			"width": 220,
   			"height": 334
   		}]
   	},
   	"bounding-box-metadata": {
   		"objects": [{
   			"confidence": 1
   		}, {
   			"confidence": 1
   		}],
   		"class-map": {
   			"0": "Echo",
   			"1": "Echo Dot"
   		}, 
   		"type": "groundtruth/object-detection",
   		"human-annotated": "yes",
   		"creation-date": "2018-10-18T22:18:13.527256",
   		"job-name": "my job"
   	}
   }
   ```

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1INVALID\$1JSON\$1LINE
<a name="tm-error-ERROR_INVALID_JSON_LINE"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_JSON_LINE"></a>

JSON 라인의 형식이 잘못되었습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_JSON_LINE"></a>

JSON 라인에서 예상치 못한 문자가 발견되었습니다. JSON 라인은 오류 정보만 포함된 새 JSON 라인으로 대체됩니다. ERROR\$1INVALID\$1JSON\$1LINE 오류는 일반적으로 수동으로 생성한 매니페스트 파일에서 발생합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

**`ERROR_INVALID_JSON_LINE` 오류를 수정하려면**

1. 매니페스트 파일을 열고 ERROR\$1INVALID\$1JSON\$1LINE 오류가 발생한 JSON 라인으로 이동하세요.

1. JSON 라인에 유효하지 않은 문자가 없고 `;` 또는 `,` 필수 문자가 누락되어 있지 않은지 확인하세요.

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

## ERROR\$1INVALID\$1IMAGE
<a name="tm-error-ERROR_INVALID_IMAGE"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_IMAGE"></a>

이미지가 유효하지 않습니다. S3 경로 및/또는 이미지 속성을 확인하세요.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_IMAGE"></a>

`source-ref`가 참조한 파일이 유효한 이미지가 아닙니다. 가능한 원인으로는 이미지 종횡비, 이미지 크기, 이미지 형식 등이 있습니다.

자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 섹션을 참조하세요.

**`ERROR_INVALID_IMAGE` 오류를 수정하려면**

1. 다음을 확인하세요.
   + 이미지의 종횡비가 20:1 미만입니다.
   + 이미지 크기가 15MB를 초과합니다.
   + 이미지가 PNG 또는 JPEG 형식입니다.
   + `source-ref`의 이미지에 대한 경로가 올바릅니다.
   + 이미지의 최소 크기는 64픽셀 x 64픽셀입니다.
   + 이미지의 최대 크기는 4096픽셀 x 4096픽셀입니다.

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1INVALID\$1IMAGE\$1DIMENSION
<a name="tm-error-ERROR_INVALID_IMAGE_DIMENSION"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_IMAGE_DIMENSION"></a>

이미지 크기가 허용된 크기와 일치하지 않습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_IMAGE_DIMENSION"></a>

`source-ref`가 참조하는 이미지가 허용된 이미지 크기를 준수하지 않습니다. 최소 크기는 64픽셀입니다. 최대 크기는 4096픽셀입니다. 경계 상자가 있는 이미지에 대해 `ERROR_INVALID_IMAGE_DIMENSION`은 보고됩니다.

자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 섹션을 참조하세요.

**`ERROR_INVALID_IMAGE_DIMENSION` 오류를 수정하려면(콘솔)**

1. Amazon S3 버킷의 이미지를 Amazon Rekognition Custom Labels가 처리할 수 있는 크기로 업데이트합니다.

1. Amazon Rekognition Custom Labels 콘솔에서 다음을 수행합니다.

   1. 이미지에서 기존 경계 상자를 제거합니다.

   1. 이미지에 경계 상자를 다시 추가합니다.

   1. 변경 내용을 저장합니다.

   자세한 설명은 [경계 상자로 객체에 레이블 지정](md-localize-objects.md) 섹션을 참조하세요.

**`ERROR_INVALID_IMAGE_DIMENSION` 오류를 수정하려면(SDK)**

1. Amazon S3 버킷의 이미지를 Amazon Rekognition Custom Labels가 처리할 수 있는 크기로 업데이트합니다.

1. [ListDatasetEntries](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListDatasetEntries)를 직접 호출하여 이미지의 기존 JSON 라인을 가져옵니다. `SourceRefContains` 입력 파라미터에 이미지의 Amazon S3 위치 및 파일 이름을 지정합니다.

1. [UpdateDataSetEntries](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_UpdateDatasetEntries)를 직접 호출하고 이미지의 JSON 라인을 제공하세요. `source-ref`의 값이 Amazon S3 버킷의 이미지 위치와 일치하는지 확인합니다. 경계 상자 주석을 업데이트하여 업데이트된 이미지에 필요한 경계 상자 크기와 일치하도록 하세요.

   ```
   {
   	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
   	"bounding-box": {
   		"image_size": [{
   			"width": 640,
   			"height": 480,
   			"depth": 3
   		}],
   		"annotations": [{
   			"class_id": 1,
   			"top": 251,
   			"left": 399,
   			"width": 155,
   			"height": 101
   		}, {
   			"class_id": 0,
   			"top": 65,
   			"left": 86,
   			"width": 220,
   			"height": 334
   		}]
   	},
   	"bounding-box-metadata": {
   		"objects": [{
   			"confidence": 1
   		}, {
   			"confidence": 1
   		}],
   		"class-map": {
   			"0": "Echo",
   			"1": "Echo Dot"
   		},
   		"type": "groundtruth/object-detection",
   		"human-annotated": "yes",
   		"creation-date": "2013-11-18T02:53:27",
   		"job-name": "my job"
   	}
   }
   ```

    

## ERROR\$1INVALID\$1BOUNDING\$1BOX
<a name="tm-error-ERROR_INVALID_BOUNDING_BOX"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_INVALID_BOUNDING_BOX"></a>

경계 상자에 오프 프레임 값이 있습니다.

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_BOUNDING_BOX"></a>

경계 상자 정보가 이미지 프레임을 벗어나거나 음수 값을 포함하는 이미지를 지정하고 있습니다.

자세한 내용은 [Amazon Rekognition Custom Labels 지침 및 할당량](limits.md) 섹션을 참조하세요.

**`ERROR_INVALID_BOUNDING_BOX` 오류를 수정하려면**

1. `annotations` 배열의 경계 상자 값을 확인하세요.

   ```
   	"bounding-box": {
   		"image_size": [{
   			"width": 640,
   			"height": 480,
   			"depth": 3
   		}],
   		"annotations": [{
   			"class_id": 1,
   			"top": 251,
   			"left": 399,
   			"width": 155,
   			"height": 101
   		}]
   	},
   ```

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1NO\$1VALID\$1ANNOTATIONS
<a name="tm-error-ERROR_NO_VALID_ANNOTATIONS"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_NO_VALID_ANNOTATIONS"></a>

유효한 주석을 찾을 수 없습니다.

### 추가 정보
<a name="tm-error-description-ERROR_NO_VALID_ANNOTATIONS"></a>

JSON 라인의 주석 객체에 유효한 경계 상자 정보가 포함되어 있지 않습니다.

**`ERROR_NO_VALID_ANNOTATIONS` 오류를 수정하려면**

1. 유효한 경계 상자 객체를 포함하도록 `annotations` 배열을 업데이트하세요. 또한 레이블 속성 메타데이터의 해당 경계 상자 정보(`confidence` 및 `class_map`)가 올바른지 확인하세요. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.

   ```
   {
   	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
   	"bounding-box": {
   		"image_size": [{
   			"width": 640,
   			"height": 480,
   			"depth": 3
   		}],
   		"annotations": [
   		   {              
   			"class_id": 1,    #annotation object
   			"top": 251,
   			"left": 399,
   			"width": 155,
   			"height": 101
   		}, {
   			"class_id": 0,
   			"top": 65,
   			"left": 86,
   			"width": 220,
   			"height": 334
   		}]
   	},
   	"bounding-box-metadata": {
   		"objects": [
   		>{                
   			"confidence": 1          #confidence  object
   		}, 
           {
   			"confidence": 1
   		}],
   		"class-map": {  
   			"0": "Echo",    #label 
   			"1": "Echo Dot"
   		},
   		"type": "groundtruth/object-detection",
   		"human-annotated": "yes",
   		"creation-date": "2018-10-18T22:18:13.527256",
   		"job-name": "my job"
   	}
   }
   ```

1. 매니페스트 파일에서 JSON 라인을 업데이트하거나 제거합니다.

Amazon Rekognition Custom Labels 콘솔로는 이 오류를 수정할 수 없습니다.

## ERROR\$1BOUNDING\$1BOX\$1TOO\$1SMALL
<a name="tm-error-ERROR_BOUNDING_BOX_TOO_SMALL"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_BOUNDING_BOX_TOO_SMALL"></a>

경계 상자의 높이와 너비가 너무 작습니다.

### 추가 정보
<a name="tm-error-description-ERROR_BOUNDING_BOX_TOO_SMALL"></a>

경계 상자 크기(높이 및 너비)는 1 x 1픽셀보다 커야 합니다.

Amazon Rekognition Custom Labels는 훈련 중에 크기가 1280픽셀을 초과하는 경우 이미지 크기를 조정합니다(소스 이미지는 영향을 받지 않음). 결과 경계 상자의 높이와 너비는 1 x 1픽셀보다 커야 합니다. 경계 상자 위치는 객체 위치 JSON 라인의 `annotations` 배열에 저장됩니다. 자세한 정보는 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.

```
	"bounding-box": {
		"image_size": [{
			"width": 640,
			"height": 480,
			"depth": 3
		}],
		"annotations": [{
			"class_id": 1,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}]
	},
```

오류 정보가 주석 객체에 추가됩니다.

**ERROR\$1BOUNDING\$1BOX\$1TOO\$1SMALL 오류를 해결하려면**
+ 다음 옵션 중 하나를 선택합니다.
  + 너무 작은 경계 상자의 크기를 늘리세요.
  + 너무 작은 경계 상자를 제거하세요. 경계 상자 제거에 대한 자세한 내용은 [ERROR\$1TOO\$1MANY\$1BOUNDING\$1BOXES](#tm-error-ERROR_TOO_MANY_BOUNDING_BOXES) 항목을 참조하세요.
  + 매니페스트에서 이미지(JSON 라인)를 제거합니다.





## ERROR\$1TOO\$1MANY\$1BOUNDING\$1BOXES
<a name="tm-error-ERROR_TOO_MANY_BOUNDING_BOXES"></a>

### 오류 메시지
<a name="tm-error-message-ERROR_TOO_MANY_BOUNDING_BOXES"></a>

경계 상자가 허용된 최대 값보다 많습니다.

### 추가 정보
<a name="tm-error-description-ERROR_TOO_MANY_BOUNDING_BOXES"></a>

경계 상자가 허용된 한도(50개)보다 많습니다. Amazon Rekognition Custom Labels 콘솔에서 초과 경계 상자를 제거하거나 JSON 라인에서 제거할 수 있습니다.

**`ERROR_TOO_MANY_BOUNDING_BOXES` 오류를 수정하려면(콘솔)**

1. 어떤 경계 상자를 제거할지 결정하세요.

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. **사용자 지정 레이블 사용**을 선택합니다.

1. **Get started**를 선택합니다.

1. 왼쪽 탐색 창에서 사용하려는 데이터 세트가 포함된 프로젝트를 선택합니다.

1. **데이터 세트** 항목에서 사용하려는 데이터 세트를 선택합니다.

1. 데이터 세트 갤러리 페이지에서 **레이블 지정 시작**을 선택하여 레이블 지정 모드로 전환합니다.

1. 경계 상자를 제거할 이미지를 선택합니다.

1. **경계 상자 그리기**를 선택합니다.

1. 그리기 도구에서 삭제할 경계 상자를 선택합니다.

1. 키보드의 Delete 키를 눌러 경계 상자를 삭제합니다.

1. 경계 상자를 충분히 삭제할 때까지 이전 2단계를 반복합니다.

1. **완료**를 선택합니다.

1. 변경 사항을 저장하려면 **변경 사항 저장**을 선택합니다.

1. **종료**를 선택하여 레이블 지정 모드를 종료합니다.



**ERROR\$1TOO\$1MANY\$1BOUNDING\$1BOXES 오류를 수정하려면(JSON 라인)**

1. 매니페스트 파일을 열고 ERROR\$1TOO\$1MANY\$1BOXING\$1BOXES 오류가 발생한 JSON 라인으로 이동합니다.

1. 제거하려는 각 경계 상자에 대해 다음을 제거합니다.
   + `annotations` 배열에서 필수 `annotation` 객체를 제거합니다.
   + 레이블 속성 메타데이터의 `objects` 배열에서 해당하는 `confidence` 객체를 제거합니다.
   + 다른 경계 상자에서 더 이상 사용하지 않는 경우 `class-map`에서 레이블을 제거하세요.

   다음 예제를 사용하여 제거할 항목을 식별하세요.

   ```
   {
   	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
   	"bounding-box": {
   		"image_size": [{
   			"width": 640,
   			"height": 480,
   			"depth": 3
   		}],
   		"annotations": [
   		   {              
   			"class_id": 1,    #annotation object
   			"top": 251,
   			"left": 399,
   			"width": 155,
   			"height": 101
   		}, {
   			"class_id": 0,
   			"top": 65,
   			"left": 86,
   			"width": 220,
   			"height": 334
   		}]
   	},
   	"bounding-box-metadata": {
   		"objects": [
   		>{                
   			"confidence": 1          #confidence  object
   		}, 
           {
   			"confidence": 1
   		}],
   		"class-map": {  
   			"0": "Echo",    #label 
   			"1": "Echo Dot"
   		},
   		"type": "groundtruth/object-detection",
   		"human-annotated": "yes",
   		"creation-date": "2018-10-18T22:18:13.527256",
   		"job-name": "my job"
   	}
   }
   ```



## WARNING\$1UNANNOTATED\$1RECORD
<a name="tm-warning-WARNING_UNANNOTATED_RECORD"></a>

### 경고 메시지
<a name="tm-warning-message-WARNING_UNANNOTATED_RECORD"></a>

레코드에 주석이 없습니다.

### 추가 정보
<a name="tm-warning-description-WARNING_UNANNOTATED_RECORD"></a>

Amazon Rekognition Custom Labels 콘솔을 사용하여 데이터 세트에 추가한 이미지에 레이블이 지정되지 않았습니다. 이미지의 JSON 라인이 훈련에 사용되지 않습니다.

```
{
    "source-ref": "s3://bucket/images/IMG_1186.png",
    "warnings": [
        {
            "code": "WARNING_UNANNOTATED_RECORD",
            "message": "Record is unannotated."
        } 
    ]
}
```

**WARNING\$1UNANNOTATED\$1RECORD 오류를 수정하려면**
+ Amazon Rekognition Custom Labels 콘솔을 사용하여 이미지에 레이블을 지정합니다. 지침은 [이미지에 이미지 수준 레이블 지정](md-assign-image-level-labels.md) 섹션을 참조하세요.





## WARNING\$1NO\$1ANNOTATIONS
<a name="tm-warning-WARNING_NO_ANNOTATIONS"></a>

### 경고 메시지
<a name="tm-warning-message-WARNING_NO_ANNOTATIONS"></a>

주석이 제공되지 않았습니다.

### 추가 정보
<a name="tm-warning-description-WARNING_NO_ANNOTATIONS"></a>

사람이 주석을 달았음(`human-annotated = yes`)에도 불구하고 객체 위치 파악 형식의 JSON 라인에 경계 상자 정보가 없습니다. JSON 라인은 유효하지만 훈련에는 사용되지 않습니다. 자세한 내용은 [훈련 및 테스트 검증 결과 매니페스트의 이해](tm-debugging-scope-json-line.md) 섹션을 참조하세요.

```
{
    "source-ref": "s3://bucket/images/IMG_1186.png",
    "bounding-box": {
        "image_size": [
            {
                "width": 640,
                "height": 480,
                "depth": 3
            }
        ],
        "annotations": [
           
        ],
        "warnings": [
            {
                "code": "WARNING_NO_ATTRIBUTE_ANNOTATIONS",
                "message": "No attribute annotations were found."
            }
        ]
    },
    "bounding-box-metadata": {
        "objects": [
           
        ],
        "class-map": {
           
        },
        "type": "groundtruth/object-detection",
        "human-annotated": "yes",
        "creation-date": "2013-11-18 02:53:27",
        "job-name": "my job"
    },
    "warnings": [
        {
            "code": "WARNING_NO_ANNOTATIONS",
            "message": "No annotations were found."
        } 
    ]
}
```

**WARNING\$1NO\$1ANNOTATIONS 문제를 해결하려면**
+ 다음 옵션 중 하나를 선택합니다.
  + 경계 상자(`annotations`) 정보를 JSON 라인에 추가합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.
  + 매니페스트에서 이미지(JSON 라인)를 제거합니다.

## WARNING\$1NO\$1ATTRIBUTE\$1ANNOTATIONS
<a name="tm-warning-WARNING_NO_ATTRIBUTE_ANNOTATIONS"></a>

### 경고 메시지
<a name="tm-warning-message-WARNING_NO_ATTRIBUTE_ANNOTATIONS"></a>

속성 주석이 제공되지 않았습니다.

#### 추가 정보
<a name="tm-warning-description-WARNING_NO_ATTRIBUTE_ANNOTATIONS"></a>

사람이 주석을 달았음(`human-annotated = yes`)에도 불구하고 객체 위치 파악 형식의 JSON 라인에 경계 상자 주석 정보가 없습니다. `annotations` 배열이 없거나 채워지지 않았습니다. JSON 라인은 유효하지만 훈련에는 사용되지 않습니다. 자세한 내용은 [훈련 및 테스트 검증 결과 매니페스트의 이해](tm-debugging-scope-json-line.md) 섹션을 참조하세요.

```
{
    "source-ref": "s3://bucket/images/IMG_1186.png",
    "bounding-box": {
        "image_size": [
            {
                "width": 640,
                "height": 480,
                "depth": 3
            }
        ],
        "annotations": [
           
        ],
        "warnings": [
            {
                "code": "WARNING_NO_ATTRIBUTE_ANNOTATIONS",
                "message": "No attribute annotations were found."
            }
        ]
    },
    "bounding-box-metadata": {
        "objects": [
           
        ],
        "class-map": {
           
        },
        "type": "groundtruth/object-detection",
        "human-annotated": "yes",
        "creation-date": "2013-11-18 02:53:27",
        "job-name": "my job"
    },
    "warnings": [
        {
            "code": "WARNING_NO_ANNOTATIONS",
            "message": "No annotations were found."
        }
    ]
}
```

**WARNING\$1NO\$1ATTRIBUTE\$1ANNOTATIONS 문제를 해결하려면**
+ 다음 옵션 중 하나를 선택합니다.
  + 하나 이상의 경계 상자 `annotation` 객체를 JSON 라인에 추가합니다. 자세한 내용은 [매니페스트 파일의 객체 위치 파악](md-create-manifest-file-object-detection.md) 섹션을 참조하세요.
  + 경계 상자 속성을 제거합니다.
  + 매니페스트에서 이미지(JSON 라인)를 제거합니다. JSON 라인에 다른 유효한 경계 상자 속성이 있는 경우 대신 JSON 라인에서 잘못된 경계 상자 속성만 제거할 수 있습니다.

## ERROR\$1UNSUPTED\$1USE\$1CASE\$1TYPE
<a name="tm-error-ERROR_UNSUPPORTED_USE_CASE_TYPE"></a>

### 경고 메시지
<a name="tm-error-message-ERROR_UNSUPPORTED_USE_CASE_TYPE"></a>

### 추가 정보
<a name="tm-error-description-ERROR_UNSUPPORTED_USE_CASE_TYPE"></a>

`type ` 필드의 값이 `groundtruth/image-classification` 또는 `groundtruth/object-detection`이 아닙니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.

```
{
    "source-ref": "s3://bucket/test_normal_8.jpg",
    "BB": {
        "annotations": [
            {
                "left": 1768,
                "top": 1007,
                "width": 448,
                "height": 295,
                "class_id": 0
            },
            {
                "left": 1794,
                "top": 1306,
                "width": 432,
                "height": 411,
                "class_id": 1
            },
            {
                "left": 2568,
                "top": 1346,
                "width": 710,
                "height": 305,
                "class_id": 2
            },
            {
                "left": 2571,
                "top": 1020,
                "width": 644,
                "height": 312,
                "class_id": 3
            }
        ],
        "image_size": [
            {
                "width": 4000,
                "height": 2667,
                "depth": 3
            }
        ]
    },
    "BB-metadata": {
        "job-name": "labeling-job/BB",
        "class-map": {
            "0": "comparator",
            "1": "pot_resistor",
            "2": "ir_phototransistor",
            "3": "ir_led"
        },
        "human-annotated": "yes",
        "objects": [
            {
                "confidence": 1
            },
            {
                "confidence": 1
            },
            {
                "confidence": 1
            },
            {
                "confidence": 1
            }
        ],
        "creation-date": "2021-06-22T09:58:34.811Z",
        "type": "groundtruth/wrongtype",
        "cl-errors": [
            {
                "code": "ERROR_UNSUPPORTED_USE_CASE_TYPE",
                "message": "The use case type of the BB-metadata label attribute metadata is unsupported. Check the type field."
            }
        ]
    },
    "cl-metadata": {
        "is_labeled": true
    },
    "cl-errors": [
        {
            "code": "ERROR_NO_VALID_LABEL_ATTRIBUTES",
            "message": "No valid label attributes found."
        }
    ]
}
```

**ERROR\$1UNSUPTED\$1USE\$1CASE\$1TYPE 오류를 수정하려면**
+ 다음 옵션 중 하나를 선택하세요.
  + 생성하려는 모델 유형에 따라 `type` 필드 값을 `groundtruth/image-classification` 또는 `groundtruth/object-detection`으로 변경합니다. 자세한 내용은 [매니페스트 파일 생성](md-create-manifest-file.md) 섹션을 참조하세요.
  + 매니페스트에서 이미지(JSON 라인)를 제거합니다.

## ERROR\$1INVALID\$1LABEL\$1NAME\$1LENGTH
<a name="tm-error-ERROR_INVALID_LABEL_NAME_LENGTH"></a>

### 추가 정보
<a name="tm-error-description-ERROR_INVALID_LABEL_NAME_LENGTH"></a>

레이블 이름이 너무 깁니다. 최대 길이는 256자입니다.

**ERROR\$1INVALID\$1LABEL\$1NAME\$1LENGTH 오류를 수정하려면**
+ 다음 옵션 중 하나를 선택하세요.
  + 레이블 이름을 256자 이하로 줄이세요.
  + 매니페스트에서 이미지(JSON 라인)를 제거합니다.