의미 체계 분할 알고리즘 - 아마존 SageMaker

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

의미 체계 분할 알고리즘

SageMaker 의미 체계 분할 알고리즘은 컴퓨터 비전 애플리케이션을 개발하는 데 픽셀 수준의 세분화된 접근 방식을 제공합니다. 이 알고리즘은 미리 정의된 클래스 세트에서 가져온 클래스 레이블을 사용해 이미지의 모든 픽셀에 태그를 지정합니다. 태그 지정은 장면을 이해하는 데 기본적인 기능으로, 자율 주행 차량, 의료 영상 진단 및 로봇 감지 등과 같이 점점 늘어나고 있는 컴퓨터 비전 응용 분야에 중요합니다.

반면에 SageMaker이미지 분류 - MXNet는 전체 이미지만 분석해 여러 출력 범주 중 하나로 분류하는 지도 학습 알고리즘입니다. 객체 감지 - MXNet은 이미지 내 객체의 모든 인스턴스를 감지해 분류하는 지도 학습 알고리즘으로, 직사각형 경계 상자를 사용해 이미지 내 객체의 위치와 크기를 나타냅니다.

의미 체계 분류 알고리즘 역시 이미지 내 모든 픽셀을 분류하기 때문에 이미지 내에 포함된 객체 모양에 대한 정보를 제공합니다. 세그먼트화 결과는 세그먼트화 마스크라고 하는 그레이스케일 이미지로 표현됩니다. 세그먼트화 마스크는 입력 이미지와 모양이 동일한 그레이스케일 이미지입니다.

SageMaker 의미 체계 분할 알고리즘은 MXNet Gluon 프레임워크와 Gluon CV 툴킷을 사용하여 구축되었습니다. 세 가지 기본 제공 알고리즘 중에서 선택하여 심층 신경망을 훈련할 수 있습니다. Fully-Convolutional Network(FCN) 알고리즘 , Pyramid Scene Parsing(PSP) 알고리즘 또는 DeepLabV3를 사용할 수 있습니다.

이러한 각 알고리즘에는 다음 두 가지 개별 구성 요소가 있습니다.

  • 백본(또는 인코더) - 기능에 대한 신뢰할 수 있는 활성화 맵을 생성하는 네트워크입니다.

  • 디코더 - 인코딩된 활성화 맵에서 세그먼트화 마스크를 구성하는 네트워크입니다.

또한 FCN, PSP 및 DeepLabV3 알고리즘에 대해 ResNet50 또는 ResNet101 중에서 백본을 선택할 수 있습니다. 이러한 백본에는 원래 ImageNet 분류 작업에 대해 훈련된 결과물이 포함되어 있습니다. 자체 데이터를 사용하여 분류를 위해 이러한 백본을 미세하게 조정할 수 있습니다. 또는 자체 데이터만 사용해 처음부터 이러한 네트워크를 초기화 및 훈련할 수 있습니다. 디코더는 사전 훈련되지 않습니다.

추론을 위한 훈련된 모델을 배포하기 위해 SageMaker 호스팅 서비스를 사용합니다. 추론 중에는 세분화 마스크를 PNG 이미지 또는 각 픽셀의 개별 클래스에 대한 확률 세트로 요청할 수 있습니다. 이러한 마스크는 추가 다운스트림 이미지 처리 또는 다른 애플리케이션이 포함된 큰 파이프라인의 일부로 사용할 수 있습니다.

의미 체계 분할 샘플 노트북

SageMaker 의미 체계 분할 알고리즘을 사용하여 모델을 훈련시키고 배포하여 추론을 수행하는 샘플 Jupyter 노트북을 보려면 의미 체계 분할 예제를 참조하십시오. SageMaker에서 예제 실행에 사용할 수 있는 Jupyter 노트북 인스턴스를 생성하고 액세스하는 방법은 아마존 SageMaker 노트북 인스턴스 섹션을 참조하세요.

모든 SageMaker 샘플 목록을 보려면 노트북 인스턴스를 생성한 후 열고 SageMaker 예제 탭을 선택합니다. 의미 체계 분할 예제 노트북은 Amazon 알고리즘 소개 아래에서 찾을 수 있습니다. 노트북을 열려면 사용 탭을 선택한 후 Create copy(사본 생성)를 선택합니다.

의미 체계 분할 알고리즘에 대한 입력/출력 인터페이스

SageMaker 의미 체계 분할은 고객의 훈련 데이터 세트가 Amazon Simple Storage Service(Amazon S3)에 있을 것이라고 간주합니다. 훈련을 완료하면 Amazon S3에서 결과 모델 아티팩트를 생성합니다. SageMaker 의미 체계 분할의 입력 인터페이스 형식은 대부분의 표준화된 의미 체계 분할 벤치마킹 데이터 세트와 유사합니다. Amazon S3의 데이터 세트는 4개의 디렉터리(2개는 이미지용, 2개는 주석용)를 사용하여 trainvalidation, 이렇게 두 가지 채널에서 제공됩니다. 주석은 압축되지 않은 PNG 이미지입니다. 데이터 세트에는 주석 매핑 설정 방법을 설명하는 레이블 맵이 포함되어 있을 수 있습니다. 레이블 맵이 없으면 이 알고리즘은 기본값을 사용합니다. 또한 Amazon S3의 Pipe 입력 모드에서 직접 훈련하기 위해 증강 매니페스트 이미지 형식(application/x-image)을 지원합니다. 추론을 위해 엔드포인트는 image/jpeg 콘텐츠 유형의 이미지를 허용합니다.

