인스턴스 분할 데이터 세트 개요
인스턴스 분할은 이미지 내에서 개별 객체를 식별하고 묘사하는 컴퓨터 비전 작업입니다. 이 가이드에서는 Ultralytics YOLO가 인스턴스 분할 작업에 대해 지원하는 데이터 세트 형식에 대한 개요와 이러한 데이터 세트를 준비, 변환 및 사용하여 모델을 훈련하는 방법에 대한 지침을 제공합니다.
지원되는 데이터 세트 형식
Ultralytics YOLO 형식
YOLO 분할 모델 훈련에 사용되는 데이터 세트 레이블 형식은 다음과 같습니다.
- 이미지당 하나의 텍스트 파일: 데이터 세트의 각 이미지에는 이미지 파일과 이름이 같고 확장자가 ".txt"인 해당 텍스트 파일이 있습니다.
- 객체당 하나의 행: 텍스트 파일의 각 행은 이미지의 객체 인스턴스 하나에 해당합니다.
- 행당 객체 정보: 각 행에는 객체 인스턴스에 대한 다음 정보가 포함되어 있습니다.
- 객체 클래스 인덱스: 객체의 클래스를 나타내는 정수입니다 (예: 0은 사람, 1은 자동차 등).
- 객체 경계 좌표: 마스크 영역 주변의 경계 좌표이며, 0과 1 사이로 정규화됩니다.
분할 데이터 세트 파일의 단일 행 형식은 다음과 같습니다.
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>
이 형식에서는 <class-index>
은(는) 객체의 클래스 인덱스이고, <x1> <y1> <x2> <y2> ... <xn> <yn>
객체 분할 마스크의 경계 좌표입니다. 좌표는 공백으로 구분됩니다.
다음은 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개의 xy 포인트:
<class-index> <x1> <y1> <x2> <y2> <x3> <y3>
데이터 세트 YAML 형식
Ultralytics 프레임워크는 YAML 파일 형식을 사용하여 분할 모델 학습을 위한 데이터 세트 및 모델 구성을 정의합니다. 다음은 분할 데이터 세트를 정의하는 데 사용되는 YAML 형식의 예입니다.
ultralytics/cfg/datasets/coco8-seg.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
에 지정되어 있습니다. train
및 val
필드는 각각 학습 및 검증 이미지들이 포함된 디렉터리의 경로를 지정합니다.
names
클래스 이름의 사전입니다. 이름 순서는 YOLO 데이터 세트 파일의 객체 클래스 인덱스 순서와 일치해야 합니다.
사용법
예시
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-seg.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640
지원되는 데이터 세트
Ultralytics YOLO는 인스턴스 분할 작업을 위한 다양한 데이터 세트를 지원합니다. 다음은 가장 일반적으로 사용되는 데이터 세트 목록입니다.
- COCO: 광범위한 범주에 걸쳐 20만 개 이상의 레이블이 지정된 이미지를 특징으로 하는 객체 감지, 분할 및 캡셔닝을 위한 포괄적인 데이터 세트입니다.
- COCO8-seg: COCO 데이터 세트의 압축된 8개 이미지 하위 세트로, 분할 모델 학습을 빠르게 테스트할 수 있도록 설계되었으며 CI 검사 및 워크플로 검증에 적합합니다.
ultralytics
저장소에서 가져옵니다. - COCO128-seg: 인스턴스 분할 작업을 위한 더 작은 데이터 세트로, 분할 주석이 있는 128개의 COCO 이미지 하위 세트를 포함합니다.
- Carparts-seg: 자동차 부품 분할에 특화된 데이터 세트로, 자동차 애플리케이션에 이상적입니다. 다양한 차량과 개별 자동차 부품에 대한 자세한 주석이 포함되어 있습니다.
- Crack-seg: 다양한 표면의 균열 분할을 위해 맞춤화된 데이터 세트입니다. 인프라 유지 관리 및 품질 관리에 필수적이며 구조적 약점을 식별하기 위해 모델을 훈련하기 위한 자세한 이미지를 제공합니다.
- Package-seg: 다양한 유형의 포장 재료 및 모양의 분할에 전념하는 데이터 세트입니다. 특히 물류 및 창고 자동화에 유용하며, 패키지 처리 및 분류 시스템 개발을 지원합니다.
자체 데이터 세트 추가
자체 데이터 세트가 있고 Ultralytics YOLO 형식으로 분할 모델을 학습하는 데 사용하려면 위에 명시된 "Ultralytics YOLO 형식"에 따라야 합니다. 어노테이션을 필요한 형식으로 변환하고 YAML 구성 파일에서 경로, 클래스 수 및 클래스 이름을 지정하십시오.
레이블 형식 포팅 또는 변환
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 형식으로 변환할 수 있습니다.
사용하려는 데이터세트가 모델과 호환되는지, 필요한 형식 규칙을 따르는지 다시 확인하십시오. 올바르게 형식이 지정된 데이터세트는 성공적인 객체 탐지 모델을 학습하는 데 매우 중요합니다.
자동 어노테이션
자동 어노테이션은 사전 훈련된 감지 모델을 사용하여 분할 데이터 세트를 생성할 수 있는 필수 기능입니다. 수동 라벨링 없이도 많은 이미지를 빠르고 정확하게 어노테이션할 수 있어 시간과 노력을 절약할 수 있습니다.
Detection 모델을 사용하여 분할 데이터 세트 생성
Ultralytics 프레임워크를 사용하여 데이터 세트를 자동 어노테이션하려면 다음을 사용할 수 있습니다. auto_annotate
아래와 같이 함수를 사용합니다.
예시
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
인수 | 유형 | 기본값 | 설명 |
---|---|---|---|
data |
str |
필수 | 어노테이션 또는 세분화를 위한 대상 이미지가 포함된 디렉토리 경로입니다. |
det_model |
str |
'yolo11x.pt' |
초기 객체 탐지를 위한 YOLO 탐지 모델 경로입니다. |
sam_model |
str |
'sam_b.pt' |
분할을 위한 SAM 모델 경로 (SAM, SAM2 변형 및 mobile_sam 모델 지원). |
device |
str |
'' |
계산 장치(예: 'cuda:0', 'cpu' 또는 자동 장치 감지를 위한 '') |
conf |
float |
0.25 |
미약한 탐지를 필터링하기 위한 YOLO 탐지 신뢰도 임계값입니다. |
iou |
float |
0.45 |
겹치는 상자를 필터링하기 위한 Non-Maximum Suppression의 IoU 임계값입니다. |
imgsz |
int |
640 |
이미지 크기 조정을 위한 입력 크기 (32의 배수여야 함). |
max_det |
int |
300 |
메모리 효율성을 위해 이미지당 최대 감지 횟수입니다. |
classes |
list[int] |
None |
감지할 클래스 인덱스 목록 (예: [0, 1] 사람 및 자전거용). |
output_dir |
str |
None |
주석 저장 디렉토리 (데이터 경로를 기준으로 './labels'가 기본값). |
에 지정되어 있습니다. auto_annotate
함수는 이미지 경로와 함께 사전 훈련된 감지 모델을 지정하기 위한 선택적 인수를 사용합니다. YOLO11, YOLOv8 또는 기타 모델 및 분할 모델 (예: SAM, SAM2 또는 MobileSAM, 모델을 실행할 장치 및 주석이 달린 결과를 저장할 출력 디렉터리.
사전 훈련된 모델의 강력한 기능을 활용하여 자동 어노테이션은 고품질 분할 데이터 세트를 만드는 데 필요한 시간과 노력을 크게 줄일 수 있습니다. 이 기능은 대규모 이미지 컬렉션으로 작업하는 연구원과 개발자에게 특히 유용하며, 수동 어노테이션보다는 모델 개발 및 평가에 집중할 수 있도록 합니다.
데이터세트 어노테이션 시각화
모델을 훈련하기 전에 데이터 세트 어노테이션이 올바른지 시각화하는 것이 좋습니다. Ultralytics는 이를 위한 유틸리티 함수를 제공합니다.
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Define the label map with all annotated class labels.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Input image path.
"path/to/annotations.txt", # Annotation file path for the image.
label_map,
)
이 함수는 경계 상자를 그리고, 클래스 이름으로 객체에 레이블을 지정하고, 가독성을 높이기 위해 텍스트 색상을 조정하여 훈련 전에 주석 오류를 식별하고 수정하는 데 도움이 됩니다.
분할 마스크를 YOLO 형식으로 변환
이진 형식의 분할 마스크가 있는 경우 다음을 사용하여 YOLO 분할 형식으로 변환할 수 있습니다.
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)
이 유틸리티는 이진 마스크 이미지를 YOLO 분할 형식으로 변환하고 지정된 출력 디렉터리에 저장합니다.
FAQ
Ultralytics YOLO는 인스턴스 분할을 위해 어떤 데이터 세트 형식을 지원합니까?
Ultralytics YOLO는 인스턴스 분할을 위한 여러 데이터 세트 형식을 지원하며, 기본 형식은 자체 Ultralytics YOLO 형식입니다. 데이터 세트의 각 이미지에는 클래스 인덱스 및 정규화된 경계 좌표를 나열하는 여러 행(객체당 한 행)으로 분할된 객체 정보가 포함된 해당 텍스트 파일이 필요합니다. YOLO 데이터 세트 형식에 대한 자세한 지침은 인스턴스 분할 데이터 세트 개요를 참조하십시오.
COCO 데이터세트 주석을 YOLO 형식으로 어떻게 변환할 수 있습니까?
Ultralytics 도구를 사용하면 COCO 형식 annotation을 YOLO 형식으로 간단하게 변환할 수 있습니다. 다음을 사용할 수 있습니다. convert_coco
다음의 함수 ultralytics.data.converter
모듈:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)
이 스크립트는 COCO 데이터 세트 주석을 필요한 YOLO 형식으로 변환하여 YOLO 모델 훈련에 적합하게 만듭니다. 자세한 내용은 레이블 형식 포팅 또는 변환을 참조하십시오.
Ultralytics YOLO 모델 학습을 위해 YAML 파일을 어떻게 준비합니까?
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의 자동 어노테이션 기능은 무엇입니까?
Ultralytics YOLO의 자동 어노테이션 기능을 사용하면 사전 훈련된 감지 모델을 사용하여 데이터 세트에 대한 분할 어노테이션을 생성할 수 있습니다. 이를 통해 수동 라벨링의 필요성을 크게 줄일 수 있습니다. 다음과 같이 auto_annotate 함수를 사용할 수 있습니다. auto_annotate
다음과 같은 함수:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"
이 기능은 어노테이션 프로세스를 자동화하여 더 빠르고 효율적으로 만듭니다. 자세한 내용은 자동 어노테이션 참조를 살펴보십시오.