Этот репозиторий содержит код для следующей статьи:
Д. Фрид*, Р. Ху*, В. Чирик*, А. Рорбах, Ж. Андреас, Л.-П. Моренси, Т. Берг-Киркпатрик, К. Саенко, Д. Кляйн**, Т. Даррел**, Модели говорящего-последователя для зрительно-языковой навигации . в 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).
Установите 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:
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 Image Features и извлеките их в 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, предварительно обученные Places, или реальные изображения не требуются.)
Загрузите набор данных 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 итераций. Этот шаг может занять много времени. (При использовании одного графического процессора на нашей локальной машине это выглядит примерно 50 часов.)
Все приведенные выше команды выполняются на одном графическом процессоре. Вы можете выбрать конкретный графический процессор, установив переменную среды CUDA_VISIBLE_DEVICES
(например, export CUDA_VISIBLE_DEVICES=1
, чтобы использовать графический процессор 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
соответственно.
Для участия в конкурсе 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
заключается в том, что теперь сгенерированные траектории содержат все состояния, посещенные алгоритмом поиска, в том порядке, в котором они были пройдены . Агент расширяет каждый маршрут на шаг вперед, а затем переключается на расширение следующего маршрута. Подробности объяснены в Приложении 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.