Ultralytics YOLO27: Inscreve-te na lista de espera.
Get Started
Aulainiciante

Boas práticas de anotação

Escreve um guia de anotação, escolhe uma ferramenta, evita os dez erros que prejudicam a precisão sem dar nas vistas e mede a concordância entre anotadores com um script antes de expandir o processo.

A qualidade das etiquetas limita a qualidade do modelo. Dez anotadores que interpretam «palete» de formas ligeiramente diferentes produzem um conjunto de dados que ensina as dez interpretações ao mesmo tempo, e nenhum volume de treino resolve a contradição. Um guia escrito, uma ronda de calibração com resultados medidos e uma lista curta de erros conhecidos mantêm as etiquetas consistentes, quer uma pessoa anote 500 imagens, quer uma equipa anote 50 000.

Resultado

Escreve um guia de anotação, mede com um script a concordância entre dois anotadores e transforma cada discordância numa regra escrita.

Via rápida
Se já sabes orientar-te, aqui está a versão resumida.
  1. Define as classes, as regras de desenho e uma regra de oclusão antes de começar a anotação.

  2. Anota todos os objetos relevantes em cada imagem, com caixas ajustadas ao que está visível.

  3. Mede a concordância numa amostra partilhada; só aumenta a escala a partir de 90%.

  4. Revê manualmente todas as etiquetas propostas pelo modelo; nunca as aceites automaticamente.

Prático

Escolhe a ferramenta de anotação#

A ferramenta certa depende da tarefa, da equipa e do local onde o treino ocorre:

FerramentaIdeal paraNotas
Ultralytics PlatformTodas as sete tarefas YOLO: um editor para caixas, polígonos, máscaras semânticas, pontos-chave, caixas rodadas e classes de imagem, além de mapas de profundidade carregados; anotação inteligente com SAMEtiquetas, gráficos do conjunto de dados e treino num só lugar; sem necessidade de exportação
CVATEquipas grandes, vídeo e fluxos de revisão complexosAutoalojado ou na nuvem
Label StudioProjetos multimodais (imagem + texto + áudio)Configuração flexível, curva de aprendizagem mais acentuada
LabelmeAnotação de polígonos para equipas pequenasAplicação de ambiente de trabalho simples
LabelImgProtótipos rápidos apenas com caixasLeve; o repositório foi arquivado

Na Ultralytics Platform, a anotação inteligente com SAM 2.1, SAM 3 e SAM 3.1 funciona em conjuntos de dados de deteção, segmentação, segmentação semântica e OBB. Seja qual for a tua escolha, confirma que exporta no formato YOLO necessário para a tua tarefa; Preparar um conjunto de dados personalizado explica o formato das etiquetas e a conversão.

Os sete tipos de etiqueta#

Tarefas Ultralytics YOLO lado a lado: classificação, deteção, segmentação, segmentação semântica, pose, OBB e profundidade

Tipo de etiquetaO que desenhasTarefa
Etiqueta de classeUm rótulo por imagemClassificação
Caixa delimitadoraRetângulo alinhado com os eixos para cada objetoDeteção
PolígonoContorno de cada instância de objetoSegmentação de instâncias
Máscara densaUma classe para cada pixelSegmentação semântica
Pontos-chavePontos identificados por nome, como articulaçõesPose
Caixa orientadaRetângulo rodado para cada objetoOBB
Mapa de profundidadeNada: um mapa de distâncias por píxel obtido por um sensor de profundidade e associado a cada imagemEstimativa de profundidade

Escreve primeiro o guia de anotação#

