Este repositorio contiene la implementación oficial del documento ICLR 2024 "¿Vale ImageNet 1 video? Aprender codificadores de imágenes potentes a partir de 1 video largo sin etiquetar"
[ arXiv
], [ paper
], [ dataset
], [ Project Page
]
Nuestro objetivo es crear representaciones sólidas aprovechando la rica información de los fotogramas de vídeo. Los marcos SSL estándar como SimCLR, DINo, etc. a menudo asumen correspondencias entre diferentes vistas. Esto es cierto ya sea que se utilicen representaciones densas o globales mediante agrupación, por ejemplo, iBOT. Si bien es relativamente sencillo establecer correspondencias en imágenes, resulta más desafiante cuando se trata de deformaciones temporales, que requieren alguna forma de seguimiento de objetos. En vídeos con un gran campo de visión o movimiento del ego, obtener correspondencias se vuelve aún más difícil.
Presentamos DoRA, basado en el descubrimiento y el seguimiento de múltiples objetos. Aprovecha la atención del token [CLS] de distintas cabezas en un transformador de visión para identificar y rastrear constantemente múltiples objetos dentro de un marco determinado a través de secuencias temporales. Sobre estos se aplica luego una pérdida por destilación profesor-alumno. Es importante destacar que no utilizamos ningún rastreador de objetos disponible en el mercado ni ninguna red de flujo óptico. Esto mantiene nuestro proceso simple y no requiere datos ni capacitación adicionales. También garantiza que la representación aprendida sea sólida.
La lista completa de videos de WTour está disponible en HuggingFace Dataset, que incluye los enlaces de YouTube y las instrucciones detalladas sobre cómo descargarlos utilizando los scripts necesarios.
En caso de que los enlaces estén rotos, puede descargar los videos directamente desde Walking Tour Dataset
Para cumplir con el RGPD, también intentamos difuminar todas las caras y matrículas que aparecen en el vídeo usando Deface.
Para hacer esto para todos los videos en el conjunto de datos de WTour:
python3 -m pip install deface
Luego ejecuta Deface en todos los videos usando el script bash:
chmod a+x gdpr_blur_faces.sh ./gdpr_blur_faces.sh
Los requisitos se instalan fácilmente a través de Anaconda. Aquí creamos un entorno conda llamado dora e instalamos todas las bibliotecas necesarias.
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 está utilizando GPU V100 con 32 GB de RAM, le recomendamos utilizar el siguiente script para preparar previamente 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
Para GPU A100 con 80 GB de RAM, recomendamos utilizar el siguiente script de preentrenamiento (la única diferencia está en el tamaño de lote por 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
Puede descargar los pesos de la red troncal previamente entrenada que se utiliza para tareas posteriores. Todas las redes troncales son modelos ViT-S/16
.
Épocas | Modelo | Conjunto de datos previamente entrenado | Descargar | ||||
---|---|---|---|---|---|---|---|
100 | dinosaurio | WT-Venecia | columna vertebral | ||||
100 | Dora | WT-Venecia | columna vertebral | ||||
300 | Dora | WT-Venecia | columna vertebral | ||||
100 | Dora | WT-todos | columna vertebral |
Para sondeo lineal en 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/
Para evaluación KNN en 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
Siga los guiones de evaluación de iBOT
(hacer)
Si encuentra útil este repositorio, considere otorgar una estrella y una cita:
@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} }