Adicione e prepare os dados
Verifique um conjunto de dados localmente antes do upload, selecione quadros de vídeo de forma intencional e deixe um conjunto de dados da Platform pronto logo na primeira tentativa.
O erro mais barato em um conjunto de dados é aquele que você detecta antes do upload. Os rótulos Pascal VOC são ignorados silenciosamente, imagens com menos de 28 pixels são rejeitadas e um vídeo de 30 minutos se transforma em apenas 100 quadros, a maioria mostrando uma cena vazia. Nesta lição, você fará uma verificação de dois minutos antes do upload, selecionará os quadros de vídeo intencionalmente e interpretará os sinais de processamento da Platform para que seus dados de treinamento cheguem completos.
Prático
Crie o conjunto de dados#

Abra Annotate na barra lateral e clique em New Dataset. A caixa de diálogo solicita uma origem, um nome, o tipo de tarefa, uma licença opcional, o desfoque de rostos e a visibilidade:

| Fonte | Use quando | Plano |
|---|---|---|
| Upload | Os arquivos estão no seu computador: imagens, vídeos, arquivos compactados ou exportações NDJSON | Todas |
| URL | Existe um link público .zip, .tar, .tar.gz, .tgz ou .ndjson; a Platform faz o download no servidor | Todas |
| Cloud | Os dados já estão no Google Cloud Storage, Amazon S3 ou Azure Blob Storage e devem permanecer lá | Pro, Enterprise |
| No local | Os pixels nunca podem sair dos seus computadores | Enterprise |
Regra de decisão: faça upload de uma cópia para este curso. Os conjuntos de dados Cloud e On Premise mantêm os pixels fora da Platform; por isso, a anotação inteligente, o agrupamento, a clonagem e os instantâneos de versões não estão disponíveis para eles.
O tipo de tarefa determina quais ferramentas e modelos aparecem. A Platform oferece suporte às sete tarefas do Ultralytics YOLO:
| Tarefa | Como rotular |
|---|---|
| Detecção | Retângulo ou anotação inteligente com SAM e YOLO |
| Segmentação | Polígono ou anotação inteligente com SAM e YOLO |
| Semântica | Polígono ou anotação inteligente com SAM e YOLO; máscaras PNG podem ser importadas diretamente |
| Pose | Pontos-chave em esqueletos integrados ou personalizados; modelos YOLO de pose para anotação inteligente |
| OBB | Caixa orientada ou anotação inteligente com SAM e YOLO |
| Classificação | Seletor de classe na barra lateral |
| Profundidade | Sem desenho: carrega imagens com mapas de profundidade correspondentes (apenas carregamento ou URL) |
Exemplo prático: verifica o conjunto de dados antes de o carregar#
A Platform aceita imagens JPEG, PNG, WebP, BMP, TIFF, HEIC, AVIF, JP2, DNG e MPO de até 50 MB e com pelo menos 28 px no lado menor, e lê rótulos YOLO, COCO, LabelMe, NDJSON do Ultralytics ou Labelbox e máscaras semânticas PNG. O XML Pascal VOC é detectado, mas não é importado. Este script verifica um conjunto de dados YOLO local de acordo com essas regras; neste caso, o conjunto de dados público medical pills:
from collections import Counter
from pathlib import Path
from PIL import Image
from ultralytics.data.utils import check_det_dataset
ACCEPTED = {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".tif", ".tiff", ".heic", ".avif", ".jp2", ".dng", ".mpo"}
data = check_det_dataset("medical-pills.yaml") # your local dataset YAML
root = Path(data["path"])
problems = Counter()
for split in ("train", "val", "test"):
if not data.get(split):
continue
files = [p for p in Path(data[split]).rglob("*") if p.is_file()]
images = [p for p in files if p.suffix.lower() in ACCEPTED]
labeled = 0
for img in images:
label = Path(str(img).replace("images", "labels")).with_suffix(".txt")
labeled += label.exists() and label.stat().st_size > 0
if min(Image.open(img).size) < 28:
problems["under 28 px (rejected)"] += 1
if img.stat().st_size > 50 * 1024**2:
problems["over 50 MB (rejected)"] += 1
problems["unsupported files (skipped)"] += len(files) - len(images)
print(f"{split:<5} {len(images):>4} images, {labeled:>4} labeled, {len(images) - labeled:>3} background")
problems["Pascal VOC .xml labels (not imported)"] += len(list(root.rglob("*.xml")))
print("classes:", data["names"])
print("problems:", {k: v for k, v in problems.items() if v} or "none")train 92 images, 92 labeled, 0 background
val 23 images, 23 labeled, 0 background
classes: {0: 'pill'}
problems: noneO que os resultados te dizem:
- Contagens por divisão. As imagens nas pastas
train/,val/etest/mantêm essa divisão ao serem carregadas, por isso estes são os números que a Platform vai mostrar. Se a linhavalnão aparecer, a Platform vai criar uma divisão de validação aleatória para ti (vê o problema abaixo). - Imagens de fundo (sem ficheiro de rótulos) são aceitáveis em quantidade moderada; ensinam ao modelo como é «não há nada aqui». Centenas delas geralmente significam que os rótulos não foram exportados.
problems: nonesignifica que todas as imagens serão processadas. Qualquer contagem aqui representa um ficheiro que vai parar ao separadorErrorsou que não vai chegar de todo.
Compacta a pasta do conjunto de dados num ficheiro ZIP com o respetivo data.yaml e arrasta o arquivo para a galeria. A Platform deteta automaticamente o formato, guarda cada imagem idêntica apenas uma vez e pergunta se queres Ignorar, Manter ambas ou Substituir quando um carregamento coincide com imagens que já estão no conjunto de dados.
Exemplo prático: experimenta um vídeo antes de a Platform o fazer#
A Platform extrai 1 fotograma por segundo de cada vídeo e mantém no máximo 100 fotogramas, aumentando o intervalo para clips com mais de 100 segundos:
| Duração do clip | Fotogramas mantidos | Intervalo |
|---|---|---|
| 60 segundos | 60 | 1 segundo |
| 100 segundos | 100 | 1 segundo |
| 30 minutos (54 000 fotogramas a 30 fps) | 100 | 18 segundos |
Isto serve para uma análise rápida, mas falha na maioria dos projetos reais: uma gravação de um turno de 30 minutos transforma-se em 100 fotogramas, na sua maioria de um corredor vazio. Extrai tu mesmo fotogramas de vídeos longos e carrega-os:
Para uma amostragem uniforme, o FFmpeg é suficiente:
mkdir -p frames
ffmpeg -i source.mp4 -vf fps=1 frames/%06d.jpgPara uma amostragem orientada por eventos, deixa um modelo Ultralytics YOLO pré-treinado manter apenas os fotogramas que contêm o teu objeto:
from pathlib import Path
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # or your latest fine-tune
out = Path("frames")
out.mkdir(exist_ok=True)
source = "https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4"
seen = kept = 0
for i, result in enumerate(model.predict(source, stream=True, vid_stride=5, classes=[0], conf=0.5, verbose=False)):
seen += 1
if len(result.boxes): # keep only frames where a person was detected
cv2.imwrite(str(out / f"frame_{i:05d}.jpg"), result.orig_img)
kept += 1
print(f"Kept {kept} of {seen} sampled frames")Kept 12 of 12 sampled framesvid_stride=5 analisa um em cada cinco fotogramas, classes=[0] restringe a deteção a pessoas e conf=0.5 ignora previsões pouco fiáveis. Este clip de demonstração movimentado tem pessoas em todos os fotogramas amostrados; numa gravação de uma cena quase vazia, a fração de fotogramas mantidos diminui drasticamente, assim como o custo da anotação. Aumenta vid_stride até os fotogramas mantidos consecutivos deixarem de parecer idênticos.
Interpreta os indicadores de processamento da Platform#
Após o carregamento, a Platform valida, normaliza (as imagens com mais de 4 096 px são redimensionadas), cria miniaturas, analisa os rótulos e calcula estatísticas. Verifica três locais:

