Ce référentiel contient la mise en œuvre officielle de l'article ICLR 2024 « ImageNet vaut-il 1 vidéo ? Apprendre des encodeurs d'images puissants à partir d'une longue vidéo non étiquetée »
[ arXiv
], [ paper
], [ dataset
], [ Project Page
]
Notre objectif est de créer des représentations robustes en exploitant la richesse des informations contenues dans les images vidéo. Les frameworks SSL standard tels que SimCLR, DINo, etc. supposent souvent des correspondances entre différentes vues. Cela est vrai que ce soit en utilisant des représentations denses ou globales en regroupant par exemple iBOT. S’il est relativement simple d’établir des correspondances dans les images, cela devient plus difficile lorsqu’il s’agit de déformations temporelles, nécessitant une certaine forme de suivi d’objets. Dans les vidéos avec un grand champ de vision ou d’ego-motion, obtenir des correspondances devient encore plus difficile.
Nous introduisons DoRA, basé sur la découverte et le suivi multi-objets. Il exploite l'attention du jeton [CLS] de têtes distinctes dans un transformateur de vision pour identifier et suivre de manière cohérente plusieurs objets dans une image donnée à travers des séquences temporelles. Sur ceux-ci, une perte de distillation enseignant-élève est alors appliquée. Il est important de noter que nous n’utilisons aucun système de suivi d’objets ni aucun réseau de flux optiques disponibles dans le commerce. Cela maintient notre pipeline simple et ne nécessite aucune donnée ou formation supplémentaire. Cela garantit également que la représentation apprise est robuste.
La liste complète des vidéos WTour est disponible dans l'ensemble de données HuggingFace, comprenant les liens YouTube et les instructions détaillées sur la façon de les télécharger à l'aide des scripts nécessaires.
Si les liens sont rompus, vous pouvez télécharger les vidéos directement à partir de l'ensemble de données Walking Tour
Afin de nous conformer au RGPD, nous essayons également de flouter tous les visages et plaques d'immatriculation apparaissant dans la vidéo à l'aide de Deface.
Pour ce faire pour toutes les vidéos de l'ensemble de données WTour :
python3 -m pip install deface
Exécutez ensuite Deface sur toutes les vidéos en utilisant le script bash :
chmod a+x gdpr_blur_faces.sh ./gdpr_blur_faces.sh
Les exigences sont facilement installées via Anaconda. Ici, nous créons un environnement conda appelé dora et installons toutes les bibliothèques nécessaires
conda create -n dora python=3.8.2 conda activate dora conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia conda install pillow==9.4.0 scipy tensorboardX faiss-gpu==1.6.1 tqdm lmdb scikit-learn pyarrow==2.0.0 DALL-E munkres six einops
Si vous utilisez des GPU V100 avec 32 Go de RAM, nous vous recommandons d'utiliser le script suivant pour pré-entraîner DoRA :
python -m torch.distributed.launch --nproc_per_node=8 main.py --arch vit_small --data_path /path-to-video/venice.mp4 --output_dir /path-to-checkpoint/weights_WTours/DoRA/venice_8frames/ --optimizer adamw --use_bn_in_head False --out_dim 65536 --batch_size_per_gpu 6 --local_crops_number 6 --epochs 100 --num_workers 10 --lr 0.0005 --min_lr 0.00001 --norm_last_layer False --warmup_teacher_temp_epochs 30 --weight_decay 0.04 --weight_decay_end 0.4 --frame_per_clip 8 --step_between_clips 60
Pour les GPU A100 avec 80 Go de RAM, nous vous recommandons d'utiliser le script de pré-entraînement suivant (la seule différence réside dans batch_size_per_gpu) :
python -m torch.distributed.launch --nproc_per_node=8 main.py --arch vit_small --data_path /path-to-video/venice.mp4 --output_dir /path-to-checkpoint/weights_WTours/DoRA/venice_8frames/ --optimizer adamw --use_bn_in_head False --out_dim 65536 --batch_size_per_gpu 16 --local_crops_number 6 --epochs 100 --num_workers 10 --lr 0.0005 --min_lr 0.00001 --norm_last_layer False --warmup_teacher_temp_epochs 30 --weight_decay 0.04 --weight_decay_end 0.4 --frame_per_clip 8 --step_between_clips 60
Vous pouvez télécharger les poids du backbone pré-entraîné utilisé pour les tâches en aval. Tous les backbones sont des modèles ViT-S/16
.
Époques | Modèle | Ensemble de données pré-entraîné | Télécharger | ||||
---|---|---|---|---|---|---|---|
100 | DINOSAURE | WT-Venise | colonne vertébrale | ||||
100 | DoRA | WT-Venise | colonne vertébrale | ||||
300 | DoRA | WT-Venise | colonne vertébrale | ||||
100 | DoRA | WT-tout | colonne vertébrale |
Pour le sondage linéaire sur ImageNet-1K
python -m torch.distributed.launch --nproc_per_node=4 eval_linear.py --batch_size_per_gpu 512 --n_last_blocks 4 --avgpool_patchtokens 0 --arch vit_small --lr 0.01 --pretrained_weights /path-to-checkpoint/venice/checkpoint.pth --data_path /dataset/imagenet/ --output_dir /path-to-output-dir/venice/LP/
Pour l'évaluation KNN sur ImageNet-1K
python3 -m torch.distributed.launch --nproc_per_node=4 eval_knn.py --arch vit_small --checkpoint_key teacher --data_path /dataset/imagenet/ --pretrained_weights /path-to-checkpoint/venice/checkpoint.pth
Veuillez suivre les scripts d'évaluation d'iBOT
(faire)
Si vous trouvez ce référentiel utile, pensez à donner une étoile et une citation :
@inproceedings{venkataramanan2024imagenet, title={Is ImageNet worth 1 video? Learning strong image encoders from 1 long unlabelled video}, author={Venkataramanan, Shashanka and Rizve, Mamshad Nayeem and Carreira, Jo{~a}o and Asano, Yuki M and Avrithis, Yannis}, booktitle={International Conference on Learning Representations}, year={2024} }