Ultralytics YOLO27:

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 o Ultralytics YOLO para tarefas de segmentação de instâncias, além de instruções sobre como preparar, converter e utilizar esses conjuntos de dados para treinar os teus modelos.

Formatos de conjuntos de dados suportados#

Formato Ultralytics YOLO#

O formato das etiquetas do conjunto de dados utilizado para treinar modelos de segmentação YOLO é o seguinte:

  1. Um ficheiro de texto por imagem: Cada imagem do conjunto de dados tem um ficheiro de texto correspondente com o mesmo nome do ficheiro de imagem e a extensão ".txt".
  2. Uma linha por objeto: Cada linha do ficheiro de texto corresponde a uma instância de objeto na imagem.
  3. 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 delineiam a máscara do objeto, normalizados para ficarem entre 0 e 1.

O formato de uma única linha no ficheiro do conjunto de dados de segmentação é o seguinte:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

Neste 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] relativamente à largura e à altura da imagem). As coordenadas são separadas por espaços.

Eis 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
Dica
  • O comprimento de cada linha não tem de ser igual.
  • Cada etiqueta de segmentação deve ter um mínimo de 3 pontos (x, y): <class-index> <x1> <y1> <x2> <y2> <x3> <y3>
  • Cada objeto precisa de um polígono. As linhas no formato de detecção (<class-index> <x_center> <y_center> <width> <height>) não contêm nenhuma, e um conjunto de dados de segmentação cujas contagens de caixas e polígonos diferem é rejeitado com um ValueError quando seus rótulos são carregados.

Formato YAML do conjunto de dados#

A framework Ultralytics utiliza um formato de ficheiro YAML para definir a configuração do conjunto de dados e do modelo para treinar Modelos de Segmentação. Eis um exemplo do formato YAML utilizado para definir um conjunto de dados de segmentação:

ultralytics/cfg/datasets/coco8-seg.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.zip

Os 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 ficheiro *.txt que lista um caminho de imagem por linha (os caminhos que começam com ./ são resolvidos relativamente ao ficheiro *.txt). Um ficheiro *.txt é útil para treinar com um subconjunto de um diretório, ignorar imagens sem etiquetas ou combinar imagens de várias origens numa única divisão.

Caminhos de imagens num ficheiro `*.txt`
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: person

names é um dicionário de nomes de classes. A ordem dos nomes deve corresponder à ordem dos índices das classes dos objetos nos ficheiros do conjunto de dados YOLO.

Utilização#

Exemplo
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)

Conjuntos de dados suportados#

O Ultralytics YOLO suporta vários conjuntos de dados para tarefas de segmentação de instâncias. Aqui tens uma lista dos mais utilizados. A maioria destes conjuntos de dados também está hospedada na Ultralytics Platform, onde podes navegar pelas imagens e anotações, ver as estatísticas do conjunto de dados e cloná-los para treino na cloud.

  • Carparts-seg: Um conjunto de dados especializado na segmentação de peças automóveis, ideal para aplicações no setor automóvel. Inclui vários tipos de veículos com anotações detalhadas dos componentes individuais dos automóveis.
  • COCO: Um conjunto de dados abrangente para deteção de objetos, segmentação e legendagem, com mais de 200 mil imagens etiquetadas numa ampla variedade de categorias.
  • COCO8-seg: Um subconjunto compacto do COCO com 8 imagens, concebido 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 mais pequeno para tarefas de segmentação de instâncias, que contém um subconjunto de 128 imagens COCO com anotações de segmentação.
  • Crack-seg: Um conjunto de dados adaptado à segmentação de fissuras em várias superfícies. Essencial para a manutenção de infraestruturas e o controlo de qualidade, fornece imagens detalhadas para treinar modelos capazes de identificar fragilidades estruturais.
  • Package-seg: Um conjunto de dados dedicado à segmentação de diferentes tipos e formatos de materiais de embalagem. É especialmente útil para a logística e a automatização de armazéns, ajudando a desenvolver sistemas de manuseamento e triagem de embalagens.

Adicionar o teu próprio conjunto de dados#

Se tens o teu próprio conjunto de dados e gostarias de o utilizar para treinar modelos de segmentação no formato Ultralytics YOLO, certifica-te de que segue o formato especificado acima em "Formato Ultralytics YOLO". Converte as tuas anotações para o formato necessário e especifica os caminhos, o número de classes e os nomes das classes no ficheiro de configuração YAML. Mantém images/ e labels/ como pastas separadas no mesmo nível, com uma estrutura de subpastas correspondente; colocar ficheiros de etiquetas .txt na pasta de imagens pode fazer com que o modelo não detete as etiquetas.

Adaptar ou converter formatos de etiquetas#

Converter o formato de conjunto de dados COCO para o formato YOLO#

Podes converter facilmente etiquetas do popular formato de conjunto de dados COCO para o formato YOLO utilizando o seguinte trecho de código:

Exemplo
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 utilizada para converter o conjunto de dados COCO ou qualquer conjunto de dados no formato COCO para o formato Ultralytics YOLO.

Lembra-te de verificar cuidadosamente se o conjunto de dados que queres utilizar é compatível com o teu 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 é uma funcionalidade essencial que permite gerar um conjunto de dados de segmentação utilizando um modelo de deteção pré-treinado. Permite anotar de forma rápida e precisa um grande número de imagens sem a necessidade de etiquetagem manual, poupando tempo e esforço.

Gerar um conjunto de dados de segmentação utilizando um modelo de deteção#

Para anotar automaticamente o teu conjunto de dados utilizando a framework Ultralytics, podes usar a função auto_annotate, conforme mostrado abaixo:

Exemplo
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgumentoTipoPredefiniçãoDescrição
datastrobrigatórioCaminho para o diretório que contém as imagens-alvo para anotação ou segmentação.
det_modelstr'yolo26x.pt'Caminho para o modelo de deteção YOLO usado na deteção inicial de objetos.
sam_modelstr'sam_b.pt'Caminho para o modelo SAM usado na segmentação (suporta pesos de SAM, SAM 2, MobileSAM e SAM 3).
devicestr''Dispositivo de computação (por exemplo, 'cuda:0', 'cpu' ou '' para deteção automática do dispositivo).
conffloat0.25Limiar de confiança da deteção YOLO para filtrar deteções fracas.
ioufloat0.45Limiar de IoU para a supressão não máxima, usado para filtrar caixas sobrepostas.
imgszint640Tamanho de entrada para redimensionar as imagens (tem de ser múltiplo de 32).
max_detint300Número máximo de deteções por imagem para garantir eficiência de memória.
classeslist[int]NoneLista de índices de classes a detetar (por exemplo, [0, 1] para pessoa e bicicleta).
output_dirstrNoneDiretório onde guardar as anotações (por predefinição: diretório irmão de <data>_auto_annotate_labels).

A função auto_annotate recebe o caminho para as tuas imagens, juntamente com argumentos opcionais para especificar os modelos de deteção pré-treinados, por exemplo, YOLO26, YOLO11 ou outros modelos, e modelos de segmentação, por exemplo, SAM, SAM 2, MobileSAM ou SAM 3, o dispositivo no qual executar os modelos e o diretório de saída onde guardar os resultados anotados.

Ao tirar partido do poder 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. Esta funcionalidade é particularmente útil para investigadores e programadores que trabalham com grandes coleções de imagens, pois permite-lhes concentrarem-se no desenvolvimento e na avaliação de modelos em vez da anotação manual.

Visualizar anotações do conjunto de dados#

Antes de treinares o teu modelo, é frequentemente útil visualizar as anotações do teu conjunto de dados para garantir que estão corretas. A Ultralytics fornece uma função utilitária para esse efeito:

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,
)

Esta função desenha caixas delimitadoras, etiqueta os objetos com nomes de 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 máscaras de segmentação em formato binário, podes convertê-las para o formato de segmentação YOLO utilizando:

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áscaras binárias para o formato de segmentação YOLO e guarda-as no diretório de saída especificado.

Perguntas frequentes#

  • O Ultralytics YOLO é compatível com vários formatos de conjuntos de dados para segmentação de instâncias, sendo o principal o seu próprio formato Ultralytics YOLO. Cada imagem do teu conjunto de dados precisa de um ficheiro de texto correspondente com informações dos objetos segmentadas em várias linhas (uma linha por objeto), que lista o índice da classe e as coordenadas delimitadoras normalizadas. Para obter instruções mais detalhadas sobre o formato de conjunto de dados YOLO, visita Visão geral dos conjuntos de dados de segmentação de instâncias.

  • Converter anotações do formato COCO para o formato YOLO é simples utilizando as ferramentas da Ultralytics. Podes utilizar 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 teu conjunto de dados COCO para o formato YOLO necessário, tornando-o adequado para treinar os teus modelos YOLO. Para obter mais informações, consulta Portar ou converter formatos de etiquetas.

  • Para preparar um ficheiro YAML para treinar modelos YOLO com a Ultralytics, tens de definir os caminhos do conjunto de dados e os nomes das classes. Eis 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.zip

    Certifica-te de que atualizas os caminhos e os nomes das classes de acordo com o teu conjunto de dados. Para obter mais informações, consulta a secção Formato YAML do conjunto de dados.

  • A anotação automática no Ultralytics YOLO permite gerar anotações de segmentação para o teu conjunto de dados utilizando um modelo de deteção pré-treinado. Isto reduz significativamente a necessidade de etiquetagem manual. Podes utilizar a função auto_annotate da seguinte forma:

    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"

    Esta função automatiza o processo de anotação, tornando-o mais rápido e eficiente. Para obter mais informações, consulta a Referência de anotação automática.

Comentários