훈련 작동 방식

훈련 데이터는 train, train_annotation, validationvalidation_annotation, 이렇게 4가지 디렉터리로 분할됩니다. 이러한 각 디렉터리마다 채널이 하나씩 있습니다. 또한 데이터 세트에는 각 train_annotationvalidation_annotation 채널에 대해 label_map.json 파일이 하나씩 있습니다. 사용자가 이러한 JSON 파일을 제공하지 않으면 SageMaker에서 기본 설정 레이블 맵을 제공합니다.

이러한 파일을 지정하는 데이터 세트는 다음 예와 비슷해야 합니다.

s3://bucket_name | |- train | | - 0000.jpg | - coffee.jpg |- validation | | - 00a0.jpg | - bananna.jpg |- train_annotation | | - 0000.png | - coffee.png |- validation_annotation | | - 00a0.png | - bananna.png |- label_map | - train_label_map.json | - validation_label_map.json

train 및 validation 디렉터리 내 모든 JPG 이미지는 train_annotationvalidation_annotation 디렉터리 내에 이름이 같은 PNG 레이블 이미지를 하나씩 가지고 있습니다. 이러한 명명 규칙 덕분에 훈련 중 알고리즘이 레이블을 해당 이미지와 연결할 수 있습니다. train, train_annotation, validationvalidation_annotation 채널은 필수입니다. 주석은 단일 채널 PNG 이미지입니다. 이 형식은 이미지 내 메타데이터(모드)가 알고리즘이 주석 이미지를 단일 채널 8비트 부호 없는 정수로 읽도록 지원하는 경우에 사용 가능합니다. 모드에 대한 Amazon의 자세한 지원 내용은 Python 이미지 라이브러리 설명서를 참조하십시오. 8비트 픽셀 트루 컬러 P 모드를 사용하는 것이 좋습니다.

모든 사용 시 인코딩된 이미지는 간단한 8비트 정수입니다. 이러한 매핑에서 레이블 맵을 얻기 위해 이 알고리즘은 채널당 하나의 매핑 파일(레이블 맵이라고 함)을 사용합니다. 레이블 맵은 실제 레이블 인덱스를 사용해 이미지 내 값을 매핑하는 데 사용됩니다. 고객이 제공하지 않는 경우 기본적으로 제공되는 기본 레이블 맵에서 주석 매트릭스(이미지)의 픽셀 값은 직접 레이블을 인덱싱합니다. 이러한 이미지는 그레이스케일 PNG 파일 또는 8비트 인덱스 PNG 파일입니다. 범위가 지정되지 않은 기본 케이스에 대한 레이블 맵 파일은 다음과 같습니다.

{ "scale": "1" }

눈으로 쉽게 확인할 수 있도록 약간의 대비를 주기 위해 일부 주석 소프트웨어에서는 레이블 이미지의 크기를 일정하게 조정합니다. 이를 위해 SageMaker 의미 체계 분할 알고리즘에서는 값을 실제 레이블 값으로 스케일 다운할 수 있는 다시 조정 옵션을 제공합니다. 축소할 때 값을 적절한 정수로 변환하지 마십시오. 이 알고리즘은 기본적으로 스케일 값보다 작거나 같은 최대 정수로 지정합니다. 다음 코드는 레이블 값을 조정하기 위한 스케일 값을 설정하는 방법을 보여줍니다.

{ "scale": "3" }

다음 예제는 입력 주석 이미지의 encoded_label 값이 훈련 시 사용되는 mapped_label 값으로 매핑되는 경우 encoded_label 값을 조정하기 위해 "scale" 값을 사용하는 방법을 보여줍니다. 입력 주석 이미지의 레이블 값은 0, 3, 6이고, 스케일은 3이므로 훈련을 위해 0, 1, 2로 매핑됩니다.

encoded_label = [0, 3, 6] mapped_label = [0, 1, 2]

경우에 따라 각 클래스에 대해 특정 색상 매핑을 지정해야 할 수도 있습니다. label_map 파일의 다음 예제에 표시된 것처럼 레이블 매핑에서 맵 옵션을 사용합니다.

{ "map": { "0": 5, "1": 0, "2": 2 } }

이 예제의 레이블 매핑은 다음과 같습니다.

encoded_label = [0, 5, 2] mapped_label = [1, 0, 2]

레이블 매핑을 활용하는 경우 다른 주석 시스템 및 주석 소프트웨어를 사용해 복잡한 전처리 없이 데이터를 얻을 수 있습니다. 레이블 맵은 채널당 하나씩 제공할 수 있습니다. label_map 채널의 레이블 맵 파일은 4가지 디렉터리 구조에 대해 다음 명명 규칙을 따라야 합니다. 레이블 맵을 제공하지 않은 경우 알고리즘은 스케일을 1(기본값)로 가정합니다.

