Código para o artigo CVPR 2023 "Linguagem em uma garrafa: modelo de copo de idioma guiado por gargalos para classificação de imagem interpretável"
Executamos nossos experimentos usando o Python 3.9.13. Você pode instalar os pacotes necessários usando:
conda create --name labo python=3.9.13
conda activate labo
pip install -r requirements.txt
Você precisa modificar o código -fonte do damasco para executar a otimização submodular. Veja detalhes aqui.
cfg/ salva os arquivos de configuração de todas as experiências, incluindo sonda linear ( cfg/linear_probe ) e LABO ( cfg/asso_opt ). Você pode modificar os arquivos de configuração para alterar os argumentos do sistema.
datasets/ armazena os dados específicos do conjunto de dados, incluindo images , splits e concepts . Verifique datasets/DATASET.md para obter detalhes.
Nota : as imagens de cada conjunto de dados não são fornecidas neste repositório; Você precisa baixá -los e armazená -los na pasta correspondente: datasets/{dataset name}/images/ . Verifique datasets/DATASET.md para obter instruções sobre o download de todos os conjuntos de dados.
exp/ são os diretórios de trabalho dos experimentos. Os arquivos de configuração e os pontos de verificação do modelo serão salvos nesta pasta.
models/ salva os modelos:
models/linear_prob/linear_prob.pymodels/asso_opt/asso_opt.pymodels/select_concept/select_algo.py output/ : O desempenho será salvo em arquivos .txt armazenados em output/ .
Outros arquivos:
data.py e data_lp.py são os dados do DATALOADERS para o LABO e a sonda linear, respectivamente.main.py é a interface para executar todas as experiências, e utils.py contém as funções de pré -processo e extração de recursos.linear probe.sh é o arquivo bash para executar a sonda linear. labo_train.sh e um labo_test.sh são o arquivo Bash para treinar e testar o Labo. Para obter o desempenho da sonda linear, basta executar:
sh linear_probe.sh {DATASET} {SHOTS} {CLIP SIZE}
Por exemplo, para o conjunto de dados de flores 1-shot com codificador de imagem Vit-L/14, o comando é:
sh linear_probe.sh flower 1 ViT-L/14
O código codificará automaticamente as imagens e executará uma pesquisa de hiperparâmetro na regularização de L2 usando o conjunto de dev. O melhor desempenho de validação e teste será salvo no output/linear_probe/{DATASET}.txt .
Para treinar o labo, execute o seguinte comando:
sh labo_train.sh {SHOTS} {DATASET}
Os registros de treinamento serão enviados para o wandb . Pode ser necessário configurar sua conta wandb localmente. Depois de atingir as épocas máximas, o ponto de verificação com a maior precisão de validação e o arquivo de configuração correspondente será salvo para exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/ .
Para obter o desempenho do teste, use o ponto de verificação do modelo e as configurações correspondentes salvas em exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/ e run:
sh labo_test.sh {CONFIG_PATH} {CHECKPOINT_PATH}
A precisão do teste será impressa na output/asso_opt/{DATASET}.txt .
Cite nosso papel se achar útil!
@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}
}