Ultralytics YOLO27:
Get Started

시맨틱 세그멘테이션 데이터셋 개요#

시맨틱 세그멘테이션은 이미지의 모든 픽셀에 하나의 클래스 레이블을 할당합니다. 인스턴스 세그멘테이션과 달리 시맨틱 세그멘테이션은 같은 클래스에 속하는 개별 객체를 분리하지 않습니다. 학습 대상은 각 픽셀에 클래스 ID를 저장하는 조밀한 클래스 맵입니다.

이 가이드에서는 Ultralytics YOLO 시맨틱 세그멘테이션 모델에서 사용하는 데이터셋 형식을 설명하고, 학습 및 검증에 사용할 수 있는 기본 제공 데이터셋 구성을 나열합니다.

지원되는 데이터셋 형식#

두 가지 레이블 형식을 지원합니다. 데이터셋 YAML에 masks_dir 키가 정의되어 있거나 데이터셋 루트에서 이미지 옆에 masks/ 폴더가 이미 있으면 데이터셋 로더가 PNG 마스크를 사용합니다. 그렇지 않으면 YOLO 폴리곤 레이블을 사용합니다.

PNG 마스크 형식#

시맨틱 세그멘테이션 데이터셋은 샘플마다 이미지 파일 하나와 마스크 파일 하나를 사용합니다. 마스크는 일반적으로 PNG 형식의 단일 채널 이미지이며, 각 픽셀 값은 해당 이미지 픽셀의 클래스 인덱스입니다.

  • 픽셀 값 0, 1, 2, ...는 데이터셋의 names 매핑에 따른 클래스 ID를 나타냅니다.
  • 픽셀 값 255은 무시 레이블로 처리되며 손실 및 메트릭 계산에서 제외됩니다.
  • 마스크 파일은 해당 이미지 파일과 동일한 파일명을 사용해야 합니다. 예: frankfurt_000000_000294.png.
  • 기본적으로 마스크 파일은 .png으로 확인하며, 해당 파일이 없으면 다른 지원 이미지 확장자도 허용됩니다. .png 또는 .tiff와 같은 무손실 형식을 사용하세요. 손실 압축(예: .jpg)은 클래스 ID 픽셀 값을 손상시키기 때문입니다.

기본 레이아웃에서는 이미지와 마스크를 서로 대응하는 폴더에 저장합니다. 데이터셋 YAML의 masks_dir 값은 마스크를 찾을 때 images 경로 구성 요소를 대체합니다.

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

예를 들어 masks_dir: masks인 경우 images/train/aachen_000000_000019.png 경로의 이미지와 masks/train/aachen_000000_000019.png 경로의 마스크가 쌍을 이룹니다.

YOLO 폴리곤 레이블 형식#

데이터셋에 이미 Ultralytics YOLO 폴리곤 레이블(이미지마다 .txt 하나와 <class-index> <x1> <y1> <x2> <y2> ... 행)이 있는 경우 PNG 마스크로 변환하지 않고도 해당 레이블에서 바로 시맨틱 세그멘테이션을 학습할 수 있습니다. 행 단위 레이아웃은 인스턴스 세그멘테이션 데이터셋 형식을 참조하세요.

데이터셋 YAML에서 masks_dir을 생략하고 데이터셋 루트의 이미지 옆에 masks/ 폴더가 없으면 이 경로가 자동으로 선택됩니다. 남아 있는 masks/ 폴더가 있으면 삭제하거나 이름을 변경하세요. 그렇지 않으면 로더가 PNG 마스크 모드로 전환하여 대신 해당 폴더에서 마스크를 찾습니다. 동작 방식:

  • 로드 시 폴리곤을 이미지별 시맨틱 마스크로 변환하고, 겹치는 영역에서 작은 객체가 큰 객체를 덮어쓰도록 면적순으로 정렬합니다.
  • 다중 클래스 (names의 N > 1): 선언된 클래스 뒤에 background 클래스를 추가하여 어떤 폴리곤에도 포함되지 않는 픽셀을 나타냅니다. 모델은 N + 1개의 출력 채널로 구성되며 마지막 채널은 배경입니다.
  • 단일 클래스 (names의 N == 1): 학습 시에도 클래스는 1개로 유지됩니다. 마스크는 이진 형식이며, 선언된 클래스는 1로 표시되고 어떤 폴리곤에도 포함되지 않는 픽셀은 0으로 표시됩니다. names에 배경 클래스를 추가하지 않습니다.
  • 증강 패딩으로 추가된 픽셀(예: 랜덤 크롭)에도 계속 255을 무시 레이블로 사용합니다.

