Comece pelo objetivo de negócio
Transforme um objetivo de negócio em uma tarefa de visão computacional, classes definidas e um teste de aceitação executável como código, antes de coletar qualquer imagem.

Uma equipe de armazém fotografa tudo durante um mês e só então descobre que o responsável pela segurança se preocupa apenas com pessoas perto de empilhadeiras em movimento, e que metade dos rótulos precisa ser refeita. Um objetivo de uma página, acordado antes da primeira foto, evita isso. Leva uma tarde para elaborá-lo e ele determina todas as decisões posteriores deste curso: o que coletar, o que rotular e quando o modelo está bom o suficiente para entrar em produção.
Prático
O objetivo de uma página#

Cinco linhas respondem às perguntas das quais dependem todas as etapas posteriores. O guia definição dos objetivos do projeto aborda os mesmos tópicos com mais detalhes. Veja um exemplo preenchido de um armazém, que serve de base para este curso:
| Linha | Pergunta a que responde | Exemplo de armazém |
|---|---|---|
| Objetivo de negócio | O que muda para a empresa e até quando? | Reduzir em 30% os incidentes de quase acidente nas docas em seis meses. |
| Tarefa de visão computacional | Qual é a saída do modelo? | Detecção de objetos: caixas ao redor de empilhadeiras e pessoas. |
| Classes | O que exatamente recebe um rótulo? | forklift, person, pallet; todo o resto é fundo. |
| Teste de aceitação | Qual número significa "pode entrar em produção"? | Revocação em person ≥ 0.95 com precisão ≥ 0.85 em 500 quadros de câmeras que não foram usadas no treinamento. |
| Fora do escopo | O que a versão 1 não vai prometer? | Docas na escuridão total, pessoas totalmente ocultas atrás de estantes e paleteiras manuais. |
Fixe a página em um local visível para toda a equipe. Se alguém das partes interessadas contestar uma linha depois, altere primeiro a página e depois o conjunto de dados.
Escolha a tarefa mais simples que responda à pergunta#

A tarefa determina o que os anotadores desenham, e isso determina a maior parte do orçamento de rotulagem. Percorra esta árvore de decisão e pare na primeira tarefa que responda à pergunta de negócio:
O Ultralytics YOLO oferece suporte a sete tarefas. Para planejar o conjunto de dados, o que importa é o custo de rotulagem de cada uma; Fundamentos de visão computacional faz uma comparação detalhada na lição sobre tarefas de visão computacional.
| Tarefa | O que os anotadores produzem | Esforço de rotulagem | Escolha quando |
|---|---|---|---|
| Classificação | Um rótulo por imagem | Mais baixo | Uma resposta por imagem é suficiente |
| Deteção | Classe + caixa alinhada aos eixos por objeto | Baixo | Você precisa contar ou localizar objetos |
| OBB | Classe + caixa rotacionada por objeto | Médio | Os objetos são longos e finos ou vistos de cima |
| Pose | Classe + pontos-chave nomeados por objeto | Alta | As posições das articulações ou partes são importantes |
| Segmentação de instâncias | Classe + polígono por objeto | Alta | O contorno de cada objeto é importante |
| Segmentação semântica | Uma classe para cada pixel | Máxima | Você precisa de regiões, não de objetos contáveis |
| Estimativa de profundidade | Nada desenhado: um mapa de profundidade por imagem, geralmente obtido com um sensor de profundidade | Depende do hardware de captura | Você precisa da distância em cada pixel |

