يحتوي هذا المستودع على الكود الخاص بالورقة التالية:
D. Fried*، R. Hu*، V. Cirik*، A. Rohrbach، J. Andreas، L.-P. Morency، T. Berg-Kirkpatrick، K. Saenko، D. Klein **، T. Darrell **، نماذج أتباع المتحدثين للملاحة في الرؤية واللغة . في نيوربيس، 2018. (PDF)
@inproceedings{fried2018speaker, title={Speaker-Follower Models for Vision-and-Language Navigation}, author={Fried, Daniel and Hu, Ronghang and Cirik, Volkan and Rohrbach, Anna and Andreas, Jacob and Morency, Louis-Philippe and Berg-Kirkpatrick, Taylor and Saenko, Kate and Klein, Dan and Darrell, Trevor}, booktitle={Neural Information Processing Systems (NeurIPS)}, year={2018} }
(*، **: تشير إلى المساهمة المتساوية)
صفحة المشروع: http://ronghanghu.com/speaker_follower
إذا كنت تريد فقط استخدام زيادة البيانات لدينا في مجموعة بيانات R2R ولكنك لا تحتاج إلى نماذجنا، فيمكنك تنزيل بياناتنا المعززة مباشرة على R2R (ملف JSON يحتوي على بيانات تركيبية تم إنشاؤها بواسطة نموذج مكبر الصوت الخاص بنا) هنا. ملف JSON هذا بنفس تنسيق مجموعة بيانات R2R الأصلية، مع تعليمات تركيبية واحدة لكل مسار جديد تم أخذ عينات منه.
لاحظ أننا تدربنا أولاً على الجمع بين البيانات الأصلية والمعززة، ثم قمنا بضبط بيانات التدريب الأصلية.
قم بتثبيت Python 3 (يوصى باستخدام Anaconda: https://www.continuum.io/downloads).
قم بتثبيت PyTorch باتباع الإرشادات الموجودة على https://pytorch.org/ (استخدمنا PyTorch 0.3.1 في تجاربنا).
قم بتنزيل هذا المستودع أو نسخه بشكل متكرر باستخدام Git، ثم أدخل الدليل الجذر للمستودع:
# Make sure to clone with --recursive git clone --recursive https://github.com/ronghanghu/speaker_follower.git cd speaker_follower
إذا لم تقم بالاستنساخ باستخدام العلامة --recursive
، فستحتاج إلى استنساخ وحدة pybind الفرعية يدويًا من دليل المستوى الأعلى:
git submodule update --init --recursive
قم بتثبيت تبعيات Matterport3D Simulator:
sudo apt-get install libopencv-dev python-opencv freeglut3 freeglut3-dev libglm-dev libjsoncpp-dev doxygen libosmesa6-dev libosmesa6 libglew-dev
تجميع محاكي Matterport3D:
mkdir build && cd build cmake .. make cd ../
ملاحظة: تم بناء هذا المستودع على قاعدة بيانات Matterport3DSimulator. يمكن العثور على تفاصيل إضافية حول Matterport3D Simulator في README_Matterport3DSimulator.md
.
قم بتنزيل ميزات صورة ResNet للحوسبة المسبقة، واستخرجها إلى img_features/
:
mkdir -p img_features/ cd img_features/ wget https://www.dropbox.com/s/o57kxh2mn5rkx4o/ResNet-152-imagenet.zip?dl=1 -O ResNet-152-imagenet.zip unzip ResNet-152-imagenet.zip cd ..
(في حالة عدم عمل عنوان URL أعلاه، فمن المحتمل أن يكون ذلك بسبب قيام مجموعة بيانات "غرفة إلى غرفة" بتغيير عناوين URL المميزة الخاصة بها. ويمكنك العثور على أحدث روابط التنزيل هنا.)
بعد هذه الخطوة، يجب أن يحتوي img_features/
على ResNet-152-imagenet.tsv
. (لاحظ أنك تحتاج فقط إلى تنزيل الميزات المستخرجة من ResNet المدربة مسبقًا من ImageNet لتشغيل التجارب التالية. ليست هناك حاجة إلى ميزات ResNet المدربة مسبقًا على الأماكن أو الصور الفعلية.)
قم بتنزيل مجموعة بيانات R2R ومساراتنا التي تم أخذ عينات منها لزيادة البيانات:
./tasks/R2R/data/download.sh
تدريب نموذج المتحدث:
python tasks/R2R/train_speaker.py
إنشاء تعليمات تركيبية من نموذج المتحدث المدرب كزيادة للبيانات:
# the path prefix to the speaker model (trained in Step 1 above) export SPEAKER_PATH_PREFIX=tasks/R2R/speaker/snapshots/speaker_teacher_imagenet_mean_pooled_train_iter_20000 python tasks/R2R/data_augmentation_from_speaker.py $SPEAKER_PATH_PREFIX tasks/R2R/data/R2R
بعد هذه الخطوة، سيتم إنشاء R2R_literal_speaker_data_augmentation_paths.json
ضمن tasks/R2R/data/
. يحتوي ملف JSON هذا على تعليمات تركيبية تم إنشاؤها بواسطة نموذج مكبر الصوت على عينات مسارات جديدة في بيئة القطار (أي زيادة البيانات المستندة إلى مكبر الصوت في ورقتنا).
وبدلاً من ذلك، يمكنك تنزيل أداة تكبير البيانات المحسوبة مسبقًا المستندة إلى السماعات مباشرة باستخدام ./tasks/R2R/data/download_precomputed_augmentation.sh
.
قم بتدريب النموذج التابع على الجمع بين بيانات التدريب الأصلية والمعززة.
python tasks/R2R/train.py --use_pretraining --pretrain_splits train literal_speaker_data_augmentation_paths
سيتم تدريب المتابع أولاً على الجمع بين بيئة train
الأصلية ومسارات literal_speaker_data_augmentation_paths
الجديدة (التي تم إنشاؤها في الخطوة 2 أعلاه) لعدد 50000 تكرار، ثم يتم ضبطه جيدًا على بيئة train
الأصلية لعدد 20000 تكرار. قد تستغرق هذه الخطوة وقتا طويلا. (يبدو الأمر حوالي 50 ساعة باستخدام وحدة معالجة رسومات واحدة على أجهزتنا المحلية.)
تعمل جميع الأوامر المذكورة أعلاه على وحدة معالجة رسومات واحدة. يمكنك اختيار وحدة معالجة رسومات معينة عن طريق تعيين متغير البيئة CUDA_VISIBLE_DEVICES
(على سبيل المثال، export CUDA_VISIBLE_DEVICES=1
لاستخدام GPU 1).
يمكنك تنزيل نموذج المتحدث المُدرب ونموذج المتابعين مباشرة باستخدام
./tasks/R2R/snapshots/release/download_speaker_release.sh # Download speaker ./tasks/R2R/snapshots/release/download_follower_release.sh # Download follower
ستحفظ البرامج النصية أعلاه النماذج التي تم تنزيلها ضمن ./tasks/R2R/snapshots/release/
. لاستخدام هذه النماذج التي تم تنزيلها، قم بتعيين بادئات مسار المتحدث والمتابع كما يلي:
export SPEAKER_PATH_PREFIX=tasks/R2R/snapshots/release/speaker_final_release export FOLLOWER_PATH_PREFIX=tasks/R2R/snapshots/release/follower_final_release
كما يمكن تدريب المتابع فقط على بيانات التدريب الأصلية دون استخدام البيانات المعززة من المتحدث كما يلي:
python tasks/R2R/train.py
قم بتعيين بادئات المسار لنموذج المتحدث المُدرب والتابع:
# the path prefixes to the trained speaker and follower model # change these path prefixes if you are using downloaded models. export SPEAKER_PATH_PREFIX=tasks/R2R/speaker/snapshots/speaker_teacher_imagenet_mean_pooled_train_iter_20000 export FOLLOWER_PATH_PREFIX=tasks/R2R/snapshots/follower_with_pretraining_sample_imagenet_mean_pooled_train_iter_11100
قم بإنشاء تنبؤات المسار الأعلى مرتبة مع الاستدلال العملي:
# Specify the path prefix to the output evaluation file export EVAL_FILE_PREFIX=tasks/R2R/eval_outputs/pragmatics python tasks/R2R/rational_follower.py $FOLLOWER_PATH_PREFIX $SPEAKER_PATH_PREFIX --batch_size 15 --beam_size 40 --state_factored_search --use_test_set --eval_file $EVAL_FILE_PREFIX
سيؤدي هذا إلى إنشاء ملفات التنبؤ في دليل EVAL_FILE_PREFIX
، وكذلك طباعة الأداء على تقسيمات val_seen
و val_unseen
. (سيكون الأداء المعروض صفرًا في قسم test
، نظرًا لأن ملف JSON للاختبار لا يحتوي على مواقع أهداف الحقيقة الأرضية.) تحتوي المسارات المتوقعة باستخدام البرنامج النصي أعلاه فقط على المسارات ذات الدرجات الأعلى بين جميع المسارات المرشحة، مرتبة باستدلال عملي . معدلات النجاح المتوقعة هي 70.1% و 54.6% في val_seen
و val_unseen
على التوالي.
للمشاركة في تحدي التنقل بين الرؤية واللغة، أضف خيار --physical_traversal
لإنشاء تنبؤات مسار معقولة ماديًا مع الاستدلال العملي:
# Specify the path prefix to the output evaluation file export EVAL_FILE_PREFIX=tasks/R2R/eval_outputs/pragmatics_physical python tasks/R2R/rational_follower.py $FOLLOWER_PATH_PREFIX $SPEAKER_PATH_PREFIX --batch_size 15 --beam_size 40 --state_factored_search --use_test_set --physical_traversal --eval_file $EVAL_FILE_PREFIX
سيؤدي هذا إلى إنشاء ملفات التنبؤ في دليل EVAL_FILE_PREFIX
. يمكن إرسال ملفات التنبؤ هذه إلى https://evalai.cloudcv.org/web/challenges/challenge-page/97/overview للتقييم. نسبة النجاح المتوقعة في مجموعة اختبار التحدي هي 53.5%.
والفرق الرئيسي مع --physical_traversal
هو أن المسارات التي تم إنشاؤها تحتوي الآن على جميع الحالات التي زارتها خوارزمية البحث بالترتيب الذي تم اجتيازها . يقوم الوكيل بتوسيع كل مسار خطوة للأمام في كل مرة، ثم يقوم بالتبديل لتوسيع المسار التالي. تم شرح التفاصيل في الملحق E في ورقتنا.
بالإضافة إلى ذلك، من الممكن أيضًا تقييم أداء المتابع وحده، باستخدام فك التشفير الجشع (بدون الاستدلال العملي من المتحدث):
export EVAL_FILE_PREFIX=tasks/R2R/eval_outputs/greedy python tasks/R2R/validate.py $FOLLOWER_PATH_PREFIX --batch_size 100 --use_test_set --eval_file $EVAL_FILE_PREFIX
سيؤدي هذا إلى إنشاء ملفات التنبؤ في دليل EVAL_FILE_PREFIX
، وكذلك طباعة الأداء على تقسيمات val_seen
و val_unseen
. (سيكون الأداء المعروض صفرًا في قسم test
، نظرًا لأن ملف JSON للاختبار لا يحتوي على مواقع أهداف حقيقية.) تبلغ معدلات النجاح المتوقعة 66.4% و35.5% في val_seen
و val_unseen
، على التوالي.
تم بناء هذا المستودع على قاعدة بيانات Matterport3DSimulator.