Projeto desenvolvido para a disciplina Redes Neurais Artificiais, como avaliação da Unidade 2, ministrada pela professora Rosana Cibely.
O objetivo é comparar duas arquiteturas de redes neurais convolucionais aplicadas à classificação de imagens de satélite, analisando seu desempenho na identificação de quatro categorias de cobertura e condições da superfície terrestre.
Investigar e comparar o desempenho das arquiteturas ResNet50 e EfficientNetB0 na classificação de imagens de satélite. O projeto utiliza modelos pré-treinados no ImageNet por meio de Transfer Learning e avalia os resultados com métricas de classificação, matrizes de confusão e visualizações das previsões.
A análise busca identificar as diferenças entre os modelos nas condições experimentais adotadas, sem assumir antecipadamente que uma arquitetura é superior à outra.
Foi utilizado o dataset Satellite Image Classification, disponibilizado por Mahmoud Reda no Kaggle.
O conjunto possui 5.631 imagens, distribuídas em quatro classes:
- Cloudy — imagens de áreas com nuvens;
- Desert — imagens de regiões desérticas;
- Green area — imagens de áreas verdes;
- Water — imagens de regiões com água.
As imagens apresentam diferenças de dimensão e formato de cor. Por isso, os notebooks incluem etapas de preparação e conversão para RGB, além do redimensionamento conforme a entrada exigida por cada arquitetura. O download do conjunto de dados é realizado com a biblioteca kagglehub.
A ResNet50 é uma rede neural convolucional que utiliza conexões residuais (residual connections) para facilitar o treinamento de redes profundas. Neste projeto, é utilizada com pesos pré-treinados no ImageNet e sem a camada de classificação original (include_top=False).
A EfficientNetB0 é uma arquitetura que busca equilibrar desempenho e eficiência por meio do escalonamento conjunto de profundidade, largura e resolução. Assim como na ResNet50, são utilizados pesos pré-treinados no ImageNet e uma nova camada de classificação adaptada às quatro classes do dataset.
Nos dois notebooks, a base convolucional pré-treinada é congelada e conectada a uma cabeça de classificação composta por:
GlobalAveragePooling2D;- camada densa com 128 neurônios e ativação ReLU;
Dropout(0.5);- camada de saída com 4 neurônios e ativação Softmax.
A configuração de treinamento utiliza o otimizador Adam, taxa de aprendizado inicial de 0.001 e função de perda sparse_categorical_crossentropy. Também é utilizada parada antecipada (Early Stopping) para interromper o treinamento quando não há melhora na métrica monitorada, conforme a configuração do notebook.
| Notebook | Arquitetura | Entrada das imagens |
|---|---|---|
Projeto2sateliteResNet50.ipynb |
ResNet50 | 128 × 128 pixels |
EfficientNetB0_satelite (2).ipynb |
EfficientNetB0 | 224 × 224 pixels |
Cada notebook contém etapas de exploração do dataset, preparação das imagens, configuração e treinamento do modelo, avaliação e visualização dos resultados.
A comparação considera diferentes aspectos do desempenho dos classificadores:
- Acurácia no teste: proporção de previsões corretas em relação ao total de imagens avaliadas;
- Loss: valor da função de perda durante o treinamento e a avaliação;
- Precisão, recall e F1-score: desempenho geral e desempenho individual por classe;
- Matriz de confusão: distribuição dos acertos e erros entre as classes;
- Curvas de treinamento e validação: evolução da acurácia e da perda ao longo das épocas;
- Exemplos de predição: comparação entre a classe real e a classe prevista, com a confiança estimada pelo modelo;
- SHAP: análise exploratória de regiões das imagens que contribuem para previsões selecionadas.
Os resultados devem ser interpretados considerando as configurações de cada experimento, incluindo as diferentes resoluções de entrada. A comparação também depende de garantir que os conjuntos de treinamento, validação e teste sejam independentes. Não há um vencedor definido previamente: a conclusão deve se basear nas métricas obtidas e nas condições em que os modelos foram avaliados.
- Python
- TensorFlow / Keras
- NumPy
- Matplotlib
- Seaborn
- scikit-learn
- Pillow (PIL)
- KaggleHub
- SHAP, para explorar explicações das previsões
- Abra o notebook desejado no Google Colab ou em um ambiente Jupyter com suporte ao TensorFlow.
- Instale as dependências necessárias, caso ainda não estejam disponíveis no ambiente.
- Execute as células do notebook na ordem apresentada.
- Aguarde o download do dataset pelo
kagglehub. - Execute o treinamento e as etapas de avaliação.
- Analise os gráficos e as métricas geradas e compare os resultados dos dois modelos.
O tempo de execução pode variar de acordo com o hardware e os recursos disponíveis. O uso de GPU, quando disponível, pode ajudar a acelerar o treinamento.
- Disciplina: Redes Neurais Artificiais
- Avaliação: Unidade 2
- Professora: Rosana Cibely
- Tema: comparação de arquiteturas de redes neurais convolucionais para classificação de imagens de satélite
Contribuições são bem-vindas! Se você quiser contribuir para este projeto, abra uma issue para discutir as mudanças propostas ou envie um pull request.
|
Francisca Lorrayne |
Samira França |
Cada contribuidora desempenhou um papel essencial no desenvolvimento e aprimoramento deste projeto.
Desenvolvido para fins acadêmicos e de estudo em aprendizado profundo.
Este projeto está licenciado sob a licença MIT. Consulte o arquivo LICENSE para obter mais informações.