

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

# 객체 감지 - MXNet
<a name="object-detection"></a>

Amazon SageMaker AI 객체 감지 - MXNet 알고리즘은 단일 심층 신경망을 사용하여 이미지의 객체를 감지 및 분류합니다. 이 알고리즘은 입력으로 이미지를 가져와 이미지 장면 내에서 객체의 모든 인스턴스를 식별하는 지도 학습 알고리즘입니다. 객체는 지정된 모음 내 클래스 중 하나로 범주화되는데, 이때 해당 클래스에 속하는 신뢰도 점수를 사용합니다. 이미지 내에서 객체의 위치와 크기는 직사각형 경계 상자로 표시됩니다. 이 알고리즘에서는 [Single Shot MultiBox Detector(SSD)](https://arxiv.org/pdf/1512.02325.pdf) 프레임워크를 사용하고 [VGG](https://arxiv.org/pdf/1409.1556.pdf) 및 [ResNet](https://arxiv.org/pdf/1603.05027.pdf), 이렇게 두 가지 기본 네트워크를 지원합니다. 이러한 네트워크는 처음부터 훈련하거나 [ImageNet](http://www.image-net.org/) 데이터세트에 대해 사전에 훈련된 모델을 사용하여 훈련할 수 있습니다.

**Topics**
+ [Object Detection 알고리즘에 대한 입력/출력 인터페이스](#object-detection-inputoutput)
+ [Object Detection 알고리즘에 대한 EC2 인스턴스 권장 사항](#object-detection-instances)
+ [Object Detection 샘플 노트북](#object-detection-sample-notebooks)
+ [Object Detection 작동 방식](algo-object-detection-tech-notes.md)
+ [Object Detection 하이퍼파라미터](object-detection-api-config.md)
+ [객체 감지 모델 튜닝](object-detection-tuning.md)
+ [Object Detection 요청 및 응답 형식](object-detection-in-formats.md)

## Object Detection 알고리즘에 대한 입력/출력 인터페이스
<a name="object-detection-inputoutput"></a>

SageMaker AI 객체 감지 알고리즘은 파일 모드에서의 훈련을 위해 RecordIO(`application/x-recordio`) 및 이미지(`image/png`, `image/jpeg`, 및 `application/x-image`) 콘텐츠 유형을 둘 다 지원하고 파이프 모드에서의 훈련을 위해 RecordIO(`application/x-recordio`)를 지원합니다. 그러나 증강 매니페스트 형식을 사용하여 RecordIO 파일을 생성하지 않고 이미지 파일(`image/png`, `image/jpeg` 및 `application/x-image`)을 사용해 파이프 모드에서 훈련할 수도 있습니다. Amazon SageMaker AI 객체 감지 알고리즘에 권장되는 입력 형식은 [Apache MXNet RecordIO](https://mxnet.apache.org/api/architecture/note_data_loading)입니다. 하지만 .jpg 또는 .png 형식의 원시 이미지도 사용할 수 있습니다. 알고리즘은 추론에 대해 `application/x-image`만을 지원합니다.

**참고**  
기존 딥 러닝 프레임워크와의 더 나은 상호 운용성을 유지하기 위해 다른 Amazon SageMaker AI 알고리즘에서 일반적으로 사용되는 protobuf 데이터 형식과는 다릅니다.

데이터 형식에 대한 자세한 정보는 [Object Detection 샘플 노트북](#object-detection-sample-notebooks) 섹션을 참조하세요.

### RecordIO 형식을 사용한 훈련
<a name="object-detection-recordio-training"></a>

훈련에 RecordIO 형식을 사용하는 경우 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 train 및 validation 채널을 둘 다 지정합니다. train 채널에서 1개의 RecordIO(.rec) 파일을 지정하고 validation 채널에서 1개의 RecordIO 파일을 지정합니다. 두 채널에 대한 콘텐츠 유형을 `application/x-recordio`로 설정합니다. RecordIO 파일을 생성하는 방법의 예는 객체 감지 샘플 노트북을 참조하세요. 또한 [MXNet의 GluonCV](https://gluon-cv.mxnet.io/build/examples_datasets/recordio.html) 도구를 사용하여 [PASCAL Visual Object Classes](http://host.robots.ox.ac.uk/pascal/VOC/) 및 [Common Objects in Context(COCO)](http://cocodataset.org/#home) 등과 같이 널리 사용되는 데이터세트에 대한 RecordIO 파일을 생성할 수도 있습니다.

### 이미지 형식을 사용한 훈련
<a name="object-detection-image-training"></a>

훈련에 이미지 형식을 사용하는 경우 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 `train`, `validation`, `train_annotation` 및 `validation_annotation` 채널을 지정합니다. train 및 validation 채널에 대한 개별 이미지 데이터(.jpg 또는 .png)를 지정합니다. 주석 데이터의 경우 JSON 형식을 사용할 수 있습니다. `train_annotation` 및 `validation_annotation` 채널에서 해당하는 .json 파일을 지정합니다. 이미지 유형에 따라 4가지 모든 채널의 콘텐츠 유형을 `image/png` 또는 `image/jpeg`로 설정합니다. 또한 데이터세트에 .jpg 및 .png 이미지가 둘 다 포함되어 있는 경우에는 콘텐츠 유형 `application/x-image`를 사용할 수도 있습니다. 다음은 .json 파일의 예입니다.

```
{
   "file": "your_image_directory/sample_image1.jpg",
   "image_size": [
      {
         "width": 500,
         "height": 400,
         "depth": 3
      }
   ],
   "annotations": [
      {
         "class_id": 0,
         "left": 111,
         "top": 134,
         "width": 61,
         "height": 128
      },
      {
         "class_id": 0,
         "left": 161,
         "top": 250,
         "width": 79,
         "height": 143
      },
      {
         "class_id": 1,
         "left": 101,
         "top": 185,
         "width": 42,
         "height": 130
      }
   ],
   "categories": [
      {
         "class_id": 0,
         "name": "dog"
      },
      {
         "class_id": 1,
         "name": "cat"
      }
   ]
}
```

각 이미지의 주석에는 .json 파일이 필요하고 .json 파일의 이름은 해당 이미지와 동일해야 합니다. 위 .json 파일의 이름은 "sample\$1image1.json"이어야 합니다. 주석 .json 파일에는 4가지 속성이 있습니다. 속성 "file"은 이미지 파일의 상대 경로를 지정합니다. 예를 들어, 훈련 이미지 및 해당 .json 파일이 s3://*your\$1bucket*/train/sample\$1image 및 s3://*your\$1bucket*/train\$1annotation에 저장된 경우 train 및 train\$1annotation 채널의 경로를 각각 s3://*your\$1bucket*/train 및 s3://*your\$1bucket*/train\$1annotation으로 지정합니다.

.json 파일에서 sample\$1image1.jpg 이미지의 상대 경로는 sample\$1image/sample\$1image1.jpg여야 합니다. `"image_size"` 속성은 전체 이미지 크기를 지정합니다. SageMaker AI 객체 감지 알고리즘은 현재 3채널 이미지만 지원합니다. `"annotations"` 속성은 이미지 내 객체의 범주와 경계 상자를 지정합니다. 각 객체에는 `"class_id"` 인덱스와 경계 상자 좌표 4개(`"left"`, `"top"`, `"width"`, `"height"`)로 주석이 지정됩니다. `"left"`(x 좌표) 및 `"top"`(y 좌표) 값은 경계 상자의 왼쪽 위 모서리를 나타냅니다. `"width"`(x 좌표) 및 `"height"`(y 좌표) 값은 경계 상자의 크기를 나타냅니다. 원점(0, 0)은 전체 이미지의 왼쪽 위 모서리입니다. 한 이미지 내에 객체가 여러 개 있는 경우 단일 .json 파일 내에 주석이 모두 포함되어 있어야 합니다. `"categories"` 속성은 클래스 인덱스 및 클래스 이름 간 매핑을 저장합니다. 클래스 인덱스는 0부터 시작하여 순차적으로 번호가 지정되어 있어야 합니다. `"categories"` 속성은 주석 .json 파일에 대해 선택적입니다.

### 증강 매니페스트 이미지 형식을 사용한 훈련
<a name="object-detection-augmented-manifest-training"></a>

증강 매니페스트 형식을 사용하면 RecordIO 파일을 생성할 필요 없이 파이프 모드에서 훈련할 수 있습니다. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 train 및 validation 채널을 둘 다 지정해야 합니다. 이 형식을 사용하는 동안 이미지와 해당하는 주석으로 구성된 목록이 포함된 S3 매니페스트 파일이 생성되어야 합니다. 매니페스트 파일 형식은 각 행이 샘플 하나를 나타내는 [JSON Lines](http://jsonlines.org/) 형식이어야 합니다. 이미지는 이미지의 S3 위치를 가리키는 `'source-ref'` 태그를 사용하여 지정됩니다. 주석은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 지정된 대로 `"AttributeNames"` 파라미터 값 아래에 제공됩니다. 또한 `metadata` 태그 아래에 추가 메타데이터가 포함될 수 있지만 이들은 알고리즘에서 무시됩니다. 다음 예제에서 `"AttributeNames`는 목록 `["source-ref", "bounding-box"]` 리스트에 포함됩니다.

```
{"source-ref": "s3://your_bucket/image1.jpg", "bounding-box":{"image_size":[{ "width": 500, "height": 400, "depth":3}], "annotations":[{"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 80, "height": 50}]}, "bounding-box-metadata":{"class-map":{"0": "dog", "5": "horse"}, "type": "groundtruth/object-detection"}}
{"source-ref": "s3://your_bucket/image2.jpg", "bounding-box":{"image_size":[{ "width": 400, "height": 300, "depth":3}], "annotations":[{"class_id": 1, "left": 100, "top": 120, "width": 43, "height": 78}]}, "bounding-box-metadata":{"class-map":{"1": "cat"}, "type": "groundtruth/object-detection"}}
```

객체 감지 알고리즘을 훈련할 경우에는 입력 파일의 `"AttributeNames"` 순서가 중요합니다. `image`를 먼저 사용한 다음 `annotations`를 사용하여 특정 순서로 파이프된 데이터를 허용합니다. 따라서 이 예제의 "AttributeNames"에는 먼저 `"source-ref"`가 제공된 다음 `"bounding-box"`가 제공됩니다. 증강 매니페스트와 함께 객체 감지를 사용할 경우 파라미터 `RecordWrapperType`의 값을 `"RecordIO"`으로 설정해야 합니다.

증강 매니페스트 파일에 대한 추가 정보는 [훈련 작업용 증강 매니페스트 파일](augmented-manifest.md) 섹션을 참조하세요.

### 점진적 훈련
<a name="object-detection-incremental-training"></a>

또한 이전에 SageMaker AI로 훈련한 모델을 새 모델과 아티팩트의 훈련을 위한 시드로 지정할 수 있습니다. 증분 훈련은 동일하거나 유사한 데이터로 새 모델을 훈련하려는 경우 훈련 시간을 절감시켜 줍니다. SageMaker AI 객체 감지 모델은 SageMaker AI에서 훈련된 다른 기분 제공 객체 감지 모델로만 시드될 수 있습니다.

사전 훈련된 모델을 사용하려면 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 `ChannelName`을 `InputDataConfig` 파라미터에 "model"로 지정합니다. model 채널의 `ContentType`을 `application/x-sagemaker-model`로 설정합니다. model 채널에 업로드한 사전 훈련된 모델과 새 모델 둘 다의 입력 하이퍼파라미터는 `base_network` 및 `num_classes` 입력 파라미터에 대해 설정이 동일해야 합니다. 이러한 파라미터는 네트워크 아키텍처를 정의합니다. 사전 훈련된 모델 파일의 경우 SageMaker AI의 압축된 모델 아티팩트(.tar.gz 형식) 출력을 사용합니다. 입력 데이터에 RecordIO 또는 이미지 형식을 사용할 수 있습니다.

점진적 훈련에 대한 자세한 내용 및 점진적 훈련 사용 방법에 대한 지침은 [Amazon SageMaker AI에서 점진적 훈련 사용](incremental-training.md) 섹션을 참조하세요.

## Object Detection 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="object-detection-instances"></a>

객체 감지 알고리즘은 P2, P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다. 배치 크기가 큰 훈련에 대해 메모리가 더 많은 GPU 인스턴스를 사용하는 것이 좋습니다. 또한 분산 훈련을 위해 멀티 GPU 및 다중 머신 설정에서 객체 감지 알고리즘을 실행할 수 있습니다.

추론에는 CPU 인스턴스(예: C5 및 M5)와 GPU 인스턴스(예: P2 및 G4dn) 둘 다를 사용할 수 있습니다.

## Object Detection 샘플 노트북
<a name="object-detection-sample-notebooks"></a>

SageMaker AI 객체 감지 알고리즘을 사용하여 다음 모델을 훈련시키고 호스팅하는 방법을 보여주는 샘플 노트북 

Single Shot 멀티박스 탐지기 알고리즘을 사용하는 [Caltech Birds(CUB 200 2011)](http://www.vision.caltech.edu/datasets/cub_200_2011/) 데이터세트는 [Amazon SageMaker AI Object Detection for Bird Species](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/object_detection_birds/object_detection_birds.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. Object Detection 알고리즘을 사용하는 객체 감지 예제 노트북은 **Introduction to Amazon Algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

Amazon SageMaker AI 객체 감지 알고리즘에 대한 자세한 내용은 다음 블로그 게시물을 참조하세요.
+ [Amazon SageMaker AI 객체 감지 모델 훈련 및 실행 AWS IoT Greengrass - 1/3부: 훈련 데이터 준비](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-1-of-3/)
+ [Amazon SageMaker AI 객체 감지 모델 훈련 및 실행 AWS IoT Greengrass - 3/2부: 사용자 지정 객체 감지 모델 훈련](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-2-of-3/)
+ [Amazon SageMaker AI 객체 감지 모델 훈련 및 실행 AWS IoT Greengrass - 3/3부: 엣지에 배포](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-3-of-3/)