시맨틱 세그멘테이션 데이터셋 개요#
시맨틱 세그멘테이션은 이미지의 모든 픽셀에 하나의 클래스 라벨을 할당합니다. 인스턴스 세그멘테이션과 달리, 시맨틱 세그멘테이션은 동일한 클래스에 속하는 개별 객체를 구분하지 않습니다. 학습 대상은 각 픽셀에 클래스 ID가 저장된 조밀한 클래스 맵입니다.
이 가이드에서는 Ultralytics YOLO 시맨틱 세그멘테이션 모델에서 사용하는 데이터셋 형식을 설명하고, 학습 및 검증에 사용할 수 있는 기본 제공 데이터셋 구성을 나열합니다.
지원되는 데이터셋 형식#
두 가지 라벨 형식을 지원합니다. 데이터셋 YAML에 masks_dir 키가 정의되어 있거나 데이터셋 루트의 이미지 옆에 masks/ 폴더가 이미 존재하면 데이터셋 로더가 PNG 마스크를 선택합니다. 그렇지 않으면 YOLO 폴리곤 라벨로 대체됩니다.
PNG 마스크 형식#
시맨틱 세그멘테이션 데이터셋은 샘플마다 하나의 이미지 파일과 하나의 마스크 파일을 사용합니다. 마스크는 일반적으로 PNG 형식의 단일 채널 이미지이며, 각 픽셀 값은 해당 이미지 픽셀의 클래스 인덱스입니다.
- 픽셀 값
0,1,2, ...는 데이터셋names매핑의 클래스 ID를 나타냅니다. - 픽셀 값
255은 무시 라벨로 처리되며 손실 및 지표 계산에서 제외됩니다. - 마스크 파일은 대응하는 이미지 파일과 동일한 stem을 사용해야 합니다. 예를 들면
frankfurt_000000_000294.png입니다. - 마스크는 기본적으로
.png으로 확인합니다. 해당 파일이 없으면 지원되는 다른 이미지 확장자도 허용됩니다. 손실 압축(예:.jpg)은 클래스 ID 픽셀 값을 손상시키므로.png또는.tiff와 같은 무손실 형식을 사용합니다.
기본 레이아웃에서는 이미지와 마스크를 서로 대응하는 폴더에 저장합니다. 데이터셋 YAML의 masks_dir 값이 images 경로 구성 요소를 대체하여 마스크를 찾습니다.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/예를 들어 images/train/aachen_000000_000019.png의 이미지에는 masks_dir: masks인 경우 masks/train/aachen_000000_000019.png의 마스크가 대응됩니다.
YOLO 폴리곤 라벨 형식#
데이터셋에 이미 Ultralytics YOLO 폴리곤 라벨(이미지당 하나의 .txt과 <class-index> <x1> <y1> <x2> <y2> ... 행)이 있는 경우, PNG 마스크로 변환하지 않고 해당 라벨에서 직접 시맨틱 세그멘테이션을 학습할 수 있습니다. 행 수준 레이아웃은 인스턴스 세그멘테이션 데이터셋 형식을 참조하세요.
데이터셋 YAML에서 masks_dir을 생략하고 데이터셋 루트의 이미지 옆에 masks/ 폴더도 없는 경우 이 경로가 자동으로 선택됩니다. 남아 있는 masks/ 폴더가 있으면 제거하거나 이름을 변경해야 합니다. 그렇지 않으면 로더가 PNG 마스크 모드로 대체되어 해당 위치에서 마스크를 찾습니다. 동작은 다음과 같습니다.
- 폴리곤은 로드 시 이미지별 시맨틱 마스크로 변환되며, 겹치는 영역에서 더 작은 객체가 더 큰 객체를 덮어쓰도록 면적순으로 정렬됩니다.
- 다중 클래스(
N > 1이names에 있음): 선언된 클래스 뒤에background라는 추가 클래스가 추가되며, 이는 어떤 폴리곤에도 포함되지 않는 픽셀에 사용됩니다. 모델은N + 1개의 출력 채널로 구성되고 마지막 채널은 배경입니다. - 단일 클래스(
N == 1이names에 있음): 여전히 1개 클래스로 학습됩니다. 마스크는 이진이며, 선언된 클래스는1, 어떤 폴리곤에도 포함되지 않는 픽셀은0으로 표시됩니다.names에 추가 배경 클래스는 추가되지 않습니다. - 증강 패딩으로 추가된 픽셀(예: 랜덤 크롭)에도
255이 무시 라벨로 사용됩니다.
데이터가 이미 인스턴스 폴리곤으로 라벨링되어 있고 동일한 파일에서 시맨틱 세그멘테이션 모델을 만들려는 경우 이 경로를 사용합니다.
데이터셋 YAML 형식#
시맨틱 세그멘테이션 데이터셋은 YAML 파일로 구성합니다. 주요 필드는 다음과 같습니다.
| 키 | 설명 |
|---|---|
path | 데이터셋 루트 디렉터리입니다. |
train | path을 기준으로 한 학습 이미지 경로 또는 절대 경로입니다. |
val | path을 기준으로 한 검증 이미지 경로 또는 절대 경로입니다. |
test | 선택 사항인 테스트 이미지 경로입니다. |
masks_dir | 시맨틱 마스크에 사용되는 디렉터리 이름입니다. 이 키를 생략하고 데이터셋 루트에 masks/ 폴더도 없으면 YOLO 폴리곤 라벨 형식으로 전환됩니다. |
names | 클래스 ID와 클래스 이름의 매핑입니다. |
label_mapping | 소스 데이터셋 ID를 학습 ID 또는 ignore_label으로 매핑하는 선택적 설정입니다. |
# 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
# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")
# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)지원되는 데이터셋#
Ultralytics는 다음 데이터셋에 대한 시맨틱 세그멘테이션 데이터셋 YAML 파일을 제공합니다. 전체 사전 학습 모델 벤치마크 표는 시맨틱 세그멘테이션 작업 페이지를 참조하세요.
- Cityscapes: 19개 학습 클래스가 포함된 도시 거리 장면 시맨틱 세그멘테이션 데이터셋입니다.
- Cityscapes8: 빠른 테스트와 CI 검사에 사용할 수 있는 8개 이미지의 Cityscapes 하위 집합입니다.
- ADE20K: 150개 시맨틱 클래스가 포함된 장면 파싱 데이터셋입니다.
사용자 데이터셋 추가#
옵션 A — PNG 마스크#
images/train및images/val과 같은 분할 폴더 아래에 이미지를 저장합니다.masks/train및masks/val과 같은 미러링된 마스크 폴더에 이미지당 하나의 단일 채널 마스크를 저장합니다.- 마스크 픽셀 값이 클래스 ID인지 확인합니다. 무시해야 하는 픽셀에는
255을 사용합니다. path,train,val,masks_dir,names를 포함하는 데이터셋 YAML을 생성합니다.- 마스크 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 — 폴리곤 라벨#
- 인스턴스 세그멘테이션과 동일하게 이미지와
.txt폴리곤 파일을 배치합니다. path,train,val,names을 포함하는 데이터셋 YAML을 생성하되,masks_dir는 생략합니다.- 데이터셋 루트에서 이미지 옆에
masks/폴더가 없는지 확인합니다. 이 폴더가 존재하기만 해도 YAML에masks_dir이 없어도 로더가 PNG 마스크 모드로 전환됩니다. names에 "background" 항목을 추가하지 마세요. 다중 클래스 데이터셋에서는 로더가 자동으로 하나를 추가합니다. 단일 클래스 데이터셋에서는 학습이 1개 클래스로 유지되며, 선언된 클래스는 마스크에서1, 포함되지 않은 픽셀은0가 됩니다.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carUltralytics Platform은 시맨틱 작업을 위한 폴리곤 어노테이션 도구와 SAM 기반 Smart 어노테이션을 제공합니다. 브라우저에서 직접 어노테이션한 후 결과 폴리곤 라벨 데이터셋을 내보내거나 학습에 사용할 수 있으므로 이 레이아웃을 수동으로 설정할 필요가 없습니다.
FAQ#
시맨틱 세그멘테이션 마스크는 조밀한 픽셀 맵입니다. 각 픽셀에 클래스 ID가 저장되며 학습 이미지마다 마스크 이미지가 하나씩 있습니다. Ultralytics YOLO의 인스턴스 세그멘테이션 라벨은 객체 인스턴스마다 한 행에 폴리곤 좌표를 기록하는 텍스트 파일을 사용합니다.
픽셀 값
255이 무시 라벨로 사용됩니다. 이러한 픽셀은 손실 및 지표 계산에서 제외되므로, 유효하지 않은 영역, 라벨이 지정되지 않은 픽셀 또는 학습 라벨 집합에 포함되지 않는 클래스에 유용합니다.예. 각 시맨틱 마스크는 해당 이미지와 동일한 파일 stem을 가져야 합니다. 데이터셋 로더는
images디렉터리 구성 요소를masks_dir로 대체하여 일치하는 마스크 파일을 검색합니다..png마스크를 찾지 못하면 지원되는 다른 이미지 확장자(.jpg,.tiff등)로 대체하지만, 이 대체 과정에서는 무손실 형식 사용을 강제하지 않으므로 무손실 형식만 권장됩니다.이미
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 파일이 포함되어 있습니다. 각 페이지에는 정확한 클래스 목록, 다운로드 단계 및 검증된 학습 예제가 설명되어 있습니다.