Antes de alguém desenhar uma caixa, escreve um guia com cinco secções:

  1. Definições das classes: um parágrafo por classe, com exemplos positivos, elementos semelhantes que não pertencem à classe e casos-limite.
  2. Regras de desenho: caixas ajustadas ao objeto visível; polígonos que acompanham o contorno visível.
  3. Regras de oclusão e dimensão: um limiar para objetos parcialmente visíveis («anota se conseguires identificar a classe») e outro para objetos pequenos («anota pessoas com mais de 10 píxeis de altura»), aplicados em todos os casos.
  4. Registo de casos ambíguos: cada pergunta do tipo «e este caso?» com a resposta acordada e uma captura de ecrã.
  5. O que ignorar: tudo o que não vale a pena anotar para esta tarefa.

Uma ou duas páginas com capturas de ecrã são suficientes. Depois, o guia orienta um ciclo curto que deve ocorrer antes de expandir a anotação:

A rotulagem parcial prejudica o treinamento sem que você perceba

Rotule todos os objetos relevantes em todas as imagens. Uma empilhadeira sem rótulo ensina o modelo que empilhadeiras às vezes são fundo, e ele aprende a não detectá-las. Um conjunto de dados parcialmente rotulado parece idêntico a um conjunto menor totalmente rotulado até você iniciar o treinamento. Termine cada imagem antes de passar à próxima.

Dez erros que prejudicam a precisão#

Os erros que a equipa de anotação da Ultralytics encontra com mais frequência, ilustrados com imagens de empilhadores, pessoas e paletes (adaptado de uma apresentação de Alexis Schutzger). Usa-os como as primeiras entradas do teu guia.

1. Extrapolar a forma do objeto. Anota apenas o que consegues ver. Neste caso, o empilhador está atrás de uma pessoa e de uma pilha de madeira, mas a caixa atravessa ambos até ao ponto onde o anotador imaginou que terminava o resto do veículo. Delimita apenas a parte visível.

Erro de anotação: a caixa do empilhador estende-se pela pessoa e pela pilha de madeira à sua frente, extrapolando a parte oculta em vez de delimitar apenas o que está visível

2. Caixas imprecisas. As caixas têm de acompanhar de perto o objeto. Esta corta as luzes do tejadilho de proteção; uma caixa que corta parte do objeto ou deixa uma margem de chão ensina uma extensão incorreta.

Erro de anotação: caixa imprecisa do empilhador cujo bordo superior corta as luzes do tejadilho de proteção em vez de abranger o objeto inteiro

3. Convenções inconsistentes para objetos semelhantes. A caixa da esquerda inclui os garfos; a da direita deixa-os de fora. O modelo recebe duas respostas para a mesma pergunta, por isso define a convenção por escrito: incluir os garfos ou excluí-los.

Erro de anotação: dois empilhadores semelhantes delimitados segundo convenções diferentes; uma caixa inclui os garfos e a outra exclui-os

4. Anotações em falta. Duas pessoas estão ao lado do empilhador, mas apenas uma está delimitada. A que não foi anotada acaba por ensinar que «as pessoas são fundo».

Erro de anotação: o empilhador e um agricultor estão delimitados, mas o segundo agricultor não tem etiqueta

5. Classe errada. Verifica a classe, não apenas a caixa. Uma caixa correta em torno de uma empilhadeira marcada como person corrompe ambas as classes, geralmente por um deslize ao usar um atalho de teclado.

Erro de anotação: uma caixa desenhada corretamente em torno de uma empilhadeira, mas atribuída à classe errada, pessoa

6. Anotações vazias ou perdidas. Cada anotação precisa corresponder a um objeto real e a uma classe real. Um clique perdido deixa uma caixa quase vazia, como a que aparece aqui no canto; uma caixa salva sem classe pode ser exportada como None ou classe 0. Corrige-as ou elimina-as.

Erro de anotação: uma anotação perdida e quase vazia de uma empilhadeira, deixada no canto da imagem ao lado da caixa da empilhadeira real

7. Caixas duplicadas. Um objeto, uma caixa. Duas caixas sobrepostas na mesma empilhadeira aumentam artificialmente a contagem de instâncias e ensinam o modelo a prever duplicatas.

Erro de anotação: duas caixas duplicadas sobrepostas numa única empilhadeira

