Una biblioteca de métodos auto-supervisados para el aprendizaje de representación visual no supervisada impulsada por Pytorch Lightning. Nuestro objetivo es proporcionar métodos auto-supervisados de SOTA en un entorno comparable mientras, al mismo tiempo, implementan trucos de capacitación. La biblioteca es autónoma, pero es posible usar los modelos fuera de la aprendizaje individual. Más detalles en nuestro artículo .
main_linear.py , mezcla, cutmix y aumento aleatorio.Opcional :
Primer clon el repositorio.
Luego, para instalar solo-learn con soporte Dali y/o UMAP, use:
pip3 install .[dali,umap,h5] --extra-index-url https://developer.download.nvidia.com/compute/redistSi no se necesita soporte Dali/UMAP/H5, el repositorio se puede instalar como:
pip3 install .Para el desarrollo local:
pip3 install -e .[umap,h5]
# Make sure you have pre-commit hooks installed
pre-commit installNota: Si tiene problemas con Dali, instálelo siguiendo su guía.
Nota 2: Considere la instalación de almohadas-SIMD para mejores tiempos de carga cuando no use Dali.
Nota 3: Pronto estará en Pip.
Para el envío de la columna vertebral, siga uno de los muchos archivos BASH en scripts/pretrain/ . Ahora estamos usando Hydra para manejar los archivos de configuración, por lo que la sintaxis común es algo así 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. Después de eso, para la evaluación lineal fuera de línea, siga los ejemplos en scripts/linear o scripts/finetune para finizar toda la columna vertebral.
Para la evaluación de K-NN y la visualización de UMAP verifique los scripts en scripts/{knn,umap} .
Nota: Los archivos intentan estar actualizados y sigan lo más cerca posible de los parámetros recomendados de cada documento, pero verifíquelos antes de ejecutar.
Por favor, consulte nuestra documentación y tutoriales:
Si desea contribuir a solo-learn, asegúrese de echar un vistazo a cómo contribuir y seguir el código de conducta
Todos los modelos previos a la aparición se pueden descargar directamente a través de las tablas a continuación o programáticamente ejecutando uno de los siguientes scripts zoo/cifar10.sh , zoo/cifar100.sh , zoo/imagenet100.sh e zoo/imagenet.sh .
Nota: Los hiperparámetros pueden no ser los mejores, eventualmente volveremos a ejecutar los métodos con menor rendimiento.
| Método | Columna vertebral | Épocas | Dali | Acc@1 | ACC@5 | Control |
|---|---|---|---|---|---|---|
| Todo 4On | Resnet18 | 1000 | 93.24 | 99.88 | ? | |
| Barlow Twins | 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 | ? | |
| Resonado | 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 | ? | |
| Vibrar | Resnet18 | 1000 | 91.18 | 99.74 | ? | |
| Vicreg | Resnet18 | 1000 | 92.07 | 99.74 | ? | |
| W-MSE | Resnet18 | 1000 | 88.67 | 99.68 | ? |
| Método | Columna vertebral | Épocas | Dali | Acc@1 | ACC@5 | Control |
|---|---|---|---|---|---|---|
| Todo 4On | Resnet18 | 1000 | 72.17 | 93.35 | ? | |
| Barlow Twins | 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 | ? | |
| Resonado | 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 | ? | |
| Vibrar | Resnet18 | 1000 | 67.37 | 90.07 | ? | |
| Vicreg | Resnet18 | 1000 | 68.54 | 90.83 | ? | |
| W-MSE | Resnet18 | 1000 | 61.33 | 87.26 | ? |
| Método | Columna vertebral | Épocas | Dali | ACC@1 (en línea) | ACC@1 (fuera de línea) | ACC@5 (en línea) | ACC@5 (fuera de línea) | Control |
|---|---|---|---|---|---|---|---|---|
| Todo 4On | Resnet18 | 400 | ✔️ | 81.93 | - | 96.23 | - | ? |
| Barlow Twins | 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 | HACER | 87.72 | HACER | ? | |
| 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 | ? |
| Resonado | Resnet18 | 400 | ✔️ | 76.92 | 78.48 | 94.20 | 94.24 | ? |
| Simclr | Resnet18 | 400 | ✔️ | 77.64 | HACER | 94.06 | HACER | ? |
| Simsiam | Resnet18 | 400 | ✔️ | 74.54 | 78.72 | 93.16 | 94.78 | ? |
| Supcon | Resnet18 | 400 | ✔️ | 84.40 | HACER | 95.72 | HACER | ? |
| Swav | Resnet18 | 400 | ✔️ | 74.04 | 74.28 | 92.70 | 92.84 | ? |
| Vibrar | 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 donde los hiperparámetros estaban fuertemente sintonizados.
? VIT es muy intensivo e inestable, por lo que lentamente estamos ejecutando arquitecturas más grandes y con un tamaño por lotes más grande. ATM, el tamaño total de lotes es 128 y necesitábamos usar Float32 Precision. Si quieres contribuir ejecutándolo, ¡háganoslo saber!
| Método | Columna vertebral | Épocas | Dali | ACC@1 (en línea) | ACC@1 (fuera de línea) | ACC@5 (en línea) | ACC@5 (fuera de línea) | Control | Punto de control de Finetuned |
|---|---|---|---|---|---|---|---|---|---|
| Barlow Twins | 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) | ? | ? |
Reportamos la eficiencia de capacitación de algunos métodos utilizando un resnet18 con y sin DALI (4 trabajadores por GPU) en un servidor con un Intel i9-9820x y dos RTX2080TI.
| Método | Dali | Tiempo total para 20 épocas | Hora de 1 época | Memoria de GPU (por GPU) |
|---|---|---|---|---|
| Barlow Twins | 1h 38m 27s | 4m 55s | 5097 MB | |
| ✔️ | 43m 2s | 2m 10s (56% más rápido) | 9292 MB | |
| Byol | 1h 38m 46s | 4m 56s | 5409 MB | |
| ✔️ | 50m 33s | 2m 31s (49% más rápido) | 9521 MB | |
| Nnclr | 1h 38m 30s | 4m 55s | 5060 MB | |
| ✔️ | 42m 3s | 2m 6s (64% más rápido) | 9244 MB |
Nota : El aumento de la memoria de GPU no se escala con el modelo, sino que escala con el número de trabajadores.
Si usa solo-learn, cite nuestro documento:
@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 }
}