제퍼넷 로고

Amazon SageMaker를 사용한 시맨틱 세분화 데이터 레이블 지정 및 모델 교육

시간

컴퓨터 비전에서 의미론적 분할은 동일한 레이블을 가진 픽셀이 특정 특성을 공유하도록 알려진 레이블 집합의 클래스로 이미지의 모든 픽셀을 분류하는 작업입니다. 입력 이미지의 분할 마스크를 생성합니다. 예를 들어, 다음 이미지는 세그먼트 마스크를 보여줍니다. cat 상표.

11월 2018에서, 아마존 세이지 메이커 SageMaker 시맨틱 분할 알고리즘 출시를 발표했습니다. 이 알고리즘을 사용하면 공개 데이터 세트 또는 자체 데이터 세트로 모델을 훈련할 수 있습니다. 인기 있는 이미지 분할 데이터 세트에는 COCO(Common Objects in Context) 데이터 세트 및 PASCAL VOC(Visual Object Classes)가 포함되지만 레이블의 클래스는 제한되어 있으므로 공개 데이터 세트. 이 경우 다음을 사용할 수 있습니다. 아마존 세이지 메이커 그라운드 진실 자신의 데이터세트에 레이블을 지정합니다.

이 게시물에서는 다음 솔루션을 보여줍니다.

  • Ground Truth를 사용하여 의미론적 세분화 데이터 세트에 레이블 지정
  • Ground Truth의 결과를 SageMaker 내장 시맨틱 분할 알고리즘에 필요한 입력 형식으로 변환
  • 시맨틱 분할 알고리즘을 사용하여 모델 학습 및 추론 수행

시맨틱 세분화 데이터 라벨링

의미론적 세분화를 위한 기계 학습 모델을 구축하려면 픽셀 수준에서 데이터 세트에 레이블을 지정해야 합니다. Ground Truth는 다음을 통해 휴먼 애노테이터를 사용할 수 있는 옵션을 제공합니다. 아마존 기계 터크, 제XNUMX자 공급업체 또는 귀하의 개인 인력. 인력에 대한 자세한 내용은 다음을 참조하십시오. 인력 생성 및 관리. 라벨링 인력을 스스로 관리하고 싶지 않다면, Amazon SageMaker Ground Truth Plus 고품질 교육 데이터 세트를 빠르게 생성하고 비용을 최대 40%까지 절감할 수 있는 새로운 턴키 데이터 라벨링 서비스로서의 또 다른 훌륭한 옵션입니다. 이 게시물에서는 Ground Truth 자동 세그먼트 기능으로 데이터 세트에 수동으로 레이블을 지정하고 Mechanical Turk 인력으로 크라우드소싱 레이블을 지정하는 방법을 보여줍니다.

Ground Truth를 사용한 수동 레이블 지정

2019년 XNUMX월 Ground Truth는 의미 체계 세분화 레이블링 사용자 인터페이스에 자동 세그먼트 기능을 추가하여 레이블링 처리량을 높이고 정확도를 개선했습니다. 자세한 내용은 다음을 참조하십시오. Amazon SageMaker Ground Truth를 사용하여 의미론적 세분화 레이블 지정을 수행할 때 객체 자동 세분화. 이 새로운 기능을 사용하면 세분화 작업에서 레이블 지정 프로세스를 가속화할 수 있습니다. 꼭 맞는 다각형을 그리거나 브러시 도구를 사용하여 이미지의 개체를 캡처하는 대신 개체의 맨 위, 맨 아래, 맨 왼쪽 및 맨 오른쪽의 네 점만 그립니다. Ground Truth는 이 네 점을 입력으로 사용하고 DEXTR(Deep Extreme Cut) 알고리즘을 사용하여 개체 주위에 꼭 맞는 마스크를 생성합니다. 이미지 의미론적 세분화 레이블링에 Ground Truth를 사용하는 자습서는 다음을 참조하십시오. 이미지 시맨틱 분할. 다음은 개체의 극점 네 개를 선택한 후 자동 분할 도구가 자동으로 분할 마스크를 생성하는 방법의 예입니다.

Mechanical Turk 인력으로 라벨링 크라우드소싱

