인스턴스 세그멘테이션 데이터셋 개요#
인스턴스 세그멘테이션은 이미지에서 개별 객체를 식별하고 구분하는 컴퓨터 비전 작업입니다. 이 가이드에서는 Ultralytics YOLO의 인스턴스 세그멘테이션 작업에서 지원하는 데이터셋 형식을 개괄하고, 모델 학습을 위해 이러한 데이터셋을 준비하고 변환하며 사용하는 방법을 안내합니다.
지원되는 데이터셋 형식#
Ultralytics YOLO 형식#
YOLO 세그멘테이션 모델 학습에 사용하는 데이터셋 라벨 형식은 다음과 같습니다:
- 이미지마다 텍스트 파일 하나: 데이터셋의 각 이미지에는 이미지 파일과 이름이 같고 확장자가 ".txt"인 텍스트 파일이 하나씩 대응됩니다.
- 객체마다 한 행: 텍스트 파일의 각 행은 이미지의 객체 인스턴스 하나에 해당합니다.
- 행마다 객체 정보 포함: 각 행에는 객체 인스턴스에 관한 다음 정보가 포함됩니다:
- 객체 클래스 인덱스: 객체의 클래스를 나타내는 정수입니다(예: 사람은 0, 자동차는 1 등).
- 객체 폴리곤 좌표: 객체 마스크의 윤곽을 나타내는
(x, y)좌표이며, 값은 0과 1 사이로 정규화됩니다.
세그멘테이션 데이터셋 파일에서 단일 행의 형식은 다음과 같습니다:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>이 형식에서 <class-index>은 객체의 클래스 인덱스이고, <x1> <y1> <x2> <y2> ... <xn> <yn>은 객체 세그멘테이션 마스크의 정규화된 폴리곤 좌표입니다(값은 이미지 너비와 높이를 기준으로 [0, 1]에 해당합니다). 좌표는 공백으로 구분됩니다.
다음은 3개 점으로 이루어진 세그먼트 하나와 5개 점으로 이루어진 세그먼트 하나, 총 두 객체가 있는 단일 이미지의 YOLO 데이터셋 형식 예시입니다.
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- 각 행의 길이가 동일할 필요는 없습니다.
- 각 세그멘테이션 라벨에는 최소 3개의
(x, y)점이 있어야 합니다:<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - 모든 객체에는 폴리곤이 필요합니다. Detect 형식의 행(
<class-index> <x_center> <y_center> <width> <height>)에는 폴리곤이 없으며, 박스 수와 폴리곤 수가 일치하지 않는 세그먼테이션 데이터셋은 라벨을 로드할 때ValueError오류와 함께 거부됩니다.
데이터셋 YAML 형식#
Ultralytics 프레임워크는 세그먼테이션 모델 학습을 위한 데이터셋 및 모델 구성을 정의할 때 YAML 파일 형식을 사용합니다. 다음은 세그먼테이션 데이터셋 정의에 사용하는 YAML 형식의 예입니다.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.ziptrain, val, test 필드는 학습, 검증, 테스트 이미지의 경로를 지정합니다. 각 필드에는 디렉터리, 디렉터리 목록 또는 이미지 경로를 한 줄에 하나씩 나열한 *.txt 파일을 지정할 수 있습니다(경로가 ./로 시작하면 *.txt 파일을 기준으로 해석됩니다). *.txt 파일을 사용하면 디렉터리의 일부 데이터로 학습하거나, 라벨이 없는 이미지를 제외하거나, 여러 소스의 이미지를 하나의 데이터 분할로 결합할 수 있습니다.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames은 클래스 이름으로 구성된 딕셔너리입니다. 이름의 순서는 YOLO 데이터셋 파일에 지정된 객체 클래스 인덱스의 순서와 일치해야 합니다.
사용법#
from ultralytics import YOLO
# 모델 로드
model = YOLO("yolo26n-seg.pt") # 사전 학습된 모델을 불러옵니다(학습에 권장).
# 모델 학습
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)지원되는 데이터셋#
Ultralytics YOLO는 인스턴스 세그먼테이션 작업에 다양한 데이터셋을 지원합니다. 가장 일반적으로 사용되는 데이터셋은 다음과 같습니다. 이 데이터셋 중 대부분은 Ultralytics Platform에서도 호스팅되므로, 이미지와 어노테이션을 살펴보고 데이터셋 통계를 확인하며 클라우드 학습을 위해 데이터셋을 복제할 수 있습니다.
- Carparts-seg: 자동차 부품 세그먼테이션에 중점을 둔 특화 데이터셋으로, 자동차 분야 애플리케이션에 적합합니다. 다양한 차량과 개별 자동차 부품에 대한 상세 어노테이션을 제공합니다.
- COCO: 객체 탐지, 세그먼테이션, 캡셔닝을 위한 종합 데이터셋으로, 다양한 카테고리에 걸쳐 20만 개 이상의 라벨링된 이미지를 제공합니다.
- COCO8-seg: 세그먼테이션 모델 학습을 빠르게 테스트할 수 있도록 설계된 COCO의 소규모 8개 이미지 하위 집합입니다.
ultralytics저장소에서 CI 검사와 워크플로 검증에 적합합니다. - COCO128-seg: 인스턴스 세그먼테이션 작업을 위한 소규모 데이터셋으로, 세그먼테이션 어노테이션이 포함된 COCO 이미지 128개의 하위 집합입니다.
- Crack-seg: 다양한 표면의 균열 세그먼테이션을 위해 설계된 데이터셋입니다. 인프라 유지보수와 품질 관리에 필수적이며, 구조적 결함을 식별하는 모델을 학습할 수 있도록 상세한 이미지를 제공합니다.
- Package-seg: 다양한 유형과 형태의 포장재 세그먼테이션을 위한 데이터셋입니다. 물류 및 창고 자동화에 특히 유용하며, 포장물 취급 및 분류 시스템 개발을 지원합니다.
사용자 데이터셋 추가#
자체 데이터셋을 Ultralytics YOLO 형식으로 세그먼테이션 모델 학습에 사용하려면, 위의 "Ultralytics YOLO 형식"에 명시된 형식을 따르는지 확인하십시오. 어노테이션을 필요한 형식으로 변환하고 YAML 구성 파일에 경로, 클래스 수, 클래스 이름을 지정하십시오. images/과 labels/은 같은 수준의 별도 폴더로 유지하고 하위 폴더 구조를 일치시켜야 합니다. 이미지 폴더에 라벨 .txt 파일을 넣으면 모델이 라벨을 놓칠 수 있습니다.
레이블 형식 포팅 또는 변환#
COCO 데이터셋 형식을 YOLO 형식으로 변환#
다음 코드 조각을 사용하면 널리 사용되는 COCO 데이터셋 형식의 라벨을 YOLO 형식으로 쉽게 변환할 수 있습니다.
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)이 변환 도구를 사용하면 COCO 데이터셋이나 COCO 형식의 데이터셋을 Ultralytics YOLO 형식으로 변환할 수 있습니다.
사용하려는 데이터셋이 모델과 호환되고 필요한 형식 규칙을 따르는지 다시 확인하십시오. 형식이 올바른 데이터셋은 성공적인 세그먼테이션 모델 학습에 매우 중요합니다.
자동 어노테이션#
자동 어노테이션은 사전 학습된 탐지 모델을 사용해 세그먼테이션 데이터셋을 생성하는 핵심 기능입니다. 수동 라벨링 없이도 많은 이미지에 빠르고 정확하게 어노테이션을 추가하여 시간과 노력을 절약할 수 있습니다.
탐지 모델을 사용해 세그먼테이션 데이터셋 생성하기#
Ultralytics 프레임워크를 사용해 데이터셋에 자동으로 어노테이션을 추가하려면 다음과 같이 auto_annotate 함수를 사용하면 됩니다.
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
data | str | 필수 | 어노테이션 또는 세분화 대상 이미지가 포함된 디렉터리 경로입니다. |
det_model | str | 'yolo26x.pt' | 초기 객체 탐지를 위한 YOLO 탐지 모델 경로입니다. |
sam_model | str | 'sam_b.pt' | 세분화를 위한 SAM 모델 경로입니다(SAM, SAM 2, MobileSAM 및 SAM 3 가중치 지원). |
device | str | '' | 연산 장치입니다(예: 'cuda:0', 'cpu' 또는 자동 장치 감지를 위한 ''). |
conf | float | 0.25 | 약한 탐지를 필터링하기 위한 YOLO 탐지 신뢰도 임계값입니다. |
iou | float | 0.45 | 겹치는 박스를 필터링하기 위한 비최대 억제의 IoU 임계값입니다. |
imgsz | int | 640 | 이미지 크기 조정에 사용할 입력 크기입니다(필요한 경우 32의 배수로 올림). |
max_det | int | 300 | 메모리 효율성을 위한 이미지당 최대 탐지 수입니다. |
classes | list[int] | None | 탐지할 클래스 인덱스 목록입니다(예: 사람 및 자전거의 경우 [0, 1]). |
output_dir | str | None | 어노테이션 저장 디렉터리입니다(기본값: 동일한 상위 디렉터리의 <data>_auto_annotate_labels). |
auto_annotate 함수에는 이미지 경로와 함께 사전 학습된 탐지 모델(예: YOLO26, YOLO11 또는 기타 모델), 세그먼테이션 모델(예: SAM, SAM 2, MobileSAM 또는 SAM 3)을 지정하는 선택적 인수, 모델을 실행할 장치, 어노테이션 결과를 저장할 출력 디렉터리를 전달합니다.
사전 학습된 모델의 성능을 활용하면 자동 어노테이션으로 고품질 세그먼테이션 데이터셋을 만드는 데 필요한 시간과 노력을 크게 줄일 수 있습니다. 이 기능은 대규모 이미지 컬렉션을 다루는 연구자와 개발자에게 특히 유용합니다. 수동 어노테이션 대신 모델 개발과 평가에 집중할 수 있기 때문입니다.
데이터셋 주석 시각화#
모델을 학습하기 전에 데이터셋 어노테이션을 시각화해 정확성을 확인하는 것이 유용합니다. Ultralytics는 이를 위한 유틸리티 함수를 제공합니다. 이 함수는 탐지 형식의 박스 라벨(<class-index> <x_center> <y_center> <width> <height>)만 읽으므로 세그먼테이션 폴리곤 라벨 파일은 파싱할 수 없습니다.
from ultralytics.data.utils import visualize_image_annotations
label_map = { # 주석이 지정된 모든 클래스 레이블을 포함하는 레이블 맵을 정의합니다.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # 입력 이미지 경로입니다.
"path/to/annotations.txt", # 이미지의 주석 파일 경로입니다.
label_map,
)이 함수는 경계 상자를 그리고 클래스 이름으로 객체에 라벨을 표시하며, 가독성을 높이도록 텍스트 색상을 조정합니다. 이를 통해 학습 전에 어노테이션 오류를 찾아 수정할 수 있습니다.
세그먼테이션 마스크를 YOLO 형식으로 변환하기#
각 픽셀 값이 클래스 인덱스 + 1이고 0이 배경인 그레이스케일 마스크 이미지가 있다면, 다음을 사용해 YOLO 세그먼테이션 형식으로 변환할 수 있습니다.
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# COCO처럼 클래스가 80개인 데이터셋의 경우
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)이 유틸리티는 마스크 이미지를 YOLO 세그먼테이션 형식으로 변환하고 지정된 출력 디렉터리에 저장합니다.
자주 묻는 질문#
Ultralytics YOLO는 인스턴스 세그먼테이션에 여러 데이터셋 형식을 지원하며, 기본 형식은 자체 Ultralytics YOLO 형식입니다. 데이터셋의 각 이미지에는 객체 정보를 여러 행(객체당 한 행)으로 기록한 텍스트 파일이 필요합니다. 이 파일에는 클래스 인덱스와 정규화된 폴리곤 좌표가 나열됩니다. YOLO 데이터셋 형식에 대한 자세한 지침은 인스턴스 세그먼테이션 데이터셋 개요를 참조하십시오.
Ultralytics 도구를 사용하면 COCO 형식의 어노테이션을 YOLO 형식으로 간단히 변환할 수 있습니다.
ultralytics.data.converter모듈의convert_coco함수를 사용할 수 있습니다.from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)이 스크립트는 COCO 데이터셋 어노테이션을 필요한 YOLO 형식으로 변환하므로 YOLO 모델 학습에 적합하게 사용할 수 있습니다. 자세한 내용은 라벨 형식 이식 또는 변환을 참조하십시오.
Ultralytics로 YOLO 모델을 학습하기 위한 YAML 파일을 준비하려면 데이터셋 경로와 클래스 이름을 정의해야 합니다. 다음은 YAML 구성의 예입니다.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip데이터셋에 맞게 경로와 클래스 이름을 업데이트하십시오. 자세한 내용은 데이터셋 YAML 형식 섹션을 참조하십시오.
Ultralytics YOLO의 자동 어노테이션을 사용하면 사전 학습된 탐지 모델로 데이터셋의 세그먼테이션 어노테이션을 생성할 수 있습니다. 따라서 수동 라벨링이 크게 줄어듭니다. 다음과 같이
auto_annotate함수를 사용할 수 있습니다.from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # 또는 sam_model="mobile_sam.pt"이 함수는 어노테이션 프로세스를 자동화하여 더 빠르고 효율적으로 처리합니다. 자세한 내용은 자동 어노테이션 참조를 살펴보십시오.