Visão geral dos conjuntos de dados de segmentação de instâncias#
A segmentação de instâncias é uma tarefa de visão computacional que envolve identificar e delimitar objetos individuais em uma imagem. Este guia apresenta uma visão geral dos formatos de conjuntos de dados compatíveis com Ultralytics YOLO para tarefas de segmentação de instâncias, além de instruções sobre como preparar, converter e usar esses conjuntos de dados para treinar seus modelos.
Formatos de conjuntos de dados compatíveis#
Formato Ultralytics YOLO#
O formato dos rótulos do conjunto de dados usado para treinar modelos de segmentação YOLO é o seguinte:
- Um arquivo de texto por imagem: cada imagem do conjunto de dados tem um arquivo de texto correspondente com o mesmo nome do arquivo de imagem e a extensão ".txt".
- Uma linha por objeto: cada linha do arquivo de texto corresponde a uma instância de objeto na imagem.
- Informações do objeto por linha: cada linha contém as seguintes informações sobre a instância do objeto:
- Índice da classe do objeto: um número inteiro que representa a classe do objeto (por exemplo, 0 para pessoa, 1 para carro etc.).
- Coordenadas do polígono do objeto: os pontos
(x, y)que contornam a máscara do objeto, normalizados para valores entre 0 e 1.
O formato de uma única linha no arquivo do conjunto de dados de segmentação é o seguinte:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>Nesse formato, <class-index> é o índice da classe do objeto, e <x1> <y1> <x2> <y2> ... <xn> <yn> são as coordenadas normalizadas do polígono da máscara de segmentação do objeto (os valores estão em [0, 1] em relação à largura e à altura da imagem). As coordenadas são separadas por espaços.
Aqui está um exemplo do formato de conjunto de dados YOLO para uma única imagem com dois objetos, compostos por um segmento de 3 pontos e um segmento de 5 pontos.
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- O comprimento de cada linha não precisa ser igual.
- Cada rótulo de segmentação precisa ter no mínimo 3 pontos
(x, y):<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - Todo objeto precisa de um polígono. As linhas no formato de detecção (
<class-index> <x_center> <y_center> <width> <height>) não têm nenhum, e um conjunto de dados de segmentação com quantidades diferentes de caixas e polígonos é rejeitado com umValueErrorquando os rótulos são carregados.
Formato YAML do conjunto de dados#
O framework Ultralytics usa o formato de arquivo YAML para definir a configuração do conjunto de dados e do modelo para treinar modelos de segmentação. Veja um exemplo do formato YAML usado para definir um conjunto de dados de segmentação:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipOs campos train, val e test apontam para as imagens de treino, validação e teste. Cada um aceita um diretório, uma lista de diretórios ou um arquivo *.txt que lista um caminho de imagem por linha (caminhos que começam com ./ são resolvidos em relação ao arquivo *.txt). Um arquivo *.txt é útil para treinar com um subconjunto de um diretório, ignorar imagens sem rótulos ou combinar imagens de várias fontes em uma única divisão.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames é um dicionário de nomes de classes. A ordem dos nomes deve corresponder à ordem dos índices de classe dos objetos nos arquivos do conjunto de dados YOLO.
Uso#
from ultralytics import YOLO
# Carregar um modelo
model = YOLO("yolo26n-seg.pt") # carregue um modelo pré-treinado (recomendado para treinamento)
# Treinar o modelo
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Conjuntos de dados compatíveis#
O Ultralytics YOLO é compatível com vários conjuntos de dados para tarefas de segmentação de instâncias. Veja uma lista dos mais usados. A maioria desses conjuntos de dados também está hospedada na Ultralytics Platform, onde podes explorar as imagens e anotações, consultar estatísticas dos conjuntos de dados e cloná-los para treinar na nuvem.
- Carparts-seg: um conjunto de dados especializado em segmentação de peças automotivas, ideal para aplicações do setor automotivo. Inclui diversos veículos com anotações detalhadas de componentes individuais.
- COCO: um conjunto de dados abrangente para detecção de objetos, segmentação e geração de legendas, com mais de 200 mil imagens rotuladas em uma ampla variedade de categorias.
- COCO8-seg: um subconjunto compacto do COCO, com 8 imagens, criado para testar rapidamente o treino de modelos de segmentação. É ideal para verificações de CI e validação de fluxos de trabalho no repositório
ultralytics. - COCO128-seg: um conjunto de dados menor para tarefas de segmentação de instâncias, com um subconjunto de 128 imagens do COCO e anotações de segmentação.
- Crack-seg: um conjunto de dados desenvolvido para segmentar rachaduras em várias superfícies. Essencial para manutenção de infraestruturas e controle de qualidade, oferece imagens detalhadas para treinar modelos a identificar fragilidades estruturais.
- Package-seg: um conjunto de dados dedicado à segmentação de diferentes tipos e formatos de materiais de embalagem. É especialmente útil para automação de logística e armazéns, ajudando a desenvolver sistemas de manuseio e triagem de pacotes.
Adicionar o seu próprio conjunto de dados#
Se tens um conjunto de dados próprio e queres usá-lo para treinar modelos de segmentação no formato Ultralytics YOLO, verifica se ele segue o formato especificado acima em "Formato Ultralytics YOLO". Converte as anotações para o formato necessário e especifica os caminhos, o número de classes e os nomes das classes no arquivo de configuração YAML. Mantém images/ e labels/ em pastas separadas no mesmo nível, com a mesma estrutura de subpastas; colocar arquivos de rótulos .txt na pasta de imagens pode fazer com que o modelo não encontre os rótulos.
Portar ou converter formatos de rótulos#
Converter o formato do conjunto de dados COCO para o formato YOLO#
Podes converter facilmente rótulos do popular formato de conjunto de dados COCO para o formato YOLO usando o seguinte trecho de código:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Esta ferramenta de conversão pode ser usada para converter o conjunto de dados COCO ou qualquer conjunto de dados no formato COCO para o formato Ultralytics YOLO.
Lembra-te de verificar se o conjunto de dados que queres usar é compatível com o modelo e segue as convenções de formato necessárias. Conjuntos de dados formatados corretamente são essenciais para treinar modelos de segmentação eficazes.
Anotação automática#
A anotação automática é um recurso essencial que permite gerar um conjunto de dados de segmentação usando um modelo de detecção pré-treinado. Com ela, podes anotar de forma rápida e precisa um grande número de imagens sem rotulagem manual, poupando tempo e esforço.
Gerar um conjunto de dados de segmentação usando um modelo de detecção#
Para anotar automaticamente o teu conjunto de dados com o framework Ultralytics, podes usar a função auto_annotate, como mostrado abaixo:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argumento | Tipo | Padrão | Descrição |
|---|---|---|---|
data | str | obrigatório | Caminho para o diretório que contém as imagens de destino para anotação ou segmentação. |
det_model | str | 'yolo26x.pt' | Caminho para o modelo de detecção YOLO usado na detecção inicial de objetos. |
sam_model | str | 'sam_b.pt' | Caminho para o modelo SAM usado na segmentação (compatível com pesos de SAM, SAM 2, MobileSAM e SAM 3). |
device | str | '' | Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para detecção automática do dispositivo). |
conf | float | 0.25 | Limite de confiança para a detecção YOLO, usado para filtrar detecções fracas. |
iou | float | 0.45 | Limite de IoU para a supressão não máxima, usada para filtrar caixas sobrepostas. |
imgsz | int | 640 | Tamanho de entrada para redimensionar as imagens (arredondado para cima até um múltiplo de 32, se necessário). |
max_det | int | 300 | Número máximo de detecções por imagem para economizar memória. |
classes | list[int] | None | Lista de índices de classes a detectar (por exemplo, [0, 1] para pessoa e bicicleta). |
output_dir | str | None | Diretório para salvar as anotações (por padrão: diretório irmão de <data>_auto_annotate_labels). |
A função auto_annotate recebe o caminho das imagens, além de argumentos opcionais para especificar os modelos de detecção pré-treinados, por exemplo, YOLO26, YOLO11 ou outros modelos, e os modelos de segmentação, por exemplo, SAM, SAM 2, MobileSAM ou SAM 3, além do dispositivo em que os modelos serão executados e do diretório de saída onde os resultados anotados serão salvos.
Ao aproveitar o potencial dos modelos pré-treinados, a anotação automática pode reduzir significativamente o tempo e o esforço necessários para criar conjuntos de dados de segmentação de alta qualidade. Esse recurso é especialmente útil para pesquisadores e desenvolvedores que trabalham com grandes coleções de imagens, pois permite que se concentrem no desenvolvimento e na avaliação de modelos em vez de fazer anotações manualmente.
Visualizar anotações de conjuntos de dados#
Antes de treinar o modelo, costuma ser útil visualizar as anotações do conjunto de dados para confirmar que estão corretas. O Ultralytics oferece uma função utilitária para isso. Ela lê apenas rótulos de caixas no formato de detecção (<class-index> <x_center> <y_center> <width> <height>), portanto não consegue analisar arquivos de rótulos com polígonos de segmentação:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Defina o mapa de rótulos com todos os rótulos das classes anotadas.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Caminho da imagem de entrada.
"path/to/annotations.txt", # Caminho do arquivo de anotação da imagem.
label_map,
)Esta função desenha caixas delimitadoras, identifica os objetos com os nomes das classes e ajusta a cor do texto para melhorar a legibilidade, ajudando-te a identificar e corrigir erros de anotação antes do treino.
Converter máscaras de segmentação para o formato YOLO#
Se tens imagens de máscaras em escala de cinza, nas quais o valor de cada pixel corresponde ao índice da classe + 1 (0 é o plano de fundo), podes convertê-las para o formato de segmentação YOLO usando:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# Para conjuntos de dados como COCO, com 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)Este utilitário converte as imagens de máscara para o formato de segmentação YOLO e salva os arquivos no diretório de saída especificado.
Perguntas frequentes#
O Ultralytics YOLO aceita vários formatos de conjunto de dados para segmentação de instâncias, sendo o principal o próprio formato Ultralytics YOLO. Cada imagem do conjunto de dados precisa de um arquivo de texto correspondente com as informações dos objetos, organizadas em várias linhas (uma por objeto), que lista o índice da classe e as coordenadas normalizadas dos polígonos. Para instruções mais detalhadas sobre o formato de conjunto de dados YOLO, consulta a visão geral dos conjuntos de dados de segmentação de instâncias.
É fácil converter anotações do formato COCO para o formato YOLO com as ferramentas Ultralytics. Podes usar a função
convert_cocodo móduloultralytics.data.converter:from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Este script converte as anotações do conjunto de dados COCO para o formato YOLO necessário, deixando-o pronto para treinar os teus modelos YOLO. Para mais detalhes, consulta Migrar ou converter formatos de rótulos.
Para preparar um arquivo YAML para treinar modelos YOLO com o Ultralytics, precisas definir os caminhos do conjunto de dados e os nomes das classes. Veja um exemplo de configuração YAML:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipAtualiza os caminhos e os nomes das classes de acordo com o teu conjunto de dados. Para mais informações, consulta a seção Formato YAML do conjunto de dados.
A anotação automática do Ultralytics YOLO permite gerar anotações de segmentação para o teu conjunto de dados usando um modelo de detecção pré-treinado. Isso reduz significativamente a necessidade de rotulagem manual. Podes usar a função
auto_annotateda seguinte forma:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # ou sam_model="mobile_sam.pt"Esta função automatiza o processo de anotação, tornando-o mais rápido e eficiente. Para mais detalhes, consulta a referência de anotação automática.