Skip to content

sadalan97/projeto_ssl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projeto SSL - Aprendizado Autossupervisionado

Python 3.8+ PyTorch License

📋 Visão Geral

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.

🎯 Objetivos

  • 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

🔬 Planejamento Experimental

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.

Backbones e 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)

📁 Nomenclatura dos Arquivos de Pesos (.pth)

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).

🎯 Tarefas Alvo (Downstream)

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

📊 Dados Utilizados

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

📁 Estrutura do Projeto

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

📊 Formato dos Arquivos de Resultados

Os resultados dos experimentos são salvos em formato CSV com as seguintes colunas:

Segmentação (results/segmentation/results.csv)

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

Detecção (results/detection/results.csv)

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

📥 Download dos Datasets e Modelos Pré-treinados

Datasets

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.

📦 Pesos e Checkpoints

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)

About

Trabalho de Aprendizado Autossupervisionado - MO437

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages