콘텐츠로 건너뛰기

인스턴스 세분화 데이터 세트 개요

인스턴스 분할은 이미지 내의 개별 개체를 식별하고 묘사하는 컴퓨터 비전 작업입니다. 이 가이드에서는 인스턴스 분할 작업을 위해 Ultralytics YOLO 지원하는 데이터 세트 형식에 대한 개요와 함께 이러한 데이터 세트를 준비, 변환 및 모델 훈련에 사용하는 방법에 대한 지침을 제공합니다.

지원되는 데이터 세트 형식

Ultralytics YOLO 형식

YOLO 세분화 모델 학습에 사용되는 데이터 세트 레이블 형식은 다음과 같습니다:

  1. 이미지당 하나의 텍스트 파일: 데이터 세트의 각 이미지에는 이미지 파일과 이름이 같고 확장자가 ".txt"인 해당 텍스트 파일이 있습니다.
  2. 객체당 하나의 행: 텍스트 파일의 각 행은 이미지의 객체 인스턴스 하나에 해당합니다.
  3. 행별 객체 정보: 각 행에는 객체 인스턴스에 대한 다음 정보가 포함됩니다:
    • 객체 클래스 인덱스: 객체의 클래스를 나타내는 정수(예: 사람의 경우 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

  • 각 행의 길이가 같을 필요는 없습니다.
  • 각 세분화 레이블에는 최소 XY 포인트 3점: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

데이터 세트 YAML 형식

Ultralytics 프레임워크는 탐지 모델 학습을 위한 데이터 세트 및 모델 구성을 정의하기 위해 YAML 파일 형식을 사용합니다. 다음은 탐지 데이터 세트를 정의하는 데 사용되는 YAML 형식의 예입니다:

# 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: ../datasets/coco8-seg # dataset root dir (absolute or relative; if relative, it's relative to default datasets_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 (80 COCO classes)
names:
    0: person
    1: bicycle
    2: car
    # ...
    77: teddy bear
    78: hair drier
    79: toothbrush

그리고 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: 물체 감지, 세분화 및 캡션을 위한 포괄적인 데이터 세트로, 다양한 카테고리에 걸쳐 200만 개 이상의 라벨이 지정된 이미지가 포함되어 있습니다.
  • COCO8-seg: 세분화 모델 학습의 빠른 테스트를 위해 설계된 COCO의 컴팩트한 8개의 이미지 하위 집합으로, CI 검사 및 워크플로 검증에 이상적입니다. ultralytics 리포지토리에 저장합니다.
  • COCO128-seg: 세분화 주석이 있는 128개의 COCO 이미지 하위 집합을 포함하는 인스턴스 세분화 작업을 위한 더 작은 데이터 세트입니다.
  • Carparts-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 형식으로 변환하는 데 사용할 수 있습니다.

사용하려는 데이터 세트가 모델과 호환되는지, 필요한 형식 규칙을 따르고 있는지 다시 한 번 확인하는 것을 잊지 마세요. 올바른 형식의 데이터 세트는 성공적인 객체 감지 모델을 훈련하는 데 매우 중요합니다.

자동 주석

자동 주석은 사전 학습된 감지 모델을 사용해 세분화 데이터 세트를 생성할 수 있는 필수 기능입니다. 수동으로 라벨을 붙일 필요 없이 수많은 이미지에 빠르고 정확하게 주석을 달 수 있어 시간과 노력을 절약할 수 있습니다.

탐지 모델을 사용하여 세분화 데이터 세트 생성하기

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 겹치는 상자를 필터링하는 비 최대 억제에 대한 IoU 임계값입니다.
imgsz int 640 이미지 크기 조정을 위한 입력 크기(32의 배수여야 함).
max_det int 300 메모리 효율성을 위해 이미지당 최대 감지 횟수를 제한합니다.
classes list[int] None 감지할 클래스 인덱스 목록(예, [0, 1] 사람 및 자전거용).
output_dir str None 주석을 저장할 디렉터리(기본값은 데이터 경로를 기준으로 './레이블'입니다).

그리고 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 분할 형식으로 변환하여 지정된 출력 디렉터리에 저장합니다.

자주 묻는 질문

인스턴스 세분화를 위해 Ultralytics YOLO 어떤 데이터 세트 형식을 지원하나요?

Ultralytics YOLO 는 인스턴스 분할을 위해 여러 가지 데이터 세트 형식을 지원하며, 기본 형식은 자체적인 Ultralytics YOLO 형식입니다. 데이터 세트의 각 이미지에는 클래스 인덱스와 정규화된 경계 좌표를 나열하는 여러 행(객체당 한 행)으로 세그먼트된 객체 정보가 포함된 해당 텍스트 파일이 필요합니다. YOLO 데이터 세트 형식에 대한 자세한 지침은 인스턴스 세분화 데이터 세트 개요를 참조하세요.

COCO 데이터 세트 주석을 YOLO 형식으로 변환하려면 어떻게 해야 하나요?

COCO 형식 주석을 YOLO 형식으로 변환하는 방법은 Ultralytics 도구를 사용하면 간단합니다. 또는 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 구성 예시입니다:

path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')

names:
    0: person
    1: bicycle
    2: car
    # ...

데이터 집합에 따라 경로와 클래스 이름을 업데이트해야 합니다. 자세한 내용은 데이터 집합 YAML 형식 섹션을 참조하세요.

Ultralytics YOLO 의 자동 주석 기능은 무엇인가요?

Ultralytics YOLO 의 자동 주석을 사용하면 사전 학습된 탐지 모델을 사용하여 데이터 세트에 대한 세분화 주석을 생성할 수 있습니다. 이렇게 하면 수동 라벨링의 필요성이 크게 줄어듭니다. 데이터 세트의 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"

이 기능은 주석 프로세스를 자동화하여 더 빠르고 효율적으로 만들어 줍니다. 자세한 내용은 자동 주석 추가 참조를 참조하세요.

📅1 년 전 생성됨 ✏️ 11 일 전 업데이트됨

댓글