2022

Gerando dataset sintético para detecção de objetos

Geração automática de dataset sintético utilizando máscaras e usando esse dataset para treinar o object_detection com TensorFlow 2.

Criar um dataset sintético, por conta da falta de dados de qualidade e anotação, costuma demorar muito. Por isso, este projeto é criar um sistema de geração sintética de dados para ser usado apenas em tarefas como classificação e detecção de objetos. Basicamente, a única coisa necessária é tirar fotos com uma câmera dos objetos e dos fundos, e decidir a quantidade de dados a ser gerada. Esse processo não é generalista: os dados gerados servem apenas para reconhecer objetos específicos em uma área específica. No meu caso, foi utilizado para um robô detectar objetos domésticos apenas em uma área da casa. Para outros ambientes que não estejam representados no dataset, é possível que o modelo não reconheça corretamente.

Todo o processo de utilização e execução está disponível no meu GitHub: https://github.com/Nicolasalan/Object-Detection-Tensorflow/blob/main/DataSet_Mask_TensorFlow1.ipynb

Processo de geração

O processo envolve coletar dados de fundos e dos objetos, adicioná-los em pastas separadas e executar o código no arquivo .ipynb. Vale lembrar que datasets sintéticos apresentam desempenho inferior a dados de treinamento bem rotulados manualmente. Em geral, utiliza-se cerca de 70% de dados sintéticos e 30% de dados rotulados manualmente. Isso funcionou na prática, mas não foi realizado um estudo. Para dois objetos, criei cerca de 3 mil imagens sintéticas.

Aqui está o formato do mascaramento:

Máscara gerada

E o resultado da geração

Resultado

Processo de treinamento

O treinamento foi realizado apenas na camada final do detector. Como as primeiras camadas aprendem características gerais usando o EfficientDet-D0, foi necessário apenas modificar a saída para classificar corretamente os objetos.

A maior parte do script está automatizada, sendo necessário apenas ajustar os passos de acordo com a quantidade de objetos.