Visão geral dos datasets de segmentação de instâncias
A segmentação de instâncias é uma tarefa de visão computacional que envolve identificar e delinear objetos individuais dentro de uma imagem. Este guia fornece uma visão geral dos formatos de dataset suportados pelo Ultralytics YOLO para tarefas de segmentação de instâncias, além de instruções sobre como preparar, converter e usar esses datasets para treinar seus modelos.
Formatos de Dataset Suportados
Formato Ultralytics YOLO
O formato de rótulo do dataset usado para treinar modelos de segmentação YOLO é o seguinte:
- Um arquivo de texto por imagem: Cada imagem no dataset possui um arquivo de texto correspondente com o mesmo nome do arquivo de imagem e a extensão ".txt".
- Uma linha por objeto: Cada linha no 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 da caixa delimitadora do objeto: As coordenadas delimitadoras ao redor da área da máscara, normalizadas para ficarem entre 0 e 1.
O formato para uma única linha no arquivo de dataset de segmentação é o seguinte:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>
Neste formato, <class-index> é o índice da classe para o 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 dataset 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 deve ter um mínimo de 3 pontos
(x, y):<class-index> <x1> <y1> <x2> <y2> <x3> <y3>
Formato YAML do dataset
A estrutura Ultralytics usa um formato de arquivo YAML para definir a configuração do dataset e do modelo para treinar Modelos de Segmentação. Aqui está um exemplo do formato YAML usado para definir um dataset 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 e val especificam os caminhos para os diretórios que contêm as imagens de treinamento e validação, respectivamente.
names é um dicionário de nomes de classes. A ordem dos nomes deve corresponder à ordem dos índices de classe de objeto nos arquivos de dataset YOLO.
Utilização
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Datasets Suportados
O Ultralytics YOLO suporta vários datasets para tarefas de segmentação de instâncias. Aqui está uma lista dos mais usados:
- Carparts-seg: Um dataset especializado focado na segmentação de peças de carros, ideal para aplicações automotivas. Inclui uma variedade de veículos com anotações detalhadas de componentes individuais de carros.
- COCO: Um dataset abrangente para detecção de objetos, segmentação e legendagem, apresentando mais de 200 mil imagens rotuladas em uma ampla gama de categorias.
- COCO8-seg: Um subconjunto compacto de 8 imagens do COCO projetado para testes rápidos de treinamento de modelos de segmentação, ideal para verificações de CI e validação de fluxo de trabalho no repositório
ultralytics. - COCO128-seg: Um dataset menor para tarefas de segmentação de instâncias, contendo um subconjunto de 128 imagens COCO com anotações de segmentação.
- Crack-seg: Um dataset adaptado para a segmentação de rachaduras em várias superfícies. Essencial para manutenção de infraestrutura e controle de qualidade, ele fornece imagens detalhadas para treinar modelos a identificar fraquezas estruturais.
- Package-seg: Um dataset dedicado à segmentação de diferentes tipos de materiais e formatos de embalagens. É particularmente útil para automação logística e de armazéns, auxiliando no desenvolvimento de sistemas para manuseio e triagem de pacotes.
Adicionando seu próprio dataset
Se você possui seu próprio dataset e deseja usá-lo para treinar modelos de segmentação com o formato Ultralytics YOLO, certifique-se de que ele segue o formato especificado acima em "Ultralytics YOLO format". Converta suas anotações para o formato necessário e especifique os caminhos, número de classes e nomes das classes no arquivo de configuração YAML. Mantenha images/ e labels/ como pastas separadas no mesmo nível, com estrutura de subpastas correspondente; colocar arquivos de rótulo .txt na pasta de imagens pode fazer com que o modelo perca rótulos.
Portar ou Converter Formatos de Rótulo
Formato de Dataset COCO para Formato YOLO
Você pode converter facilmente rótulos do popular formato de dataset 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 dataset COCO ou qualquer dataset no formato COCO para o formato Ultralytics YOLO.
Lembre-se de verificar se o dataset que você deseja usar é compatível com seu modelo e segue as convenções de formato necessárias. Datasets formatados corretamente são cruciais para o treinamento bem-sucedido de modelos de segmentação.
Auto-anotação
Auto-annotation é um recurso essencial que permite gerar um dataset de segmentação usando um modelo de detecção pré-treinado. Isso permite que você anote rápida e precisamente um grande número de imagens sem a necessidade de rotulagem manual, economizando tempo e esforço.
Gerar Dataset de Segmentação Usando um Modelo de Detecção
Para fazer a auto-anotação do seu dataset usando a estrutura Ultralytics, você pode 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 | Predefiniçã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 do modelo de deteção YOLO para a deteção inicial de objetos. |
sam_model | str | 'sam_b.pt' | Caminho do modelo SAM para segmentação (suporta variantes SAM, SAM2 e modelos MobileSAM). |
device | str | '' | Dispositivo de computação (por exemplo, 'cuda:0', 'cpu', ou '' para deteção automática de dispositivo). |
conf | float | 0.25 | Limiar de confiança de deteção YOLO para filtrar deteções fracas. |
iou | float | 0.45 | Limiar IoU para Non-Maximum Suppression para filtrar caixas sobrepostas. |
imgsz | int | 640 | Tamanho de entrada para redimensionar imagens (deve ser múltiplo de 32). |
max_det | int | 300 | Número máximo de deteções por imagem para eficiência de memória. |
classes | list[int] | None | Lista de índices de classe a detetar (por exemplo, [0, 1] para pessoa e bicicleta). |
output_dir | str | None | Diretório de gravação para anotações (predefinição para './labels' relativo ao caminho dos dados). |
A função auto_annotate recebe o caminho para suas imagens, juntamente com argumentos opcionais para especificar os modelos de detecção pré-treinados, ou seja, YOLO26, YOLO11 ou outros modelos e modelos de segmentação, isto é, SAM, SAM2 ou MobileSAM, o dispositivo para executar os modelos e o diretório de saída para salvar os resultados anotados.
Ao aproveitar o poder de modelos pré-treinados, a auto-anotação pode reduzir significativamente o tempo e o esforço necessários para criar datasets de segmentação de alta qualidade. Esse recurso é particularmente útil para pesquisadores e desenvolvedores que trabalham com grandes coleções de imagens, pois permite que eles se concentrem no desenvolvimento e na avaliação do modelo em vez da anotação manual.
Visualizar Anotações de Dataset
Antes de treinar seu modelo, é frequentemente útil visualizar as anotações do seu dataset para garantir que estejam corretas. O Ultralytics fornece uma função utilitária para esse propósito:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Define the label map with all annotated class labels.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Input image path.
"path/to/annotations.txt", # Annotation file path for the image.
label_map,
)Essa função desenha caixas delimitadoras, rotula objetos com nomes de classes e ajusta a cor do texto para melhor legibilidade, ajudando você a identificar e corrigir quaisquer erros de anotação antes do treinamento.
Convertendo Máscaras de Segmentação para o Formato YOLO
Se você possui máscaras de segmentação em formato binário, pode convertê-las para o formato de segmentação YOLO usando:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# For datasets like COCO with 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 imagens de máscara binária para o formato de segmentação YOLO e as salva no diretório de saída especificado.
FAQ
Quais formatos de dataset o Ultralytics YOLO suporta para segmentação de instâncias?
O Ultralytics YOLO suporta vários formatos de dataset para segmentação de instâncias, sendo o formato principal o seu próprio formato Ultralytics YOLO. Cada imagem no seu dataset precisa de um arquivo de texto correspondente com informações do objeto segmentadas em várias linhas (uma linha por objeto), listando o índice da classe e as coordenadas delimitadoras normalizadas. Para instruções mais detalhadas sobre o formato de dataset YOLO, visite a Visão geral dos datasets de segmentação de instâncias.
Como posso converter anotações do dataset COCO para o formato YOLO?
Converter anotações do formato COCO para o formato YOLO é simples usando as ferramentas do Ultralytics. Você pode usar a função convert_coco do módulo ultralytics.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 seu dataset COCO para o formato YOLO necessário, tornando-o adequado para treinar seus modelos YOLO. Para mais detalhes, consulte Portar ou Converter Formatos de Rótulo.
Como preparo um arquivo YAML para treinar modelos Ultralytics YOLO?
Para preparar um arquivo YAML para treinar modelos YOLO com o Ultralytics, você precisa definir os caminhos do dataset e os nomes das classes. Aqui está 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.zipCertifique-se de atualizar os caminhos e os nomes das classes de acordo com seu dataset. Para mais informações, consulte a seção Formato YAML do Dataset.
O que é o recurso de auto-anotação no Ultralytics YOLO?
A auto-anotação no Ultralytics YOLO permite gerar anotações de segmentação para seu dataset usando um modelo de detecção pré-treinado. Isso reduz significativamente a necessidade de rotulagem manual. Você pode usar a função auto_annotate da seguinte maneira:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"Essa função automatiza o processo de anotação, tornando-o mais rápido e eficiente. Para mais detalhes, explore a Referência de Auto-Anotação.