Saltar para o conteúdo

Descrição geral dos conjuntos de dados de segmentação de instâncias

A segmentação de instâncias é uma tarefa de visão por computador que envolve a identificação e a delimitação de objectos individuais numa imagem. Este guia fornece uma visão geral dos formatos de conjuntos de dados suportados pelo Ultralytics YOLO para tarefas de segmentação de instâncias, juntamente com instruções sobre como preparar, converter e utilizar estes conjuntos de dados para treinar os seus modelos.

Formatos de conjuntos de dados suportados

Ultralytics YOLO formato

O formato da etiqueta do conjunto de dados utilizado para treinar os modelos de segmentação do 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 que o ficheiro de imagem e a extensão ".txt".
  2. Uma linha por objeto: Cada linha no ficheiro de texto corresponde a uma instância de objeto na imagem.
  3. Informações sobre o 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 de delimitação do objeto: As coordenadas delimitadoras em torno da área da máscara, normalizadas para estarem entre 0 e 1.

O formato para 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 de delimitação da máscara de segmentação do objeto. As coordenadas são separadas por espaços.

Eis um exemplo do formato do conjunto de dados YOLO para uma única imagem com dois objectos 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 xy: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Formato YAML do conjunto de dados

A estrutura Ultralytics utiliza um formato de ficheiro YAML para definir o conjunto de dados e a configuração do modelo para treinar Modelos de deteção. Aqui está um exemplo do formato YAML utilizado para definir um conjunto de dados de deteção:

# 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: ../datasets/coco8-seg # dataset root dir (absolute or relative; if relative, it's relative to default datasets_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 (80 COCO classes)
names:
    0: person
    1: bicycle
    2: car
    # ...
    77: teddy bear
    78: hair drier
    79: toothbrush

O train e val especificam os caminhos para os diretórios que contêm as imagens de treino e de validação, respetivamente.

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

Utilização

Exemplo

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640

Conjuntos de dados suportados

Ultralytics YOLO suporta vários conjuntos de dados para tarefas de segmentação de exemplos. Segue-se uma lista dos mais utilizados:

  • COCO: Um conjunto de dados abrangente para deteção, segmentação e legendagem de objectos, com mais de 200 mil imagens etiquetadas numa vasta gama de categorias.
  • COCO8-seg: Um subconjunto compacto de 8 imagens do COCO concebido para testar rapidamente a formação do modelo de segmentação, ideal para verificações de IC e validação do fluxo de trabalho no ultralytics repositório.
  • COCO128-seg: Um conjunto de dados mais pequeno para tarefas de segmentação de exemplos, contendo um subconjunto de 128 imagens COCO com anotações de segmentação.
  • Carparts-seg: Um conjunto de dados especializado centrado na segmentação de peças de automóveis, ideal para aplicações automóveis. Inclui uma variedade de veículos com anotações detalhadas dos componentes individuais dos automóveis.
  • Crack-seg: Um conjunto de dados concebido para a segmentação de fissuras em várias superfícies. Essencial para a manutenção de infra-estruturas e o controlo de qualidade, fornece imagens detalhadas para modelos de treino que identificam fraquezas estruturais.
  • Package-seg: Um conjunto de dados dedicado à segmentação de diferentes tipos de materiais e formas de embalagens. É particularmente útil para a logística e a automatização de armazéns, ajudando no desenvolvimento de sistemas de manuseamento e triagem de embalagens.

Adicionar o seu próprio conjunto de dados

Se você tiver seu próprio conjunto de dados e quiser usá-lo para treinar modelos de segmentação com o formato Ultralytics YOLO , certifique-se de que ele siga o formato especificado acima em "Ultralytics YOLO format". Converta suas anotações para o formato necessário e especifique os caminhos, o número de classes e os nomes das classes no arquivo de configuração YAML.

Portar ou converter formatos de etiquetas

Formato do conjunto de dados COCO para YOLO Formato

Pode converter facilmente etiquetas do popular formato de conjunto de dados COCO para o formato YOLO utilizando o seguinte fragmento 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 .

Lembre-se de verificar novamente se o conjunto de dados que pretende utilizar é compatível com o seu modelo e se segue as convenções de formato necessárias. Os conjuntos de dados corretamente formatados são cruciais para o treino de modelos de deteção de objectos bem sucedidos.

Anotação automática

