Skip to content
Tutorials4 min read

세그멘테이션 작업을 위한 폴리곤 어노테이션

Potato에서 이미지 세그멘테이션 작업용 폴리곤 그리기 도구를 설정하고, 복잡한 형태와 겹치는 영역, 다중 클래스 폴리곤, COCO 형식 내보내기에 대한 팁을 알아봅니다.

Potato Team

폴리곤을 사용하면 객체의 경계를 픽셀 단위로 따라 그릴 수 있으며, 이는 시맨틱 세그멘테이션과 인스턴스 세그멘테이션에 꼭 필요한 작업입니다. 이 가이드에서는 설정과 그리기 기법, 그리고 형태가 복잡해질 때의 대처 방법을 차례로 살펴봅니다.

폴리곤 vs 바운딩 박스

폴리곤을 사용할 때바운딩 박스를 사용할 때
정밀한 경계가 필요할 때대략적인 위치 지정으로 충분할 때
객체 형태가 불규칙할 때객체가 대체로 직사각형일 때
세그멘테이션 모델을 학습할 때검출 모델을 학습할 때
객체가 서로 겹칠 때객체가 겹치지 않을 때
더 높은 정확도가 필요할 때속도가 우선일 때

기본 폴리곤 설정

yaml
annotation_task_name: "Image Segmentation"
 
data_files:
  - "data/images.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: segments
    description: "Draw polygons around each object"
    labels:
      - name: road
        color: "#808080"
      - name: sidewalk
        color: "#F5F5DC"
      - name: building
        color: "#8B4513"
      - name: vegetation
        color: "#228B22"
      - name: sky
        color: "#87CEEB"
      - name: vehicle
        color: "#FF6B6B"
      - name: person
        color: "#4ECDC4"

폴리곤 그리기

기본 작업 흐름

  1. 도구 모음에서 레이블을 선택합니다
  2. 클릭하여 객체 주위에 정점을 찍습니다
  3. 더블 클릭하거나 Enter를 눌러 폴리곤을 닫습니다
  4. 정점을 드래그하여 조정합니다
  5. 모서리를 클릭하여 점을 추가합니다

키보드 단축키

Potato에는 폴리곤 편집을 위한 단축키가 기본으로 포함되어 있습니다.

  • Enter: 현재 폴리곤을 닫습니다
  • Escape: 그리기를 취소하거나 선택을 해제합니다
  • Delete: 선택한 정점이나 폴리곤을 삭제합니다
  • +/-: 확대 및 축소합니다
  • Space + 드래그: 이미지를 이동합니다

상황이 복잡해질 때

겹치는 객체

객체가 겹칠 때는 어노테이터가 서로 겹치는 여러 개의 폴리곤을 그리면 됩니다. Potato는 각각을 별도로 저장하므로, 객체가 서로를 가리는 경우에도 인스턴스 단위의 어노테이션을 얻을 수 있습니다.

까다로운 경계

곡선이 많고 다루기 어려운 경계를 가진 객체의 경우:

  1. 곡선 모서리에 정점을 더 추가하여 형태가 정확하게 나오도록 합니다
  2. 까다로운 부분을 따라 그리기 전에 확대합니다
  3. 이리저리 건너뛰지 말고 둘레를 순서대로 따라갑니다
  4. 그린 후에는 편집 모드로 전환하여 정점을 제자리에 맞춥니다

시맨틱 세그멘테이션 설정

이미지 전체를 세그멘테이션하려면:

yaml
annotation_task_name: "Semantic Segmentation"
 
data_files:
  - "data/images.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: semantic_segments
    description: "Segment the entire image"
    labels:
      - name: background
        color: "#000000"
      - name: road
        color: "#808080"
      - name: sidewalk
        color: "#F5F5DC"
      - name: building
        color: "#8B4513"
      - name: vegetation
        color: "#228B22"
      - name: sky
        color: "#87CEEB"
      - name: person
        color: "#4ECDC4"
      - name: vehicle
        color: "#FF6B6B"

인스턴스 세그멘테이션 설정

개별 객체 인스턴스를 위해:

yaml
annotation_task_name: "Instance Segmentation"
 
data_files:
  - "data/images.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: instances
    description: "Draw polygons around each object instance"
    labels:
      - name: person
        color: "#4ECDC4"
      - name: car
        color: "#FF6B6B"
      - name: dog
        color: "#FFEAA7"

각 폴리곤은 고유한 어노테이션으로 저장되므로, 각 객체 클래스 내의 개별 인스턴스를 추적할 수 있습니다.

전체 설정 예시

yaml
annotation_task_name: "Cityscapes-style Segmentation"
 
data_files:
  - "data/urban_scenes.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: segments
    description: "Segment all objects following Cityscapes protocol"
    labels:
      # Flat
      - name: road
        color: "#804080"
      - name: sidewalk
        color: "#F423E8"
      # Construction
      - name: building
        color: "#464646"
      - name: wall
        color: "#666666"
      - name: fence
        color: "#BE9999"
      # Nature
      - name: vegetation
        color: "#6B8E23"
      - name: terrain
        color: "#98FB98"
      # Sky
      - name: sky
        color: "#4682B4"
      # Human
      - name: person
        color: "#DC143C"
      - name: rider
        color: "#FF0000"
      # Vehicle
      - name: car
        color: "#00008B"
      - name: truck
        color: "#000046"
      - name: bus
        color: "#003C64"
      - name: motorcycle
        color: "#0000E6"
      - name: bicycle
        color: "#770B20"

출력 형식

폴리곤 어노테이션은 모든 정점의 좌표와 함께 출력에 기록됩니다.

json
{
  "id": "img001",
  "annotations": {
    "segments": [
      {
        "label": "road",
        "points": [[0, 600], [100, 580], [200, 590], [0, 600]]
      },
      {
        "label": "car",
        "points": [[450, 400], [520, 400], [520, 480], [450, 480]]
      }
    ]
  }
}

깔끔한 폴리곤을 위한 팁

  1. 세밀한 경계를 따라 그릴 때는 2배 이상으로 확대합니다.
  2. 키보드 단축키를 익히세요. 도구 모음에 손을 뻗는 것보다 훨씬 빠릅니다.
  3. 먼저 대략적인 윤곽을 그린 다음, 다시 돌아가서 다듬습니다.
  4. 형태를 담아낼 수 있는 최소한의 정점만 사용하세요. 많다고 좋은 것이 아닙니다.
  5. 휴식을 취하세요. 세밀한 폴리곤 작업은 금방 지치게 합니다.

다음 단계

이미지 어노테이션 유형이 할 수 있는 모든 것(polygon, bbox 및 그 밖의 그리기 도구)을 보려면 원본 문서를 참조하세요.


폴리곤에 대한 전체 문서는 /docs/features/image-annotation을 참조하세요.