8. Diretrizes pouco claras. Sem uma regra escrita, quem anota improvisa: neste caso, alguém delimitou apenas a cabeça do motorista e atribuiu-lhe a classe forklift. O motorista faz parte da empilhadeira ou é um person separado? Responde a essa pergunta uma vez, no guia.

Erro de anotação: sem uma diretriz clara, alguém delimita apenas a cabeça do operador e a rotula como empilhadeira

9. Imagens atípicas. Exclui imagens que não correspondam ao ambiente de implantação. Uma foto do horizonte de uma cidade num conjunto de dados de empilhadeiras não ensina nada útil e dilui o restante.

Erro de anotação: uma foto de arranha-céus incluída como imagem atípica num conjunto de dados de empilhadeiras

10. Ambiguidade causada por aumento de dados. Quando um recorte pode remover a característica que define uma classe, duas classes tornam-se idênticas. Recorta o símbolo do canto de um ás de copas e ele fica parecido com as cartas rotuladas unknown. Usa o aumento de dados com cuidado explica como corrigir isso.

Erro de anotação: cartas de jogar em que um ás de copas, com o símbolo do canto recortado, parece igual às cartas rotuladas como desconhecidas

Mede a concordância, não a adivinhes#

Uma rodada de calibração fornece as mesmas imagens a duas pessoas que anotam e compara os rótulos objeto por objeto. Dois rótulos concordam quando têm a mesma classe e uma sobreposição com IoU de pelo menos 0,5. Este script calcula a pontuação nas imagens de validação de COCO8. Para executá-lo sem uma segunda pessoa, um modelo pré-treinado faz o papel da pessoa B; com uma equipa real, lê as caixas de B nos ficheiros de rótulos dessa pessoa:

from pathlib import Path

import torch

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset, img2label_paths
from ultralytics.utils.metrics import box_iou
from ultralytics.utils.ops import xywh2xyxy

data = check_det_dataset("coco8.yaml")
model = YOLO("yolo26n.pt")  # stands in for a second annotator; compare two label folders the same way
names = data["names"]

matched = total = 0
for image in sorted(Path(data["val"]).glob("*.jpg")):
    rows = [r.split() for r in Path(img2label_paths([str(image)])[0]).read_text().splitlines() if r.strip()]
    a_cls = torch.tensor([int(r[0]) for r in rows])  # annotator A: the dataset labels
    a_box = xywh2xyxy(torch.tensor([[float(v) for v in r[1:]] for r in rows]))
    b = model(image, conf=0.5, verbose=False)[0].boxes  # annotator B: confident model proposals
    iou = box_iou(a_box, b.xyxyn)
    used = set()
    for i in range(len(rows)):  # pair each A object with the best unused same-class B box at IoU >= 0.5
        ok = [j for j in range(len(b)) if j not in used and b.cls[j] == a_cls[i] and iou[i, j] >= 0.5]
        if ok:
            used.add(max(ok, key=lambda j: iou[i, j]))
        else:
            print(f"{image.name}: {names[int(a_cls[i])]} labeled by A only")
    for j in set(range(len(b))) - used:
        print(f"{image.name}: {names[int(b.cls[j])]} labeled by B only")
    matched += len(used)
    total += len(rows) + len(b) - len(used)

print(f"agreement: {matched}/{total} objects = {matched / total:.0%}")
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: potted plant labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000061.jpg: person labeled by A only
000000000061.jpg: elephant labeled by A only
000000000061.jpg: person labeled by A only
agreement: 8/17 objects = 47%

Como interpretar o resultado:

  • A pontuação é o número de objetos correspondentes dividido pelo total de objetos desenhados por qualquer uma das pessoas: 8 de 17.
  • As divergências concentram-se. As nove estão em duas imagens, e a maioria envolve pessoas que ocupam bem menos de 1% do enquadramento. Não são nove erros aleatórios; falta uma regra: rotulamos pessoas distantes?
  • A solução é acrescentar uma regra ao guia, por exemplo: «rotular todas as pessoas com pelo menos 10 píxeis de altura numa imagem de 640 píxeis». As duas pessoas voltam a anotar essas duas imagens e mede-se novamente a pontuação.

