시맨틱 세그멘테이션 데이터셋 개요#
Semantic segmentation은 이미지의 모든 픽셀에 하나의 클래스 레이블을 할당합니다. instance segmentation과 달리, 시맨틱 세그멘테이션은 동일 클래스의 개별 객체를 분리하지 않습니다. 학습 타겟은 각 픽셀에 클래스 ID가 저장되는 조밀한 클래스 맵입니다.
이 가이드는 Ultralytics YOLO 시맨틱 세그멘테이션 모델에서 사용하는 데이터셋 형식을 설명하며, 학습 및 검증에 사용할 수 있는 기본 데이터셋 구성을 나열합니다.
지원되는 데이터셋 형식#
두 가지 레이블 형식이 지원됩니다. 데이터셋 로더는 데이터셋 YAML에 masks_dir 키가 정의되어 있거나 데이터셋 루트의 이미지 옆에 masks/ 폴더가 이미 존재하는 경우 PNG 마스크를 선택하며, 그렇지 않으면 YOLO 폴리곤 레이블로 대체됩니다.
PNG 마스크 형식#
시맨틱 세그멘테이션 데이터셋은 샘플당 하나의 이미지 파일과 하나의 마스크 파일을 사용합니다. 마스크는 일반적으로 PNG 형식의 단일 채널 이미지이며, 각 픽셀 값은 해당 이미지 픽셀의 클래스 인덱스입니다.
- 픽셀 값
0,1,2, ...은 데이터셋names매핑의 클래스 ID를 나타냅니다. - 픽셀 값
255은 무시(ignore) 레이블로 취급되며 손실 및 메트릭 계산에서 제외됩니다. - 마스크 파일은 매칭되는 이미지 파일과 동일한 스템을 사용해야 합니다. 예를 들어
frankfurt_000000_000294.png과 같습니다. - 마스크는 기본적으로
.png(으)로 해결되며, 누락된 경우 지원되는 다른 이미지 확장자도 허용됩니다. 손실 압축(예:.jpg)은 클래스 ID 픽셀 값을 손상시키므로.png또는.tiff와 같은 무손실 형식을 사용하십시오.
기본 레이아웃은 이미지와 마스크를 병렬 폴더에 유지합니다. 마스크를 찾기 위해 데이터셋 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
# 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 파일을 제공합니다. 전체 사전 학습 모델 벤치마크 표는 semantic segmentation task page를 참고하세요.
- 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 지원 스마트 주석을 제공합니다. 브라우저에서 직접 주석을 달고 이 레이아웃을 수동으로 설정하지 않고도 결과 폴리곤 레이블 데이터셋을 내보내거나 학습할 수 있습니다.
FAQ#
시맨틱 세그멘테이션 마스크와 인스턴스 세그멘테이션 레이블의 차이점은 무엇인가요?#
시맨틱 세그멘테이션 마스크는 덴스 픽셀 맵입니다. 각 픽셀은 클래스 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와 함께 제공되는 데이터셋은 무엇입니까?#
Ultralytics에는 Cityscapes(19개의 도시 장면 클래스), 파이프라인 테스트를 위한 경량 Cityscapes8 서브셋, 그리고 ADE20K(150개의 장면 파싱 클래스)를 위한 즉시 사용 가능한 데이터셋 YAML 파일이 포함되어 있습니다. 각 페이지에는 정확한 클래스 목록, 다운로드 단계, 그리고 검증된 학습 예제가 문서화되어 있습니다.