Este repositório contém um Jupyter Notebook com a implementação completa do algoritmo FixMatch, focado na classificação de imagens do dataset CIFAR-10 utilizando técnicas de Aprendizado Semisupervisionado (SSL). O projeto demonstra como melhorar a performance do modelo utilizando dados não rotulados através de consistência de predições entre diferentes aumentações.
O projeto segue o paradigma do FixMatch, que combina duas abordagens principais:
- Pseudo-Labeling: O modelo atua como um "professor" para si mesmo, gerando rótulos para dados não rotulados quando a confiança da predição em uma imagem (com aumentação fraca) excede um limiar pré-definido (ex: 0.95).
- Consistency Regularization: O modelo é treinado para que sua predição em uma versão fortemente aumentada da mesma imagem corresponda ao pseudo-rótulo gerado.
-
Arquitetura: ResNet18 modificada para o CIFAR-10 (ajuste na primeira camada convolucional para suportar inputs
$32 \times 32$ ). -
Data Augmentation:
- Weak (Fraca): Random Crop e Random Horizontal Flip.
- Strong (Forte): RandAugment e RandomErasing (Cutout).
- Split de Dados: Funções auxiliares para dividir o dataset de treino em subconjuntos rotulados (simulando escassez de labels) e não rotulados.
-
Pipeline de Treino: Classe
FixMatchTrainerpersonalizada que gerencia as perdas supervisionada ($L_s$ ) e não-supervisionada ($L_u$ ).
O notebook está organizado da seguinte forma:
- Carregamento de Dados: Download e normalização do CIFAR-10.
- Pre-processamento SSL: Separação balanceada de índices para dados rotulados e não rotulados.
- Definição do Modelo: Implementação da ResNet18 customizada.
- Aumentação de Dados: Definição das pipelines de transformação Weak e Strong.
- Classe Trainer: Loop de treinamento com cálculo de masked cross-entropy loss para os dados não rotulados.
- Visualização: Funções para inspecionar pseudo-rótulos e comparar históricos de treinamento.