Uma biblioteca de métodos auto-supervisionados para a representação visual não supervisionada aprendizado de Pytorch Lightning. Nosso objetivo é fornecer métodos auto-supervisionados da SOTA em um ambiente comparável e, ao mesmo tempo, implementar truques de treinamento. A biblioteca é independente, mas é possível usar os modelos fora do solo-aprendizado. Mais detalhes em nosso artigo .
main_linear.py , mixup, cutmix e aumento aleatório.Opcional :
Primeiro clone o repo.
Em seguida, para instalar solo-learn com suporte dali e/ou umap, use:
pip3 install .[dali,umap,h5] --extra-index-url https://developer.download.nvidia.com/compute/redistSe nenhum suporte DALI/UMAP/H5 for necessário, o repositório poderá ser instalado como:
pip3 install .Para desenvolvimento local:
pip3 install -e .[umap,h5]
# Make sure you have pre-commit hooks installed
pre-commit installNOTA: Se você estiver tendo problemas com Dali, instale -o seguindo o guia deles.
Nota 2: Considere a instalação do Pillow-SIMD para obter melhores tempos de carregamento quando não estiver usando o DALI.
Nota 3: em breve estará no PIP.
Para pré -treinar a espinha dorsal, siga um dos muitos arquivos bash nos scripts/pretrain/ . Agora estamos usando o Hydra para lidar com os arquivos de configuração, então a sintaxe comum é algo como:
python3 main_pretrain.py
# path to training script folder
--config-path scripts/pretrain/imagenet-100/
# training config name
--config-name barlow.yaml
# add new arguments (e.g. those not defined in the yaml files)
# by doing ++new_argument=VALUE
# pytorch lightning's arguments can be added here as well. Depois disso, para avaliação linear offline, siga os exemplos em scripts/linear ou scripts/finetune para o Finetuning todo o backbone.
Para avaliação K-NN e visualização UMAP, verifique os scripts nos scripts/{knn,umap} .
NOTA: Os arquivos tentam estar atualizados e seguem o mais próximo possível dos parâmetros recomendados de cada artigo, mas verifique-os antes de executar.
Por favor, confira nossa documentação e tutoriais:
Se você deseja contribuir para o solo-learn, verifique como contribuir e seguir o código de conduta
Todos os modelos pré -tenhados aVaable podem ser baixados diretamente através das tabelas abaixo ou programaticamente executando um dos seguintes scripts zoo/cifar10.sh , zoo/cifar100.sh , zoo/imagenet100.sh e zoo/imagenet.sh .
NOTA: Os hyperparameters podem não ser os melhores, faremos novamente os métodos com menor desempenho eventualmente.
| Método | Espinha dorsal | Épocas | Dali | ACC@1 | ACC@5 | Ponto de verificação |
|---|---|---|---|---|---|---|
| All4one | Resnet18 | 1000 | 93.24 | 99.88 | ? | |
| Barlow gêmeos | Resnet18 | 1000 | 92.10 | 99.73 | ? | |
| BYOL | Resnet18 | 1000 | 92.58 | 99.79 | ? | |
| Deepcluster v2 | Resnet18 | 1000 | 88,85 | 99.58 | ? | |
| Dino | Resnet18 | 1000 | 89.52 | 99.71 | ? | |
| MOCO V2+ | Resnet18 | 1000 | 92.94 | 99.79 | ? | |
| MOCO V3 | Resnet18 | 1000 | 93.10 | 99.80 | ? | |
| Nnclr | Resnet18 | 1000 | 91.88 | 99.78 | ? | |
| Ressl | Resnet18 | 1000 | 90.63 | 99.62 | ? | |
| Simclr | Resnet18 | 1000 | 90.74 | 99.75 | ? | |
| Simsiam | Resnet18 | 1000 | 90.51 | 99.72 | ? | |
| SUPCON | Resnet18 | 1000 | 93.82 | 99.65 | ? | |
| Swav | Resnet18 | 1000 | 89.17 | 99.68 | ? | |
| Vibcreg | Resnet18 | 1000 | 91.18 | 99.74 | ? | |
| Vicreg | Resnet18 | 1000 | 92.07 | 99.74 | ? | |
| W-mse | Resnet18 | 1000 | 88.67 | 99.68 | ? |
| Método | Espinha dorsal | Épocas | Dali | ACC@1 | ACC@5 | Ponto de verificação |
|---|---|---|---|---|---|---|
| All4one | Resnet18 | 1000 | 72.17 | 93.35 | ? | |
| Barlow gêmeos | Resnet18 | 1000 | 70.90 | 91.91 | ? | |
| BYOL | Resnet18 | 1000 | 70.46 | 91.96 | ? | |
| Deepcluster v2 | Resnet18 | 1000 | 63.61 | 88.09 | ? | |
| Dino | Resnet18 | 1000 | 66.76 | 90.34 | ? | |
| MOCO V2+ | Resnet18 | 1000 | 69.89 | 91.65 | ? | |
| MOCO V3 | Resnet18 | 1000 | 68.83 | 90.57 | ? | |
| Nnclr | Resnet18 | 1000 | 69.62 | 91.52 | ? | |
| Ressl | Resnet18 | 1000 | 65.92 | 89.73 | ? | |
| Simclr | Resnet18 | 1000 | 65.78 | 89.04 | ? | |
| Simsiam | Resnet18 | 1000 | 66.04 | 89.62 | ? | |
| SUPCON | Resnet18 | 1000 | 70.38 | 89.57 | ? | |
| Swav | Resnet18 | 1000 | 64.88 | 88.78 | ? | |
| Vibcreg | Resnet18 | 1000 | 67.37 | 90.07 | ? | |
| Vicreg | Resnet18 | 1000 | 68.54 | 90.83 | ? | |
| W-mse | Resnet18 | 1000 | 61.33 | 87.26 | ? |
| Método | Espinha dorsal | Épocas | Dali | ACC@1 (online) | ACC@1 (offline) | ACC@5 (online) | ACC@5 (offline) | Ponto de verificação |
|---|---|---|---|---|---|---|---|---|
| All4one | Resnet18 | 400 | ✔️ | 81.93 | - | 96.23 | - | ? |
| Barlow gêmeos | Resnet18 | 400 | ✔️ | 80.38 | 80.16 | 95.28 | 95.14 | ? |
| BYOL | Resnet18 | 400 | ✔️ | 80.16 | 80.32 | 95.02 | 94.94 | ? |
| Deepcluster v2 | Resnet18 | 400 | 75.36 | 75.4 | 93.22 | 93.10 | ? | |
| Dino | Resnet18 | 400 | ✔️ | 74.84 | 74.92 | 92.92 | 92.78 | ? |
| Dino? | Vit Tiny | 400 | 63.04 | PENDÊNCIA | 87.72 | PENDÊNCIA | ? | |
| MOCO V2+ | Resnet18 | 400 | ✔️ | 78.20 | 79.28 | 95.50 | 95.18 | ? |
| MOCO V3 | Resnet18 | 400 | ✔️ | 80.36 | 80.36 | 95.18 | 94.96 | ? |
| MOCO V3 | Resnet50 | 400 | ✔️ | 85.48 | 84.58 | 96.82 | 96.70 | ? |
| Nnclr | Resnet18 | 400 | ✔️ | 79.80 | 80.16 | 95.28 | 95.30 | ? |
| Ressl | Resnet18 | 400 | ✔️ | 76.92 | 78.48 | 94.20 | 94.24 | ? |
| Simclr | Resnet18 | 400 | ✔️ | 77.64 | PENDÊNCIA | 94.06 | PENDÊNCIA | ? |
| Simsiam | Resnet18 | 400 | ✔️ | 74.54 | 78.72 | 93.16 | 94.78 | ? |
| SUPCON | Resnet18 | 400 | ✔️ | 84.40 | PENDÊNCIA | 95.72 | PENDÊNCIA | ? |
| Swav | Resnet18 | 400 | ✔️ | 74.04 | 74.28 | 92.70 | 92.84 | ? |
| Vibcreg | Resnet18 | 400 | ✔️ | 79.86 | 79.38 | 94.98 | 94.60 | ? |
| Vicreg | Resnet18 | 400 | ✔️ | 79.22 | 79.40 | 95.06 | 95.02 | ? |
| W-mse | Resnet18 | 400 | ✔️ | 67.60 | 69.06 | 90.94 | 91.22 | ? |
Métodos em que os hiperparâmetros estavam fortemente sintonizados.
? O VIT é muito intensivo e instável, por isso estamos lentamente executando arquiteturas maiores e com um tamanho de lote maior. ATM, o tamanho total do lote é 128 e precisávamos usar a precisão do float32. Se você deseja contribuir com isso, informe -nos!
| Método | Espinha dorsal | Épocas | Dali | ACC@1 (online) | ACC@1 (offline) | ACC@5 (online) | ACC@5 (offline) | Ponto de verificação | Ponto de verificação FinetUned |
|---|---|---|---|---|---|---|---|---|---|
| Barlow gêmeos | Resnet50 | 100 | ✔️ | 67.18 | 67.23 | 87.69 | 87.98 | ? | |
| BYOL | Resnet50 | 100 | ✔️ | 68.63 | 68.37 | 88,80 | 88.66 | ? | |
| MOCO V2+ | Resnet50 | 100 | ✔️ | 62.61 | 66.84 | 85.40 | 87.60 | ? | |
| Mae | Vit-B/16 | 100 | ~ | 81.60 (Finetuned) | ~ | 95,50 (Finetuned) | ? | ? |
Relatamos a eficiência de treinamento de alguns métodos usando um resnet18 com e sem dali (4 trabalhadores por GPU) em um servidor com um Intel i9-9820X e dois RTX2080TI.
| Método | Dali | Tempo total para 20 épocas | Hora de 1 época | Memória da GPU (por GPU) |
|---|---|---|---|---|
| Barlow gêmeos | 1H 38m 27s | 4m 55s | 5097 MB | |
| ✔️ | 43m 2s | 2m 10s (56% mais rápido) | 9292 MB | |
| BYOL | 1H 38m 46s | 4m 56s | 5409 MB | |
| ✔️ | 50m 33s | 2m 31s (49% mais rápido) | 9521 MB | |
| Nnclr | 1H 38m 30s | 4m 55s | 5060 MB | |
| ✔️ | 42m 3s | 2m 6s (64% mais rápido) | 9244 MB |
NOTA : O aumento da memória da GPU não é escalado com o modelo, mas ele escala com o número de trabalhadores.
Se você usar solo-learn, cite nosso papel:
@article { JMLR:v23:21-1155 ,
author = { Victor Guilherme Turrisi da Costa and Enrico Fini and Moin Nabi and Nicu Sebe and Elisa Ricci } ,
title = { solo-learn: A Library of Self-supervised Methods for Visual Representation Learning } ,
journal = { Journal of Machine Learning Research } ,
year = { 2022 } ,
volume = { 23 } ,
number = { 56 } ,
pages = { 1-6 } ,
url = { http://jmlr.org/papers/v23/21-1155.html }
}