- O separador
Errorssó aparece quando há ficheiros que não foram processados: ficheiros danificados, formatos não suportados, imagens com menos de 28 px ou modos de cor CMYK e indexado, cada um com uma sugestão de correção. Exporta-os novamente ou carrega-os outra vez. - O separador
Chartsmostra a distribuição das divisões, as principais classes, as dimensões das imagens, os tamanhos dos ficheiros, as localizações das anotações, os tamanhos das caixas e os objetos por imagem. Procura uma classe que apareça poucas vezes, imagens minúsculas ou caixas concentradas num canto. - O emblema no cabeçalho do conjunto de dados mostra
Readyquando o processamento termina e o conjunto de dados tem pelo menos uma imagemtrain, uma imagemvalouteste uma imagem anotada. Clica emNot Readypara ver qual condição está em falta.

Começa com um conjunto de dados público#

Ainda não tens dados? A página Explore apresenta conjuntos de dados oficiais e da comunidade. Clone Dataset copia imagens, anotações e classes para o teu espaço de trabalho, conta para o teu armazenamento e mantém por predefinição a visibilidade pública da origem; por isso, muda o controlo na caixa de diálogo se fores adicionar algo sensível.
Armadilhas#
Sintoma: o envio é concluído, mas todas as imagens chegam sem rótulos. Solução: a Platform detecta XML Pascal VOC e não o importa. Primeiro, converta para rótulos YOLO .txt ou JSON COCO; a verificação prévia ao envio conta os arquivos .xml para que você perceba o problema antes de enviar.
Sintoma: a mAP de validação é excelente, mas o modelo implantado não é. Solução: se um envio sem divisão selecionada deixar val vazio, a Platform move aleatoriamente cerca de 20% das imagens de treino para val. Para quadros de vídeo, isso coloca quadros quase idênticos nas duas divisões. Em vez disso, envie com as pastas train/ e val/ divididas por vídeo ou câmera (lição 4).
Sintoma: você não encontra a ferramenta de polígonos ou os pontos-chave. Solução: o tipo de tarefa determina as ferramentas. Altere-o no cabeçalho do conjunto de dados; cada imagem armazena rótulos para todas as tarefas, então mudar de tarefa oculta os rótulos das outras tarefas em vez de excluí-los.
Mostrar solução
Resposta do exemplo prático: medical pills e um vídeo de 4 minutos gravado por uma câmara de linha. Verificação antes do carregamento: 92 imagens de treino e 23 de validação, todas anotadas e sem problemas. Vídeo: 240 segundos excedem 100, por isso o intervalo aumenta para ceil(240 / 100) = 3 segundos e a Platform mantém 80 fotogramas (um aos 0 s, 3 s, …, 237 s). Contagem esperada na galeria: 92 + 23 + 80 = 195 imagens. Os fotogramas do vídeo chegam sem rótulos e são colocados na divisão selecionada no filtro da galeria; seleciona Train antes de largares o vídeo para os manteres fora de val. O emblema mostra Ready porque existem imagens de treino, de validação e anotadas. Se tivesses carregado apenas o vídeo, o emblema mostraria Not Ready: ainda não haveria nenhuma imagem anotada.