데이터에 이미 인스턴스 폴리곤 레이블이 지정되어 있고 동일한 파일에서 시맨틱 세그멘테이션 모델을 만들려는 경우 이 경로를 사용하세요.

데이터셋 YAML 형식#

시맨틱 세그멘테이션 데이터셋은 YAML 파일로 구성합니다. 주요 필드는 다음과 같습니다:

키설명
path데이터셋 루트 디렉터리입니다.
trainpath에 대한 상대 경로 또는 절대 경로로 지정하는 학습 이미지 경로입니다.
valpath에 대한 상대 경로 또는 절대 경로로 지정하는 검증 이미지 경로입니다.
test선택적 테스트 이미지 경로입니다.
masks_dir시맨틱 마스크에 사용하는 디렉터리 이름입니다. YOLO 폴리곤 레이블 형식으로 전환하려면 데이터셋 루트에 masks/ 폴더가 없는 상태에서 이 키를 생략하세요.
names클래스 ID와 클래스 이름의 매핑입니다.
label_mapping소스 데이터셋 ID를 학습 ID 또는 ignore_label에 매핑하는 선택적 매핑입니다.
ultralytics/cfg/datasets/cityscapes8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes8
# Example usage: yolo semantic train data=cityscapes8.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes8 ← downloads here (small subset)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images

masks_dir: masks # semantic mask directory

# Cityscapes 19-class labels
names:
  0: road
  1: sidewalk
  2: building
  3: wall
  4: fence
  5: pole
  6: traffic light
  7: traffic sign
  8: vegetation
  9: terrain
  10: sky
  11: person
  12: rider
  13: car
  14: truck
  15: bus
  16: train
  17: motorcycle
  18: bicycle

# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
  -1: ignore_label
  0: ignore_label
  1: ignore_label
  2: ignore_label
  3: ignore_label
  4: ignore_label
  5: ignore_label
  6: ignore_label
  7: 0
  8: 1
  9: ignore_label
  10: ignore_label
  11: 2
  12: 3
  13: 4
  14: ignore_label
  15: ignore_label
  16: ignore_label
  17: 5
  18: ignore_label
  19: 6
  20: 7
  21: 8
  22: 9
  23: 10
  24: 11
  25: 12
  26: 13
  27: 14
  28: 15
  29: ignore_label
  30: ignore_label
  31: 16
  32: 17
  33: 18

# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zip

원본 마스크 ID가 연속적인 학습 클래스 ID와 이미 일치하지 않는 경우 label_mapping을 사용합니다. Cityscapes와 ADE20K에는 원본 레이블 ID를 YOLO 시맨틱 세그멘테이션 학습 ID로 변환하고 사용하지 않는 레이블을 무시하는 매핑이 포함되어 있습니다.

사용법#

Python 또는 CLI로 YOLO26 시맨틱 세그멘테이션 모델을 학습합니다:

예제
from ultralytics import YOLO

# 사전 학습된 시맨틱 세그멘테이션 모델 로드
model = YOLO("yolo26n-sem.pt")

# Cityscapes8 시맨틱 세그멘테이션 데이터셋으로 학습
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

지원되는 데이터셋#

Ultralytics는 다음 데이터셋을 위한 시맨틱 세그멘테이션 데이터셋 YAML 파일을 제공합니다. 사전 학습 모델 벤치마크 표 전체는 시맨틱 세그멘테이션 작업 페이지를 참조하세요.

  • Cityscapes: 학습 클래스 19개로 구성된 도시 거리 장면 시맨틱 분할 데이터셋입니다.
  • Cityscapes8: 빠른 테스트 및 CI 검사에 사용할 수 있는 8개 이미지의 Cityscapes 하위 집합입니다.
  • ADE20K: 시맨틱 클래스 150개를 포함하는 장면 파싱 데이터셋입니다.

사용자 데이터셋 추가#

옵션 A — PNG 마스크#

  1. images/train 및 images/val과 같은 분할 폴더에 이미지를 저장합니다.
  2. masks/train 및 masks/val과 같이 이미지 폴더와 대응하는 마스크 폴더에 이미지마다 단일 채널 마스크 하나를 저장합니다.
  3. 마스크 픽셀 값이 클래스 ID인지 확인합니다. 무시해야 하는 픽셀에는 255을 사용합니다.
  4. path, train, val, masks_dir, names가 포함된 데이터셋 YAML을 만듭니다.
  5. 마스크 ID를 연속적인 학습 ID로 변환해야 하는 경우에만 label_mapping을 추가합니다.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

