Repositori ini berisi kode untuk makalah berikut:
D. Fried*, R. Hu*, V. Cirik*, A. Rohrbach, J. Andreas, L.-P. Morency, T. Berg-Kirkpatrick, K. Saenko, D. Klein**, T. Darrell**, Model Pembicara-Pengikut untuk Navigasi Visi-dan-Bahasa . di NeurIPS, 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} }
(*, **: menunjukkan kontribusi yang sama)
Halaman Proyek: http://ronghanghu.com/speaker_follower
Jika Anda hanya ingin menggunakan augmentasi data kami pada kumpulan data R2R tetapi tidak memerlukan model kami, Anda dapat langsung mengunduh data augmented kami di R2R (file JSON yang berisi data sintetis yang dihasilkan oleh model speaker kami) di sini. File JSON ini memiliki format yang sama dengan kumpulan data R2R asli, dengan satu instruksi sintetis per sampel lintasan baru.
Perhatikan bahwa pertama-tama kita melatih kombinasi data asli dan data tambahan, lalu menyempurnakan data pelatihan asli.
Instal Python 3 (direkomendasikan Anaconda: https://www.continuum.io/downloads).
Instal PyTorch dengan mengikuti petunjuk di https://pytorch.org/ (kami menggunakan PyTorch 0.3.1 dalam eksperimen kami).
Unduh repositori ini atau kloning secara rekursif dengan Git, lalu masukkan direktori akar repositori:
# Make sure to clone with --recursive git clone --recursive https://github.com/ronghanghu/speaker_follower.git cd speaker_follower
Jika Anda tidak mengkloning dengan flag --recursive
, Anda harus mengkloning submodul pybind secara manual dari direktori tingkat atas:
git submodule update --init --recursive
Instal dependensi untuk Simulator Matterport3D:
sudo apt-get install libopencv-dev python-opencv freeglut3 freeglut3-dev libglm-dev libjsoncpp-dev doxygen libosmesa6-dev libosmesa6 libglew-dev
Kompilasi Simulator Matterport3D:
mkdir build && cd build cmake .. make cd ../
Catatan: Repositori ini dibangun berdasarkan basis kode Matterport3DSimulator. Detail tambahan tentang Simulator Matterport3D dapat ditemukan di README_Matterport3DSimulator.md
.
Unduh Fitur Gambar ResNet Prakomputasi, dan ekstrak ke dalam 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 ..
(Jika URL di atas tidak berfungsi, kemungkinan karena kumpulan data Room-to-Room mengubah URL fiturnya. Anda dapat menemukan tautan unduhan terbaru di sini.)
Setelah langkah ini, img_features/
harus berisi ResNet-152-imagenet.tsv
. (Perhatikan bahwa Anda hanya perlu mengunduh fitur yang diekstraksi dari ResNet yang telah dilatih sebelumnya oleh ImageNet untuk menjalankan eksperimen berikut. Fitur ResNet yang telah dilatih sebelumnya oleh Tempat atau gambar sebenarnya tidak diperlukan.)
Unduh kumpulan data R2R dan sampel lintasan kami untuk augmentasi data:
./tasks/R2R/data/download.sh
Latih model pembicara:
python tasks/R2R/train_speaker.py
Hasilkan instruksi sintetik dari model speaker terlatih sebagai augmentasi data:
# 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
Setelah langkah ini, R2R_literal_speaker_data_augmentation_paths.json
dibuat di bawah tasks/R2R/data/
. File JSON ini berisi instruksi sintetik yang dihasilkan oleh model speaker pada sampel lintasan baru di lingkungan kereta (yaitu augmentasi data yang digerakkan oleh speaker dalam makalah kami).
Alternatifnya, Anda dapat langsung mengunduh augmentasi data berbasis speaker yang telah dihitung sebelumnya dengan ./tasks/R2R/data/download_precomputed_augmentation.sh
.
Latih model pengikut dengan kombinasi data pelatihan asli dan tambahan.
python tasks/R2R/train.py --use_pretraining --pretrain_splits train literal_speaker_data_augmentation_paths
Pengikut pertama-tama akan dilatih tentang kombinasi lingkungan train
asli dan literal_speaker_data_augmentation_paths
baru (dihasilkan pada Langkah 2 di atas) untuk 50.000 iterasi, dan kemudian disesuaikan dengan lingkungan train
asli untuk 20.000 iterasi. Langkah ini mungkin memakan waktu lama. (Sepertinya sekitar 50 jam menggunakan satu GPU di mesin lokal kami.)
Semua perintah di atas dijalankan pada satu GPU. Anda dapat memilih GPU tertentu dengan mengatur variabel lingkungan CUDA_VISIBLE_DEVICES
(misalnya export CUDA_VISIBLE_DEVICES=1
untuk menggunakan GPU 1).
Anda dapat langsung mengunduh model pembicara dan model pengikut terlatih kami
./tasks/R2R/snapshots/release/download_speaker_release.sh # Download speaker ./tasks/R2R/snapshots/release/download_follower_release.sh # Download follower
Skrip di atas akan menyimpan model yang diunduh di bawah ./tasks/R2R/snapshots/release/
. Untuk menggunakan model yang diunduh ini, atur awalan jalur speaker dan pengikut sebagai berikut:
export SPEAKER_PATH_PREFIX=tasks/R2R/snapshots/release/speaker_final_release export FOLLOWER_PATH_PREFIX=tasks/R2R/snapshots/release/follower_final_release
Seseorang juga dapat melatih pengikut hanya pada data pelatihan asli tanpa menggunakan data tambahan dari pembicara sebagai berikut:
python tasks/R2R/train.py
Tetapkan awalan jalur untuk model pembicara dan pengikut terlatih:
# 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
Hasilkan prediksi lintasan peringkat teratas dengan inferensi pragmatis:
# 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
Ini akan menghasilkan file prediksi di direktori EVAL_FILE_PREFIX
, dan juga mencetak kinerja pada pemisahan val_seen
dan val_unseen
. (Kinerja yang ditampilkan akan menjadi nol pada pemisahan test
, karena file JSON pengujian tidak berisi lokasi target kebenaran dasar.) Lintasan yang diprediksi dengan skrip di atas hanya berisi lintasan dengan skor tertinggi di antara semua kandidat lintasan, yang diberi peringkat dengan inferensi pragmatis . Tingkat keberhasilan yang diharapkan masing-masing adalah 70,1% dan 54,6% pada val_seen
dan val_unseen
.
Untuk berpartisipasi dalam Tantangan Navigasi Visi-dan-Bahasa, tambahkan opsi --physical_traversal
untuk menghasilkan prediksi lintasan yang masuk akal secara fisik dengan inferensi pragmatis:
# 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
Ini akan menghasilkan file prediksi di direktori EVAL_FILE_PREFIX
. File prediksi ini dapat dikirimkan ke https://evalai.cloudcv.org/web/challenges/challenge-page/97/overview untuk evaluasi. Tingkat keberhasilan yang diharapkan pada set tes tantangan adalah 53,5%.
Perbedaan utama dengan --physical_traversal
adalah sekarang lintasan yang dihasilkan berisi semua keadaan yang dikunjungi oleh algoritma pencarian sesuai urutan lintasannya . Agen memperluas setiap rute selangkah demi selangkah, lalu beralih untuk memperluas rute berikutnya. Rinciannya dijelaskan pada Lampiran E dalam makalah kami.
Selain itu, dimungkinkan juga untuk mengevaluasi kinerja pengikut saja, menggunakan decoding serakah (tanpa kesimpulan pragmatis dari pembicara):
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
Ini akan menghasilkan file prediksi di direktori EVAL_FILE_PREFIX
, dan juga mencetak kinerja pada pemisahan val_seen
dan val_unseen
. (Kinerja yang ditampilkan akan nol pada pemisahan test
, karena file JSON pengujian tidak berisi lokasi target kebenaran dasar.) Tingkat keberhasilan yang diharapkan masing-masing adalah 66,4% dan 35,5% pada val_seen
dan val_unseen
.
Repositori ini dibangun berdasarkan basis kode Matterport3DSimulator.