Ultralytics YOLO27:
Get Started

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

인스턴스 세그멘테이션은 이미지에서 개별 객체를 식별하고 구분하는 컴퓨터 비전 작업입니다. 이 가이드에서는 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>
  • 모든 객체에는 폴리곤이 필요합니다. Detect 형식의 행(<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

# 모델 로드
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")
인수유형기본값설명
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겹치는 박스를 필터링하기 위한 비최대 억제의 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는 이를 위한 유틸리티 함수를 제공합니다. 이 함수는 탐지 형식의 박스 라벨(<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"

    이 함수는 어노테이션 프로세스를 자동화하여 더 빠르고 효율적으로 처리합니다. 자세한 내용은 자동 어노테이션 참조를 살펴보십시오.

댓글