Code pour le papier CVPR 2023 "Langue dans une bouteille: le modèle de langue Guidé des goulots d'étranglement pour la classification des images interprétables"
Nous exécutons nos expériences en utilisant Python 3.9.13. Vous pouvez installer les packages requis en utilisant:
conda create --name labo python=3.9.13
conda activate labo
pip install -r requirements.txt
Vous devez modifier le code source de l'abricot pour exécuter l'optimisation sous-modulaire. Voir les détails ici.
cfg/ enregistre les fichiers de configuration pour toutes les expériences, y compris la sonde linéaire ( cfg/linear_probe ) et Labo ( cfg/asso_opt ). Vous pouvez modifier les fichiers de configuration pour modifier les arguments système.
datasets/ stocke les données spécifiques à l'ensemble de données, y compris images , splits et concepts . Veuillez consulter datasets/DATASET.md pour plus de détails.
Remarque : les images de chaque ensemble de données ne sont pas fournies dans ce dépôt; Vous devez les télécharger et les stocker dans le dossier correspondant: datasets/{dataset name}/images/ . Vérifiez datasets/DATASET.md pour les instructions sur le téléchargement de tous les ensembles de données.
exp/ est les répertoires de travail des expériences. Les fichiers de configuration et les points de contrôle du modèle seront enregistrés dans ce dossier.
models/ enregistre les modèles:
models/linear_prob/linear_prob.pymodels/asso_opt/asso_opt.pymodels/select_concept/select_algo.py output/ : Les performances seront enregistrées dans des fichiers .txt stockés dans output/ .
Autres fichiers:
data.py et data_lp.py sont les dataloaders de LABO et de sonde linéaire, respectivement.main.py est l'interface pour exécuter toutes les expériences, et utils.py contient les fonctions de prétraitement et d'extraction de caractéristiques.linear probe.sh est le fichier bash pour exécuter la sonde linéaire. labo_train.sh et un labo_test.sh sont le fichier bash pour former et tester Labo. Pour obtenir les performances de la sonde linéaire, il suffit d'exécuter:
sh linear_probe.sh {DATASET} {SHOTS} {CLIP SIZE}
Par exemple, pour l'ensemble de données de fleurs 1-shot avec Encodeur d'image Vit-L / 14, la commande est:
sh linear_probe.sh flower 1 ViT-L/14
Le code codera automatiquement les images et exécutera une recherche hyperparamètre sur la régularisation L2 à l'aide de l'ensemble de développement. Les meilleures performances de validation et de test seront enregistrées dans la output/linear_probe/{DATASET}.txt .
Pour entraîner le Labo, exécutez la commande suivante:
sh labo_train.sh {SHOTS} {DATASET}
Les journaux de formation seront téléchargés sur le wandb . Vous devrez peut-être configurer votre compte wandb localement. Après avoir atteint les époques maximales, le point de contrôle avec la précision de validation la plus élevée et le fichier de configuration correspondant seront enregistrés sur exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/ .
Pour obtenir les performances du test, utilisez le point de contrôle du modèle et les configurations correspondantes enregistrées dans exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/ et run:
sh labo_test.sh {CONFIG_PATH} {CHECKPOINT_PATH}
La précision de test sera imprimée pour output/asso_opt/{DATASET}.txt .
Veuillez citer notre papier si vous le trouvez utile!
@inproceedings{yang2023language,
title={Language in a bottle: Language model guided concept bottlenecks for interpretable image classification},
author={Yang, Yue and Panagopoulou, Artemis and Zhou, Shenghao and Jin, Daniel and Callison-Burch, Chris and Yatskar, Mark},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={19187--19197},
year={2023}
}