CVPR 2023纸的代码“瓶中的语言:语言模型指导概念瓶颈用于可解释的图像分类”
我们使用Python 3.9.13进行实验。您可以使用以下方式安装所需的软件包:
conda create --name labo python=3.9.13
conda activate labo
pip install -r requirements.txt
您需要修改杏子的源代码以运行子模块优化。请参阅此处的详细信息。
cfg/保存所有实验的配置文件,包括线性探针( cfg/linear_probe )和LABO( cfg/asso_opt )。您可以修改配置文件以更改系统参数。
datasets/存储数据集特定的数据,包括images , splits和concepts 。请检查datasets/DATASET.md以获取详细信息。
注意:此存储库中未提供每个数据集的图像;您需要下载它们并存储在相应的文件夹中: datasets/{dataset name}/images/ 。检查datasets/DATASET.md以获取有关下载所有数据集的说明。
exp/是实验的工作目录。配置文件和模型检查点将保存在此文件夹中。
models/保存模型:
models/linear_prob/linear_prob.pymodels/asso_opt/asso_opt.pymodels/select_concept/select_algo.py output/ :性能将保存到存储在output/中的.txt文件中。
其他文件:
data.py和data_lp.py分别是Labo和线性探测器的数据加载器。main.py是运行所有实验的接口,并且utils.py包含预处理和特征提取功能。linear probe.sh是运行线性探针的bash文件。 labo_train.sh和labo_test.sh是训练和测试labo的bash文件。 要获得线性探测性能,只需运行:
sh linear_probe.sh {DATASET} {SHOTS} {CLIP SIZE}
例如,对于使用VIT-L/14图像编码器的Flower DataSet 1-shot,该命令是:
sh linear_probe.sh flower 1 ViT-L/14
代码将自动编码图像,并使用DEV集在L2正则化上运行超参数搜索。最佳验证和测试性能将保存在output/linear_probe/{DATASET}.txt中。
要训练Labo,请运行以下命令:
sh labo_train.sh {SHOTS} {DATASET}
培训日志将上传到wandb 。您可能需要在本地设置wandb帐户。达到最大时期后,具有最高验证精度的检查点将保存到exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/ 。
要获得测试性能,请使用保存在exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/并运行:
sh labo_test.sh {CONFIG_PATH} {CHECKPOINT_PATH}
测试精度将打印到output/asso_opt/{DATASET}.txt 。
如果您觉得有用,请引用我们的论文!
@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}
}