A regra de decisão: só aumenta a escala da anotação quando a concordância chegar a 90%. Abaixo disso, cada nova pessoa que anota multiplica as inconsistências.

Usa a anotação inteligente para acelerar#

A anotação inteligente permite que um modelo YOLO ou SAM proponha rótulos que uma pessoa aceita ou corrige, o que pode multiplicar a produtividade várias vezes. Avança por rodadas: treina com um lote revisto, usa esse modelo para propor o lote seguinte, revê e volta a treinar. Esse é o ciclo de aprendizagem ativa, e Anotação inteligente e rotulagem em lote explica como o fazer na Ultralytics Platform.

Aceitar propostas automaticamente incorpora os erros do modelo aos dados

Um modelo que não detecta pessoas pequenas não propõe caixas para elas, e um revisor que clica em "aceitar tudo" nunca as adiciona. O próximo modelo, treinado com esses rótulos, deixa de detectá-las com ainda mais confiança. Revise todas as imagens e adicione o que o modelo não detectou, além de corrigir o que desenhou.

Verifica visualmente#

Cada execução de treino da Ultralytics grava labels.jpg e train_batch*.jpg na pasta da execução. O primeiro apresenta gráficos da contagem de classes e das posições e dimensões das caixas; os restantes mostram imagens reais de treino com os respetivos rótulos desenhados. Abre-os antes de terminar a primeira época. O olhar deteta o que as métricas nunca detetarão: caixas à volta de sombras, IDs de classe trocados e polígonos que não se fecham.

Experimente

Escreve um guia de anotação de uma página para as tuas classes, com as cinco secções acima e os dez erros como exemplos. Dá as mesmas 20–50 imagens a duas pessoas, pede-lhes que as anotem de forma independente e adapta agreement.py para comparar as duas pastas de rótulos. Entregáveis: o guia, a pontuação de concordância e uma nova regra para cada grupo de divergências.

Concluído quando
Você concluiu a aula quando todos estes critérios forem atendidos.
  • O guia define cada classe e especifica regras para desenhar caixas, oclusões e tamanhos.

  • Duas pessoas anotaram as mesmas imagens e a concordância foi medida com um script, não estimada.

  • Cada grupo de divergências deu origem a uma regra escrita, e a concordância após a nova anotação é de pelo menos 90%.

Mostrar solução

As divergências em COCO8 transformam-se em entradas do guia como estas:

DivergênciaRegra acrescentada ao guia
Pessoas distantes em 000000000049.jpg rotuladas apenas por ARotular todas as pessoas com pelo menos 10 píxeis de altura numa imagem de 640 píxeis; ignorar as mais pequenas em todas as imagens.
Planta em vaso junto à margem do enquadramento, rotulada apenas por ARotular um objeto cortado pela margem do enquadramento se pelo menos metade dele estiver visível.
Elefante parcialmente oculto por outro elefante em 000000000061.jpgRotular animais ocluídos se a cabeça ou metade do corpo estiver visível; delimitar apenas a parte visível.

Para comparar duas pessoas em vez de uma pessoa e um modelo, lê as linhas da pessoa B na segunda pasta de rótulos, exatamente como o script lê as de A (Path("labels_b", image.stem + ".txt")); cria b_cls e b_box a partir delas, usando as mesmas duas linhas, e utiliza esses valores onde o script lê b.cls e b.xyxyn. Executa novamente após a nova anotação; a rodada termina quando a pontuação ultrapassa 90%.

Próximos passos

Com os rótulos prontos, a próxima lição faz uma revisão de controlo de qualidade para encontrar o que o guia não detetou antes que isso comprometa uma execução de treino.

Entre para salvar seu progresso