Este projeto visa realizar a segmentação semântica de imagens de drone com foco em alagamentos, para a segmentação de imagens aéreas capturadas por drones. O objetivo é identificar 10 classes distintas utilizando modelos treinados com PyTorch. O sistema é projetado para ser escalável e integrar-se facilmente com outras ferramentas através do uso de RabbitMQ para gerenciamento de filas de mensagens, MongoDB para armazenamento de dados, e Weights & Biases (WANDB) para monitoramento de experimentos e rastreamento de hiperparâmetros.
PyTorch: Framework de aprendizado de máquina utilizado para treinamento e inferência do modelo.
RabbitMQ: Sistema de filas de mensagens para comunicação assíncrona entre componentes.
MongoDB: Banco de dados NoSQL para armazenar logs, resultados de inferência e metadados.
WANDB: Ferramenta para rastreamento de experimentos e visualização de dados.
Docker: Tecnologia de conteinerização para garantir portabilidade e reprodutibilidade.
Instale as dependências:
pip install -r requirements.txt
Inicie o worker:
python3 worker.py
Antes de criar ou executar um novo contêiner, verifique os contêineres ativos:
docker ps
Para criar a imagem Docker do worker, execute:
docker build -t seg-drone-flood-worker .
Caso utilize GPUs para acelerar a inferência, configure o suporte no Docker:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-toolkit.gpg
curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | tee /etc/apt/sources.list.d/nvidia-toolkit.list
sed -i -e "s/^deb/deb \[signed-by=\/usr\/share\/keyrings\/nvidia-toolkit.gpg\]/g" /etc/apt/sources.list.d/nvidia-toolkit.list
apt update
apt -y install nvidia-container-toolkit
systemctl restart docker
Substitua as variáveis de ambiente pelos valores correspondentes à sua configuração antes de executar o comando abaixo:
docker run --gpus all --name seg-drone-flood-worker --network host \
-e RABBITMQ_URL="localhost" \
-e RABBITMQ_PORT="5672" \
-e RABBITMQ_LOGIN="guest" \
-e RABBITMQ_PASSWORD="guest" \
-e MONGODB_URL="mongodb://localhost:27017" \
-e MONGODB_USERNAME="admin" \
-e MONGODB_PASSWORD="admin" \
-e MONGODB_DB_NAME="baites-api-db" \
-e WANDB_API_KEY="API_KEY_HERE" \
seg-drone-flood-worker:latest
As imagens utilizadas no projeto são redimensionadas para o tamanho de:
Largura: 640 pixels
Altura: 640 pixels
Os labels usados para segmentação e suas respectivas cores (em formato BGR) são:
Road: [128, 0, 0]
Occluded Road: [0, 128, 0]
Vegetation: [128, 128, 0]
Unlabeled: [0, 0, 0]
Todas as classes utilizadas no projeto estão listadas em ALL_CLASSES
:
● Road
● Occluded Road
● Vegetation
● Unlabeled
As transformações aplicadas para processamento de imagens e máscaras incluem:
Utiliza-se transform_img
para ajustar as imagens antes de alimentá-las ao modelo:
● Redimensionamento: Para 640x640 usando interpolação bilinear.
● Conversão para Tensor: As imagens são convertidas para formato de tensor.
● Normalização: Aplicada com os seguintes parâmetros:
○ Mean: [0.485, 0.456, 0.406]
○ Std: [0.229, 0.224, 0.225]
Aumentos de dados para melhorar a generalização do modelo são definidos em transform_aug
:
● Flip horizontal aleatório
● Flip vertical aleatório
● Rotação aleatória de até 15 graus
A transformação de máscaras é realizada usando transform_mask
:
Redimensionamento: Para 640x640 usando interpolação do tipo nearest-neighbor.
Crie um arquivo .env na raiz do projeto com o seguinte formato:
WANDB_API_KEY=<sua_chave_de_api_wandb>
Esse arquivo é necessário para autenticação e registro de experiências no WANDB.
Para garantir que o projeto funcione corretamente, siga todos os passos descritos acima para a configuração do ambiente e instalação das dependências.