Visão Geral dos Conjuntos de Dados de Segmentação Semântica
A segmentação semântica atribui um rótulo de classe a cada pixel em uma imagem. Ao contrário da segmentação de instância, a segmentação semântica não separa objetos individuais da mesma classe. O alvo do treinamento é um mapa de classes denso, onde cada pixel armazena um ID de classe.
Este guia explica o formato de conjunto de dados usado pelos modelos de segmentação semântica Ultralytics YOLO e lista as configurações de conjuntos de dados integradas disponíveis para treinamento e validação.
Formatos de Conjunto de Dados Suportados
Dois formatos de rótulo são suportados. O carregador de conjunto de dados escolhe o caminho com base no fato de o YAML do conjunto de dados definir ou não uma chave masks_dir.
Formato de máscara PNG
Os conjuntos de dados de segmentação semântica usam um arquivo de imagem e um arquivo de máscara por amostra. A máscara é uma imagem de canal único, geralmente PNG, onde cada valor de pixel é o índice de classe correspondente ao pixel da imagem.
- Os valores de pixel
0,1,2, ... representam os IDs de classe do mapeamentonamesdo conjunto de dados. - O valor de pixel
255é tratado como o rótulo de ignorar e é excluído do cálculo da perda e das métricas. - Os arquivos de máscara devem usar o mesmo radical que o arquivo de imagem correspondente, por exemplo,
frankfurt_000000_000294.png. - As extensões de máscara suportadas são
.png,.PNG,.bmpe.tif.
O layout padrão mantém imagens e máscaras em pastas paralelas. O valor masks_dir do YAML do conjunto de dados substitui o componente de caminho images para localizar as máscaras.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/Por exemplo, uma imagem em images/train/aachen_000000_000019.png é pareada com uma máscara em masks/train/aachen_000000_000019.png quando masks_dir: masks.
Formato de rótulo de polígono YOLO
Se o seu conjunto de dados já possui rótulos de polígono Ultralytics YOLO (um arquivo .txt por imagem com linhas <class-index> <x1> <y1> <x2> <y2> ...), você pode treinar a segmentação semântica diretamente a partir deles — sem necessidade de conversão para máscara PNG. Veja o formato de conjunto de dados de segmentação de instância para o layout de nível de linha.
Este caminho é selecionado automaticamente quando o YAML do conjunto de dados omite masks_dir. Comportamento:
- Os polígonos são convertidos para uma máscara semântica por imagem no momento do carregamento, classificados por área para que objetos menores se sobreponham aos maiores em regiões de sobreposição.
- Multiclasse (
N > 1emnames): uma classebackgroundadicional é adicionada após as classes declaradas para pixels não cobertos por nenhum polígono. O modelo é construído comN + 1canais de saída e o último canal é o background. - Classe única (
N == 1emnames): ainda treinado como 1 classe. A máscara é binária, com sua classe declarada mostrada como1e pixels não cobertos por nenhum polígono como0. Nenhuma classe background extra é adicionada anames. - Pixels adicionados por preenchimento de aumento (ex: corte aleatório) ainda usam
255como rótulo de ignorar.
Use este caminho quando seus dados já estiverem rotulados como polígonos de instância e você desejar um modelo de segmentação semântica a partir dos mesmos arquivos.
Formato YAML de conjunto de dados
Os conjuntos de dados de segmentação semântica são configurados com arquivos YAML. Os campos principais são:
| Chave | Descrição |
|---|---|
path | Diretório raiz do conjunto de dados. |
train | Caminho da imagem de treinamento relativo a path, ou um caminho absoluto. |
val | Caminho da imagem de validação relativo a path, ou um caminho absoluto. |
test | Caminho opcional para a imagem de teste. |
masks_dir | Nome do diretório usado para máscaras semânticas. Omita esta chave para mudar para o formato de rótulo de polígono YOLO. |
names | Mapeamento de ID de classe para nome de classe. |
label_mapping | Mapeamento opcional de IDs do conjunto de dados original para IDs de treinamento ou 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.zipUse label_mapping quando os IDs da máscara de origem não corresponderem aos IDs contíguos da classe de treinamento. Cityscapes e ADE20K incluem mapeamentos que convertem os IDs de rótulo originais em IDs de treinamento de segmentação semântica YOLO e ignoram rótulos não utilizados.
Uso
Treine um modelo de segmentação semântica YOLO26 com Python ou CLI:
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)Conjuntos de Dados Suportados
A Ultralytics fornece arquivos YAML de conjunto de dados de segmentação semântica para estes conjuntos de dados:
- Cityscapes: Conjunto de dados de segmentação semântica de cena urbana com 19 classes de treinamento.
- Cityscapes8: Um subconjunto Cityscapes de 8 imagens para testes rápidos e verificações de CI.
- ADE20K: Conjunto de dados de análise de cena com 150 classes semânticas.
Adicionando seu próprio conjunto de dados
Opção A — Máscaras PNG
- Salve suas imagens em pastas divididas como
images/traineimages/val. - Salve uma máscara de canal único por imagem nas pastas de máscara espelhadas, como
masks/trainemasks/val. - Certifique-se de que os valores de pixel da máscara sejam IDs de classe. Use
255para pixels que devem ser ignorados. - Crie um YAML de conjunto de dados com
path,train,val,masks_direnames. - Adicione
label_mappingapenas quando seus IDs de máscara precisarem de conversão para IDs de treinamento contíguos.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks
names:
0: background
1: road
2: buildingOpção B — Rótulos de polígono
- Organize as imagens e os arquivos de polígono
.txtexatamente como para segmentação de instância. - Crie um YAML de conjunto de dados com
path,train,valenames— omitamasks_dir. - Não adicione uma entrada "background" em
names. Para conjuntos de dados multiclasse, o carregador anexa uma automaticamente; para conjuntos de dados de classe única, o treinamento permanece em 1 classe — sua classe declarada torna-se1na máscara e os pixels descobertos tornam-se0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carPerguntas Frequentes
Qual é a diferença entre máscaras de segmentação semântica e rótulos de segmentação de instância?
As máscaras de segmentação semântica são mapas de pixels densos. Cada pixel armazena um ID de classe, e existe uma imagem de máscara por imagem de treinamento. Os rótulos de segmentação de instância no Ultralytics YOLO usam arquivos de texto com coordenadas de polígono, uma linha por instância de objeto.
Qual valor de pixel é ignorado durante o treinamento?
O valor de pixel 255 é usado como o rótulo de ignorar. Esses pixels são pulados durante o cálculo da perda e das métricas, o que é útil para regiões vazias, pixels não rotulados ou classes fora do conjunto de rótulos de treinamento.
Os nomes dos arquivos de máscara precisam corresponder aos nomes dos arquivos de imagem?
Sim. Cada máscara semântica deve ter o mesmo radical de arquivo que a imagem correspondente. O carregador de conjunto de dados substitui o componente de diretório images por masks_dir e procura por arquivos de máscara correspondentes.
Posso usar IDs de rótulo do conjunto de dados original diretamente?
Sim, se eles já corresponderem aos seus IDs de classe em names. Se o conjunto de dados de origem usar IDs não contíguos ou incluir rótulos que devem ser ignorados, adicione uma seção label_mapping para converter os valores de pixel de origem em IDs de treinamento.
Posso usar meu conjunto de dados de segmentação de instância para treinar a segmentação semântica?
Sim. Os conjuntos de dados de segmentação de instância usam rótulos de polígono Ultralytics YOLO (um .txt por imagem com linhas <class-index> <x1> <y1> <x2> <y2> ...), e os mesmos arquivos podem ser reutilizados para segmentação semântica — apenas omita masks_dir do YAML do conjunto de dados. O carregador converte polígonos em máscaras por imagem em tempo real. Para conjuntos de dados multiclasse (N > 1), uma classe background extra é adicionada e o modelo é construído com N + 1 canais de saída. Para conjuntos de dados de classe única (N == 1), o treinamento permanece em 1 classe — a máscara mostra sua classe declarada como 1 e os pixels descobertos como 0.