증강 매니페스트 형식을 사용한 훈련

증강 매니페스트 형식을 사용하면 RecordIO 파일을 생성할 필요 없이 파이프 모드에서 훈련할 수 있습니다. 증강 매니페스트 파일에는 데이터 객체가 포함되며 CreateTrainingJob 요청에 설명된 대로 JSON 행 형식이어야 합니다. 매니페스트의 각 행은 이미지에 대한 Amazon S3 URI와 주석 이미지에 대한 URI를 포함하고 있는 항목입니다.

매니페스트 파일의 각 JSON 객체에는 source-ref 키가 포함되어 있어야 합니다. source-ref 키에는 이미지에 대한 Amazon S3 URI 값이 포함되어 있어야 합니다. 레이블은 CreateTrainingJob 요청에서 지정한 대로 AttributeNames 파라미터 값 아래에서 제공됩니다. 또한 metadata 태그 아래에 추가 메타데이터가 포함될 수 있지만 이들은 알고리즘에서 무시됩니다. 다음 예제에서 AttributeNames은 이미지 및 주석 참조 ["source-ref", "city-streets-ref"]의 목록에 포함됩니다. 이러한 이름에는 -ref가 추가되어 있어야 합니다. Semantic Segmentation 알고리즘을 증강 매니페스트와 함께 사용하는 경우 RecordWrapperType 파라미터 값이 "RecordIO"이고 ContentType 파라미터 값이 application/x-recordio여야 합니다.

{"source-ref": "S3 bucket location", "city-streets-ref": "S3 bucket location", "city-streets-metadata": {"job-name": "label-city-streets", }}

증강 매니페스트 파일에 대한 자세한 정보는 증강 매니페스트 파일을 사용하여 훈련 작업에 데이터 세트 메타데이터 제공 단원을 참조하십시오.

점진적 훈련

또한 이전에 SageMaker를 사용해 훈련한 모델을 새 모델의 훈련을 위한 시드로 지정할 수 있습니다. 이러한 점진적 훈련은 동일하거나 유사한 데이터를 사용하여 새 모델을 훈련하려는 경우 훈련 시간을 줄여줍니다. 현재, 점진적 훈련은 내장 SageMaker 의미 체계 분할로 훈련된 모델에 대해서만 지원됩니다.

사전 훈련된 자체 모델을 사용하려면 CreateTrainingJob 요청의 InputDataConfig에서 ChannelName을 "model"로 지정합니다. model 채널의 ContentTypeapplication/x-sagemaker-model로 설정합니다. 네트워크 아키텍처를 정의하는 backbone, algorithm, crop_sizenum_classes 입력 파라미터가 model 채널로 업로드하는 새 모델 및 사전 훈련된 모델의 입력 하이퍼파라미터에 동일하게 지정되어 있어야 합니다. 사전 훈련된 모델 파일의 경우 SageMaker 출력의 압축된(.tar.gz) 아티팩트를 사용할 수 있습니다. 입력 데이터에는 이미지 형식만 사용할 수 있습니다. 점진적 훈련에 대한 자세한 내용 및 점진적 훈련 사용 방법에 대한 지침은 Amazon SageMaker에서 점진적 훈련 사용하기 단원을 참조하십시오.

추론 생성

엔드포인트에 배포된 훈련된 모델을 쿼리하려면 필요한 출력 유형을 나타내는 AcceptType 및 이미지를 제공해야 합니다. 엔드포인트는 image/jpeg 콘텐츠 유형의 JPEG 이미지를 사용합니다. image/pngAcceptType을 요청하면 이 알고리즘은 PNG 파일 및 세분화 마스크를 레이블과 동일한 형식으로 출력합니다. application/x-recordio-protobuf의 수락 유형을 요청하면 이 알고리즘은 recordio-protobuf 형식으로 인코딩된 클래스 확률을 반환합니다. recordio-protobuf 형식은 3차원이 클래스 수와 동일한 크기인 3D 텐서를 출력합니다. 이 구성 요소는 각 픽셀에 대한 개별 클래스 레이블의 확률을 나타냅니다.

의미 체계 분할 알고리즘에 대한 EC2 인스턴스 권장 사항

SageMaker 의미 체계 분할 알고리즘은 훈련을 위해 GPU 인스턴스만 지원하기 때문에 배치 크기가 큰 훈련의 경우 메모리 용량이 더 큰 GPU 인스턴스를 사용하는 것이 좋습니다. 단일 머신 구성의 P2, P3, G4dn 또는 G5 인스턴스를 사용하여 알고리즘을 훈련할 수 있습니다.

추론에는 CPU 인스턴스(예: C5 및 M5)나 GPU 인스턴스(예: P2 및 G4dn), 또는 둘 다를 사용할 수 있습니다. 추론을 위해 CPU, GPU, 메모리 및 네트워킹 용량의 다양한 조합을 제공하는 인스턴스 유형에 대한 자세한 정보는 Amazon SageMaker ML 인스턴스 유형을 참조하십시오.