이 저장소에는 다음 문서에 대한 코드가 포함되어 있습니다.
D. Fried*, R. Hu*, V. Cirik*, A. Rohrbach, J. Andreas, 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 데이터 세트와 동일한 형식입니다.
먼저 원본 데이터와 증강 데이터의 조합에 대해 훈련한 다음 원본 훈련 데이터를 미세 조정했습니다.
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단계에서 생성됨)의 조합에 대해 50000번의 반복을 위해 훈련된 다음 원래의 train
환경에서 20000번의 반복을 위해 미세 조정됩니다. 이 단계는 시간이 오래 걸릴 수 있습니다. (로컬 머신에서 단일 GPU를 사용하면 약 50시간이 소요됩니다.)
위의 모든 명령은 단일 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
분할에서 표시되는 성능은 0이 됩니다.) 위 스크립트를 사용하여 예측한 궤적에는 모든 후보 궤적 중 최고 점수를 받은 궤적 만 포함되며, 실용적인 추론으로 순위가 매겨집니다. . 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
분할에 대한 성능도 인쇄됩니다. (테스트 JSON 파일에 실측 대상 위치가 포함되어 있지 않기 때문에 test
분할에서 표시된 성능은 0이 됩니다.) 예상 성공률은 val_seen
및 val_unseen
에서 각각 66.4% 및 35.5%입니다.
이 저장소는 Matterport3DSimulator 코드베이스를 기반으로 구축되었습니다.