옵션 B — 폴리곤 레이블#

  1. 인스턴스 세그멘테이션과 동일한 방식으로 이미지와 .txt 폴리곤 파일을 배치합니다.
  2. path, train, val, names이 포함된 데이터셋 YAML을 만들고 masks_dir는 생략합니다.
  3. 데이터셋 루트에서 이미지 폴더 옆에 masks/ 폴더가 없는지 확인합니다. 이 폴더가 있으면 YAML에 masks_dir이 없어도 PNG 마스크 모드로 전환됩니다.
  4. names에 "background" 항목을 추가하지 마세요. 다중 클래스 데이터셋의 경우 로더가 이를 자동으로 추가합니다. 단일 클래스 데이터셋은 학습 시 1개 클래스를 유지합니다. 선언한 클래스는 마스크에서 1이 되고, 어느 클래스에도 속하지 않는 픽셀은 0가 됩니다.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Ultralytics Platform은 시맨틱 작업용 폴리곤 주석 도구와 SAM 지원 Smart annotation을 제공합니다. 브라우저에서 직접 주석을 작성한 다음, 이 디렉터리 구조를 수동으로 설정하지 않고도 결과 폴리곤 레이블 데이터셋을 내보내거나 학습에 사용할 수 있습니다.

자주 묻는 질문#

  • 시맨틱 세그멘테이션 마스크는 픽셀 단위의 조밀한 맵입니다. 각 픽셀에는 클래스 ID가 저장되며, 학습 이미지마다 마스크 이미지 하나가 있습니다. Ultralytics YOLO의 인스턴스 세그멘테이션 레이블은 폴리곤 좌표가 포함된 텍스트 파일을 사용하며, 객체 인스턴스마다 한 행을 사용합니다.

  • 무시 레이블에는 픽셀 값 255을 사용합니다. 이 픽셀은 손실 및 메트릭 계산에서 제외되므로, 비유효 영역, 레이블이 지정되지 않은 픽셀 또는 학습 레이블 집합에 포함되지 않는 클래스에 유용합니다.

  • 예. 각 시맨틱 마스크의 파일 이름은 해당 이미지의 파일 이름에서 확장자를 제외한 부분과 같아야 합니다. 데이터셋 로더는 images 디렉터리 구성 요소를 masks_dir로 바꾸고 일치하는 마스크 파일을 찾습니다. .png 마스크를 찾지 못하면 다른 지원 이미지 확장자(.jpg, .tiff 등)를 대체 형식으로 검색합니다. 다만 이 대체 검색은 무손실 형식인지 확인하지 않으므로 무손실 형식만 사용하는 것이 좋습니다.

  • 예. 원본 ID가 이미 names 클래스 ID와 일치한다면 그대로 사용할 수 있습니다. 원본 데이터셋에서 연속적이지 않은 ID를 사용하거나 무시해야 하는 레이블이 포함되어 있다면, 원본 픽셀 값을 학습 ID로 변환하는 label_mapping 섹션을 추가합니다.

  • 예. 인스턴스 세그멘테이션 데이터셋은 Ultralytics YOLO 폴리곤 레이블을 사용합니다(이미지마다 .txt 하나와 <class-index> <x1> <y1> <x2> <y2> ... 행 포함). 동일한 파일을 시맨틱 세그멘테이션에도 재사용할 수 있습니다. 데이터셋 YAML에서 masks_dir를 생략하고, 데이터셋 루트에서 이미지 폴더 옆에 masks/ 폴더가 없는지 확인하기만 하면 됩니다. 이 폴더가 있으면 masks_dir가 설정되지 않았더라도 PNG 마스크 모드가 활성화됩니다. 그러면 로더가 폴리곤을 이미지별 마스크로 즉시 변환합니다. 다중 클래스 데이터셋(N > 1)에는 background 클래스가 추가되며, 모델은 N + 1 출력 채널로 생성됩니다. 단일 클래스 데이터셋(N == 1)은 학습 시 1개 클래스를 유지합니다. 마스크에서 선언한 클래스는 1로 표시되고, 어느 클래스에도 속하지 않는 픽셀은 0으로 표시됩니다.

  • Ultralytics에는 Cityscapes(도시 장면 클래스 19개), 파이프라인 테스트용 경량 하위 집합인 Cityscapes8, ADE20K(장면 파싱 클래스 150개)에 바로 사용할 수 있는 데이터셋 YAML 파일이 포함되어 있습니다. 각 페이지에는 정확한 클래스 목록, 다운로드 단계 및 검증된 학습 예제가 설명되어 있습니다.

댓글