Une bibliothèque de méthodes auto-supervisées pour l'apprentissage de la représentation visuelle non supervisée alimentée par la foudre pytorch. Nous visons à fournir des méthodes auto-supervisées SOTA dans un environnement comparable tout en mettant en œuvre des astuces de formation. La bibliothèque est autonome, mais il est possible d'utiliser les modèles en dehors de Solo-Learn. Plus de détails dans notre article .
main_linear.py , mélange, cutmix et augmentation aléatoire.Facultatif :
Premier cloner le repo.
Ensuite, pour installer Solo-Learn avec le support DALI et / ou UMAP, utilisez:
pip3 install .[dali,umap,h5] --extra-index-url https://developer.download.nvidia.com/compute/redistSi aucune prise en charge DALI / UMAP / H5 n'est nécessaire, le référentiel peut être installé comme:
pip3 install .Pour le développement local:
pip3 install -e .[umap,h5]
# Make sure you have pre-commit hooks installed
pre-commit installRemarque: Si vous rencontrez des problèmes avec Dali, installez-le après leur guide.
Remarque 2: Envisagez d'installer un oreiller-simd pour de meilleurs moments de chargement lorsque vous n'utilisez pas DALI.
Remarque 3: bientôt sur Pip.
Pour pré-dresser la colonne vertébrale, suivez l'un des nombreux fichiers bash dans scripts/pretrain/ . Nous utilisons maintenant Hydra pour gérer les fichiers de configuration, donc la syntaxe commune est quelque chose comme:
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. Après cela, pour l'évaluation linéaire hors ligne, suivez les exemples dans scripts/linear ou scripts/finetune pour la finetune de toute la colonne vertébrale.
Pour l'évaluation K-NN et la visualisation UMAP, vérifiez les scripts dans scripts/{knn,umap} .
Remarque: les fichiers essaient d'être à jour et de suivre aussi étroitement que possible les paramètres recommandés de chaque article, mais vérifiez-les avant de fonctionner.
S'il vous plaît, consultez notre documentation et nos tutoriels:
Si vous souhaitez contribuer à Solo-Learn, assurez-vous de jeter un œil à la façon de contribuer et de suivre le code de conduite
Tous les modèles pré-entraînés AVAIable peuvent être téléchargés directement via les tables ci-dessous ou par programme en exécutant l'un des scripts suivants zoo/cifar10.sh , zoo/cifar100.sh , zoo/imagenet100.sh et zoo/imagenet.sh .
Remarque: les hyperparamètres peuvent ne pas être les meilleurs, nous allons éventuellement réévaluer les méthodes avec des performances plus faibles.
| Méthode | Colonne vertébrale | Époques | Dali | Acc @ 1 | Acc @ 5 | Point de contrôle |
|---|---|---|---|---|---|---|
| All4one | Resnet18 | 1000 | 93.24 | 99.88 | ? | |
| Jumeaux de Barlow | 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 | ? | |
| Raide | Resnet18 | 1000 | 90,63 | 99.62 | ? | |
| Simclr | Resnet18 | 1000 | 90.74 | 99,75 | ? | |
| Simisiam | Resnet18 | 1000 | 90,51 | 99,72 | ? | |
| Supcon | Resnet18 | 1000 | 93.82 | 99.65 | ? | |
| Agiter | 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éthode | Colonne vertébrale | Époques | Dali | Acc @ 1 | Acc @ 5 | Point de contrôle |
|---|---|---|---|---|---|---|
| All4one | Resnet18 | 1000 | 72.17 | 93.35 | ? | |
| Jumeaux de Barlow | 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 | ? | |
| Raide | Resnet18 | 1000 | 65.92 | 89,73 | ? | |
| Simclr | Resnet18 | 1000 | 65,78 | 89.04 | ? | |
| Simisiam | Resnet18 | 1000 | 66.04 | 89,62 | ? | |
| Supcon | Resnet18 | 1000 | 70.38 | 89,57 | ? | |
| Agiter | 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éthode | Colonne vertébrale | Époques | Dali | ACC @ 1 (en ligne) | ACC @ 1 (hors ligne) | ACC @ 5 (en ligne) | ACC @ 5 (hors ligne) | Point de contrôle |
|---|---|---|---|---|---|---|---|---|
| All4one | Resnet18 | 400 | ✔️ | 81.93 | - | 96.23 | - | ? |
| Jumeaux de Barlow | 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 minuscule | 400 | 63.04 | FAIRE | 87.72 | FAIRE | ? | |
| 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 | ? |
| Raide | Resnet18 | 400 | ✔️ | 76,92 | 78,48 | 94.20 | 94.24 | ? |
| Simclr | Resnet18 | 400 | ✔️ | 77,64 | FAIRE | 94.06 | FAIRE | ? |
| Simisiam | Resnet18 | 400 | ✔️ | 74.54 | 78,72 | 93.16 | 94.78 | ? |
| Supcon | Resnet18 | 400 | ✔️ | 84.40 | FAIRE | 95,72 | FAIRE | ? |
| Agiter | 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éthodes où les hyperparamètres ont été fortement réglés.
? Le VIT est très intensif et instable de calcul, nous exécutons donc lentement des architectures plus grandes et avec une taille de lot plus grande. ATM, la taille totale du lot est de 128 et nous devions utiliser la précision Float32. Si vous voulez contribuer en l'exécutant, faites-le nous savoir!
| Méthode | Colonne vertébrale | Époques | Dali | ACC @ 1 (en ligne) | ACC @ 1 (hors ligne) | ACC @ 5 (en ligne) | ACC @ 5 (hors ligne) | Point de contrôle | Point de contrôle à finetuned |
|---|---|---|---|---|---|---|---|---|---|
| Jumeaux de Barlow | 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) | ? | ? |
Nous rapportons l'efficacité de formation de certaines méthodes en utilisant un RESNET18 avec et sans DALI (4 travailleurs par GPU) dans un serveur avec un Intel I9-9820X et deux RTX2080TI.
| Méthode | Dali | Temps total pour 20 époques | Temps pour 1 époque | Mémoire de GPU (par GPU) |
|---|---|---|---|---|
| Jumeaux de Barlow | 1h 38m 27s | 4m 55s | 5097 MB | |
| ✔️ | 43m 2s | 2m 10s (56% plus rapide) | 9292 MB | |
| Byol | 1h 38m 46S | 4m 56S | 5409 MB | |
| ✔️ | 50m 33s | 2m 31S (49% plus rapide) | 9521 MB | |
| NNCLR | 1h 38m 30s | 4m 55s | 5060 MB | |
| ✔️ | 42m 3s | 2m 6s (64% plus rapide) | 9244 MB |
Remarque : L'augmentation de la mémoire GPU ne fait pas évoluer avec le modèle, mais il évolue avec le nombre de travailleurs.
Si vous utilisez Solo-Learn, veuillez citer notre papier:
@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 }
}