Este projeto implementa e avalia técnicas de Aprendizado Autossupervisionado (SSL) para tarefas de visão computacional. São aplicadas a técnica SimCLR em diferentes backbones, comparando seus desempenhos com inicializações por ImageNet e aleatórias.
- Avaliar o impacto do pré-treinamento SSL (SimCLR) em diferentes backbones
- Comparar desempenho em tarefas downstream (segmentação e detecção)
- Analisar a eficácia do SSL em cenários com dados limitados
Em conformidade com as exigências do trabalho (S ≥ N e B ≥ 2), foi aplicada a técnica de aprendizado autossupervisionado SimCLR. Para cada backbone, avalia-se o desempenho com diferentes inicializações.
| Backbone | Técnica / Inicialização | Estratégia | Descrição da Origem dos Pesos |
|---|---|---|---|
| ResNet50 | ImageNet | Fine-tuning | Pesos pré-treinados no ImageNet |
| Aleatória | Treino do Zero | Inicialização aleatória (Kaiming/Xavier) | |
| SimCLR | Fine-tuning | Auto-supervisão (SimCLR) | |
| Swin Tiny | ImageNet | Fine-tuning | Pesos pré-treinados no ImageNet |
| Aleatória | Treino do Zero | Inicialização aleatória (Kaiming/Xavier) | |
| SimCLR | Fine-tuning | Auto-supervisão (SimCLR) | |
| ConvNeXt Tiny | ImageNet | Fine-tuning | Pesos pré-treinados no ImageNet |
| Aleatória | Treino do Zero | Inicialização aleatória (Kaiming/Xavier) | |
| SimCLR | Fine-tuning | Auto-supervisão (SimCLR) |
Cada técnica gera arquivos de pesos na pasta weights/ seguindo o padrão Y-X-N.pth, onde:
- Y = Nome do backbone
- X = Nome da técnica SSL
- N = Versão do modelo (1, 2, 3, ...)
| Backbone | SimCLR |
|---|---|
| ResNet50 | ResNet50-SIMCLR-1.pth |
| Swin Tiny | SwinTiny-SIMCLR-1.pth |
| ConvNeXt Tiny | ConvNeXtTiny-SIMCLR-1.pth |
Observação: Caso o mesmo backbone/técnica seja treinado múltiplas vezes, incrementar o sufixo N (ex:
ResNet50-SIMCLR-2.pth,ResNet50-SIMCLR-3.pth).
Todos os backbones são avaliados nas duas tarefas alvo:
| Tarefa | Descrição | Métricas |
|---|---|---|
| 🖼️ Segmentação de imagens | Segmentação semântica por pixel | F1 Score, IoU |
| 🎯 Detecção de objetos | Localização com bounding boxes | mAP, mAP@50, mAP@75 |
| Tipo de Dados | Localização | Finalidade | Quantidade |
|---|---|---|---|
| SSL (não rotulados) | data/unlabelled/ |
Pré-treinamento SSL | ~1500+ imagens |
| Segmentação | data/segmentation/ |
Downstream (treino/val/teste) | 200/40/20 |
| Detecção | data/detection/ |
Downstream (treino/val/teste) | 200/40/20 |
projeto_ssl/
│
├── 📁 data/ # Dados (não versionado)
│ ├── unlabelled/ # Dados não rotulados para SSL
│ ├── segmentation/ # Dados de segmentação
│ │ ├── images/
│ │ │ ├── train/
│ │ │ ├── val/
│ │ │ └── test/
│ │ └── masks/
│ │ ├── train/
│ │ ├── val/
│ │ └── test/
│ └── detection/ # Dados de detecção
│ ├── images/
│ │ ├── train/
│ │ ├── val/
│ │ └── test/
│ ├── train.json
│ ├── val.json
│ ├── test.json
│ └── dataset_info.json
│
├── 📁 src/ # Código fonte principal
│ ├── 📁 models/ # Definição dos modelos
│ │ ├── backbones.py # Backbones (ResNet, Swin, ConvNeXt)
│ │ └── segmentation_head.py # Cabeça para segmentação
│ ├── 📁 utils/ # Utilitários
│ │ └── metrics.py # Métricas de avaliação
│ └── 📁 training/ # Módulos de treinamento
│
├── 📁 scripts/ # Scripts executáveis
│ ├── SimCLR_pretrain.py # Pré-treino SimCLR
│ ├── eval_segmentation.py # Avaliação de segmentação
│ └── eval_detectation.py # Avaliação de detecção
│
├── 📁 notebooks/ # Jupyter notebooks para análise
│ ├── analysis.ipynb # Análise de experimentos
│ └── (outros notebooks)
│
├── 📁 weights/ # Pesos dos modelos treinados
│ ├── ResNet50-SIMCLR-1.pth
│ ├── SwinTiny-SIMCLR-1.pth
│ └── ConvNeXtTiny-SIMCLR-1.pth
│
├── 📁 results/ # Resultados dos experimentos
│ ├── detection/
│ │ └── checkpoints/ # Checkpoints de detecção
│ │ ├── ConvNeXtTiny_imagenet_2/
│ │ ├── ConvNeXtTiny_imagenet_200/
│ │ ├── ResNet50_imagenet_2/
│ │ ├── ResNet50_imagenet_200/
│ │ ├── SwinTiny_simclr_2/
│ │ ├── SwinTiny_simclr_200/
│ │ └── (demais combinações)
│ ├── segmentation/
│ │ └── checkpoints/ # Checkpoints de segmentação
│ │ ├── ConvNeXtTiny_imagenet_2/
│ │ ├── ConvNeXtTiny_imagenet_200/
│ │ ├── ResNet50_imagenet_2/
│ │ ├── ResNet50_imagenet_200/
│ │ ├── SwinTiny_simclr_2/
│ │ ├── SwinTiny_simclr_200/
│ │ └── (demais combinações)
│ ├── figs/ # Figuras geradas
│ ├── tables/ # Tabelas de resultados
│ └── detection/results.csv # Resultados de detecção
│
├── 📁 logs/ # Logs de treinamento
│
├── README.md # Este arquivo
└── LICENSE # Licença do projeto
Os resultados dos experimentos são salvos em formato CSV com as seguintes colunas:
| Coluna | Descrição |
|---|---|
backbone |
Nome do backbone utilizado |
pretrained |
Tipo de pré-treinamento (ImageNet, Aleatório, SimCLR) |
epochs_max |
Número máximo de épocas configurado |
epochs_actual |
Número real de épocas executadas |
samples |
Quantidade de amostras utilizadas |
test_loss |
Loss no conjunto de teste |
test_iou |
IoU (Intersection over Union) no teste |
test_f1 |
F1 Score no teste |
time_seconds |
Tempo total de treinamento em segundos |
best_model_path |
Caminho para o melhor modelo salvo |
resumed |
Indica se o treinamento foi retomado |
| Coluna | Descrição |
|---|---|
backbone |
Nome do backbone utilizado |
pretrained |
Tipo de pré-treinamento (ImageNet, Aleatório, SimCLR) |
epochs_max |
Número máximo de épocas configurado |
epochs_actual |
Número real de épocas executadas |
samples |
Quantidade de amostras utilizadas |
test_loss |
Loss no conjunto de teste |
mAP@50 |
mAP com IoU threshold de 0.5 |
mAP@75 |
mAP com IoU threshold de 0.75 |
time_seconds |
Tempo total de treinamento em segundos |
inference_time_ms |
Tempo médio de inferência em milissegundos |
fps |
Frames por segundo durante inferência |
best_model_path |
Caminho para o melhor modelo salvo |
resumed |
Indica se o treinamento foi retomado |
| Dataset | Link para Download | Estrutura | Quantidade |
|---|---|---|---|
| Segmentação | 🔗 Baixar | data/segmentation/ |
Train: 200, Val: 40, Test: 20 |
| Detecção | 🔗 Baixar | data/detection/ |
Train: 200, Val: 40, Test: 20 |
| Não Rotulados (SSL) | 🔗 Baixar | data/unlabelled/ |
~1500+ imagens |
Importante: A pasta
data/não está versionada no GitHub. Baixe os datasets separadamente e organize conforme a estrutura acima.
Os pesos dos modelos pré-treinados e checkpoints dos experimentos downstream estão disponíveis para download no Google Drive:
🔗 Download dos Pesos e Checkpoints
Os arquivos disponíveis para download incluem:
| Arquivo | Descrição |
|---|---|
weights/*.pth |
Pesos dos modelos pré-treinados com SimCLR para cada backbone (ResNet50, SwinTiny, ConvNeXtTiny) |
results/segmentation/checkpoints/ |
Checkpoints dos experimentos de segmentação para todas as combinações (backbone, inicialização, amostras) |
results/detection/checkpoints/ |
Checkpoints dos experimentos de detecção para todas as combinações (backbone, inicialização, amostras) |