Demikian implementasi makalah ECCV 2022 Menjawab Pertanyaan Visual yang Andal: Abstain Daripada Menjawab Salah. Jika Anda merasa makalah kami atau repositori ini berguna untuk karya Anda, harap kutip:
@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}
}
Repositori ini menggunakan PyTorch dan dibangun di atas MMF. Ini berisi yang berikut:
Pembaruan: Versi sebelumnya dari repo ini secara tidak sengaja menggunakan jawaban kebenaran dasar default di MMF pada answers
lapangan yang memiliki jawaban referensi yang sedikit berbeda (misalnya, ini menggantikan beberapa entri jika tidak ada dalam kosakata jawaban 3k). Oleh karena itu, kami menyediakan skrip evaluasi mandiri (eval_scripts/) yang menggunakan anotasi VQA v2 asli sebagai referensi evaluasi. Pembaruan ini tercermin dalam versi arXiv (silakan lihat Changelog di lampiran) dan pekerjaan di masa depan harus menggunakan evaluasi yang diperbarui untuk melaporkan hasil.
Folder dalam repo ini disusun sebagai berikut:
configs/
:experiments/
berisi konfigurasi YAML untuk melatih setiap model VQA dan fungsi pemilihan yang sesuai.datasets/
berisi konfigurasi YAML untuk set data vqa2_extended
khusus.datasets/
: berisi implementasi dan pembuat kumpulan data untuk vqa2_extended
. Kumpulan data ini sama dengan VQA v2 dalam MMF, namun juga mendukung keluaran keyakinan model tambahan untuk fungsi pemilihan dan anotasi pilihan ganda untuk evaluasi kalibrasi.eval_scripts/
: berisi skrip evaluasi untuk menghitung cakupan risiko dan metrik Keandalan Efektif di makalah.reliable_vqa_eval.py
: berisi objek evaluator yang menghitung metrik yang berbeda.run.py
: skrip untuk menjalankan evaluasi berdasarkan prediksi model dan anotasi kebenaran dasar.vqa.py
: berisi objek untuk berinteraksi dengan anotasi dan prediksi VQA v2.models/
: untuk setiap model VQA dalam eksperimen kami, kami mendaftarkan versi di atas model asli yang mengembalikan keyakinan tambahan dan keluaran fitur perantara yang diperlukan untuk fungsi pemilihan.selective_predictors.py
berisi implementasi untuk model kalibrasi dan Selector.modules/
:losses.py
berisi fungsi kerugian prediksi kebenaran untuk model Selector yang dipelajari.metrics.py
berisi implementasi metrik cakupan risiko dan Keandalan Efektif di MMF untuk validasi.__init__.py
: mengimpor komponen MMF khusus untuk digunakan oleh MMF. Silakan ikuti petunjuk instalasi MMF di sini: https://mmf.sh/docs/. Kami merekomendasikan menginstal dari sumber. Catatan, saat menginstal dari sumber, Anda tidak perlu mengkloning repositori MMF di bawah repo ini. Anda cukup mengkloning MMF ke direktorinya sendiri. Kami juga merekomendasikan penggunaan lingkungan conda untuk instalasi dan pengoperasian, yang dapat digunakan untuk MMF dan repo ini.
Setelah instalasi MMF, lingkungan Anda harus menginstal Python 3.7+ dan PyTorch 1.6+. Anda juga memerlukan scikit-learn 1.0+ dan pandas 1.3.4+.
TL;DR: Kami menggunakan kumpulan data VQA v2. Kami membagi set validasi VQA v2 menjadi 3 bagian dan memberikan anotasi di bawah. Kami juga mengekstrak fitur grid khusus untuk model CLIP-ViL, yang disediakan di bawah. Semua anotasi dan fitur lainnya diunduh secara otomatis oleh MMF, sebagaimana ditentukan oleh masing-masing konfigurasi dalam repo ini.
Pertama, unduh file JSON anotasi pertanyaan dan jawaban validasi VQA v2 asli dari sini: https://visualqa.org/download.html. Ini akan digunakan untuk evaluasi.
Saat menjalankan MMF dengan salah satu file konfigurasi kami untuk pertama kalinya, MMF akan secara otomatis mengunduh fitur dan anotasi untuk VQA v2. Direktori/file ini akan disimpan di $MMF_DATA_DIR
( env.data_dir
) di bawah direktori vqa2
. Silakan lihat MMF untuk rincian lebih lanjut tentang ini. Kami menyarankan untuk memulai dengan menjalankan Pythia+MaxProb melalui repo ini, yang akan mengunduh anotasi dan fitur yang digunakan untuk Pythia, ViLBERT, dan VisualBERT (lihat Pelatihan untuk detailnya)
Kami juga merekomendasikan untuk menyimpan pemisahan validasi dan fitur CLIP kami (dijelaskan di bagian berikutnya) dalam direktori ini juga, dan pengaturan berikut mengasumsikan hal ini terjadi. Jika Anda memutuskan untuk menyusun direktori Anda secara berbeda, maka Anda perlu memperbarui jalur konfigurasi Anda, dll.
Set pelatihan VQA v2 standar digunakan untuk melatih model VQA. Namun, karena anotasi jawaban tidak tersedia untuk pemisahan VQA v2 test-dev dan test-std, kami membagi kumpulan validasi VQA v2 menjadi 3 kumpulan terpisah (yaitu, tidak ada gambar atau pertanyaan yang dibagikan) untuk tujuan evaluasi:
dev
: set validasi untuk pelatihan model VQA dan set pelatihan untuk prediktor selektif.val
: set validasi untuk prediktor selektif.test
: set pengujian untuk semua model, dan hasil yang kami laporkan di makalah kami.File anotasi terpisah ini dapat diunduh di sini: unduh
Setelah diunduh, letakkan file terkompresi di direktori
. Mendekompresi file seharusnya akan mengatur struktur direktori berikut:
vqa2/
reliable_vqa/
annotations/
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
Untuk menggunakan file konfigurasi kami sebagaimana adanya, file anotasi ini harus ditempatkan di bawah jalur
. Jika tidak, Anda perlu mengedit file konfigurasi dan anotasi agar sesuai dengan jalur Anda. Misalnya, anotasi himpunan data dalam konfigurasi untuk melatih model VQA adalah:
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
Sedangkan anotasi untuk melatih Selector adalah:
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
Untuk melatih semua model VQA, kami menggunakan fitur yang telah diekstraksi sebelumnya, bukan gambar untuk kecepatan dan konsistensi. Model Pythia, ViLBERT, dan VisualBERT semuanya menggunakan fitur yang dapat diunduh secara otomatis saat dijalankan melalui MMF. Namun CLIP-ViL menggunakan fitur gambar grid dari CLIP. Kami menyediakan fitur-fitur yang telah dihitung sebelumnya serta versi skrip ekstraksi yang sedikit disesuaikan dari repo CLIP-ViL yang dapat digunakan untuk mengekstrak fitur CLIP secara mandiri.
/vqa2/
, yang menghasilkan: 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
. Struktur direktori Anda harus mencerminkan 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
ke CLIP-ViL/CLIP-ViL-Direct/vqa
di repo CLIP-ViL.OUTPUT_DIR
di CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
ke direktori yang Anda inginkan untuk fitur tersebut (yaitu, /vqa2/reliable_vqa-clip/features
).coco_2014_val
untuk dijalankan pada gambar 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
Kami menyediakan pos pemeriksaan model terlatih untuk setiap kombinasi 4 model VQA dan 3 fungsi seleksi di makalah kami. Perhatikan bahwa pos pemeriksaan model MaxProb hanyalah model VQA. Prediktor selektif Kalibrasi dan Selektor sendiri jauh lebih kecil dibandingkan model VQA, namun kami menyertakan model VQA dalam pos pemeriksaan terkait demi kenyamanan.
Catatan, MaxProb ViLBERT dan VisualBERT sama dengan yang dari MMF (sudah dilatih sebelumnya dan disempurnakan), jadi keduanya juga dapat diunduh melalui kebun binatang model MMF. Dari kebun binatang model MMF, ViLBERT berhubungan dengan vilbert.finetuned.vqa2.from_vqa2_train
dan VisualBERT berhubungan dengan visual_bert.finetuned.vqa2.from_coco_train
.
Masalah Maks | Kalibrasi | Pemilih | |
---|---|---|---|
Pythia | unduh | unduh | unduh |
ViLBERT | Unduhan MMF | unduh | unduh |
VisualBERT | Unduhan MMF | unduh | unduh |
KLIP-ViL | unduh | unduh | unduh |
Di sini, kami memberikan contoh perintah untuk melatih dan mengevaluasi model. Contoh-contoh ini menggunakan model CLIP-ViL (disebut movie_mcan
, yang merupakan arsitektur model terkait). Menjalankan dengan model lain hanya melibatkan perubahan config
ke jalur yang benar, dan mengubah argumen model
menjadi salah satu dari pythia
, vilbert
, visual_bert
atau movie_mcan
(saat menggunakan MaxProb) atau menggunakan select_*
untuk model *
(saat menggunakan Calibration atau Selector, misalnya, select_visual_bert
). Perhatikan bahwa file anotasi untuk CLIP-ViL berbeda karena fitur CLIP digunakan (lihat, misalnya, configs/experiments/movie_mcan/vqa2/defaults.yaml
), sedangkan semua model lainnya menggunakan kumpulan file anotasi yang sama, jadi pastikan untuk gunakan file anotasi dan jalur fitur terkait yang benar.
Semua perintah harus dijalankan dari direktori reliable_vqa
, dan mengatur env.user_dir=
dalam opsi baris perintah MMF (atau, setara, MMF_USER_DIR=$PWD
sebelum perintah).
Untuk melatih model 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
Untuk melatih fungsi pemilihan multimodal yang dipelajari (Pemilih) untuk model 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
Opsi checkpoint.resume_file
juga bisa menjadi salah satu file model.pth
yang diunduh di atas. Selain itu, sebaiknya pastikan env.save_dir
untuk MaxProb dan Selector berbeda. Kalau tidak, mereka akan saling menimpa.
Untuk ViLBERT dan VisualBERT, kami menggunakan model yang telah disempurnakan pada VQA v2 yang disediakan oleh MMF. Ini berfungsi sebagai model selektif MaxProb kami untuk ViLBERT dan VisualBERT. Untuk melatih Selector dengan ViLBERT atau VisualBERT, Anda harus menyediakan jalur checkpoint.resume_file
ke file .pth
model MMF yang diunduh dari kebun binatang model (atau tautan di atas):
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
Pertama-tama kami membuat prediksi pada set val dan pengujian, lalu mengevaluasinya menggunakan skrip evaluasi.
Untuk mendapatkan prediksi, ubah tipe proses menjadi test ( run_type=test
), tambahkan argumen evaluation.predict=True
, dan ganti jalur anotasi test
di konfigurasi dengan anotasi untuk mendapatkan prediksi (misalnya, 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
Untuk mendapatkan prediksi dari ViLBERT dan VisualBERT dengan MaxProb, Anda juga dapat menggunakan versi model zoo berikut:
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
Ini akan menghasilkan file JSON (format serupa dengan format hasil VQA v2) di dalam env.save_dir
yang berisi jawaban dan keyakinan model yang kita gunakan untuk mengevaluasi. Ulangi ini menggunakan imdb_val2014-val.npy
sebagai set pengujian untuk mendapatkan hasil pada data val untuk memilih ambang batas.
Selanjutnya, kami menggunakan skrip evaluasi mandiri untuk mendapatkan metrik evaluasi, yang menerima pertanyaan VQA v2 asli dan anotasi JSON sebagai referensi:
python eval_scripts/run.py
--questions /v2_OpenEnded_mscoco_val2014_questions.json
--annotations .json
--threshold_predictions .json
Perintah ini akan menampilkan akurasi VQA , coverage@risk , AUC untuk kurva cakupan risiko, dan Effective Reliability . Catatan, karena ini menggunakan anotasi VQA v2 asli dan format yang mirip dengan format hasil VQA, skrip evaluasi ini harus kompatibel dengan prediksi dari model di luar repo ini hanya dengan memberikan bidang confidence
ekstra pada prediksi.
Kami ingin mengucapkan terima kasih kepada pencipta MMF atas implementasi sumber terbuka mereka. Kami berterima kasih kepada Sheng Shen dan penulis Berapa Banyak Manfaat CLIP yang Dapat Dimanfaatkan Tugas Penglihatan dan Bahasa? untuk memberikan bantuan dalam mengekstraksi fitur dan mereproduksi modelnya serta merilis kodenya. Kami juga berterima kasih kepada Aishwarya Agrawal atas masukannya dalam evaluasi. Terakhir, kami berterima kasih kepada Grace Luo atas bantuan awal terkait MMF.
Mayoritas VQA yang Andal dilisensikan di bawah CC-BY-NC (lihat LISENSI untuk detailnya), namun fixed_mcan_clip_grid_feature.py, yang dimodifikasi dari skrip mcan_clip_grid_feature.py di https://github.com/clip-vil/CLIP-ViL /tree/master/CLIP-ViL-Direct/vqa, dilisensikan di bawah lisensi Apache 2.0 dan eval_scripts/vqa.py serta eval_scripts/reliable_vqa_eval.py, yang dimodifikasi dari vqa.py dan vqaEval.py di https://github.com/GT-Vision-Lab/VQA, dilisensikan berdasarkan Lisensi Klausul 2 BSD.