Este repositório contém a solução para o desafio de classificação de imagens de superfícies de vias, focado na identificação de três categorias principais: Asphalt, Belgian Blocks e Off-road. O projeto aplica técnicas de Deep Learning e Visão Computacional para identificar padrões de pavimentação em condições reais de captura, priorizando a interpretabilidade do modelo e o tratamento de dados desbalanceados.
O objetivo é classificar imagens em três categorias distintas:
-
Asphalt: Superfícies asfálticas uniformes. -
Belgian Blocks: Pavimentos de paralelepípedo (comumente confundidos com asfalto em baixa resolução). -
Off-road: Superfícies não pavimentadas (terra, cascalho, areia).
O dataset fornecido apresenta condições visuais desafiadoras que simulam cenários reais de direção, incluindo:
-
Variações de iluminação (cenários diurnos e noturnos).
-
Condições climáticas adversas (chuva e ruído visual).
-
Heterogeneidade de captura (diferentes dispositivos e ângulos).
-
Desbalanceamento severo entre as classes.
A solução utiliza Transfer Learning com arquiteturas consagradas pré-treinadas no ImageNet, permitindo extrair características complexas mesmo com um volume limitado de dados.
- Pré-processamento: Redimensionamento para 256px seguido de um
CenterCropde 224px para focar na textura central da via. - Data Augmentation: Uso de
ColorJitter,RandomHorizontalFlipe rotações para aumentar a capacidade de generalização. - Tratamento de Desbalanceamento: Implementação de Weighted Random Sampler e pesos na função de perda (CrossEntropyLoss).
| Experimento | Arquitetura | Foco Técnico |
|---|---|---|
| 01 (Baseline) | ResNet-18 | Estabelecimento de métricas base sem pesos. |
| 02 | ResNet-50 | Introdução de Weighted Loss e rede mais profunda. |
| 03 | ResNet-50 | Intensificação de Data Augmentation para cenários noturnos/chuva. |
| 04 | EfficientNet-B0 | Otimização de parâmetros e eficiência computacional. |
📁 Road-Surface-Classification/ # Raiz do repositório
├── 📂 dataset/ # Diretório de dados
│ ├── 📂 test/ # Conjunto de teste
│ │ ├── 📂 asphalt # Amostras de asfalto
│ │ ├── 📂 belgian_blocks # Amostras de paralelepípedos
│ │ └── 📂 offroad # Amostras off-road
│ └── 📂 train/ # Conjunto de treinamento
│ ├── 📂 asphalt # Amostras de asfalto
│ ├── 📂 belgian_blocks # Amostras de paralelepípedos
│ └── 📂 offroad # Amostras off-road
├── ⚙️ venv/ # Ambiente virtual (ignorado pelo Git)
├── 📄 .gitignore # Filtro de arquivos do Git
├── 📓 codigo_full.ipynb # Notebook principal
├── 📖 README.md # Documentação do projeto
└── 📋 requirements.txt # Dependências do Python
Entre no google colab e execute o notebook: 🔗 Colab
|
Arthur Luz |