시맨틱 세그멘테이션 데이터셋 개요#
시맨틱 세그멘테이션은 이미지의 모든 픽셀에 하나의 클래스 레이블을 할당합니다. 인스턴스 세그멘테이션과 달리 시맨틱 세그멘테이션은 같은 클래스에 속하는 개별 객체를 분리하지 않습니다. 학습 대상은 각 픽셀에 클래스 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 | 데이터셋 루트 디렉터리입니다. |
train | path에 대한 상대 경로 또는 절대 경로로 지정하는 학습 이미지 경로입니다. |
val | path에 대한 상대 경로 또는 절대 경로로 지정하는 검증 이미지 경로입니다. |
test | 선택적 테스트 이미지 경로입니다. |
masks_dir | 시맨틱 마스크에 사용하는 디렉터리 이름입니다. YOLO 폴리곤 레이블 형식으로 전환하려면 데이터셋 루트에 masks/ 폴더가 없는 상태에서 이 키를 생략하세요. |
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
# 사전 학습된 시맨틱 세그멘테이션 모델 로드
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 마스크#
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 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 파일이 포함되어 있습니다. 각 페이지에는 정확한 클래스 목록, 다운로드 단계 및 검증된 학습 예제가 설명되어 있습니다.