นี่คือการดำเนินการสำหรับรายงาน ECCV 2022 การตอบคำถามด้วยภาพที่เชื่อถือได้: งดเว้นมากกว่าตอบไม่ถูกต้อง หากคุณพบว่าเอกสารของเราหรือพื้นที่เก็บข้อมูลนี้มีประโยชน์สำหรับงานของคุณเอง โปรดอ้างอิง:
@inproceedings{whitehead2022reliablevqa,
title={Reliable Visual Question Answering: Abstain Rather Than Answer Incorrectly},
author={Whitehead, Spencer and Petryk, Suzanne and Shakib, Vedaad and Gonzalez, Joseph and Darrell, Trevor and Rohrbach, Anna and Rohrbach, Marcus},
booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
year={2022}
}
พื้นที่เก็บข้อมูลนี้ใช้ PyTorch และสร้างขึ้นบน MMF ประกอบด้วยสิ่งต่อไปนี้:
อัปเดต: เวอร์ชันก่อนหน้าของ repo นี้ใช้คำตอบความจริงพื้นฐานโดยไม่ได้ตั้งใจใน MMF ใน answers
ของฟิลด์ซึ่งมีคำตอบอ้างอิงที่แตกต่างกันเล็กน้อย (เช่น จะแทนที่บางรายการหากไม่ได้อยู่ในคำศัพท์ของคำตอบ 3k) ดังนั้นเราจึงจัดเตรียมสคริปต์การประเมินผลแบบสแตนด์อโลน (eval_scripts/) ที่ใช้คำอธิบายประกอบ VQA v2 ดั้งเดิมเป็นข้อมูลอ้างอิงสำหรับการประเมิน การอัปเดตนี้สะท้อนให้เห็นในเวอร์ชัน arXiv (โปรดดูบันทึกการเปลี่ยนแปลงในภาคผนวก) และงานในอนาคตควรใช้การประเมินที่อัปเดตสำหรับการรายงานผลลัพธ์
โฟลเดอร์ใน repo นี้มีโครงสร้างดังนี้:
configs/
:experiments/
มีการกำหนดค่า YAML เพื่อฝึกโมเดล VQA แต่ละรุ่นและฟังก์ชันการเลือกที่เกี่ยวข้องdatasets/
มีการกำหนดค่า YAML สำหรับชุดข้อมูล vqa2_extended
ที่กำหนดเองdatasets/
: มีการใช้งานชุดข้อมูลและตัวสร้างสำหรับ vqa2_extended
ชุดข้อมูลนี้เหมือนกับ VQA v2 ภายใน MMF แต่ยังรองรับเอาต์พุตความเชื่อมั่นของโมเดลเพิ่มเติมสำหรับฟังก์ชันการเลือกและคำอธิบายประกอบแบบหลายตัวเลือกสำหรับการประเมินการสอบเทียบeval_scripts/
: มีสคริปต์การประเมินสำหรับการคำนวณความครอบคลุมความเสี่ยงและการวัดความน่าเชื่อถือที่มีประสิทธิผลในรายงานreliable_vqa_eval.py
: มีอ็อบเจ็กต์ตัวประเมินที่คำนวณเมตริกต่างๆrun.py
: สคริปต์สำหรับดำเนินการประเมินตามการคาดการณ์แบบจำลองและคำอธิบายประกอบความจริงภาคพื้นดินvqa.py
: มีวัตถุสำหรับเชื่อมต่อกับคำอธิบายประกอบและการทำนาย VQA v2models/
: สำหรับโมเดล VQA แต่ละโมเดลในการทดลองของเรา เราจะลงทะเบียนเวอร์ชันไว้ที่ด้านบนของโมเดลดั้งเดิม ซึ่งจะส่งกลับความมั่นใจเพิ่มเติมและเอาต์พุตฟีเจอร์ระดับกลางที่จำเป็นสำหรับฟังก์ชันการเลือกselective_predictors.py
มีการใช้งานสำหรับทั้งรุ่นการสอบเทียบและรุ่น Selectormodules/
:losses.py
มีฟังก์ชันการสูญเสียการทำนายความถูกต้องสำหรับโมเดลตัวเลือกที่เรียนรู้metrics.py
มีการใช้งานการวัดความครอบคลุมความเสี่ยงและความน่าเชื่อถือที่มีประสิทธิภาพใน MMF เพื่อการตรวจสอบ__init__.py
: นำเข้าส่วนประกอบ MMF ที่กำหนดเองที่จะใช้โดย MMF โปรดปฏิบัติตามคำแนะนำในการติดตั้ง MMF ที่นี่: https://mmf.sh/docs/ เราแนะนำให้ติดตั้งจากแหล่งที่มา หมายเหตุ เมื่อติดตั้งจากแหล่งที่มา คุณไม่จำเป็นต้องโคลนพื้นที่เก็บข้อมูล MMF ภายใต้ที่เก็บนี้ คุณสามารถโคลน MMF ไปยังไดเร็กทอรีของตัวเองได้ นอกจากนี้เรายังแนะนำให้ใช้สภาพแวดล้อม conda สำหรับการติดตั้งและใช้งาน ซึ่งสามารถใช้ได้กับทั้ง MMF และ repo นี้
หลังจากการติดตั้ง MMF สภาพแวดล้อมของคุณควรติดตั้ง Python 3.7+ และ PyTorch 1.6+ คุณจะต้องมี scikit-learn 1.0+ และ pandas 1.3.4+
TL; DR: เราใช้ชุดข้อมูล VQA v2 เราแบ่งชุดการตรวจสอบ VQA v2 ออกเป็น 3 ส่วนและมีคำอธิบายประกอบด้านล่าง นอกจากนี้เรายังแยกคุณสมบัติกริดแบบกำหนดเองสำหรับโมเดล CLIP-ViL ดังที่ระบุไว้ด้านล่าง คำอธิบายประกอบและคุณสมบัติอื่นๆ ทั้งหมดจะถูกดาวน์โหลดโดยอัตโนมัติโดย MMF ตามที่ระบุไว้โดยการกำหนดค่าแต่ละรายการใน repo นี้
ขั้นแรก ดาวน์โหลดคำถามการตรวจสอบ VQA v2 ต้นฉบับและตอบคำถามไฟล์ JSON คำอธิบายประกอบจากที่นี่: https://visualqa.org/download.html สิ่งเหล่านี้จะถูกนำไปใช้ในการประเมิน
เมื่อเรียกใช้ MMF ด้วยไฟล์กำหนดค่าไฟล์ใดไฟล์หนึ่งของเราเป็นครั้งแรก MMF ควรดาวน์โหลดคุณสมบัติและคำอธิบายประกอบสำหรับ VQA v2 โดยอัตโนมัติ ไดเร็กทอรี/ไฟล์เหล่านี้จะถูกจัดเก็บไว้ใน $MMF_DATA_DIR
( env.data_dir
) ภายใต้ไดเร็กทอรี vqa2
โปรดดู MMF สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ เราขอแนะนำให้เริ่มต้นด้วยการเรียกใช้ Pythia+MaxProb ผ่าน repo นี้ ซึ่งจะดาวน์โหลดคำอธิบายประกอบและคุณสมบัติที่ใช้สำหรับ Pythia, ViLBERT และ VisualBERT (ดูการฝึกอบรมสำหรับรายละเอียด)
นอกจากนี้เรายังแนะนำให้บันทึกการแยกการตรวจสอบและคุณสมบัติ CLIP ของเรา (อธิบายไว้ในส่วนถัดไป) ภายในไดเร็กทอรีเหล่านี้ด้วย และการตั้งค่าต่อไปนี้จะถือว่าเป็นเช่นนั้น หากคุณตัดสินใจที่จะจัดโครงสร้างไดเร็กทอรีของคุณแตกต่างออกไป คุณจะต้องอัปเดตพาธการกำหนดค่าของคุณ ฯลฯ ตามนั้น
ชุดการฝึก VQA v2 มาตรฐานใช้สำหรับการฝึกโมเดล VQA อย่างไรก็ตาม เนื่องจากคำอธิบายประกอบคำตอบไม่พร้อมใช้งานสำหรับการแยก test-dev และ test-std VQA v2 เราจึงแบ่งชุดการตรวจสอบความถูกต้อง VQA v2 ออกเป็น 3 ชุดที่ไม่ต่อเนื่องกัน (กล่าวคือ ไม่มีการแชร์รูปภาพหรือคำถาม) เพื่อวัตถุประสงค์ในการประเมิน:
dev
: ชุดการตรวจสอบความถูกต้องสำหรับการฝึกโมเดล VQA และชุดการฝึกสำหรับตัวทำนายแบบเลือกval
: ชุดการตรวจสอบความถูกต้องสำหรับตัวทำนายแบบเลือกtest
: ชุดทดสอบสำหรับทุกรุ่น และสิ่งที่เรารายงานผลลัพธ์ในรายงานของเราไฟล์คำอธิบายประกอบแบบแยกเหล่านี้สามารถดาวน์โหลดได้ที่นี่: ดาวน์โหลด
เมื่อดาวน์โหลดแล้ว ให้วางไฟล์บีบอัดไว้ในไดเร็กทอรี
การคลายการบีบอัดไฟล์ควรตั้งค่าโครงสร้างไดเร็กทอรีต่อไปนี้:
vqa2/
reliable_vqa/
annotations/
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
หากต้องการใช้ไฟล์กำหนดค่าของเราตามที่เป็นอยู่ ไฟล์คำอธิบายประกอบเหล่านี้ควรอยู่ใต้พาธ
มิฉะนั้น คุณจะต้องแก้ไขไฟล์การกำหนดค่าและคำอธิบายประกอบเพื่อให้ตรงกับเส้นทางของคุณ ตัวอย่างเช่น คำอธิบายประกอบชุดข้อมูลในการกำหนดค่าสำหรับการฝึกโมเดล VQA คือ:
dataset_config:
vqa2_extended:
annotations:
train:
- vqa2/defaults/annotations/imdb_train2014.npy
val:
- vqa2/reliable_vqa/annotations/imdb_val2014-dev.npy
test:
- vqa2/reliable_vqa/annotations/imdb_val2014-test.npy
ในขณะที่คำอธิบายประกอบสำหรับการฝึก Selector คือ:
dataset_config:
vqa2_extended:
annotations:
train:
- vqa2/reliable_vqa/annotations/imdb_val2014-dev.npy
val:
- vqa2/reliable_vqa/annotations/imdb_val2014-val.npy
test:
- vqa2/reliable_vqa/annotations/imdb_val2014-test.npy
สำหรับการฝึกโมเดล VQA ทั้งหมด เราใช้คุณสมบัติที่แตกไว้ล่วงหน้าแทนรูปภาพเพื่อความรวดเร็วและความสม่ำเสมอ รุ่น Pythia, ViLBERT และ VisualBERT ทั้งหมดใช้คุณสมบัติที่สามารถดาวน์โหลดได้โดยอัตโนมัติเมื่อทำงานผ่าน MMF อย่างไรก็ตาม CLIP-ViL ใช้คุณสมบัติภาพตารางจาก CLIP เราจัดเตรียมคุณสมบัติที่คำนวณไว้ล่วงหน้าของเรา เช่นเดียวกับเวอร์ชันที่ปรับเล็กน้อยของสคริปต์การแยกจาก repo CLIP-ViL ที่สามารถใช้เพื่อแยกคุณสมบัติ CLIP ได้อย่างอิสระ
/vqa2/
ซึ่งให้ผล: vqa2/
reliable_vqa-clip/
annotations/
imdb_train2014.npy
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
vqa2/
reliable_vqa-clip/
annotations/
...
clip_features.tar.gz
reliable_vqa-clip
โครงสร้างไดเร็กทอรีของคุณควรสะท้อนถึง MMF: vqa2/
reliable_vqa-clip/
annotations/
...
features/
train2014/
val2014/
coco_2014/
annotations/
instances_train2014.json
instances_val2014.json
images/
train2014/
val2014/
fixed_mcan_clip_grid_feature.py
ไปยัง CLIP-ViL/CLIP-ViL-Direct/vqa
ใน CLIP-ViL repoOUTPUT_DIR
ใน CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
เป็นไดเร็กทอรีที่คุณต้องการสำหรับคุณสมบัติ (เช่น /vqa2/reliable_vqa-clip/features
)coco_2014_val
เพื่อรันบนอิมเมจ val2014): DETECTRON2_DATASETS= python fixed_mcan_clip_grid_feature.py --config-file configs/R-50-grid.yaml --dataset coco_2014_train --model_type RN50x4
python clipvil_anns_conversion.py --input_dir /vqa2/reliable_vqa/annotations --output_dir /vqa2/reliable_vqa-clip/annotations
เราจัดให้มีจุดตรวจสอบแบบจำลองที่ผ่านการฝึกอบรมสำหรับการรวมกันของแบบจำลอง VQA 4 แบบและฟังก์ชันการเลือก 3 แบบในรายงานของเรา โปรดทราบว่าจุดตรวจสอบโมเดล MaxProb เป็นเพียงโมเดล VQA ตัวพยากรณ์แบบเลือกสอบเทียบและตัวเลือกนั้นมีขนาดเล็กกว่ารุ่น VQA มาก แต่เรารวมโมเดล VQA ไว้ในจุดตรวจสอบที่เกี่ยวข้องเพื่อความสะดวก
โปรดทราบว่า MaxProb ViLBERT และ VisualBERT เหมือนกับจาก MMF (ผ่านการฝึกอบรมล่วงหน้าและปรับแต่งอย่างละเอียด) ดังนั้นจึงสามารถดาวน์โหลดผ่าน Model Zoo ของ MMF ได้ด้วย จากสวนสัตว์โมเดล MMF นั้น ViLBERT สอดคล้องกับ vilbert.finetuned.vqa2.from_vqa2_train
และ VisualBERT สอดคล้องกับ visual_bert.finetuned.vqa2.from_coco_train
MaxProb | การสอบเทียบ | ตัวเลือก | |
---|---|---|---|
ปีเธีย | ดาวน์โหลด | ดาวน์โหลด | ดาวน์โหลด |
วิลเบิร์ต | ดาวน์โหลด MMF | ดาวน์โหลด | ดาวน์โหลด |
วิชวลเบิร์ต | ดาวน์โหลด MMF | ดาวน์โหลด | ดาวน์โหลด |
CLIP-ViL | ดาวน์โหลด | ดาวน์โหลด | ดาวน์โหลด |
ที่นี่ เรามีคำสั่งตัวอย่างสำหรับการฝึกและประเมินโมเดล ตัวอย่างเหล่านี้ใช้โมเดล CLIP-ViL (เรียกว่า movie_mcan
ซึ่งเป็นสถาปัตยกรรมโมเดลที่สอดคล้องกัน) การทำงานกับรุ่นอื่นเกี่ยวข้องกับการเปลี่ยน config
เป็นเส้นทางที่ถูกต้อง และการเปลี่ยนอาร์กิวเมนต์ model
เป็นหนึ่งใน pythia
, vilbert
, visual_bert
หรือ movie_mcan
(เมื่อใช้ MaxProb) หรือใช้ select_*
สำหรับ model *
(เมื่อใช้ Calibration หรือ Selector เช่น select_visual_bert
) โปรดทราบว่าไฟล์คำอธิบายประกอบสำหรับ CLIP-ViL จะแตกต่างกันเนื่องจากมีการใช้คุณลักษณะของ CLIP (ดู เช่น configs/experiments/movie_mcan/vqa2/defaults.yaml
) ในขณะที่รุ่นอื่นๆ ทั้งหมดใช้ไฟล์คำอธิบายประกอบชุดเดียวกัน ดังนั้นต้องแน่ใจว่า ใช้ไฟล์คำอธิบายประกอบและเส้นทางคุณลักษณะที่เกี่ยวข้องที่ถูกต้อง
คำสั่งทั้งหมดควรรันจากไดเร็กทอรี reliable_vqa
และตั้งค่า env.user_dir=
ในตัวเลือกบรรทัดคำสั่ง MMF (หรือ MMF_USER_DIR=$PWD
ก่อนคำสั่ง)
วิธีฝึกโมเดล VQA:
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=movie_mcan config=configs/experiments/movie_mcan/vqa2/defaults.yaml run_type=train_val
หากต้องการฝึกฟังก์ชันการเลือกหลายรูปแบบที่เรียนรู้ (Selector) สำหรับโมเดล VQA:
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=select_movie_mcan config=configs/experiments/movie_mcan/vqa2/select_pred.yaml run_type=train_val checkpoint.resume_pretrained=True checkpoint.resume_file=/best.ckpt
ตัวเลือก checkpoint.resume_file
อาจเป็นหนึ่งในไฟล์ model.pth
ที่ดาวน์โหลดด้านบน นอกจากนี้ วิธีที่ดีที่สุดคือตรวจสอบให้แน่ใจว่า env.save_dir
สำหรับ MaxProb และ Selector นั้นแตกต่างกัน มิฉะนั้นพวกเขาจะเขียนทับกัน
สำหรับ ViLBERT และ VisualBERT เราใช้โมเดลที่ได้รับการปรับแต่งอย่างละเอียดแล้วบน VQA v2 ที่ได้รับจาก MMF สิ่งเหล่านี้ทำหน้าที่เป็นโมเดลเฉพาะของ MaxProb สำหรับ ViLBERT และ VisualBERT หากต้องการฝึก Selector ด้วย ViLBERT หรือ VisualBERT คุณควรจัดเตรียมพาธ checkpoint.resume_file
ไปยังไฟล์ .pth
โมเดล MMF ที่ดาวน์โหลดจาก Model Zoo (หรือลิงก์ด้านบน):
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=select_visual_bert config=configs/experiments/visual_bert/vqa2/select_pred.yaml run_type=train_val checkpoint.resume_pretrained=True checkpoint.resume_file=/visual_bert.finetuned.vqa2.from_coco_train/model.pth
ขั้นแรกเราทำการคาดการณ์เกี่ยวกับวาล์วและชุดการทดสอบ จากนั้นจึงประเมินสิ่งเหล่านี้โดยใช้สคริปต์การประเมินผล
หากต้องการรับการคาดการณ์ ให้เปลี่ยนประเภทการรันที่จะทดสอบ ( run_type=test
) เพิ่ม evaluation.predict=True
และแทนที่พาธคำอธิบายประกอบ test
ในการกำหนดค่าด้วยคำอธิบายประกอบเพื่อรับการคาดการณ์ (เช่น vqa2/reliable_vqa/annotations/imdb_val2014-test.npy
, vqa2/reliable_vqa/annotations/imdb_val2014-val.npy
):
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=select_movie_mcan config=configs/experiments/movie_mcan/vqa2/select_pred.yaml run_type=test evaluation.predict=True checkpoint.resume=True checkpoint.resume_file=/best.ckpt dataset_config.vqa2_extended.annotations.test=vqa2/reliable_vqa-clip/annotations/imdb_val2014-test.npy
สำหรับการรับการคาดการณ์จาก ViLBERT และ VisualBERT ด้วย MaxProb คุณยังสามารถใช้เวอร์ชันสวนสัตว์จำลองของสิ่งเหล่านี้ได้:
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=visual_bert config=configs/experiments/visual_bert/vqa2/defaults.yaml run_type=test evaluation.predict=True checkpoint.resume=True checkpoint.resume_zoo=visual_bert.finetuned.vqa2.from_coco_train dataset_config.vqa2_extended.annotations.test=vqa2/reliable_vqa-clip/annotations/imdb_val2014-test.npy
สิ่งนี้จะสร้างไฟล์ JSON (รูปแบบที่คล้ายคลึงกับรูปแบบผลลัพธ์ VQA v2) ภายใน env.save_dir
ซึ่งมีคำตอบและความมั่นใจของโมเดลที่เราใช้ในการประเมิน ทำซ้ำสิ่งนี้โดยใช้ imdb_val2014-val.npy
เป็นชุดทดสอบเพื่อรับผลลัพธ์เกี่ยวกับข้อมูล val สำหรับการเลือกเกณฑ์
ต่อไป เราใช้สคริปต์การประเมินแบบสแตนด์อโลนเพื่อรับตัววัดการประเมิน ซึ่งยอมรับคำถาม VQA v2 ดั้งเดิมและ JSON คำอธิบายประกอบเป็นข้อมูลอ้างอิง:
python eval_scripts/run.py
--questions /v2_OpenEnded_mscoco_val2014_questions.json
--annotations .json
--threshold_predictions .json
คำสั่งนี้จะส่งออก ความแม่นยำ VQA , Coverage@risk , AUC สำหรับกราฟความครอบคลุมความเสี่ยง และ Effective Reliability หมายเหตุ เนื่องจากสิ่งนี้ใช้คำอธิบายประกอบ VQA v2 ดั้งเดิมและรูปแบบที่คล้ายกันกับรูปแบบผลลัพธ์ VQA สคริปต์การประเมินนี้จึงควรเข้ากันได้กับการคาดการณ์จากแบบจำลองภายนอก repo นี้ โดยเพียงแค่จัดเตรียมฟิลด์ confidence
พิเศษในการคาดคะเน
เราขอขอบคุณผู้สร้าง MMF สำหรับการใช้งานโอเพ่นซอร์ส เราขอขอบคุณ Sheng Shen และผู้เขียน CLIP มีประโยชน์ต่องานด้านการมองเห็นและภาษามากแค่ไหน? เพื่อให้ความช่วยเหลือในการแยกคุณสมบัติและสร้างโมเดลใหม่ตลอดจนการเผยแพร่โค้ด นอกจากนี้เรายังขอขอบคุณ Aishwarya Agrawal สำหรับข้อมูลเกี่ยวกับการประเมิน สุดท้ายนี้ เราขอขอบคุณ Grace Luo สำหรับความช่วยเหลือล่วงหน้ากับ MMF
VQA ที่เชื่อถือได้ส่วนใหญ่ได้รับอนุญาตภายใต้ CC-BY-NC (ดูรายละเอียดเกี่ยวกับใบอนุญาต) อย่างไรก็ตาม มีการแก้ไข_mcan_clip_grid_feature.py ซึ่งได้รับการแก้ไขจากสคริปต์ mcan_clip_grid_feature.py ใน https://github.com/clip-vil/CLIP-ViL /tree/master/CLIP-ViL-Direct/vqa ได้รับอนุญาตภายใต้ลิขสิทธิ์ Apache 2.0 และ eval_scripts/vqa.py เป็น รวมถึง eval_scripts/reliable_vqa_eval.py ซึ่งดัดแปลงจาก vqa.py และ vqaEval.py ใน https://github.com/GT-Vision-Lab/VQA ได้รับอนุญาตภายใต้ BSD 2-Clause License