← Open Source
salesforce

PCL

PyTorch code for "Prototypical Contrastive Learning of Unsupervised Representations"

Model DevelopmentArchitecturePython
Open on GitHub
Momentum
+0stars in 24 hours0.0%
606
Stars
81
Forks
+0
This week
3
Contributors
Created 2020-07-28 · Updated 2026-09-08 · #15853 today
Top developers
README

Prototypical Contrastive Learning of Unsupervised Representations (Salesforce Research)

This is a PyTorch implementation of the PCL paper:

@inproceedings{PCL, title={Prototypical Contrastive Learning of Unsupervised Representations}, author={Junnan Li and Pan Zhou and Caiming Xiong and Steven C.H. Hoi}, booktitle={ICLR}, year={2021} }

Requirements:

  • ImageNet dataset
  • Python ≥ 3.6
  • PyTorch ≥ 1.4
  • faiss-gpu: pip install faiss-gpu
  • pip install tqdm

Unsupervised Training:

This implementation only supports multi-gpu, DistributedDataParallel training, which is faster and simpler; single-gpu or DataParallel training is not supported.

To perform unsupervised training of a ResNet-50 model on ImageNet using a 4-gpu or 8-gpu machine, run: python main_pcl.py \ -a resnet50 \ --lr 0.03
--batch-size 256
--temperature 0.2
--mlp --aug-plus --cos (only activated for PCL v2) \ --dist-url 'tcp://localhost:10001' --multiprocessing-distributed --world-size 1 --rank 0
--exp-dir experiment_pcl [Imagenet dataset folder]

Download Pre-trained Models

PCL v1 PCL v2

Linear SVM Evaluation on VOC

To train a linear SVM classifier on VOC dataset, using frozen representations from a pre-trained model, run: python eval_svm_voc.py --pretrained [your pretrained model]
-a resnet50 \ --low-shot (only for low-shot evaluation, otherwise the entire dataset is used)
[VOC2007 dataset folder]

Linear SVM classification result on VOC, using ResNet-50 pretrained with PCL for 200 epochs:

Model k=1 k=2 k=4 k=8 k=16 Full
PCL v1 46.9 56.4 62.8 70.2 74.3 82.3
PCL v2 47.9 59.6 66.2 74.5 78.3 85.4

k is the number of training samples per class.

Linear Classifier Evaluation on ImageNet

Requirement: pip install tensorboard_logger
To train a logistic regression classifier on ImageNet, using frozen representations from a pre-trained model, run: python eval_cls_imagenet.py --pretrained [your pretrained model]
-a resnet50 \ --lr 5
--batch-size 256
--id ImageNet_linear \ --dist-url 'tcp://localhost:10001' --multiprocessing-distributed --world-size 1 --rank 0
[Imagenet dataset folder]

Linear classification result on ImageNet, using ResNet-50 pretrained with PCL for 200 epochs:

PCL v1 PCL v2
61.5 67.6