このリポジトリには、次の論文のコードが含まれています。
D. フリード*、R. フー*、V. シリク*、A. ロールバッハ、J. アンドレアス、L.-P. Morency、T. Berg-Kirkpatrick、K. Saenko、D. Klein**、T. Darrell**、視覚と言語ナビゲーションのためのスピーカー フォロワー モデル。 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} }
(*、**: 同等の貢献を示します)
プロジェクトページ: http://ronghanghu.com/speaker_follower
R2R データセットでデータ拡張のみを使用したいが、モデルは必要ない場合は、R2R で拡張データ (スピーカー モデルによって生成された合成データを含む JSON ファイル) をここから直接ダウンロードできます。この JSON ファイルは元の R2R データセットと同じ形式で、サンプリングされた新しい軌道ごとに 1 つの合成命令が含まれています。
最初に元のデータと拡張データの組み合わせでトレーニングし、次に元のトレーニング データで微調整したことに注意してください。
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 シミュレーターの詳細については、 README_Matterport3DSimulator.md
を参照してください。
Precomputing 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
この手順の後、 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 で生成) の組み合わせで 50,000 回の反復でトレーニングされ、次に元のtrain
環境で 20,000 回の反復で微調整されます。このステップには長い時間がかかる場合があります。 (ローカル マシンで 1 つの GPU を使用すると、約 50 時間かかるようです。)
上記のコマンドはすべて 1 つの GPU 上で実行されます。 CUDA_VISIBLE_DEVICES
環境変数を設定することで、特定の GPU を選択できます (例: GPU 1 を使用するには、 export CUDA_VISIBLE_DEVICES=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
分割でのパフォーマンスも出力されます。 (テスト JSON ファイルにはグラウンド トゥルース ターゲットの位置が含まれていないため、 test
分割では表示されるパフォーマンスはゼロになります。) 上記のスクリプトで予測された軌道には、実用的な推論でランク付けされた、すべての候補軌道の中で最高得点の軌道のみが含まれます。 。期待される成功率は、 val_seen
とval_unseen
でそれぞれ 70.1% と 54.6% です。
Vision-and-Language Navigation Challenge に参加するには、 --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
との主な違いは、生成された軌跡には、検索アルゴリズムが通過した順序で訪問したすべての状態が含まれるようになった点です。エージェントは各ルートを一度に 1 ステップずつ拡張し、次のルートの拡張に切り替えます。詳細については、本稿の付録 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
分割でのパフォーマンスも出力されます。 (テスト JSON ファイルにはグラウンド トゥルース ターゲットの場所が含まれていないため、 test
分割では表示されるパフォーマンスはゼロになります。) 期待される成功率は、 val_seen
とval_unseen
でそれぞれ 66.4% と 35.5% です。
このリポジトリは、Matterport3DSimulator コードベースに基づいて構築されています。