Skip to content

Latest commit

 

History

History
96 lines (69 loc) · 12 KB

README.md

File metadata and controls

96 lines (69 loc) · 12 KB

MoCoV3

An Empirical Study of Training Self-Supervised Vision Transformers

Abstract

This paper does not describe a novel method. Instead, it studies a straightforward, incremental, yet must-know baseline given the recent progress in computer vision: self-supervised learning for Vision Transformers (ViT). While the training recipes for standard convolutional networks have been highly mature and robust, the recipes for ViT are yet to be built, especially in the self-supervised scenarios where training becomes more challenging. In this work, we go back to basics and investigate the effects of several fundamental components for training self-supervised ViT. We observe that instability is a major issue that degrades accuracy, and it can be hidden by apparently good results. We reveal that these results are indeed partial failure, and they can be improved when training is made more stable. We benchmark ViT results in MoCo v3 and several other self-supervised frameworks, with ablations in various aspects. We discuss the currently positive evidence as well as challenges and open questions. We hope that this work will provide useful data points and experience for future research.

How to use it?

Predict image

from mmpretrain import inference_model

predict = inference_model('resnet50_mocov3-100e-pre_8xb128-linear-coslr-90e_in1k', 'demo/bird.JPEG')
print(predict['pred_class'])
print(predict['pred_score'])

Use the model

import torch
from mmpretrain import get_model

model = get_model('mocov3_resnet50_8xb512-amp-coslr-100e_in1k', pretrained=True)
inputs = torch.rand(1, 3, 224, 224)
out = model(inputs)
print(type(out))
# To extract features.
feats = model.extract_feat(inputs)
print(type(feats))

Train/Test Command

Prepare your dataset according to the docs.

Train:

python tools/train.py configs/mocov3/mocov3_resnet50_8xb512-amp-coslr-100e_in1k.py

Test:

python tools/test.py configs/mocov3/benchmarks/resnet50_8xb128-linear-coslr-90e_in1k.py https://download.openmmlab.com/mmselfsup/1.x/mocov3/mocov3_resnet50_8xb512-amp-coslr-100e_in1k/resnet50_linear-8xb128-coslr-90e_in1k/resnet50_linear-8xb128-coslr-90e_in1k_20220927-8f7d937e.pth

Models and results

Pretrained models

Model Params (M) Flops (G) Config Download
mocov3_resnet50_8xb512-amp-coslr-100e_in1k 68.01 4.11 config model | log
mocov3_resnet50_8xb512-amp-coslr-300e_in1k 68.01 4.11 config model | log
mocov3_resnet50_8xb512-amp-coslr-800e_in1k 68.01 4.11 config model | log
mocov3_vit-small-p16_16xb256-amp-coslr-300e_in1k 84.27 4.61 config model | log
mocov3_vit-base-p16_16xb256-amp-coslr-300e_in1k 215.68 17.58 config model | log
mocov3_vit-large-p16_64xb64-amp-coslr-300e_in1k 652.78 61.60 config model | log

Image Classification on ImageNet-1k

Model Pretrain Params (M) Flops (G) Top-1 (%) Config Download
resnet50_mocov3-100e-pre_8xb128-linear-coslr-90e_in1k MOCOV3 100-Epochs 25.56 4.11 69.60 config model | log
resnet50_mocov3-300e-pre_8xb128-linear-coslr-90e_in1k MOCOV3 300-Epochs 25.56 4.11 72.80 config model | log
resnet50_mocov3-800e-pre_8xb128-linear-coslr-90e_in1k MOCOV3 800-Epochs 25.56 4.11 74.40 config model | log
vit-small-p16_mocov3-pre_8xb128-linear-coslr-90e_in1k MOCOV3 22.05 4.61 73.60 config model | log
vit-base-p16_mocov3-pre_8xb64-coslr-150e_in1k MOCOV3 86.57 17.58 83.00 config model | log
vit-base-p16_mocov3-pre_8xb128-linear-coslr-90e_in1k MOCOV3 86.57 17.58 76.90 config model | log
vit-large-p16_mocov3-pre_8xb64-coslr-100e_in1k MOCOV3 304.33 61.60 83.70 config model | log

Citation

@InProceedings{Chen_2021_ICCV,
    title     = {An Empirical Study of Training Self-Supervised Vision Transformers},
    author    = {Chen, Xinlei and Xie, Saining and He, Kaiming},
    booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
    year      = {2021}
}