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

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 mesa com um laptop exibindo um conjunto de dados de imagens rotuladas, fotos impressas e organizadas, notas adesivas com classes e uma lista de verificação do conjunto de dados

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.

Resultado

Escreva um objetivo de uma página e transforme a métrica de sucesso em um script de teste de aceitação que imprima PASS ou FAIL para qualquer modelo.

Via rápida
Se já sabes orientar-te, aqui está a versão resumida.
  1. Escreva o objetivo de negócio em uma frase mensurável com prazo definido.

  2. Escolha a mais simples das sete tarefas de visão computacional que responda à pergunta.

  3. Defina de 3 a 10 classes em uma frase cada, especificando um elemento parecido que cada classe exclui.

  4. Escreva o teste de aceitação: métrica, limiar e um conjunto de dados reservado e não visto. Em seguida, execute-o como código.

  5. Liste o que a versão 1 não vai abranger.

Prático

O objetivo de uma página#

Resultados das tarefas do Ultralytics YOLO lado a lado: detecção, pose, segmentação, classificação, OBB, segmentação semântica e profundidade

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:

LinhaPergunta a que respondeExemplo de armazém
Objetivo de negócioO 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 computacionalQual é a saída do modelo?Detecção de objetos: caixas ao redor de empilhadeiras e pessoas.
ClassesO que exatamente recebe um rótulo?forklift, person, pallet; todo o resto é fundo.
Teste de aceitaçãoQual 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 escopoO 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 mesma cena com um gato e um cachorro respondida de três formas: a classificação de imagens pergunta se é um gato, a detecção de objetos pergunta o que há e onde, e a segmentação de imagens pergunta quais pixels pertencem a cada objeto

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.

TarefaO que os anotadores produzemEsforço de rotulagemEscolha quando
ClassificaçãoUm rótulo por imagemMais baixoUma resposta por imagem é suficiente
DeteçãoClasse + caixa alinhada aos eixos por objetoBaixoVocê precisa contar ou localizar objetos
OBBClasse + caixa rotacionada por objetoMédioOs objetos são longos e finos ou vistos de cima
PoseClasse + pontos-chave nomeados por objetoAltaAs posições das articulações ou partes são importantes
Segmentação de instânciasClasse + polígono por objetoAltaO contorno de cada objeto é importante
Segmentação semânticaUma classe para cada pixelMáximaVocê precisa de regiões, não de objetos contáveis
Estimativa de profundidadeNada desenhado: um mapa de profundidade por imagem, geralmente obtido com um sensor de profundidadeDepende do hardware de capturaVocê precisa da distância em cada pixel

Tipos de anotação de imagem em um cacho de bananas: a classificação revela a presença, a detecção acrescenta localização e contagem, a segmentação semântica mostra quais pixels são de banana e a segmentação de instâncias acrescenta o tamanho e a forma de cada banana

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.

A segmentação, por padrão, consome todo o orçamento

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.

Se você não consegue escrever isso, os anotadores não conseguem rotular

"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 test

O que cada linha informa:

  • classes=[0] avalia somente person, 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. mp e mr sã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.
A condição de reserva é tão importante quanto o número

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.

Experimente

Preencha a tabela de objetivos de cinco linhas para seu próprio projeto e envie-a à pessoa responsável pelo resultado empresarial. Revise todas as linhas que ela questionar. Depois, copie acceptance_test.py, defina o ID da sua classe e os limiares e execute-o com o modelo pré-treinado, para que o teste exista antes do conjunto de dados. Entregáveis: objective.md e um acceptance_test.py funcional.

Concluído quando
Você concluiu a aula quando todos estes critérios forem atendidos.
  • O objetivo de negócio é uma frase mensurável com um prazo, e a pessoa responsável concordou com ele.

  • Cada classe tem uma definição de uma frase e pelo menos um objeto parecido que ela exclui.

  • acceptance_test.py é executado e imprime PASS ou FAIL para uma métrica, um limiar e um conjunto reservado identificado.

Mostrar solução

Um exemplo de objetivo para outro projeto: uma rede de supermercados detectando espaços vazios nas prateleiras:

LinhaResposta
Objetivo de negócioReduzir em 25% os minutos sem estoque dos 200 principais produtos em um trimestre.
Tarefa de visão computacionalDetecçã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.
Classesgap: 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çãoRevocação de gap ≥ 0.90 com precisão ≥ 0.80 em 400 imagens de 5 lojas não usadas no treinamento.
Fora do escopoPortas 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.

Próximos passos

Em seguida, transforme o objetivo em uma especificação do conjunto de dados que indique quais imagens são necessárias e quantas de cada tipo.

Entre para salvar seu progresso