Original Pytorch implementation of "Variational Adversarial Active Learning" (ICCV 2019 Oral). Link to the paper.
Samarth Sinha*, Sayna Ebrahimi*, Trevor Darrell, Internation Conference on Computer Vision (ICCV 2019)
First two authors contributed equally
To run the code using different sampling methods using the 2d dataset (i.e. ring dataset), run the following commmands:
python main.py --dataset ring --cuda --train_iterations 800 --batch_size 16 --sampling_method random
python main.py --dataset ring --cuda --train_iterations 800 --batch_size 16 --sampling_method uncertainty
python main.py --dataset ring --cuda --train_iterations 800 --batch_size 16 --sampling_method adversary
Active learning aims to develop label-efficient algorithms by sampling the most representative queries to be labeled by an oracle. We describe a pool-based semi-supervised active learning algorithm that implicitly learns this sampling mechanism in an adversarial manner. Our method learns a latent space using a variational autoencoder (VAE) and an adversarial network trained to discriminate between unlabeled and labeled data. The mini-max game between the VAE and the adversarial network is played such that while the VAE tries to trick the adversarial network into predicting that all data points are from the labeled pool, the adversarial network learns how to discriminate between dissimilarities in the latent space. We extensively evaluate our method on various image classification and semantic segmentation benchmark datasets and establish a new state of the art on CIFAR10/100, Caltech-256, ImageNet, Cityscapes, and BDD100K. Our results demonstrate that our adversarial approach learns an effective low dimensional latent space in large-scale settings and provides for a computationally efficient sampling method.
If using this code, parts of it, or developments from it, please cite our paper:
@article{sinha2019variational,
title={Variational Adversarial Active Learning},
author={Sinha, Samarth and Ebrahimi, Sayna and Darrell, Trevor},
journal={arXiv preprint arXiv:1904.00370},
year={2019}
}
- Linux or macOS
- Python 3.5/3.6
- CPU compatible but NVIDIA GPU + CUDA CuDNN is highly recommended.
The required Python3 packages can be installed using
pip3 install -r requirements.txt
The code can simply be run using
python3 main.py
When using the model with different datasets or different variants, the main hyperparameters to tune are
--adversary_param --beta --num_vae_steps and --num_adv_steps
The results will be saved in results/accuracies.log
The entire codebase is under BSD 2-Clause License.
If there are any questions or concerns feel free to send a message at [email protected]