A anotação automática é uma funcionalidade essencial que lhe permite gerar um conjunto de dados de segmentação utilizando um modelo de deteção pré-treinado. Permite-lhe anotar com rapidez e precisão um grande número de imagens sem 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 seu conjunto de dados utilizando a estrutura Ultralytics , pode utilizar o auto_annotate como mostrado abaixo:

Exemplo

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argumento Tipo Predefinição Descrição
data str necessário Caminho para o diretório que contém imagens alvo para anotação ou segmentação.
det_model str 'yolo11x.pt' YOLO caminho do modelo de deteção para a deteção inicial de objectos.
sam_model str 'sam_b.pt' Caminho do modelo SAM para segmentação (suporta modelos SAM, variantes SAM2 e mobile_sam).
device str '' Dispositivo de cálculo (por exemplo, 'cuda:0', 'cpu', ou '' para a deteção automática do dispositivo).
conf float 0.25 YOLO limiar de confiança da deteção para filtrar as detecções fracas.
iou float 0.45 Limiar IoU para Supressão Não Máxima 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 detecçõ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 Guardar o diretório para as anotações (a predefinição é './labels' em relação ao caminho dos dados).

O auto_annotate recebe o caminho para as suas imagens, juntamente com argumentos opcionais para especificar os modelos de deteção pré-treinados, ou seja YOLO11, YOLOv8 ou outro modelos e modelos de segmentação, ou seja SAM, SAM2 ou MobileSAMo dispositivo onde executar os modelos e o diretório de saída para guardar os resultados anotados.

Ao aproveitar o 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 colecções de imagens, uma vez que lhes permite concentrarem-se no desenvolvimento e avaliação de modelos em vez da anotação manual.

Visualizar anotações de conjuntos de dados

Antes de treinar o seu modelo, é muitas vezes útil visualizar as anotações do seu conjunto de dados para garantir que estão corretas. Ultralytics fornece uma função utilitária para esse fim:

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 objectos com nomes de classes e ajusta a cor do texto para melhor legibilidade, ajudando-o a identificar e corrigir quaisquer erros de anotação antes do treino.

Conversão de máscaras de segmentação para o formato YOLO

Se tiver máscaras de segmentação em formato binário, pode 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áscara binária para o formato de segmentação YOLO e guarda-as no diretório de saída especificado.

FAQ

Que formatos de conjuntos de dados é que Ultralytics YOLO suporta para a segmentação de instâncias?

Ultralytics YOLO suporta vários formatos de conjuntos de dados para segmentação de exemplos, sendo o formato principal o seu próprio formato Ultralytics YOLO . Cada imagem no seu conjunto de dados precisa de um arquivo de texto correspondente com informações de objeto segmentadas em várias linhas (uma linha por objeto), listando o índice de classe e as coordenadas delimitadoras normalizadas. Para obter instruções mais detalhadas sobre o formato do conjunto de dados YOLO , visite a Visão geral dos conjuntos de dados de segmentação de instâncias.

Como é que posso converter as anotações do conjunto de dados COCO para o formato YOLO ?

A conversão de anotações em formato COCO para o formato YOLO é simples, utilizando as ferramentas Ultralytics . Pode utilizar as ferramentas convert_coco da função ultralytics.data.converter módulo:

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 conjunto de dados COCO para o formato YOLO necessário, tornando-o adequado para treinar os seus modelos YOLO . Para obter mais detalhes, consulte Portar ou converter formatos de rótulo.

Como é que preparo um ficheiro YAML para treinar modelos Ultralytics YOLO ?

Para preparar um ficheiro YAML para treinar modelos YOLO com Ultralytics, é necessário definir os caminhos do conjunto de dados e os nomes das classes. Aqui está um exemplo de configuração YAML:

path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')

names:
    0: person
    1: bicycle
    2: car
    # ...

Certifique-se de que actualiza os caminhos e os nomes das classes de acordo com o seu conjunto de dados. Para obter mais informações, consulte a secção Formato YAML do conjunto de dados.

O que é a funcionalidade de anotação automática em Ultralytics YOLO ?

A anotação automática em Ultralytics YOLO permite-lhe gerar anotações de segmentação para o seu conjunto de dados utilizando um modelo de deteção pré-treinado. Isso reduz significativamente a necessidade de rotulagem manual. Pode utilizar o auto_annotate funcionam da seguinte forma:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.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 detalhes, explore a Referência de anotação automática.

📅C riado há 1 ano ✏️ Atualizado há 11 dias

Comentários