このリポジトリには、ICLR 2024 論文「ImageNet には 1 ビデオの価値がありますか? 1 つの長いラベルのないビデオから強力な画像エンコーダを学習する」の公式実装が含まれています。
[ arXiv
]、[ paper
]、[ dataset
]、[ Project Page
]
私たちの目標は、ビデオ フレーム内の豊富な情報を活用して堅牢な表現を構築することです。 SimCLR、DINo などの標準 SSL フレームワークは、多くの場合、異なるビュー間の対応を想定しています。これは、密な表現を使用するか、iBOT などのプールによるグローバル表現を使用するかにかかわらず当てはまります。画像内の対応関係を確立するのは比較的簡単ですが、時間的な変形を扱う場合はより困難になり、何らかの形式のオブジェクト追跡が必要になります。視野の広いビデオやエゴモーションの場合、対応関係を取得することはさらに困難になります。
マルチオブジェクトのディスカバリーと tRAcking に基づいた DoRA を紹介します。これは、ビジョン トランスフォーマー内の個別の頭部の [CLS] トークンからの注意を利用して、時間的シーケンス全体にわたる特定のフレーム内の複数のオブジェクトを識別し、一貫して追跡します。これらに対して、教師と生徒の蒸留損失が適用されます。重要なのは、既製のオブジェクト トラッカーやオプティカル フロー ネットワークを使用していないことです。これにより、パイプラインがシンプルになり、追加のデータやトレーニングは必要なくなります。また、学習された表現が堅牢であることも保証されます。
WTour ビデオの完全なリストは、HuggingFace Dataset で入手できます。これには、必要なスクリプトを使用してビデオをダウンロードする方法の詳細な手順と YouTube リンクが含まれています。
リンクが壊れている場合は、ウォーキング ツアー データセットからビデオを直接ダウンロードできます。
GDPR に準拠するために、Deface を使用してビデオに登場するすべての顔とナンバー プレートをぼかそうとします。
WTour データセット内のすべてのビデオに対してこれを行うには:
python3 -m pip install deface
次に、bash スクリプトを使用してすべてのビデオに対して Deface を実行します。
chmod a+x gdpr_blur_faces.sh ./gdpr_blur_faces.sh
要件は Anaconda 経由で簡単にインストールできます。ここでは dora という conda 環境を作成し、必要なライブラリをすべてインストールします。
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
32GB RAM を備えた V100 GPU を使用している場合は、次のスクリプトを使用して 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
80GB RAM を搭載した A100 GPU の場合は、次の事前トレーニング スクリプトを使用することをお勧めします (違いは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
ダウンストリーム タスクに使用される事前トレーニングされたバックボーンの重みをダウンロードできます。すべてのバックボーンはViT-S/16
モデルです。
エポック | モデル | 事前トレーニングされたデータセット | ダウンロード | ||||
---|---|---|---|---|---|---|---|
100 | ディノ | WT-ベニス | バックボーン | ||||
100 | ドラ | WT-ベニス | バックボーン | ||||
300 | ドラ | WT-ベニス | バックボーン | ||||
100 | ドラ | WT-all | バックボーン |
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/
ImageNet-1K での KNN 評価用
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
iBOT の評価スクリプトに従ってください。
(トド)
このリポジトリが役立つと思われる場合は、スターと引用を付けることを検討してください。
@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} }