Leia o painel das bananas como uma tabela de preços: a detecção já informa presença, localização e contagem; somente os dois painéis de segmentação acrescentam tamanho e forma, com um custo de anotação muito maior. Se a empresa só precisa saber "quantas bananas", a resposta é detecção, e os polígonos são um gasto desnecessário.
As equipes costumam recorrer à segmentação por parecer mais precisa, mas acabam sem orçamento para rotulagem antes de o conjunto de dados cobrir turnos noturnos, chuva ou o segundo local. Os polígonos custam várias vezes mais por objeto do que as caixas. Escolha a segmentação apenas quando uma linha do objetivo exigir o próprio contorno, por exemplo, para medir a área ou recortar uma máscara.
Defina classes que um anotador consiga aplicar#
Uma classe só é útil se dois anotadores rotularem o mesmo objeto da mesma forma. Escreva cada definição em uma frase, mencionando algo parecido que ela exclui:
forklift: uma empilhadeira motorizada, incluindo os garfos e o mastro. Exclui paleteiras manuais.person: qualquer pessoa, mesmo parcialmente visível, sentada ou dentro da cabine de um veículo. Exclui reflexos e cartazes.pallet: um palete de madeira ou plástico para transporte de mercadorias, carregado ou vazio. Exclui pilhas de caixas sem uma base de palete.
Depois, escolha deliberadamente o nível de granularidade. Classes abrangentes ("veículo") são mais baratas e convergem mais rápido; classes detalhadas ("sedã", "picape") são mais úteis em etapas posteriores, mas é mais difícil mantê-las consistentes. Comece pelo que a empresa precisa. Depois, é possível agrupar rótulos detalhados em classes abrangentes com uma linha de código, mas nunca é possível dividir classes abrangentes sem refazer a anotação.
"Qualquer coisa que pareça perigosa" ou "coisas bloqueando o corredor" não são classes. Essas definições pedem que cada anotador faça um julgamento, e um modelo treinado com julgamentos inconsistentes aprende essa inconsistência. Reescreva uma classe vaga até que um novo anotador consiga aplicá-la apenas com base na definição, ou transforme-a em uma regra aplicada após a detecção (por exemplo, "qualquer pallet dentro do polígono do corredor").
Transforme a métrica em um teste de aceitação que você possa executar#
Escolha a métrica que corresponda ao custo de um erro:
- Uma detecção perdida custa caro (segurança, defeitos): defina um limite de revocação para essa classe.
- Um falso alarme custa caro (rejeitar peças automaticamente, alertar a equipe): defina um limite de precisão.
- Todas as classes têm a mesma importância (contagem, inventário): defina um limite para o AP por classe, para que nenhuma classe fique escondida pela média.
O guia de métricas de desempenho do YOLO explica cada uma delas. Em seguida, escreva o teste em código, para que a pergunta "está bom o suficiente?" deixe de ser motivo de debate. Este script funciona hoje com um modelo pré-treinado no conjunto de demonstração COCO8 e, mais tarde, com seu próprio checkpoint e conjunto reservado:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # later: your fine-tuned runs/detect/train/weights/best.pt
metrics = model.val(data="coco8.yaml", classes=[0], verbose=False) # 0 = person; later: your holdout YAML
precision, recall = metrics.box.mp, metrics.box.mr
print(f"person: precision={precision:.2f} recall={recall:.2f}")
print("PASS" if recall >= 0.95 and precision >= 0.85 else "FAIL: below the acceptance test") all 4 10 0.939 0.8 0.848 0.387
person: precision=0.94 recall=0.80
FAIL: below the acceptance testO que cada linha informa:
classes=[0]avalia somenteperson, para que outras classes não inflem o resultado. Use o ID da sua própria classe de segurança.- A linha do validador mostra 4 imagens com 10 pessoas rotuladas.
mpemrsão a precisão e a revocação no limiar de confiança que melhor as equilibra (F1 máximo). - Um modelo COCO pré-treinado encontra 8 das 10 pessoas, então a revocação é 0.80: precisa, mas não segura o suficiente. Esse FAIL mostra que o teste está cumprindo seu papel. Neste curso, um FAIL leva de volta aos dados, não aos hiperparâmetros.
Um teste extraído das mesmas câmeras e dos mesmos dias que o treinamento mede memorização, não prontidão. Especifique a reserva no objetivo ("câmeras não usadas no treinamento", "as duas últimas semanas de filmagens") e crie-a com Divida o conjunto de dados corretamente.
Registre o que a v1 não fará#
Nenhum modelo é perfeito, então defina de antemão quais falhas são aceitáveis: condições para as quais você não fará promessas (nevoeiro denso, escuridão total), objetos parecidos que você tolerará confundir e classes raras adiadas para a v2. Esta linha impede que um modelo que atinge a meta seja avaliado segundo um critério de 100% que nunca foi definido e indica à equipe de coleta onde ainda não vale a pena investir esforço.
Mostrar solução
Um exemplo de objetivo para outro projeto: uma rede de supermercados detectando espaços vazios nas prateleiras:
| Linha | Resposta |
|---|---|
| Objetivo de negócio | Reduzir em 25% os minutos sem estoque dos 200 principais produtos em um trimestre. |
| Tarefa de visão computacional | Detecção. A loja precisa saber a localização de cada espaço vazio, não seu contorno, então as caixas são melhores que os polígonos. |
| Classes | gap: um espaço vazio na prateleira com largura de pelo menos um produto; exclui espaços ocultos por clientes ou carrinhos. price_tag: uma etiqueta na borda da prateleira; exclui adesivos promocionais. |
| Teste de aceitação | Revocação de gap ≥ 0.90 com precisão ≥ 0.80 em 400 imagens de 5 lojas não usadas no treinamento. |
| Fora do escopo | Portas de congeladores com reflexos, expositores de ponta de gôndola, seção de hortifrúti. |
A revocação vem primeiro porque um espaço não detectado custa uma venda, enquanto um falso alarme custa uma breve caminhada de um funcionário. acceptance_test.py muda em apenas três pontos: data="holdout_stores.yaml" (as cinco lojas não vistas), classes=[0] (0 agora é gap) e os limiares recall >= 0.90 and precision >= 0.80.