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"폴리곤 그리기
기본 작업 흐름
- 도구 모음에서 레이블을 선택합니다
- 클릭하여 객체 주위에 정점을 찍습니다
- 더블 클릭하거나 Enter를 눌러 폴리곤을 닫습니다
- 정점을 드래그하여 조정합니다
- 모서리를 클릭하여 점을 추가합니다
키보드 단축키
Potato에는 폴리곤 편집을 위한 단축키가 기본으로 포함되어 있습니다.
- Enter: 현재 폴리곤을 닫습니다
- Escape: 그리기를 취소하거나 선택을 해제합니다
- Delete: 선택한 정점이나 폴리곤을 삭제합니다
- +/-: 확대 및 축소합니다
- Space + 드래그: 이미지를 이동합니다
상황이 복잡해질 때
겹치는 객체
객체가 겹칠 때는 어노테이터가 서로 겹치는 여러 개의 폴리곤을 그리면 됩니다. Potato는 각각을 별도로 저장하므로, 객체가 서로를 가리는 경우에도 인스턴스 단위의 어노테이션을 얻을 수 있습니다.
까다로운 경계
곡선이 많고 다루기 어려운 경계를 가진 객체의 경우:
- 곡선 모서리에 정점을 더 추가하여 형태가 정확하게 나오도록 합니다
- 까다로운 부분을 따라 그리기 전에 확대합니다
- 이리저리 건너뛰지 말고 둘레를 순서대로 따라갑니다
- 그린 후에는 편집 모드로 전환하여 정점을 제자리에 맞춥니다
시맨틱 세그멘테이션 설정
이미지 전체를 세그멘테이션하려면:
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]]
}
]
}
}깔끔한 폴리곤을 위한 팁
- 세밀한 경계를 따라 그릴 때는 2배 이상으로 확대합니다.
- 키보드 단축키를 익히세요. 도구 모음에 손을 뻗는 것보다 훨씬 빠릅니다.
- 먼저 대략적인 윤곽을 그린 다음, 다시 돌아가서 다듬습니다.
- 형태를 담아낼 수 있는 최소한의 정점만 사용하세요. 많다고 좋은 것이 아닙니다.
- 휴식을 취하세요. 세밀한 폴리곤 작업은 금방 지치게 합니다.
다음 단계
- 하이브리드 워크플로를 위해 바운딩 박스와 결합하세요
- 세그멘테이션을 위한 품질 관리를 설정하세요
- 시간적 데이터를 위한 비디오 세그멘테이션을 알아보세요
이미지 어노테이션 유형이 할 수 있는 모든 것(polygon, bbox 및 그 밖의 그리기 도구)을 보려면 원본 문서를 참조하세요.
폴리곤에 대한 전체 문서는 /docs/features/image-annotation을 참조하세요.