พื้นที่เก็บข้อมูลนี้มีรหัสสำหรับเอกสารต่อไปนี้:
ดี. ฟรายด์*, ร. ฮู*, วี. ซิริก*, เอ. โรห์บาค, เจ. แอนเดรียส, แอล.-พี. 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)
ติดตั้ง 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 Simulator:
sudo apt-get install libopencv-dev python-opencv freeglut3 freeglut3-dev libglm-dev libjsoncpp-dev doxygen libosmesa6-dev libosmesa6 libglew-dev
รวบรวม Matterport3D Simulator:
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
(โปรดทราบว่าคุณจะต้องดาวน์โหลดคุณลักษณะที่แยกมาจาก 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 ชั่วโมงเมื่อใช้ GPU ตัวเดียวบนเครื่องของเรา)
คำสั่งทั้งหมดข้างต้นทำงานบน GPU ตัวเดียว คุณสามารถเลือก GPU เฉพาะได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม CUDA_VISIBLE_DEVICES
(เช่น 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 ทดสอบไม่มีตำแหน่งเป้าหมายที่เป็นจริง) วิถีที่คาดการณ์ไว้ด้วยสคริปต์ข้างต้นประกอบด้วยเฉพาะ วิถีที่ได้คะแนนสูงสุด ในบรรดาวิถีผู้สมัครทั้งหมด ซึ่งจัดอันดับด้วยการอนุมานเชิงปฏิบัติ . อัตราความสำเร็จที่คาดหวังคือ 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