Dieses Repo enthält die offizielle Umsetzung des ICLR 2024-Papiers „Ist ImageNet 1 Video wert? Starke Bild-Encoder aus 1 langen, unbeschrifteten Video lernen“
[ arXiv
], [ paper
], [ dataset
], [ Project Page
]
Unser Ziel ist es, robuste Darstellungen zu erstellen, indem wir die umfangreichen Informationen in Videobildern nutzen. Standard-SSL-Frameworks wie SimCLR, DINo usw. gehen oft von Korrespondenzen zwischen verschiedenen Ansichten aus. Dies gilt unabhängig davon, ob dichte oder globale Darstellungen durch Pooling, z. B. iBOT, verwendet werden. Während es relativ einfach ist, Korrespondenzen in Bildern herzustellen, wird es schwieriger, wenn es um zeitliche Deformationen geht, die eine Form der Objektverfolgung erfordern. Bei Videos mit großem Sichtfeld oder Ego-Motion wird es noch schwieriger, Entsprechungen zu erhalten.
Wir führen DoRA ein, basierend auf Multi-Object Discovery und TRACking. Es nutzt die Aufmerksamkeit des [CLS]-Tokens verschiedener Köpfe in einem Vision-Transformator, um mehrere Objekte innerhalb eines bestimmten Frames über zeitliche Sequenzen hinweg zu identifizieren und konsistent zu verfolgen. Auf diese wird dann ein Lehrer-Schüler-Destillationsverlust angewendet. Wichtig ist, dass wir keinen handelsüblichen Objekttracker oder optischen Flussnetzwerk verwenden. Dadurch bleibt unsere Pipeline einfach und erfordert keine zusätzlichen Daten oder Schulungen. Es stellt außerdem sicher, dass die erlernte Darstellung robust ist.
Die vollständige Liste der WTour-Videos ist im HuggingFace-Datensatz verfügbar, einschließlich der YouTube-Links und detaillierten Anweisungen zum Herunterladen mithilfe der erforderlichen Skripte.
Falls die Links defekt sind, können Sie die Videos direkt vom Walking Tour Dataset herunterladen
Um die DSGVO einzuhalten, versuchen wir außerdem, alle im Video vorkommenden Gesichter und Nummernschilder mithilfe von Deface unkenntlich zu machen
Gehen Sie dazu für alle Videos im WTour-Datensatz wie folgt vor:
python3 -m pip install deface
Führen Sie dann Deface mit dem Bash-Skript für alle Videos aus:
chmod a+x gdpr_blur_faces.sh ./gdpr_blur_faces.sh
Die Anforderungen werden einfach über Anaconda installiert. Hier erstellen wir eine Conda-Umgebung namens Dora und installieren alle notwendigen Bibliotheken
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
Wenn Sie V100-GPUs mit 32 GB RAM verwenden, empfehlen wir die Verwendung des folgenden Skripts zum Vortraining von 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
Für A100-GPUs mit 80 GB RAM empfehlen wir die Verwendung des folgenden Vortrainingsskripts (der einzige Unterschied besteht in „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
Sie können die Gewichte des vorab trainierten Backbones herunterladen, das für nachgelagerte Aufgaben verwendet wird. Alle Backbones sind ViT-S/16
Modelle.
Epochen | Modell | Vorab trainierter Datensatz | Herunterladen | ||||
---|---|---|---|---|---|---|---|
100 | DINO | WT-Venedig | Rückgrat | ||||
100 | DoRA | WT-Venedig | Rückgrat | ||||
300 | DoRA | WT-Venedig | Rückgrat | ||||
100 | DoRA | WT-alles | Rückgrat |
Für lineare Sondierung auf 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/
Für die KNN-Auswertung auf 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
Bitte folgen Sie den Evaluierungsskripten von iBOT
(todo)
Wenn Sie dieses Repository nützlich finden, denken Sie bitte darüber nach, einen Stern zu vergeben und zu zitieren:
@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} }