Ultralytics YOLO27:

인스턴스 세그멘테이션 데이터셋 개요#

인스턴스 세그멘테이션은 이미지 내 개별 객체를 식별하고 경계를 구분하는 컴퓨터 비전 작업입니다. 이 가이드에서는 인스턴스 세그멘테이션 작업을 위해 Ultralytics YOLO에서 지원하는 데이터셋 형식을 개괄적으로 설명하고, 모델 학습을 위해 이러한 데이터셋을 준비, 변환 및 사용하는 방법을 안내합니다.

지원되는 데이터셋 형식#

Ultralytics YOLO 형식#

YOLO 세그멘테이션 모델 학습에 사용되는 데이터셋 레이블 형식은 다음과 같습니다.

  1. 이미지당 텍스트 파일 하나: 데이터셋의 각 이미지에는 이미지 파일과 동일한 이름에 ".txt" 확장자를 사용하는 해당 텍스트 파일이 있습니다.
  2. 객체당 한 행: 텍스트 파일의 각 행은 이미지 내 하나의 객체 인스턴스에 해당합니다.
  3. 행별 객체 정보: 각 행에는 객체 인스턴스에 대한 다음 정보가 포함됩니다.
    • 객체 클래스 인덱스: 객체의 클래스를 나타내는 정수입니다(예: 사람은 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>
  • 모든 객체에는 폴리곤이 필요합니다. 탐지 형식 행(<class-index> <x_center> <y_center> <width> <height>)에는 폴리곤이 포함되지 않으며, 상자와 폴리곤 개수가 다른 세그먼트 데이터셋은 레이블이 로드될 때 ValueError와(과) 함께 거부됩니다.

데이터셋 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, test 필드는 각각 학습, 검증 및 테스트 이미지의 경로를 지정합니다. 각 필드에는 디렉터리, 디렉터리 목록 또는 줄마다 하나의 이미지 경로를 나열하는 *.txt 파일을 지정할 수 있습니다(./로 시작하는 경로는 *.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: person

names은 클래스 이름의 딕셔너리입니다. 이름의 순서는 YOLO 데이터셋 파일에 있는 객체 클래스 인덱스의 순서와 일치해야 합니다.

사용법#

예시
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
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 format"에 지정된 형식을 따르는지 확인해야 합니다. 어노테이션을 필요한 형식으로 변환하고 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")
인수유형기본값설명
datastr필수어노테이션 또는 분할 대상 이미지가 포함된 디렉터리의 경로입니다.
det_modelstr'yolo26x.pt'초기 객체 감지를 위한 YOLO 감지 모델 경로입니다.
sam_modelstr'sam_b.pt'분할을 위한 SAM 모델 경로입니다(SAM, SAM 2, MobileSAM 및 SAM 3 가중치를 지원합니다).
devicestr''계산 장치입니다(예: 'cuda:0', 'cpu' 또는 자동 장치 감지를 위한 ''입니다).
conffloat0.25낮은 신뢰도의 감지를 필터링하기 위한 YOLO 감지 신뢰도 임계값입니다.
ioufloat0.45겹치는 박스를 필터링하기 위한 Non-Maximum Suppression의 IoU 임계값입니다.
imgszint640이미지 크기 조정을 위한 입력 크기입니다(32의 배수여야 합니다).
max_detint300메모리 효율성을 위한 이미지당 최대 감지 수입니다.
classeslist[int]None감지할 클래스 인덱스 목록입니다(예: 사람 및 자전거의 경우 [0, 1]).
output_dirstrNone어노테이션 저장 디렉터리입니다(기본값: <data>_auto_annotate_labels의 형제 디렉터리).

auto_annotate 함수는 이미지 경로와 함께 사전 학습된 감지 모델(예: YOLO26, YOLO11 또는 기타 모델), 세그멘테이션 모델(예: SAM, SAM 2, MobileSAM 또는 SAM 3)을 지정하는 선택적 인수, 모델을 실행할 디바이스 및 어노테이션 결과를 저장할 출력 디렉터리를 받습니다.

사전 학습된 모델의 강력한 기능을 활용하면 자동 어노테이션을 통해 고품질 세그멘테이션 데이터셋을 만드는 데 필요한 시간과 노력을 크게 줄일 수 있습니다. 이 기능은 대규모 이미지 컬렉션을 다루는 연구자와 개발자에게 특히 유용하며, 수동 어노테이션보다 모델 개발 및 평가에 집중할 수 있도록 합니다.

데이터셋 어노테이션 시각화#

모델을 학습하기 전에 데이터셋 어노테이션을 시각화하여 올바르게 지정되었는지 확인하는 것이 유용한 경우가 많습니다. 이를 위한 유틸리티 함수를 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 형식입니다. 데이터셋의 각 이미지에는 객체 정보가 여러 행으로 세그멘테이션된 해당 텍스트 파일이 필요합니다. 각 행에는 하나의 객체 정보가 들어가며, 클래스 인덱스와 정규화된 바운딩 좌표가 나열됩니다. 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")  # or sam_model="mobile_sam.pt"

    이 함수는 어노테이션 프로세스를 자동화하여 더 빠르고 효율적으로 수행할 수 있도록 합니다. 자세한 내용은 자동 어노테이션 참조를 확인하세요.

댓글