Código para el documento CVPR 2023 "Lenguaje en una botella: cuellos de botella de concepto guiado del modelo de idioma para la clasificación de imágenes interpretable"
Ejecutamos nuestros experimentos usando Python 3.9.13. Puede instalar los paquetes requeridos usando:
conda create --name labo python=3.9.13
conda activate labo
pip install -r requirements.txt
Debe modificar el código fuente de Apricot para ejecutar la optimización submodular. Vea los detalles aquí.
cfg/ Guarda los archivos de configuración para todos los experimentos, incluida la sonda lineal ( cfg/linear_probe ) y Labo ( cfg/asso_opt ). Puede modificar los archivos de configuración para cambiar los argumentos del sistema.
datasets/ almacena los datos específicos del conjunto de datos, incluidas images , splits y concepts . Consulte datasets/DATASET.md para más detalles.
Nota : Las imágenes de cada conjunto de datos no se proporcionan en este repositorio; Debe descargarlos y almacenar en la carpeta correspondiente: datasets/{dataset name}/images/ . Verifique datasets/DATASET.md para obtener instrucciones sobre la descarga de todos los conjuntos de datos.
exp/ es los directorios de trabajo de los experimentos. Los archivos de configuración y los puntos de control del modelo se guardarán en esta carpeta.
models/ guarda los modelos:
models/linear_prob/linear_prob.pymodels/asso_opt/asso_opt.pymodels/select_concept/select_algo.py output/ : El rendimiento se guardará en archivos .txt almacenados en output/ .
Otros archivos:
data.py y data_lp.py son los dataloaders para Labo y la sonda lineal, respectivamente.main.py es la interfaz para ejecutar todos los experimentos, y utils.py contiene las funciones de extracción de preprocesos y características.linear probe.sh es el archivo bash para ejecutar la sonda lineal. labo_train.sh y un labo_test.sh son el archivo bash para entrenar y probar Labo. Para obtener el rendimiento de la sonda lineal, simplemente ejecute:
sh linear_probe.sh {DATASET} {SHOTS} {CLIP SIZE}
Por ejemplo, para el conjunto de datos de flores 1 con el codificador de imagen VIT-L/14, el comando es:
sh linear_probe.sh flower 1 ViT-L/14
El código codificará automáticamente las imágenes y ejecutará una búsqueda de hiperparameter en la regularización L2 utilizando el conjunto de desarrollo. El mejor rendimiento de validación y prueba se guardará en la output/linear_probe/{DATASET}.txt .
Para entrenar el Labo, ejecute el siguiente comando:
sh labo_train.sh {SHOTS} {DATASET}
Los registros de entrenamiento se subirán al wandb . Es posible que deba configurar su cuenta wandb localmente. Después de alcanzar las épocas máximas, el punto de control con la precisión de validación más alta y el archivo de configuración correspondiente se guardará en exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/ .
Para obtener el rendimiento de la prueba, use el punto de control del modelo y las configuraciones correspondientes guardadas en exp/asso_opt/{DATASET}/{DATASET}_{SHOT}shot_fac/ y run:
sh labo_test.sh {CONFIG_PATH} {CHECKPOINT_PATH}
La precisión de la prueba se imprimirá en output/asso_opt/{DATASET}.txt .
¡Por favor cita nuestro artículo si lo encuentra ú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}
}