【VLN入门】一文搞懂视觉语言导航:从任务介绍到基本算法讲解
【VLN入门介绍】
一文搞懂视觉语言导航,从任务介绍到基本算法讲解:https://blog.csdn.net/qq_50001789/article/details/144676313
【VLN算法笔记】
DUET(CVPR2022),首篇使用Transformer来建模全局图节点相关性的工作:https://blog.csdn.net/qq_50001789/article/details/144632851
AZHP(CVPR2023),使用自适应区域分层规划器来实现层次化导航的目的:https://blog.csdn.net/qq_50001789/article/details/144635128
GridMM(ICCV2023),使用网格记忆图来表征历史轨迹中的场景空间关系:https://blog.csdn.net/qq_50001789/article/details/144652403
【VLN辅助任务】
MLM、SAP、SAR、SPREL——预训练、微调中常用的提点策略:https://blog.csdn.net/qq_50001789/article/details/144633984
【VLN环境配置】
Matterport3DSimulator——用于视觉语言导航算法研发的仿真环境配置:https://blog.csdn.net/qq_50001789/article/details/142621259
任务介绍
视觉语言导航任务就是给定智能体一个语言指令(instruction),之后让智能体参考指令内容,导航到指定的目标地点,与传统基于SLAM的导航策略不同,智能体并没有预先见过这个环境,只能通过对环境的观测(例如RGB图、深度图),再结合语言指令的意图,在环境中做探索,慢慢探索到指定的位置。
例如:Leave the bedroom, and enter the kitchen. Walk forward, and take a left at the couch. Stop in front of the window.(离开卧室,进入厨房。往前走,在沙发那儿向左拐,停在窗前。)
gif来自于:https://bringmeaspoon.org/
仿真环境
提出的最早、也是当前最主流的仿真环境为Matterport3D Simulator(简称MatterSim),主流数据集R2R、RxR、REVERIE都是基于该仿真引擎构建的。该仿真环境是基于Matterport3D[1]数据集构建的,该数据集共有90个场景,每个场景按一定的间距选取一系列视点(view),在每个视点上拍摄一组全景图,当做当前视点的观测,如下图所示,图中绿色的点为当前场景下选取的视点,每个视点间距2.25米,整个数据集共包括10800张全景图。
需要注意的是,仿真环境MatterSim是基于Matterport3D数据集构建的,该数据集又是由一系列离散的全景图构成,场景中可观测的视角有限,仅限于绿色点中,因此智能体在该仿真环境中只能在这几个可观测点之间移动,每次决策要走2.25米,并且不能走到非观测点的地方。该仿真环境的模拟能力较为有限,只能模拟离散环境,也就是只能支持离散环境下的视觉语言导航任务。本文只介绍离散环境下的导航任务,对于连续环境下的视觉语言导航任务,可以参考论文VLN-CE[2]。
将所有的视点连起来,就可以得到当前场景下的导航图(Navigation Graph),具体如下图左侧所示,每条蓝线表示一个可通行的路径,而视觉语言导航任务,就是要在语言指令的提示下,找出一条以指定视图为起点的一条路径,具体如下图右侧所示。
智能体在该场景中的姿态有三个属性:
- 所处的位置: v ∈ V v\in V v∈V,其中 V V V为当前场景下的所有视点;
- 智能体的朝向角度(左右方向,heading角度): φ ∈ [ 0 , 2 π ] \varphi\in[0,2\pi] φ∈[0,2π];
- 智能体的俯仰角度(上下方向,elevation角度: θ ∈ [ − π 2 , π 2 ] \theta\in[-\frac\pi2,\frac\pi2] θ∈[−2π,2π];
对于每一步动作,仿真环境会输出一组当前状态下的候选点集合 W t + 1 W_{t+1} Wt+1(candidate),智能体通过选择一个新的候选点 v t + 1 ∈ W t + 1 v_{t+1}\in W_{t+1} vt+1∈Wt+1与仿真环境做交互(这一过程会调整智能体的朝向和俯仰角), W t + 1 W_{t+1} Wt+1的范围满足:
W t + 1 = { v t } ∪ { v i ∈ V ∣ ⟨ v t , v i ⟩ ∈ E ∧ v i ∈ P t } W_{t+1}=\begin{Bmatrix}v_t\end{Bmatrix}\cup\begin{Bmatrix}v_i\in V | \langle v_t,v_i\rangle\in E\wedge v_i\in P_t\end{Bmatrix} Wt+1={
vt}∪{
vi∈V∣⟨vt,vi⟩∈E∧vi∈Pt