Esse repositório introduz uma função de pré-processamento abrangente para lidar com imagens e vídeos em tarefas de detecção de objetos com o YOLO. A função simplifica o processo de preparação de um dataset ao consolidar o pareamento de anotações de imagens, extração de quadros de vídeos, divisão entre treino e validação, e estruturação do dataset em um único fluxo de trabalho. Abaixo está uma explicação detalhada das principais funcionalidades e do fluxo de trabalho da função de pré-processamento.
-
Suporte Dual para Imagens e Vídeos:
- A função agora lida com datasets que contêm tanto imagens estáticas quanto vídeos.
- Se vídeos forem fornecidos, a função extrai quadros de cada vídeo em uma taxa de quadros especificada (por exemplo, 1 quadro por segundo) e trata cada quadro extraído como uma imagem separada para treino e validação.
- Essa flexibilidade permite que a função trabalhe perfeitamente com datasets contendo apenas imagens, apenas vídeos ou uma mistura de ambos.
-
Extração de Quadros de Vídeos:
- Para o pré-processamento de vídeos, os quadros são extraídos em uma taxa de quadros configurável usando OpenCV. Cada quadro é salvo com um nome único baseado no nome do vídeo e no número do quadro, garantindo que não haja conflitos no dataset de imagens.
- A função limpa a pasta temporária usada para armazenar os quadros extraídos após o processamento.
-
Consistência entre Imagens e Anotações:
- A função verifica a consistência entre os arquivos de imagem (ou quadros de vídeo extraídos) e seus respectivos arquivos de anotações em texto. Ela garante que apenas as imagens com anotações correspondentes sejam incluídas no dataset.
- Quaisquer imagens ou arquivos de anotações não correspondentes são excluídos do dataset final, reduzindo o risco de erros durante o treino.
-
Divisão entre Treino e Validação:
- A função realiza uma divisão estratificada entre treino e validação para garantir que a distribuição das classes permaneça equilibrada nos conjuntos de treino e validação. A divisão é personalizável, com uma divisão padrão de 80%-20%.
- Esta etapa é crucial para evitar o sobreajuste e garantir que o modelo se generalize bem para dados não vistos.
-
Estrutura do Dataset para YOLO:
- A função cria automaticamente a estrutura de pastas necessária para o treino com o YOLOv8, incluindo os subdiretórios
train
evalid
para imagens e rótulos. - Ela copia os arquivos de imagens e anotações corretamente pareados para seus respectivos diretórios, garantindo que o dataset esteja pronto para o treino imediato.
- A função cria automaticamente a estrutura de pastas necessária para o treino com o YOLOv8, incluindo os subdiretórios
-
Geração do Arquivo de Configuração YAML:
- A função gera um arquivo YAML necessário pelo YOLO para especificar o número de classes, nomes das classes e os caminhos para os datasets de treino e validação.
- Esse arquivo YAML é salvo na raiz do diretório do dataset YOLO, facilitando o início do treino com configuração mínima adicional.
-
Carregar Arquivos de Imagem:
- A função começa buscando imagens no diretório fornecido, filtrando pelos formatos de imagem suportados (por exemplo,
.jpeg
,.png
).
- A função começa buscando imagens no diretório fornecido, filtrando pelos formatos de imagem suportados (por exemplo,
-
Extrair Quadros de Vídeos (se vídeos forem fornecidos):
- Para cada vídeo, quadros são extraídos na taxa de quadros especificada. Cada quadro é salvo como uma imagem individual com um nome de arquivo único.
-
Carregar Anotações:
- Os arquivos de anotações correspondentes
.txt
são carregados do diretório de anotações.
- Os arquivos de anotações correspondentes
-
Parear Imagens/Quadros com Anotações:
- A função verifica a consistência entre os pares de imagem/anotação e remove quaisquer arquivos não correspondentes. Ela garante que apenas imagens com anotações correspondentes sejam incluídas no dataset.
-
Divisão entre Treino e Validação:
- O dataset é dividido em conjuntos de treino e validação, garantindo que a distribuição das classes permaneça equilibrada usando uma técnica de amostragem estratificada.
-
Criar Estrutura de Pastas para YOLOv8:
- A estrutura de diretórios necessária para o YOLOv8 (
train/images
,train/labels
,valid/images
,valid/labels
) é criada, e os arquivos de imagem/anotação são copiados para seus respectivos diretórios.
- A estrutura de diretórios necessária para o YOLOv8 (
-
Gerar Arquivo de Configuração YAML:
- Um arquivo YAML é gerado automaticamente com informações sobre o dataset (por exemplo, nomes das classes, número de classes e caminhos para os dados de treino/validação).
-
Limpeza:
- Após o processamento, a pasta temporária usada para armazenar os quadros de vídeo extraídos é excluída para economizar espaço e manter a organização.
-
Pré-processamento de um Dataset com Imagens e Vídeos:
preprocess_dataset( imgs_path="caminho/para/imagens", txts_path="caminho/para/anotacoes", videos_path="caminho/para/videos", classes_txt="caminho/para/classes.txt", yolo_ds_path="caminho/para/dataset_yolo", val_size=0.2, # 20% de divisão para validação frame_rate=1 # Extrair 1 quadro por segundo dos vídeos )
-
Pré-processamento de um Dataset com Apenas Vídeos:
preprocess_dataset( videos_path="caminho/para/videos", txts_path="caminho/para/anotacoes", classes_txt="caminho/para/classes.txt", yolo_ds_path="caminho/para/dataset_yolo", val_size=0.2, # 20% de divisão para validação frame_rate=2 # Extrair 2 quadros por segundo dos vídeos )
-
Pré-processamento de um Dataset com Apenas Imagens:
preprocess_dataset( imgs_path="caminho/para/imagens", txts_path="caminho/para/anotacoes", classes_txt="caminho/para/classes.txt", yolo_ds_path="caminho/para/dataset_yolo", val_size=0.2 # 20% de divisão para validação )
Essa função simplifica muito o pipeline de pré-processamento para o treino com YOLO, facilitando a preparação de datasets a partir de imagens estáticas e vídeos. Automatizando etapas importantes como extração de quadros, divisão entre treino e validação e estruturação de arquivos, a função garante um dataset consistente e pronto para uso em tarefas de detecção de objetos.
Esta melhoria será particularmente útil a gente que quer trabalhar com datasets de vídeo, pois agiliza todo o fluxo de trabalho de extração de quadros e preparação de dados para o YOLO