該存儲庫包含以下論文的程式碼:
D. Fried*、R. Hu*、V. Cirik*、A. Rohrbach、J. Andreas、L.-P。 Morency、T. Berg-Kirkpatrick、K. Saenko、D. Klein**、T. Darrell**,視覺和語言導航的說話者跟隨者模型。在 NeurIPS,2018 年。
@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)。
按照 https://pytorch.org/ 上的說明安裝 PyTorch(我們在實驗中使用 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 模擬器的依賴:
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 不起作用,可能是因為 Room-to-Room 資料集更改了其特徵 URL。您可以在此處找到最新的下載連結。)
在此步驟之後, img_features/
應包含ResNet-152-imagenet.tsv
。 (注意,您只需要下載從ImageNet預訓練的ResNet中提取的特徵即可執行以下實驗。不需要Places預訓練的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
完成此步驟後,會在tasks/R2R/data/
下方產生R2R_literal_speaker_data_augmentation_paths.json
。此 JSON 檔案包含由說話者模型根據訓練環境中採樣的新軌跡產生的合成指令(即我們論文中的說話者驅動的資料增強)。
或者,您可以使用./tasks/R2R/data/download_precomputed_augmentation.sh
直接下載我們預先計算的揚聲器驅動的資料增強。
結合原始訓練資料和增強訓練資料來訓練追隨者模型。
python tasks/R2R/train.py --use_pretraining --pretrain_splits train literal_speaker_data_augmentation_paths
follower將首先在原始train
環境和新的literal_speaker_data_augmentation_paths
(在上面的步驟2中產生)的組合上進行50000次迭代的訓練,然後在原始train
環境上進行20000次迭代的微調。這一步可能需要很長時間。 (在我們的本機電腦上使用單一 GPU 看起來大約需要 50 小時。)
上述所有命令都在單一 GPU 上運行。您可以透過設定CUDA_VISIBLE_DEVICES
環境變數來選擇特定的 GPU(例如, 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 檔案不包含真實目標位置。)使用上述腳本預測的軌跡僅包含所有候選軌跡中得分最高的軌跡,並透過實用推理進行排名。 val_seen
和val_unseen
的預期成功率分別為 70.1% 和 54.6%。
要參加視覺和語言導航挑戰賽,請新增--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 檔案不包含真實目標位置。) val_seen
和val_unseen
預期成功率分別為 66.4% 和 35.5%。
該存儲庫基於 Matterport3DSimulator 程式碼庫建置。