Defina a especificação do conjunto de dados
Planeje cenários, cotas, variabilidade, casos extremos e imagens de fundo antes da coleta, e dimensione o plano de acordo com as metas de volume da Ultralytics.
As equipes sem uma especificação acabam com 5.000 fotos diurnas bem iluminadas de uma única câmera e um modelo que falha ao anoitecer no primeiro dia em produção. Uma especificação do conjunto de dados é uma lista de compras de imagens: cada cenário que o modelo precisa lidar, quantas imagens são necessárias para cada um e quais casos raros devem ser superamostrados. Leva uma hora para escrevê-la e ela determina onde concentrar o esforço de coleta.
Prático
Onde a especificação se encaixa#
A especificação faz a ponte entre o objetivo e a câmera. Ela orienta a coleta e é a página à qual você volta quando o primeiro modelo não atinge sua meta:
O ciclo volta à especificação, não às configurações de treinamento: uma meta não atingida geralmente indica que a especificação não cobriu algum cenário. O guia sobre as etapas de um projeto de CV descreve o mesmo ciclo de vida.
Escreva os cenários em linhas#
Um cenário é uma combinação de condições de captura que o modelo precisa lidar. Linhas com cotas tornam as lacunas visíveis antes de alguém pegar uma câmera:
| Cenário | Câmeras | Locais | Horário do dia | Condição | Cota | Notas |
|---|---|---|---|---|---|---|
| doca-dia | cam-1 a cam-4 | docas A–C | 08:00–17:00 | qualquer horário | 1,200 | horários de pico |
| doca-noite | cam-1 a cam-4 | docas A–C | 22:00–04:00 | qualquer horário | 400 | iluminação de vapor de sódio, menos pessoas |
| carga-chuva | cam-2, cam-3 | doca B | qualquer horário | somente chuva | 200 | raro, mas crítico |
| empilhados | qualquer horário | qualquer horário | qualquer horário | paletes com mais de 2 de altura | 150 | oculta as pessoas atrás deles |
| fundo | qualquer horário | qualquer horário | qualquer horário | doca vazia | 150 | sem objetos, sem rótulos |
Um cenário que você não consegue descrever por escrito é um cenário que o modelo não verá no treinamento e será justamente o que falhará em produção.
Dimensione a especificação de acordo com as metas de volume#
As dicas da Ultralytics para obter os melhores resultados de treinamento apresentam regras práticas para produção:
| Meta | Recomendação |
|---|---|
| Imagens por classe | ≥ 1,500 |
| Instâncias rotuladas por classe | ≥ 10,000 |
| Imagens de fundo (sem rótulos) | 0–10% do conjunto de dados; o COCO tem cerca de 1% |
| Variedade | Diferentes horários, estações do ano, condições meteorológicas, iluminação, ângulos, fontes e câmeras |
Esses são os patamares para um modelo de produção. Algumas centenas de objetos rotulados por classe bastam para começar a experimentar, e o primeiro modelo é a maneira mais rápida de descobrir quais cenários precisam de mais dados. Para saber o quanto um conjunto de dados está distante desse patamar, faça a contagem. Este script funciona com o COCO128, um recorte do COCO com 128 imagens que é baixado automaticamente:
from collections import Counter
from pathlib import Path
from ultralytics.data.utils import IMG_FORMATS, check_det_dataset, img2label_paths
IMAGES_PER_CLASS, INSTANCES_PER_CLASS = 1500, 10_000 # Ultralytics production targets
data = check_det_dataset("coco128.yaml") # downloads COCO128 (~7 MB) on first run; swap in your data YAML
images = [p for p in Path(data["train"]).rglob("*.*") if p.suffix[1:].lower() in IMG_FORMATS]
image_count, instance_count, background = Counter(), Counter(), 0
for label in map(Path, img2label_paths([str(p) for p in images])):
classes = [int(r.split()[0]) for r in label.read_text().splitlines() if r.strip()] if label.exists() else []
instance_count.update(classes)
image_count.update(set(classes))
background += not classes
print(f"{len(images)} images, {background} background ({background / len(images):.0%}, target 0-10%)")
print(f"{'class':>12} {'images':>7} {'instances':>10} {'of target':>10}")
ranked = instance_count.most_common()
for cls, n in ranked[:3] + ranked[-3:]: # best and worst covered classes
coverage = min(image_count[cls] / IMAGES_PER_CLASS, n / INSTANCES_PER_CLASS)
print(f"{data['names'][cls]:>12} {image_count[cls]:>7} {n:>10} {coverage:>10.1%}")
never_labeled = [name for i, name in data["names"].items() if i not in instance_count]
print(f"{len(never_labeled)} classes in names with zero labels: {never_labeled[:4]} ...")128 images, 2 background (2%, target 0-10%)
class images instances of target
person 61 254 2.5%
car 12 46 0.5%
cup 10 36 0.4%
bear 1 1 0.0%
banana 1 1 0.0%
skis 1 1 0.0%
9 classes in names with zero labels: ['fire hydrant', 'parking meter', 'sheep', 'cow'] ...Como interpretar o resultado:
- Cobertura é o menor valor entre a proporção de imagens e a proporção de instâncias, pois uma classe precisa de ambas. Mesmo
person, a classe com melhor cobertura, atinge apenas 2.5% do patamar de produção. - Classes com uma única instância (
bear,banana,skis) não podem ser aprendidas nem avaliadas. No seu conjunto de dados, colete mais exemplos dessas classes ou remova-as da v1. - As classes sem rótulos estão listadas no YAML, mas nunca são desenhadas. Ainda assim, o modelo dedica capacidade a prevê-las. Remova-as de
namesou colete exemplos delas antes do treinamento.
Cubra as dimensões de variabilidade#

