Escrever um YAML do conjunto de dados
Escreve o data.yaml que aponta o Ultralytics para as tuas pastas e dá nome às classes, garante que os caminhos são válidos a partir de qualquer diretório e testa-o com yolo val.
O YAML do conjunto de dados é o contrato entre as tuas pastas e todos os comandos do Ultralytics. Se um caminho estiver errado, nada é executado; se a ordem das classes estiver errada, tudo é executado, mas todas as previsões ficam com nomes incorretos e sem qualquer aviso.
Nesta lição, vais escrever data.yaml para o conjunto de dados de comprimidos, aprender exatamente como o Ultralytics resolve os caminhos para que também funcione na máquina de um colega e comprová-lo com uma execução de validação de uma linha, que também te dá a referência que o teu treino terá de superar.
Prático
Escrever o ficheiro#

Os conjuntos de dados na Ultralytics Platform têm as suas próprias classes e divisões; o treino aponta para eles com um URI como data=ul://username/datasets/name. Na tua própria máquina, o YAML é esse contrato. Guarda-o como my_dataset/data.yaml:
path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test # optional held-out split
names:
0: pill| Chave | Obrigatório | Significado |
|---|---|---|
path | Não | Raiz do conjunto de dados; train, val e test são relativos a esta raiz. Se omitida, usa-se a pasta do próprio YAML. |
train, val | Sim | Uma pasta de imagens, um ficheiro .txt com uma lista de caminhos para imagens ou uma lista de qualquer um dos dois. |
test | Não | Imagens de teste reservadas, avaliadas apenas com split=test. |
names | Sim | Índice da classe → nome; o comprimento determina o número de classes. |
download | Não | URL ou script que obtém o conjunto de dados quando faltam as imagens. |
train e val apontam para pastas de imagens; os rótulos são encontrados substituindo images por labels. O YAML coco8 é uma referência mínima funcional, e o YAML VOC apresenta um exemplo mais completo.
Exemplo prático: testar rapidamente#
A validação com o modelo pré-treinado é a verificação completa mais rápida. Lê todas as imagens e os rótulos, comunica problemas e calcula métricas:
yolo val model=yolo26n.pt data=my_dataset/data.yamlval: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
Class Images Instances Box(P R mAP50 mAP50-95)
all 23 399 0.0256 0.00251 0.001 0.0002Lê os resultados pela ordem:
Scanning my_dataset/labels/val: a pasta que o Ultralytics resolveu na prática. Confirma que é a pretendida.23 images, 0 backgrounds, 0 corrupt: todas as imagens de validação têm um ficheiro de rótulos válido. Imagens de fundo não intencionais ou qualquer contagem de ficheiros danificados obrigam-te a voltar à lição anterior.399instâncias: os ficheiros de rótulos contêm 399 comprimidos.- mAP50-95 de 0.0002: está correto, não é um erro. O COCO não tem uma classe para comprimidos, por isso o modelo pré-treinado não os consegue encontrar. Essa pontuação quase nula é a tua referência. Quando as tuas classes existem no COCO, como pessoas ou carros, o mesmo comando fornece uma referência útil.
Garantir que os caminhos funcionam em qualquer diretório#
A maioria dos erros de «imagens não encontradas» deve-se a caminhos incorretos. O Ultralytics resolve path da seguinte forma:
datasets_dir é uma definição do Ultralytics; yolo settings apresenta-a e o guia de definições explica como alterá-la. Os conjuntos de dados integrados dependem desta alternativa: coco8.yaml define path: coco8 e um URL download:, pelo que data=coco8.yaml funciona a partir de qualquer pasta.
Regras de decisão:
- Só tu, sempre a partir da pasta do projeto? Um
pathrelativo é suficiente. - Colegas de equipa, servidores, CI ou notebooks noutras pastas? Usa um
pathabsoluto. - Os dados estão noutro local e devem ser transferidos automaticamente? Adiciona
download:com um URL de zip.
Mantém os índices das classes como um contrato#
O número inteiro no início de cada linha de rótulo é um índice em names. O Ultralytics verifica o intervalo — Label class 1 exceeds dataset class count 1 —, mas não consegue verificar o significado. Se a ferramenta de anotação exportou 0: forklift, 1: person e o teu YAML diz 0: person, 1: forklift, o treino é concluído, o mAP de validação parece correto e todas as previsões têm o nome errado. Mantém uma única fonte de verdade para a lista de classes, partilhada pela ferramenta de anotação, pelo script de conversão, pelo YAML e pelo código de implementação.
Evita estes erros#
Sintoma: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val', com uma nota sobre o diretório de transferência do conjunto de dados. Causa: executaste o comando a partir de outra pasta, por isso o caminho relativo path não existia e o Ultralytics procurou em datasets_dir. Solução: executa o comando a partir da pasta do projeto ou torna path absoluto.
Trocar ou eliminar entradas em names sem voltar a etiquetar altera silenciosamente o significado de todas as etiquetas. O modelo é treinado e prevê as classes erradas, sem apresentar erros. Adiciona as novas classes no fim, usando o próximo índice livre, e nunca renumeres as existentes.
val: [images/val_day, images/val_night] combina as duas pastas num único conjunto de validação e apresenta um número. Para ver separadamente o dia e a noite — ou um conjunto de regressão selecionado junto de uma amostra de produção recente — mantém um YAML por conjunto e valida cada um. Uma divisão test que avalias apenas uma vez, com split=test, é abordada em Divide corretamente o conjunto de dados.
As definições de treino, como o aumento de dados e o armazenamento em cache, são argumentos de train, não chaves YAML; estão todas na referência de configuração.
Mostrar solução
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
all 23 399 0.0256 0.00251 0.001 0.0002A partir de outra pasta, a versão relativa falhou com Dataset ... images not found porque my_dataset não existia nesse local e também não havia uma cópia no caminho alternativo datasets_dir. O caminho absoluto path elimina essa pesquisa. O mAP50-95 de referência é aproximadamente 0: o modelo pré-treinado não tem uma classe de comprimidos.