대규모 데이터 세트가 있고 수백 또는 수천 개의 이미지에 수동으로 레이블을 지정하고 싶지 않다면 주문형 확장 가능한 인력을 제공하여 인간이 컴퓨터보다 더 잘할 수 있는 작업을 완료하는 Mechanical Turk를 사용할 수 있습니다. Mechanical Turk 소프트웨어는 편의에 따라 단편적인 작업을 기꺼이 수행하려는 수천 명의 근로자에게 구인 제안을 공식화합니다. 이 소프트웨어는 또한 수행된 작업을 검색하여 요청자인 귀하를 위해 컴파일합니다. Mechanical Turk를 시작하려면 다음을 참조하십시오. Amazon Mechanical Turk 소개.

라벨링 작업 생성

다음은 바다거북 데이터세트에 대한 Mechanical Turk 레이블 지정 작업의 예입니다. 바다거북 데이터셋은 Kaggle 대회에서 가져온 것입니다. 바다거북 얼굴 감지, 그리고 데모 목적으로 데이터 세트의 300개 이미지를 선택했습니다. 바다거북은 공개 데이터 세트의 일반적인 클래스가 아니므로 대규모 데이터 세트에 레이블을 지정해야 하는 상황을 나타낼 수 있습니다.

  1. SageMaker 콘솔에서 라벨링 작업 탐색 창에서
  2. 왼쪽 메뉴에서 라벨링 작업 생성.
  3. 작업 이름을 입력합니다.
  4. 럭셔리 입력 데이터 설정, 고르다 자동화된 데이터 설정.
    이것은 입력 데이터의 매니페스트를 생성합니다.
  5. 럭셔리 입력 데이터 세트의 S3 위치, 데이터세트의 경로를 입력합니다.
  6. 럭셔리 작업 카테고리선택한다. 영상.
  7. 럭셔리 작업 선택, 고르다 시맨틱 분할.
  8. 럭셔리 근로자 유형, 고르다 아마존 기계 터크.
  9. 작업 시간 초과, 작업 만료 시간 및 작업당 가격에 대한 설정을 구성합니다.
  10. 레이블 추가(이 게시물의 경우 sea turtle), 라벨링 지침을 제공합니다.
  11. 왼쪽 메뉴에서 만들기.

레이블 지정 작업을 설정한 후 SageMaker 콘솔에서 레이블 지정 진행 상황을 확인할 수 있습니다. 완료로 표시되면 작업을 선택하여 결과를 확인하고 다음 단계에 사용할 수 있습니다.

데이터세트 변환

Ground Truth에서 출력을 얻은 후 SageMaker 내장 알고리즘을 사용하여 이 데이터 세트에서 모델을 훈련할 수 있습니다. 먼저 SageMaker 시맨틱 분할 알고리즘에 대해 요청된 입력 인터페이스로 레이블이 지정된 데이터 세트를 준비해야 합니다.

요청된 입력 데이터 채널

SageMaker 시맨틱 세분화는 교육 데이터 세트가 다음에 저장될 것으로 예상합니다. 아마존 단순 스토리지 서비스 (아마존 S3). Amazon S3의 데이터 세트는 두 개의 채널로 제공될 것으로 예상됩니다. train 그리고 한 validation, XNUMX개의 디렉토리를 사용합니다. XNUMX개는 이미지용이고 XNUMX개는 주석용입니다. 주석은 압축되지 않은 PNG 이미지로 예상됩니다. 데이터세트에는 주석 매핑이 설정되는 방법을 설명하는 레이블 맵이 있을 수도 있습니다. 그렇지 않은 경우 알고리즘은 기본값을 사용합니다. 추론을 위해 엔드포인트는 다음이 포함된 이미지를 허용합니다. image/jpeg 컨텐츠 타입. 다음은 데이터 채널의 필수 구조입니다.

s3://bucket_name
    |- train
                 | - image1.jpg
                 | - image2.jpg
    |- validation
                 | - image3.jpg
                 | - image4.jpg
    |- train_annotation
                 | - image1.png
                 | - image2.png
    |- validation_annotation
                 | - image3.png
                 | - image4.png
    |- label_map
                 | - train_label_map.json
                 | - validation_label_map.json

