Repository for the CVPR-2023 paper : StyleAdv: Meta Style Adversarial Training for Cross-Domain Few-Shot Learning
[Paper], [Presentation Video on Bilibili], [Presentation Video on Youtube]
# conda env
conda create --name py36 python=3.6
conda activate py36
conda install pytorch torchvision -c pytorch
conda install pandas
pip3 install scipy>=1.3.2
pip3 install tensorboardX>=1.4
pip3 install h5py>=2.9.0
pip3 install tensorboard
pip3 install timm
pip3 install opencv-python==4.5.5.62
pip3 install ml-collections
# code
git clone https://github.com/lovelyqian/StyleAdv-CDFSL
cd StyleAdv-CDFSL
We use the mini-Imagenet as the single source dataset, and use cub, cars, places, plantae, ChestX, ISIC, EuroSAT, and CropDisease as novel target datasets.
For the mini-Imagenet, cub, cars, places, and plantae, we refer to the FWT repo.
For the ChestX, ISIC, EuroSAT, and CropDisease, we refer to the BS-CDFSL repo.
If you can't find the Plantae dataset, we provide at here, please cite its paper.
Our method aims at improving the generalization ability of models, we apply the style attack and adversarial training during the meta-train stage. Once the model is meta-trained, it can be used for inference on different novel target datasets directly.
Taking 5-way 1-shot as an example, the meta-train can be done as,
python3 metatrain_StyleAdv_RN.py --dataset miniImagenet --name exp-name --train_aug --warmup baseline --n_shot 1 --stop_epoch 200
-
We integrate the testing into the training, and the testing results can be found on
output/checkpoints/exp-name/acc*.txt
; -
We set a probability
$p_{skip}$
for randomly skipping the attack, the value of it can be modified inmethods/tool_func.py
; -
We also provide our meta-trained ckps in
output/checkpoints/StyleAdv-RN-1shot
andoutput/checkpoints/StyleAdv-RN-5shot
;
Though not necessary, for better performance, you may further fine-tune the meta-trained models on the target sets.
Taking 5-way 1-shot as an example, the fine-tuning on cars can be done as,
python3 finetune_StyleAdv_RN.py --testset cars --name exp-FT --train_aug --n_shot 1 --finetune_epoch 10 --resume_dir StyleAdv-RN-1shot --resume_epoch -1
-
The finetuning is very sensitive to the
fintune_epoch
andfinetune_lr
; -
The value of
finetune_lr
can be modified infinetune_StyleAdv_RN.py
:(sorry for not organizing the code very well; -
As attached in the supplementary materials of paper, we set the
finetune_epoch
andfinetune_lr
as:Backbone Task Optimizer finetune_epoch finetune_lr RN10 5-way 5-shot Adam 50 {0,0.001} RN10 5-way 1-shot Adam 10 {0,0.005}
coming soon
If you find our paper or this code useful for your research, please considering cite us (●°u°●)」:
@inproceedings{fu2023styleadv,
title={StyleAdv: Meta Style Adversarial Training for Cross-Domain Few-Shot Learning},
author={Fu, Yuqian and Xie, Yu and Fu, Yanwei and Jiang, Yu-Gang},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={24575--24584},
year={2023}
}
Our code is built upon the implementation of FWT, ATA, and PMF. Thanks for their work.