รหัสสำหรับ CVPR 2023 Paper "ภาษาในขวด: รูปแบบภาษาไกด์นำเสนอปัญหาคอขวดสำหรับการจำแนกภาพที่ตีความได้"
เราทำการทดลองโดยใช้ Python 3.9.13 คุณสามารถติดตั้งแพ็คเกจที่ต้องการได้โดยใช้:
conda create --name labo python=3.9.13
conda activate labo
pip install -r requirements.txt
คุณต้องปรับเปลี่ยนซอร์สโค้ดของแอปริคอทเพื่อเรียกใช้การเพิ่มประสิทธิภาพ submodular ดูรายละเอียดที่นี่
cfg/ บันทึกไฟล์ config สำหรับการทดลองทั้งหมดรวมถึงโพรบเชิงเส้น ( cfg/linear_probe ) และ Labo ( cfg/asso_opt ) คุณสามารถแก้ไขไฟล์กำหนดค่าเพื่อเปลี่ยนอาร์กิวเมนต์ของระบบ
datasets/ จัดเก็บข้อมูลเฉพาะชุดข้อมูลรวมถึง images splits และ concepts โปรดตรวจสอบ datasets/DATASET.md สำหรับรายละเอียด
หมายเหตุ : ภาพของชุดข้อมูลแต่ละชุดไม่ได้ให้ไว้ใน repo นี้ คุณต้องดาวน์โหลดและจัดเก็บในโฟลเดอร์ที่เกี่ยวข้อง: 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/ : ประสิทธิภาพจะถูกบันทึกลงในไฟล์ .txt ที่เก็บไว้ใน output/
ไฟล์อื่น ๆ :
data.py และ data_lp.py เป็น dataloaders สำหรับ labo และ probe เชิงเส้นตามลำดับmain.py เป็นอินเทอร์เฟซในการเรียกใช้การทดลองทั้งหมดและ utils.py มีฟังก์ชั่นการประมวลผลล่วงหน้าและฟังก์ชั่นการแยกคุณลักษณะlinear probe.sh เป็นไฟล์ bash เพื่อเรียกใช้โพรบเชิงเส้น labo_train.sh และ labo_test.sh เป็นไฟล์ bash เพื่อฝึกอบรมและทดสอบ Labo เพื่อให้ได้ประสิทธิภาพเชิงเส้นโพรบเพียงแค่เรียกใช้:
sh linear_probe.sh {DATASET} {SHOTS} {CLIP SIZE}
ตัวอย่างเช่นสำหรับชุดข้อมูลดอกไม้ 1-shot พร้อมตัวเข้ารหัสภาพ Vit-L/14 คำสั่งคือ:
sh linear_probe.sh flower 1 ViT-L/14
รหัสจะเข้ารหัสรูปภาพโดยอัตโนมัติและเรียกใช้การค้นหา hyperparameter ในการทำให้เป็นมาตรฐาน L2 โดยใช้ชุด Dev ประสิทธิภาพการตรวจสอบและทดสอบที่ดีที่สุดจะถูกบันทึกไว้ใน 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}
}