Este projeto implementa um classificador de imagens usando Transfer Learning para distinguir entre fotos de cachorros e raposas. O modelo é baseado na arquitetura MobileNetV2 pré-treinada e foi desenvolvido como parte do desafio de Transfer Learning em Deep Learning.
O objetivo principal deste projeto é aplicar técnicas de Transfer Learning em uma rede neural profunda para criar um classificador de imagens eficiente. O projeto utiliza a arquitetura MobileNetV2 pré-treinada como base e a adapta para a tarefa específica de classificação binária entre cachorros e raposas.
├── dataset/
│ ├── dog/ # Imagens de cachorros para treino
│ ├── fox/ # Imagens de raposas para treino
├── predict/ # Imagens para predição
├── models/ # Modelos salvos
├── results/ # Gráficos e resultados
└── Dio-Transfer-Learning.ipynb
- Python 3.x
- TensorFlow 2.x
- Scikit-learn
- NumPy
- Pandas
- Matplotlib
- PIL (Python Imaging Library)
O dataset é composto por:
- 105 imagens de cachorros
- 102 imagens de raposas
- Divisão do dataset:
- 70% para treino
- 15% para validação
- 15% para teste
- Redimensionamento das imagens para 224x224 pixels
- Normalização dos valores dos pixels (divisão por 255)
- Aumento de dados (data augmentation) com:
- Rotação
- Deslocamento horizontal e vertical
- Espelhamento horizontal
- Base: MobileNetV2 pré-treinada na ImageNet
- Camadas adicionadas:
- GlobalAveragePooling2D
- Dense (128 neurônios, ReLU)
- Dropout (0.2)
- Dense (1 neurônio, Sigmoid)
- Otimizador: Adam
- Função de perda: Binary Crossentropy
- Métrica: Accuracy
- Número de épocas: 10
- Batch size: 32
O modelo é avaliado usando:
- Matriz de confusão
- Curva ROC e AUC
- Relatório de classificação com precisão, recall e F1-score
O modelo gera diversos gráficos e métricas:
- Histórico de treinamento (acurácia e perda)
- Matriz de confusão
- Curva ROC
- Métricas detalhadas de classificação
# Executar o treinamento com os splits padrão
main(train_split=0.8, val_split=0.1, test_split=0.1)
# Usar o notebook Dio-Transfer-Learning-Predict.ipynb
# Carregar uma imagem e fazer uma predição
image_path = 'caminho/para/imagem.jpg'
predicted_class, confidence = predict_image(image_path)
- Prepara os dados para treinamento, validação e teste
- Implementa data augmentation
- Configura os geradores de dados
- Cria o modelo usando Transfer Learning
- Carrega a MobileNetV2 pré-treinada
- Adiciona camadas personalizadas
- Compila e treina o modelo
- Configura otimizador e função de perda
- Monitora métricas durante o treinamento
- Avalia o desempenho do modelo
- Calcula métricas de avaliação
- Gera visualizações dos resultados
- Carrega e pré-processa uma única imagem
- Faz predição usando o modelo treinado
- Retorna a classe predita e a confiança
O projeto gera várias visualizações:
- Gráficos de acurácia e perda durante o treinamento:
- Matriz de confusão:
- Curva ROC:
- Comparação entre modelos (CNN vs Random Forest):
- Implementação de Transfer Learning
- Data Augmentation para melhor generalização
- Avaliação completa do modelo
- Visualizações detalhadas dos resultados
- Interface simples para predições