Um único quadro já reúne pessoas próximas e distantes, bicicletas, um cachorro e carros. Uma especificação real precisa planejar deliberadamente essa variedade. Para cada dimensão, registre se a especificação a cobre ou por que ela não se aplica; linhas vazias correspondem a cenários que você só descobrirá em produção:
| Dimensão | Exemplos |
|---|---|
| Horário | Dia, noite, amanhecer, anoitecer |
| Clima | Sol, céu encoberto, chuva, neblina, neve |
| Iluminação | Clara, fraca, ofuscamento, sombras fortes, fontes mistas |
| Câmera | Modelo, lente, altura de montagem, campo de visão |
| Geografia | Locais, cidades, países |
| Pessoas e operadores | Turnos, equipes, uniformes, equipamentos de proteção |
| Variantes de produto | SKUs, revisões de embalagem, cores |
| Tamanho do objeto | Próximo e grande, a média distância, distante e pequeno |
| Oclusão | Nítida, parcial, intensa, atrás de vidro |
| Estado dos equipamentos | Lentes sujas ou embaçadas, paletes danificados, marcações de piso desgastadas |
A variedade importa mais do que o volume: 1.500 imagens distribuídas por estas linhas valem mais do que 5.000 de uma única câmera ao meio-dia.
Planeje imagens de fundo e casos extremos#
Imagens de fundo são quadros sem objetos rotulados, como uma doca vazia. Elas ensinam ao modelo que não há nada ali e reduzem os falsos positivos.
No formato Ultralytics YOLO, uma imagem de fundo é simplesmente uma imagem com um arquivo de rótulos vazio ou sem arquivo de rótulos. O treinamento conta ambas na linha de varredura (… 1200 images, 90 backgrounds, 0 corrupt). Confira esse número em relação à sua meta de 0–10% antes da primeira época.
Casos extremos incluem oclusão intensa, objetos cortados pela borda do quadro, orientações incomuns, objetos empilhados e objetos parecidos, como um mastro de empilhadeira ao lado de uma coluna de aço. Reserve uma linha de cota para cada um.
Se 1 quadro em 200 mostra uma pessoa atrás de paletes empilhados, um conjunto de dados coletado na frequência natural terá cerca de 7 desses quadros em 1.500, muito pouco para o modelo aprender. Faça uma sobreamostragem intencional dos casos extremos: as cotas deles devem ser muito maiores que sua proporção nas filmagens reais.
Você não vai pensar em todos os cenários no papel. Deixe a especificação quase certa, treine rapidamente um primeiro modelo e use os erros dele para revelar os cenários que você não previu.
Mostrar solução
As cotas são definidas com base na meta de instâncias, não apenas na meta de imagens. Suponha que um contador de estacionamento tenha duas classes e que as imagens do projeto-piloto tenham, em média, 3 carros e 0,5 caminhões por imagem:
| Classe | Instâncias por imagem | Imagens necessárias para 10.000 instâncias | Imagens necessárias para o mínimo de 1.500 imagens | Plano |
|---|---|---|---|---|
car | 3.0 | ≈ 3,300 | 1,500 | 3.300 imagens |
truck | 0.5 | ≈ 20,000 | 1,500 | Captura direcionada na entrada de carga, onde os caminhões são 10× mais comuns |
Os carros estão cobertos pelas imagens comuns. Para os caminhões, seriam necessárias 20.000 imagens aleatórias, então a especificação adiciona uma linha de cenário dedicada (entrada de carga, dias úteis das 06:00 às 10:00), em vez de coletar seis vezes mais imagens de tudo. Adicione uma linha de imagens de fundo de cerca de 5% (estacionamento vazio à noite) e linhas de casos extremos para cobertura de neve e caminhões parcialmente fora do quadro.