هذا هو تطبيق ورقة 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. يحتوي على ما يلي:
تطبيقات المقاييس المستخدمة في ورقتنا، بما في ذلك المخاطر والتغطية والموثوقية الفعالة.
تطبيقات لتحقيق أقصى احتمال (MaxProb)، والمعايرة، ووظائف الاختيار المتعددة الوسائط المستفادة (Selector).
تكوينات التدريب للنماذج في عملنا.
قم بتنزيل الروابط الخاصة بتقسيمات مجموعة بيانات VQA v2 ونقاط التفتيش النموذجية المدربة والميزات المستخرجة مسبقًا المستخدمة في عملنا.
تحديث: استخدم الإصدار السابق من هذا الريبو عن غير قصد إجابات الحقيقة الأساسية الافتراضية في MMF في answers
الميدانية التي تحتوي على إجابات مرجعية مختلفة قليلاً (على سبيل المثال، يستبدل بعض الإدخالات إذا لم تكن في مفردات 3 آلاف إجابات). ولذلك، فإننا نقدم برنامجًا نصيًا مستقلاً للتقييم (eval_scripts/) يستخدم التعليقات التوضيحية الأصلية لـ VQA v2 كمراجع للتقييمات. ينعكس هذا التحديث في إصدار arXiv (يرجى الاطلاع على سجل التغيير في الملحق) ويجب أن يستخدم العمل المستقبلي التقييمات المحدثة للإبلاغ عن النتائج.
يتم تنظيم المجلدات الموجودة في هذا الريبو على النحو التالي:
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 v2.
models/
: لكل نموذج VQA في تجاربنا، نقوم بتسجيل نسخة أعلى النموذج الأصلي والتي ترجع ثقة إضافية ومخرجات الميزات الوسيطة اللازمة لوظائف الاختيار.
يحتوي selective_predictors.py
على تطبيقات لكل من نماذج المعايرة والمحدد.
modules/
:
يحتوي losses.py
على وظيفة فقدان التنبؤ الصحيح لنماذج المحدد المستفادة.
يحتوي metrics.py
على تطبيقات تغطية المخاطر ومقاييس الموثوقية الفعالة في MMF للتحقق من الصحة.
__init__.py
: يقوم باستيراد مكونات MMF المخصصة ليستخدمها MMF.
يرجى اتباع تعليمات تثبيت MMF هنا: https://mmf.sh/docs/. نوصي بالتثبيت من المصدر. لاحظ أنه عند التثبيت من المصدر، لا تحتاج إلى استنساخ مستودع MMF ضمن هذا الريبو. يمكنك ببساطة استنساخ MMF إلى الدليل الخاص به. نوصي أيضًا باستخدام بيئة conda للتثبيت والتشغيل، والتي يمكن استخدامها لكل من MMF وهذا الريبو.
بعد تثبيت 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، كما هو محدد بواسطة كل تكوينات في هذا الريبو.
أولاً، قم بتنزيل سؤال التحقق من صحة VQA v2 الأصلي والإجابة على ملفات JSON للتعليقات التوضيحية من هنا: https://visualqa.org/download.html. سيتم استخدام هذه التقييمات.
عند تشغيل MMF باستخدام أحد ملفات التكوين الخاصة بنا للمرة الأولى، يجب أن يقوم MMF تلقائيًا بتنزيل الميزات والتعليقات التوضيحية الخاصة بـ VQA v2. سيتم تخزين هذه الدلائل/الملفات في $MMF_DATA_DIR
( env.data_dir
) ضمن دليل vqa2
. الرجاء مراجعة MMF لمزيد من التفاصيل حول هذا. نوصي بالبدء بتشغيل Pythia+MaxProb من خلال هذا الريبو، والذي سيقوم بتنزيل التعليقات التوضيحية والميزات المستخدمة لـ Pythia وViLBERT وVisualBERT (راجع التدريب للحصول على التفاصيل)
نوصي أيضًا بحفظ أقسام التحقق من الصحة وميزات CLIP (الموضحة في الأقسام التالية) داخل هذه الدلائل أيضًا، ويفترض الإعداد التالي أن هذا هو الحال. إذا قررت هيكلة الأدلة الخاصة بك بشكل مختلف، فستحتاج إلى تحديث مسار التكوين الخاص بك، وما إلى ذلك وفقًا لذلك.
يتم استخدام مجموعة تدريب VQA v2 القياسية لتدريب نماذج VQA. ومع ذلك، نظرًا لأن التعليقات التوضيحية للإجابة غير متاحة لتقسيمات test-dev وtest-std VQA v2، فقد قمنا بتقسيم مجموعة التحقق من صحة VQA v2 إلى 3 مجموعات منفصلة (على سبيل المثال، لا تتم مشاركة أي صور أو أسئلة) لأغراض التقييم:
dev
: مجموعة التحقق من صحة تدريب نموذج VQA ومجموعة التدريب للمتنبئين الانتقائيين.
val
: مجموعة التحقق من صحة المتنبئين الانتقائيين.
test
: مجموعة اختبار لجميع النماذج، وما نورد نتائجه في ورقتنا.
يمكن تنزيل ملفات التعليقات التوضيحية المقسمة هنا: download
بمجرد التنزيل، ضع الملف المضغوط في الدليل <env.data_dir>/vqa2/
. سيؤدي إلغاء ضغط الملف إلى إعداد بنية الدليل التالية:
vqa2/ reliable_vqa/ annotations/ imdb_val2014-dev.npy imdb_val2014-test.npy imdb_val2014-val.npy
لاستخدام ملفات التكوين الخاصة بنا كما هي، يجب وضع ملفات التعليقات التوضيحية هذه تحت المسار <env.data_dir>/vqa2/reliable_vqa/annotations
. بخلاف ذلك، ستحتاج إلى تعديل ملفات التكوين والتعليقات التوضيحية لتتناسب مع مساراتك. على سبيل المثال، التعليقات التوضيحية لمجموعة البيانات في التكوين لتدريب نموذج 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
في حين أن التعليقات التوضيحية لتدريب المحدد هي:
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. نحن نقدم ميزاتنا المحسوبة مسبقًا بالإضافة إلى نسخة معدلة قليلاً من البرنامج النصي للاستخراج من CLIP-ViL repo والذي يمكن استخدامه لاستخراج ميزات CLIP بشكل مستقل.
قم بتنزيل الميزات (تنزيل) وملفات التعليقات التوضيحية المحدثة (تنزيل). هام: الميزات كبيرة جدًا (حوالي 150 جيجابايت عند ضغطها) وقد يستغرق تنزيلها وقتًا طويلاً.
قم بفك ضغط التعليقات التوضيحية داخل الملف في <env.data_dir>/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/
[اختياري] نوصي بإنشاء بيئة كوندا منفصلة (مع Python 3.7+) لاستخراج الميزات.
انسخ CLIP-ViL repo واتبع تعليمات التثبيت/الإعداد الخاصة به (على سبيل المثال، قم بتثبيت Detectron2 من النسخة المحلية المتوفرة لـ CLIP-ViL). لاحظ أن CLIP-ViL لا يحتاج إلى استنساخه ضمن هذا الريبو.
قم بتنزيل الصور والتعليقات التوضيحية لـ COCO Train+val 2014 وضعها في دليل يحتوي على البنية وأسماء المسارات التالية:
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 repo.
قم بتغيير OUTPUT_DIR
في CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
إلى الدليل المطلوب للميزات (على سبيل المثال، <env.data_dir>/vqa2/reliable_vqa-clip/features
).
قم بتشغيل ما يلي على صور Train2014 (كرر باستخدام coco_2014_val
للتشغيل على صور val2014):
DETECTRON2_DATASETS=<PATH_TO_PARENT_DIR_OF_coco_2014> python fixed_mcan_clip_grid_feature.py --config-file configs/R-50-grid.yaml --dataset coco_2014_train --model_type RN50x4
يمكنك تنزيل التعليقات التوضيحية المحدثة باتباع قسم الميزات المستخرجة مسبقًا أو يمكنك تشغيل البرنامج النصي للتعيين لإنشاء ملفات التعليقات التوضيحية المحدثة لـ CLIP-ViL:
python clipvil_anns_conversion.py --input_dir <env.data_dir>/vqa2/reliable_vqa/annotations --output_dir <env.data_dir>/vqa2/reliable_vqa-clip/annotations
نحن نقدم نقاط فحص نموذجية مدربة لكل مجموعة من نماذج VQA الأربعة و3 وظائف اختيار في ورقتنا. لاحظ أن نقاط فحص نموذج MaxProb هي ببساطة نماذج VQA. تعد أدوات التنبؤ الانتقائية للمعايرة والمحدد نفسها أصغر بكثير من نماذج VQA، ومع ذلك فإننا نقوم بتضمين نموذج VQA في نقاط التفتيش المقابلة لها من أجل الراحة.
لاحظ أن MaxProb ViLBERT وVisualBERT هما نفس الطرازين الموجودين في MMF (المدربين مسبقًا والمضبوطين)، لذلك يمكن أيضًا تنزيلهما عبر حديقة حيوانات طراز MMF. من حديقة حيوانات طراز MMF، يتوافق ViLBERT مع vilbert.finetuned.vqa2.from_vqa2_train
ويتوافق VisualBERT مع visual_bert.finetuned.vqa2.from_coco_train
.
MaxProb | معايرة | محدد | |
---|---|---|---|
بيثيا | تحميل | تحميل | تحميل |
فيليبرت | تحميل ام ام اف | تحميل | تحميل |
فيجوال بيرت | تحميل ام ام اف | تحميل | تحميل |
كليب-فيل | تحميل | تحميل | تحميل |
نقدم هنا نماذج أوامر للتدريب وتقييم النماذج. تستخدم هذه الأمثلة نموذج CLIP-ViL (المشار إليه باسم movie_mcan
، وهو بنية النموذج المقابلة). يتضمن التشغيل مع نماذج أخرى ببساطة تغيير config
إلى المسار الصحيح وتغيير وسيطة model
إلى إحدى pythia
أو vilbert
أو visual_bert
أو movie_mcan
(عند استخدام MaxProb) أو استخدام select_*
لنموذج *
(عند استخدام Calibration أو Selector، على سبيل المثال، select_visual_bert
). لاحظ أن ملفات التعليقات التوضيحية لـ CLIP-ViL مختلفة نظرًا لاستخدام ميزات CLIP (راجع، على سبيل المثال، configs/experiments/movie_mcan/vqa2/defaults.yaml
) ، بينما تستخدم جميع النماذج الأخرى نفس مجموعة ملفات التعليقات التوضيحية، لذا تأكد من استخدم ملفات التعليقات التوضيحية الصحيحة ومسارات الميزات.
يجب تشغيل كافة الأوامر من دليل reliable_vqa
، وتعيين env.user_dir=<PATH_TO_REPO>/reliable_vqa
في خيارات سطر أوامر MMF (أو، بشكل مكافئ، MMF_USER_DIR=$PWD
قبل الأمر).
لتدريب نموذج VQA:
mmf_run env.user_dir=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_MAXPROB_SAVE_DIR> dataset=vqa2_extended model=movie_mcan config=configs/experiments/movie_mcan/vqa2/defaults.yaml run_type=train_val
لتدريب وظيفة الاختيار متعدد الوسائط (المحدد) لنموذج VQA:
mmf_run env.user_dir=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_SELECTOR_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=<YOUR_MAXPROB_SAVE_DIR>/best.ckpt
يمكن أيضًا أن يكون خيار checkpoint.resume_file
أحد ملفات model.pth
التي تم تنزيلها أعلاه. ومن الأفضل أيضًا التأكد من اختلاف env.save_dir
لـ MaxProb وSelector. وإلا فسوف يستبدلون بعضهم البعض.
بالنسبة لـ ViLBERT وVisualBERT، نستخدم النماذج التي تم ضبطها بالفعل على VQA v2 والتي توفرها MMF. تعمل هذه بمثابة نماذج MaxProb الانتقائية لـ ViLBERT وVisualBERT. لتدريب المحدد باستخدام ViLBERT أو VisualBERT، يجب عليك توفير مسار checkpoint.resume_file
إلى ملف .pth
لنموذج MMF الذي تم تنزيله من حديقة الحيوان النموذجية (أو الرابط أعلاه):
mmf_run env.user_dir=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_SELECTOR_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=<YOUR_MMF_MODEL_SAVE_DIR>/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=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_RESULT_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=<YOUR_SELECTOR_SAVE_DIR>/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=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_RESULT_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 الأصلي والتعليقات التوضيحية JSONs كمراجع:
python eval_scripts/run.py --questions <PATH>/v2_OpenEnded_mscoco_val2014_questions.json --annotations <PATH/v2_mscoco_val2014_annotations.json --predictions <RESULTS_ON_TEST_DATA>.json --threshold_predictions <RESULTS_ON_VAL_DATA>.json
سينتج هذا الأمر دقة VQA ، وcovering@risk ، وAUC لمنحنى تغطية المخاطر، والموثوقية الفعالة . لاحظ أنه نظرًا لأن هذا يستخدم التعليقات التوضيحية الأصلية لـ VQA v2 وتنسيقًا مشابهًا لتنسيق نتيجة VQA، فيجب أن يكون برنامج التقييم النصي هذا متوافقًا مع التنبؤات من النماذج خارج هذا الريبو ببساطة عن طريق توفير حقل confidence
إضافي في التنبؤات.
نود أن نشكر منشئي MMF على تطبيقاتهم مفتوحة المصدر. نشكر Sheng Shen ومؤلفي كتاب "إلى أي حد يمكن أن يفيد CLIP مهام الرؤية واللغة؟" لتقديم المساعدة في استخراج الميزات وإعادة إنتاج نموذجها بالإضافة إلى إصدار التعليمات البرمجية الخاصة بها. ونشكر أيضًا Aishwarya Agrawal على مساهمتها في التقييمات. وأخيرا، نشكر غريس لوه للمساعدة المبكرة مع MMF.
تم ترخيص غالبية VQA الموثوقة بموجب CC-BY-NC (راجع الترخيص للحصول على التفاصيل)، ومع ذلك فإن Fixed_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 رخصة.