

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

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

Amazon SageMaker 이미지 분류 알고리즘은 다중 레이블 분류를 지원하는 지도 학습 알고리즘입니다. 이 알고리즘은 이미지를 입력으로 취해 해당 이미지에 할당된 하나 이상의 레이블을 출력합니다. 처음부터 새로 훈련하거나 대량의 훈련 이미지를 이용할 수 없는 경우 전이 학습을 사용하여 훈련할 수 있는 컨볼루션 신경망을 사용합니다.

Amazon SageMaker AI 이미지 분류 알고리즘에 대한 권장 입력 형식은 Apache MXNet [RecordIO](https://mxnet.apache.org/api/faq/recordio)입니다. 하지만 .jpg 또는 .png 형식의 원시 이미지도 사용할 수 있습니다. 기계 학습 시스템을 위한 효율적인 데이터 준비 및 로딩에 대한 광범위한 개요는 [이 토론](https://mxnet.apache.org/api/architecture/note_data_loading)을 참조하세요.

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

컨볼루션 네트워크에 대한 자세한 정보는 다음을 참조하세요.
+ [Deep residual learning for image recognition](https://arxiv.org/abs/1512.03385) Kaiming He, et al., 2016 IEEE Conference on Computer Vision and Pattern Recognition
+ [ImageNet 이미지 데이터베이스](http://www.image-net.org/)
+ [Gluon-CV와 MXNet을 사용한 이미지 분류](https://gluon-cv.mxnet.io/build/examples_classification/index.html)

**Topics**
+ [Image Classification 알고리즘의 입력/출력 인터페이스](#IC-inputoutput)
+ [Image Classification 알고리즘에 대한 EC2 인스턴스 권장 사항](#IC-instances)
+ [이미지 분류 샘플 노트북](#IC-sample-notebooks)
+ [Image Classification 작동 방식](IC-HowItWorks.md)
+ [이미지 분류 하이퍼파라미터](IC-Hyperparameter.md)
+ [이미지 분류 모델 튜닝](IC-tuning.md)

## Image Classification 알고리즘의 입력/출력 인터페이스
<a name="IC-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`)을 사용해 파이프 모드에서 훈련할 수도 있습니다.

분산 훈련은 파일 모드와 파이프 모드에서 지원됩니다. 파이프 모드에서 RecordIO 콘텐츠 형식을 사용하는 경우 `S3DataSource`의 `S3DataDistributionType`을 `FullyReplicated`로 설정해야 합니다. 이 알고리즘은 데이터가 각 머신에 복사되는 완전 복제 모델을 지원합니다.

이 알고리즘은 추론을 위해 `image/png`, `image/jpeg` 및 `application/x-image`를 지원합니다.

### RecordIO 형식을 사용한 훈련
<a name="IC-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`로 설정합니다.

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

훈련에 이미지 형식을 사용하는 경우 `train` 요청의 `validation` 파라미터에 대한 값으로 `train_lst`, `validation_lst`, `InputDataConfig` 및 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 채널을 지정합니다. `train` 및 `validation` 채널에 대한 개별 이미지 데이터(`.jpg` 또는 `.png`파일)를 지정합니다. 각 `.lst` 및 `train_lst` 채널에서 1개의 `validation_lst` 파일을 지정합니다. 네 채널 모두에 대한 콘텐츠 유형을 `application/x-image`로 설정합니다.

**참고**  
SageMaker AI는 훈련 및 검증 데이터를 다른 채널과 별도로 읽으므로 훈련 및 검증 데이터를 다른 폴더에 저장해야 합니다.

`.lst` 파일은 탭으로 구분된 파일로 이미지 파일의 목록을 담은 3개의 열이 포함되어 있습니다. 첫 번째 열은 이미지 인덱스를 지정하고, 두 번째 열은 이미지에 대한 클래스 레이블 인덱스를 지정하며, 세 번째 열은 이미지 파일의 상대 경로를 지정합니다. 첫 번째 열의 이미지 인덱스는 모든 이미지 간에서 고유해야 합니다. 클래스 레이블 인덱스 세트는 0부터 시작하여 순차적으로 번호가 부여되어 있습니다. 예를 들어 0은 cat 클래스, 1은 dog 클래스이며, 이후 추가로 클래스가 이어집니다.

 다음은 `.lst` 파일의 예제입니다.

```
5      1   your_image_directory/train_img_dog1.jpg
1000   0   your_image_directory/train_img_cat1.jpg
22     1   your_image_directory/train_img_dog2.jpg
```

예를 들어 훈련 이미지가 `s3://<your_bucket>/train/class_dog`, `s3://<your_bucket>/train/class_cat` 등에 저장된 경우 `train` 채널에 대한 경로를 `s3://<your_bucket>/train`으로 지정합니다. 이는 데이터의 최상위 디렉터리입니다. `.lst` 파일에서 `train_image_dog1.jpg` 클래스 디렉터리의 `class_dog` 파일에 대한 상대 경로를 `class_dog/train_image_dog1.jpg`로 지정합니다. 또한 `train` 디렉터리의 한 하위 디렉터리에 있는 모든 이미지 파일을 저장할 수도 있습니다. 이 경우 상대 경로에 대해 하위 디렉터리를 사용합니다. 예를 들어 `s3://<your_bucket>/train/your_image_directory`입니다.

### 증강 매니페스트 이미지 형식을 사용한 훈련
<a name="IC-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", "class"]`의 목록에 포함됩니다. 해당 레이블 값은 첫 번째 이미지가 `"0"`이고 두 번째 이미지가 `“1”`입니다.

```
{"source-ref":"s3://image/filename1.jpg", "class":"0"}
{"source-ref":"s3://image/filename2.jpg", "class":"1", "class-metadata": {"class-name": "cat", "type" : "groundtruth/image-classification"}}
```

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

레이블의 JSON 배열을 지정하면 다중 레이블 훈련도 가능합니다. `num_classes` 하이퍼파라미터는 총 클래스 수와 일치하도록 설정해야 합니다. 멀티 핫 형식과 클래스 ID 형식 등 두 가지 유효한 레이블 형식이 있습니다.

멀티 핫 형식에서 각 레이블은 모든 클래스의 다중 핫 인코딩 벡터이며 각 클래스는 0 또는 1 값을 사용합니다. 다음 예제에는 3가지 클래스가 있습니다. 첫 번째 이미지는 클래스 0과 2로 레이블이 지정되고, 두 번째 이미지는는 클래스 2로만 레이블이 지정됩니다.

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[1, 0, 1]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[0, 0, 1]"}
```

클래스 ID 형식에서 각 레이블은 데이터 포인트에 적용되는 클래스 ID(0, `num_classes`)의 목록입니다. 앞의 예제는 다음과 같이 보일 수 있습니다.

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[0, 2]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[2]"}
```

멀티 핫 형식이 기본값이지만, `label-format` 파라미터를 사용하여 콘텐츠 형식에서 명시적으로 설정할 수 있습니다(`"application/x-recordio; label-format=multi-hot".`). GroundTruth에서 출력된 형식인 클래스 ID 형식은 명시적으로 설정해야 합니다(`"application/x-recordio; label-format=class-id".`).

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

### 점진적 훈련
<a name="IC-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 채널에 업로드한 사전 훈련된 모델과 새 모델 둘 다의 입력 하이퍼파라미터는 `num_layers`, `image_shape` 및 `num_classes` 입력 파라미터에 대해 설정이 동일해야 합니다. 이러한 파라미터는 네트워크 아키텍처를 정의합니다. 사전 훈련된 모델 파일의 경우 SageMaker AI의 압축된 모델 아티팩트(.tar.gz 형식) 출력을 사용합니다. 입력 데이터에 RecordIO 또는 이미지 형식을 사용할 수 있습니다.

### 이미지 분류 알고리즘을 이용한 추론
<a name="IC-inference"></a>

생성된 모델은 추론에 대해 호스팅될 수 있고, 인코딩된 `.jpg` 및 `.png` 이미지 형식을 `image/png, image/jpeg` 및 `application/x-image` 콘텐츠 유형으로 지원합니다. 입력 이미지의 크기가 자동으로 조정됩니다. 출력은 JSON 형식 또는 배치 변환을 위한 [JSON Lines 텍스트 형식](http://jsonlines.org/)으로 인코딩된 모든 클래스에 대한 가능성 값입니다. 이미지 분류 모델은 요청당 단일 이미지를 처리하므로 JSON 또는 JSON Lines 형식으로 한 행만 출력합니다. 다음은 JSON Lines 형식의 응답 예제입니다.

```
accept: application/jsonlines

 {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}
```

훈련 및 추론에 대한 자세한 정보는 소개에서 참조한 이미지 분류 샘플 노트북 인스턴스를 참조하세요.

## Image Classification 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="IC-instances"></a>

이미지 분류의 경우 P2, P3, G4dn 및 G5 인스턴스를 지원합니다. 배치 크기가 큰 훈련에 대해 메모리가 더 많은 GPU 인스턴스를 사용하는 것이 좋습니다. 또한 분산 훈련을 위해 다중 GPU 및 다중 머신 설정에서 알고리즘을 실행할 수 있습니다. CPU(예: C4) 및 GPU(P2, P3, G4dn 또는 G5) 인스턴스를 모두 추론에 사용할 수 있습니다.

## 이미지 분류 샘플 노트북
<a name="IC-sample-notebooks"></a>

SageMaker AI 이미지 분류 알고리즘을 사용하는 샘플 노트북은 [Build and Register an MXNet Image Classification Model via SageMaker Pipelines](https://github.com/aws-samples/amazon-sagemaker-pipelines-mxnet-image-classification/blob/main/image-classification-sagemaker-pipelines.ipynb)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. 이미지 분류 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.