train 및 validation 디렉토리의 모든 JPG 이미지에는 동일한 이름을 가진 해당 PNG 레이블 이미지가 있습니다. train_annotationvalidation_annotation 디렉토리. 이 명명 규칙은 알고리즘이 훈련 중에 레이블을 해당 이미지와 연결하는 데 도움이 됩니다. 기차, train_annotation, 유효성 검사 및 validation_annotation 채널은 필수입니다. 주석은 단일 채널 PNG 이미지입니다. 이미지의 메타데이터(모드)가 알고리즘이 주석 이미지를 단일 채널 8비트 부호 없는 정수로 읽는 데 도움이 되는 한 형식이 작동합니다.

Ground Truth 레이블 지정 작업의 출력

Ground Truth 레이블 지정 작업에서 생성된 출력의 폴더 구조는 다음과 같습니다.

s3://turtle2022/labelturtles/
    |- activelearning
    |- annotation-tool
    |- annotations
                 | - consolidated-annotation
                                   | - consolidation-request                               
                                   | - consolidation-response
                                   | - output
			                                  | -0_2022-02-10T17:40:03.294994.png
                                              | -0_2022-02-10T17:41:04.530266.png
                 | - intermediate
                 | - worker-response
    |- intermediate
    |- manifests
                 | - output
                                | - output.manifest

분할 마스크는 다음 위치에 저장됩니다. s3://turtle2022/labelturtles/annotations/consolidated-annotation/output. 각 주석 이미지는 원본 이미지의 색인과 이 이미지 라벨링이 완료된 시간을 따서 명명된 .png 파일입니다. 예를 들어 다음은 Mechanical Turk 인력(1_0-2022-02T10:17:41.png)이 생성한 원본 이미지(Image_04.724225.jpg) 및 해당 분할 마스크입니다. 마스크의 인덱스는 소스 이미지 이름의 숫자와 다릅니다.

라벨링 작업의 출력 매니페스트는 /manifests/output/output.manifest 파일. JSON 파일이며 각 줄은 소스 이미지와 해당 레이블 및 기타 메타데이터 간의 매핑을 기록합니다. 다음 JSON 라인은 표시된 소스 이미지와 해당 주석 간의 매핑을 기록합니다.

{"source-ref":"s3://turtle2022/Image_1.jpg","labelturtles-ref":"s3://turtle2022/labelturtles/annotations/consolidated-annotation/output/0_2022-02-10T17:41:04.724225.png","labelturtles-ref-metadata":{"internal-color-map":{"0":{"class-name":"BACKGROUND","hex-color":"#ffffff","confidence":0.25988},"1":{"class-name":"Turtle","hex-color":"#2ca02c","confidence":0.25988}},"type":"groundtruth/semantic-segmentation","human-annotated":"yes","creation-date":"2022-02-10T17:41:04.801793","job-name":"labeling-job/labelturtles"}}

원본 이미지의 이름은 Image_1.jpg이고 주석 이름은 0_2022-02-10T17:41: 04.724225.png입니다. SageMaker 시맨틱 분할 알고리즘의 필수 데이터 채널 형식으로 데이터를 준비하려면 주석 이름을 원본 JPG 이미지와 동일한 이름으로 변경해야 합니다. 또한 데이터 세트를 다음으로 분할해야 합니다. trainvalidation 소스 이미지 및 주석에 대한 디렉토리.

Ground Truth 레이블 지정 작업의 출력을 요청된 입력 형식으로 변환합니다.

