Um projeto robusto de classificação de imagens end-to-end utilizando Deep Learning e Transfer Learning. O objetivo é distinguir entre imagens de gatos e cachorros com alta precisão, utilizando uma arquitetura ResNet50 pré-treinada no ImageNet e aplicando técnicas avançadas de Fine-Tuning.
O projeto foi estruturado seguindo boas práticas de Engenharia de Machine Learning, com código modularizado, pipelines de dados reprodutíveis e separação clara entre lógica de treino e definição de modelo.
O modelo baseia-se na ResNet50, uma Rede Neural Convolucional (CNN) profunda com conexões residuais. A estratégia de treinamento foi dividida em duas fases para maximizar a acurácia e evitar o "Catastrophic Forgetting":
-
Fase 1: Feature Extraction
- O backbone da ResNet50 (pré-treinado no ImageNet) é mantido congelado (
requires_grad=False). - Apenas a nova "cabeça" (camada Linear final) é treinada.
- Objetivo: Adaptar a saída para 2 classes sem destruir os filtros de detecção de bordas/formas já aprendidos.
- O backbone da ResNet50 (pré-treinado no ImageNet) é mantido congelado (
-
Fase 2: Fine-Tuning
- Todas as camadas são descongeladas.
- O modelo é treinado com um Learning Rate drasticamente reduzido (100x menor).
- Objetivo: Refinar os filtros profundos para diferenciar características específicas de pelos de cães e gatos.
├── data/ # Diretório de dados (gerado automaticamente)
├── models/ # Checkpoints salvos (.pth)
├── notebooks/ # Jupyter Notebooks para experimentação
├── src/ # Código fonte modular
│ ├── data_setup.py # Pipeline de ETL (DataLoaders, Transforms)
│ ├── engine.py # Loops de treino e avaliação (agnóstico ao modelo)
│ ├── model.py # Definição da arquitetura (ResNetTransfer)
│ └── utils.py # Funções auxiliares
├── train.py # Script principal de orquestração do treino
├── pyproject.toml # Gerenciamento de dependências
├── uv.lock # Lockfile (uv)
└── README.md # Documentação do projeto
- Clone o repositório
git clone https://github.com/koheiseko/cat-dog-classification
cd cat-dog-classification
- Instale as dependências
uv sync
- Execute o arquivo train.py
uv run train.py