출력을 변환하려면 다음 단계를 완료하십시오.

  1. Amazon S3에서 로컬 디렉터리로 레이블 지정 작업의 모든 파일을 다운로드합니다.
    !aws s3 cp s3://turtle2022/ Seaturtles --recursive

  2. 매니페스트 파일을 읽고 주석 이름을 소스 이미지와 동일한 이름으로 변경합니다.
    import os
    import re
    
    label_job='labelturtles'
    manifest_path=dir_name+'/'+label_job+'/'+'manifests/output/output.manifest'
    
    file = open(manifest_path, "r") 
    txt=file.readlines()
    output_path=dir_name+'/'+label_job+'/'+'annotations/consolidated-annotation/output'
    S3_name='turtle2022/'
    im_list=[]
    for i in range(len(txt)):
        string = txt[i]
        try:
            im_name = re.search(S3_name+'(.+)'+'.jpg', string).group(1)
            print(im_name)
            im_png=im_name+'.png'
            im_list.append(im_name)
            annotation_name = re.search('output/(.+?)"', string).group(1)
            os.rename(annotation_name, im_png)
        except AttributeError:
            pass

  3. 학습 데이터 세트와 검증 데이터 세트를 분할합니다.
    import numpy as np
    from random import sample
      
    # Prints list of random items of given length
    train_num=len(im_list)*0.8
    test_num=len(im_list)*0.2
    train_name=sample(im_list,int(train_num))
    test_name = list(set(im_list) - set(train_name))

  4. 시맨틱 분할 알고리즘 데이터 채널에 필요한 형식으로 디렉토리를 만듭니다.
    os.chdir('./semantic_segmentation_pascalvoc_2022-01-11')
    os.mkdir('train')
    os.mkdir('validation')
    os.mkdir('train_annotation')
    os.mkdir('validation_annotation')

  5. 기차 및 유효성 검사 이미지와 해당 주석을 생성된 디렉터리로 이동합니다.
    1. 이미지의 경우 다음 코드를 사용합니다.
      for i in range(len(train_name)):
          train_im=train_name[i]+'.jpg'
          train_im_path=dir_name+'/'+train_im
          train_new_path='train/'+train_im
          shutil.move(train_im_path,train_new_path) 
          
          train_annotation=train_name[i]+'.png'
          train_annotation_path=dir_name+'/labelturtles/annotations/consolidated-annotation/output/'+train_annotation
          train_annotation_new_path='train_annotation/'+train_annotation
          shutil.move(train_annotation_path,train_annotation_new_path)

    2. 주석의 경우 다음 코드를 사용합니다.
      for i in range(len(test_name)):
          val_im=test_name[i]+'.jpg'
          val_im_path=dir_name+'/'+val_im
          val_new_path='validation/'+val_im
          shutil.move(val_im_path,val_new_path) 
          
          val_annotation=test_name[i]+'.png'
          val_annotation_path=dir_name+'/labelturtles/annotations/consolidated-annotation/output/'+val_annotation
          val_annotation_new_path='validation_annotationT/'+val_annotation
          shutil.move(val_annotation_path,val_annotation_new_path)

  6. 훈련 및 검증 데이터 세트와 해당 주석 데이터 세트를 Amazon S3에 업로드합니다.
    !aws s3 cp train s3://turtle2022/train/ --recursive
    !aws s3 cp train_annotation s3://turtle2022/train_annotation/ --recursive
    !aws s3 cp validation s3://turtle2022/validation/ --recursive
    !aws s3 cp validation_annotation s3://turtle2022/validation_annotation/ --recursive

SageMaker 시맨틱 세분화 모델 교육

이 섹션에서는 의미론적 세분화 모델을 훈련하는 단계를 안내합니다.

샘플 노트북을 따르고 데이터 채널을 설정하십시오.

의 지침을 따를 수 있습니다. 이제 Amazon SageMaker에서 시맨틱 분할 알고리즘을 사용할 수 있습니다. 레이블이 지정된 데이터 세트에 의미론적 세분화 알고리즘을 구현합니다. 이 샘플 수첩 알고리즘을 도입하는 종단 간 예를 보여줍니다. 노트북에서는 완전 컨볼루션 네트워크(FCN) 알고리즘을 사용하는 Pascal VOC 데이터 세트 훈련을 위해. Pascal VOC 데이터 세트에서 모델을 훈련할 계획이 없기 때문에 이 노트북의 3단계(데이터 준비)를 건너뛰었습니다. 대신 내가 직접 만든 train_channel, train_annotation_channe, validation_channelvalidation_annotation_channel 내 이미지와 주석을 저장한 S3 위치 사용:

Train_channel=’s3://turtle2022/train’
train_annotation_channel=’s3://turtle2022/train_annotation’
validation_channel=’s3://turtle2022/validation’
validation_annotation_channel=’s3://turtle2022/validation_annotation’

SageMaker estimator에서 자신의 데이터세트에 대한 하이퍼파라미터 조정

나는 노트북을 따라 SageMaker estimator 객체(ss_estimator) 내 세분화 알고리즘을 훈련합니다. 새 데이터 세트에 대해 사용자 지정해야 하는 한 가지는 ss_estimator.set_hyperparameters: 우리는 변해야 한다 num_classes=21num_classes=2 (turtlebackground), 그리고 나도 변경 epochs=10epochs=30 10은 데모용으로만 사용하기 때문입니다. 그런 다음 설정하여 모델 교육에 p3.2xlarge 인스턴스를 사용했습니다. instance_type="ml.p3.2xlarge". 훈련은 8분 만에 끝났다. 최고 미우 (합집합에 대한 평균 교차) 0.846은 다음을 사용하여 Epoch 11에서 달성됩니다. pix_acc (올바르게 분류된 이미지의 픽셀 백분율) 0.925로, 이 작은 데이터세트에 대해 꽤 좋은 결과입니다.

모델 추론 결과

저비용 ml.c5.xlarge 인스턴스에서 모델을 호스팅했습니다.

training_job_name = 'ss-notebook-demo-2022-02-12-03-37-27-151'
ss_estimator = sagemaker.estimator.Estimator.attach(training_job_name)
ss_predictor = ss_estimator.deploy(initial_instance_count=1, instance_type="ml.c5.xlarge")

마지막으로 훈련된 세분화 모델의 추론 결과를 보기 위해 10개의 거북이 이미지 테스트 세트를 준비했습니다.

import os

path = "testturtle/"
img_path_list=[]
files = os.listdir(path)

for file in files:
 
    if file.endswith(('.jpg', '.png', 'jpeg')):
        img_path = path + file
        img_path_list.append(img_path)

colnum=5
fig, axs = plt.subplots(2, colnum, figsize=(20, 10))

for i in range(len(img_path_list)):
    print(img_path_list[i])
    img = mpimg.imread(img_path_list[i])
    with open(img_path_list[i], "rb") as imfile:
        imbytes = imfile.read()
    cls_mask = ss_predictor.predict(imbytes)
    axs[int(i/colnum),i%colnum].imshow(img, cmap='gray') 
    axs[int(i/colnum),i%colnum].imshow(np.ma.masked_equal(cls_mask,0), cmap='jet', alpha=0.8)
    
plt.show()

다음 이미지는 결과를 보여줍니다.

바다거북의 분할 마스크는 정확해 보이며 Mechanical Turk 작업자가 레이블을 지정한 300개 이미지 데이터 세트에서 훈련된 이 결과에 만족합니다. 다음과 같은 다른 사용 가능한 네트워크를 탐색할 수도 있습니다. 피라미드 장면 구문 분석 네트워크(PSP) or 딥랩-V3 데이터세트가 있는 샘플 노트북에서

정리

계속되는 비용이 발생하지 않도록 끝점을 마쳤으면 끝점을 삭제합니다.

ss_predictor.delete_endpoint()

결론

이 게시물에서는 SageMaker를 사용하여 의미론적 세분화 데이터 레이블 지정 및 모델 교육을 사용자 지정하는 방법을 보여주었습니다. 먼저 자동 분할 도구로 라벨링 작업을 설정하거나 Mechanical Turk 인력(및 기타 옵션)을 사용할 수 있습니다. 5,000개 이상의 개체가 있는 경우 자동화된 데이터 레이블 지정을 사용할 수도 있습니다. 그런 다음 Ground Truth 레이블 지정 작업의 출력을 SageMaker 기본 제공 의미론적 세분화 훈련에 필요한 입력 형식으로 변환합니다. 그 후 가속 컴퓨팅 인스턴스(예: p2 또는 p3)를 사용하여 다음을 사용하여 의미론적 분할 모델을 훈련할 수 있습니다. 수첩 모델을 보다 비용 효율적인 인스턴스(예: ml.c5.xlarge)에 배포합니다. 마지막으로 몇 줄의 코드로 테스트 데이터 세트의 추론 결과를 검토할 수 있습니다.

SageMaker 시맨틱 세분화 시작하기 데이터 라벨링모델 훈련 좋아하는 데이터 세트로!


저자에 관하여

카라 양 AWS Professional Services의 데이터 과학자입니다. 그녀는 고객이 AWS 클라우드 서비스를 통해 비즈니스 목표를 달성하도록 돕는 데 열정적입니다. 그녀는 조직이 제조, 자동차, 환경 지속 가능성 및 항공 우주와 같은 여러 산업에서 ML 솔루션을 구축하도록 도왔습니다.

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?