【超详细】VLN算法学习:AZHP——使用自适应区域分层规划器来实现层次化导航的目的Adaptive Zone-aware Hierarchical Planner for VLN

VLN算法学习:AZHP——自适应区域分层规划器Adaptive Zone-aware Hierarchical Planner for Vision-Language Navigation

【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

综述

论文题目:《Adaptive Zone-aware Hierarchical Planner for Vision-Language Navigation》

扫描二维码关注公众号,回复: 17598289 查看本文章

论文链接:http://openaccess.thecvf.com/content/CVPR2023/papers/Gao_Adaptive_Zone-Aware_Hierarchical_Planner_for_Vision-Language_Navigation_CVPR_2023_paper.pdf

源码链接:https://github.com/chengaopro/AZHP

论文出处:CVPR 2023、刘偲老师团队

关键词:分层导航

背景

  VLN给定的指令往往具有层次性,比如一个指令“Bring me the white pillow"(给我一个白色枕头),这表明智能体需要完成几个潜在的子目标,例如:离开当前房间、找到卧室、找到白色枕头。因此,VLN任务本质上是一种分层导航的过程,我们可以在导航的过程中设置多个子目标,之后逐一完成所有的子目标导航任务,进一步完成整个导航任务,在本文中,子目标的划分称为高阶任务,子目标的执行称为低阶任务。其次,子目标是指一个子区域内的目标,因此需要智能体可以将场景划分为几个区域,并为当前的子目标选择合适的区域,在子区域中执行低阶的动作规划。注意:子目标的选择不仅取决于指令,还需要智能体根据当前的状态环境来设置合适的子目标,这意味着智能体在导航过程中需要自适应地进行区域的划分和选择。例如在下图中,当智能体在客厅时,子目标应该设置为:在出口区域(红色区域)找到出口。第三,由于子目标的设置是没有标签的(无法使用模范学习来优化这一过程),因此如何学习这一高阶策略网络也是一个值得研究的课题。

  当前主流的VLN算法主要为单步规划方法本质上都是单步规划框架,每次根据动作空间和全局目标直接执行一步导航操作,这种范式没有明确地模拟VLN任务的分层规划特性,很大程度上限制了长期决策能力。

5ddfd7e8f2e54240a10b5365bd11b0af

主要思想

  本文提出了一种自适应区域感知分层规划器(Adaptive Zone-aware Hierarchical Planner, AZHP),为VLN任务构建一种新的分层规划框架。AZHP将导航过程建模为包含高阶动作和低阶动作的分层动作制定过程,在导航过程中,高阶动作的目标是设置子目标,低阶动作的目标是完成相应的子目标。具体地来说,高阶动作将整个场景划分为不同的区域,并根据当前状态选择合适的区域进行导航,例如图1©中的绿色区域(走廊),之后应用低阶动作在选定的区域内多步执行特定的导航决策,直至到达子目标。
  针对高阶动作的预测,作者提出了一种场景自适应感知区域划分方法(Scene-aware adaptive Zone Partition, SZP)。本文的方法是基于DUET算法来实现的,在该算法中,每执行一步动作,都会更新一次全局拓扑图,全局拓扑图记录了历史轨迹和观测结果,在此基础上,作者根据每个视点的位置和观测值,动态地将全局拓扑图自适应地划分为多个区域。同时,作者设计了一种目标导向的区域选择方法(Goal-oriented Zone Selection, GZS),根据指令和区域属性来选择特定的区域当做下一个子目标区域。此外,作者还设计了状态切换模块(State-Switcher Module, SSM)来判断当前子目标是否已经实现,如果已经实现就切换到下一个子目标。
  由于高阶动作的训练没有直接的标签进行监督,作者提出了分层强化学习(Hierarchical Reinforcement Learning, HRL)来优化这一高阶过程。

补充:本文的分层导航相当于对整个导航任务做一个解耦,想要直接完成整个导航任务是比较困难的,因为一条完整的路径比较长,中途的噪声干扰会给整个导航任务带来非常大的不确定性。对导航任务做解耦,将一个复杂的任务拆解成多个简单的子任务,逐一完成简单的子任务,最终实现复杂的导航目标,是VLN任务中非常常见的算法优化策略,而本文中是在轨迹区域层面实现解耦目的。

方法

分层规划概述

  VLN任务具有分层特性,它由一个高阶过程(即子目标的设置)和一个低阶过程(即子目标的执行)组成,子目标(sub-goal)是指到达一个子区域(sub-region)的目标。本文提出了一个自适应区域感知的分层规划器(Adaptive Zone-aware Hierarchical Planner, AZHP)来建模这一分层规划的过程,具体地来说,AZHP由两个策略网络组成,具体如下图所示。其中,高阶策略 π H ( ⋅ ) \pi^H(\cdot) πH()学习设置子目标 g H g^H gH,低阶策略 π L ( ⋅ ) \pi^L(\cdot) πL()相应地学习实现 g H g^H gH。在导航过程中,每执行一步观测,都会利用DUET算法中的策略来记录历史轨迹和当前观测值,生成全局的拓扑图 G t G_t Gt

​  具体地来说,在时间步 t t t时,利用学习到的高阶策略网络 π H ( a t H ∣ G t ; θ H ) \pi^H(a^H_t|G_t;\theta^H) πH(atHGt;θH)来获得 a t H a^H_t atH(例如区域划分、区域选择),其中 θ H \theta^H θH为网络的参数。经过区域划分和选择后,会得到一组选定的区域 G t ∗ G^*_t Gt,其中 G t ∗ G^*_t Gt G t G_t Gt的子图。之后分多步利用低阶策略网络 π L ( a t L ∣ G t ∗ ; θ L ) \pi^L(a^L_t|G^*_t;\theta^L) πL(atLGt;θL)得到低阶动作 a t L a^L_t atL,也就是导航决策,智能体只在子图 G t ∗ G^*_t Gt中导航决策,最后,作者提出了一个状态切换模型(State-Switcher Module, SSM)来学习子目标 g H g^H gH是否达到,并且在导航中是否切换到下一个子目标。

在这里插入图片描述

分层强化学习

  由于没有用于训练高阶策略 π H ( ⋅ ) \pi^H(\cdot) πH()的专家演示(标签),作者在这里提出了一种分层强化学习策略来优化该网络。首先,作者设计了一个低阶策略的奖励函数 π L ( ⋅ ) \pi^L(\cdot) πL(),在第 t t t步导航中,智能体会执行一个低阶动作 a t L a^L_t atL,奖励 r t L r^L_t rtL定义为:

  • 当离目标位置的距离 d i s t dis_t dist发生变化时,当前步骤的奖励为: r t L = − ( d i s t − d i s t − 1 ) r^L_t=-(dis_t-dis_{t-1}) rtL=(distdist1)
  • 当智能体停在目标位置时,当前步骤的奖励为: r t = 10 r_t=10 rt=10,否则为 − 10 -10 10
  • 当智能体路过目标位置但是不停止时,当前步骤的奖励为: r t = − 10 r_t=-10 rt=10

之后通过累加所有的奖励,得到高阶策略的奖励:
r t H = ∑ t = s t a r t e n d r t L r^H_t=\sum^{end}_{t=start}r^L_t rtH=t=startendrtL
其中, [ s t a r t , e n d ] [start,end] [start,end]是当前子目标的时间段。

  之后采用时序差分算法(Temporal Difference algorithm, TD)来优化两个策略网络(基于 r t H r^H_t rtH r t L r^L_t rtL),以高阶策略的优化过程为例。技术上,利用MLP网络来构建状态价值评估函数 v H ( G t ; W H ) v^H(G_t;W^H) vH(Gt;WH),用于预测每个状态的价值量 v H v^H vH,其中 W H W^H WH是可学习的参数。状态价值函数用于评估当前状态的好坏,之后计算TD目标 y t H y^H_t ytH和误差 δ t H \delta^H_t δtH
y t H = r t H + γ ⋅ v H ( G t + 1 ; W H ) δ t H = v H ( G t ; W H ) − y t H y^H_t = r^H_t+\gamma\cdot v^H(G_{t+1};W^H)\\ \delta^H_t=v^H(G_t;W^H)-y^H_t ytH=rtH+γvH(Gt+1;WH)δtH=vH(Gt;WH)ytH
其中 γ \gamma γ为收益因子,最后 π H ( ⋅ ) \pi^H(\cdot) πH() v H ( ⋅ ) v^H(\cdot) vH()可以通过梯度下降法来优化:
θ H ← θ H − β ⋅ δ t H ⋅ ∂ ∂ θ H ln ⁡ ( π H ( a t H ∣ G t ; θ H ) ) , W H ← W H − α ⋅ δ t H ⋅ ∂ ∂ W H ln ⁡ ( v H ( G t ; W H ) ) , {\theta}^H\leftarrow{\theta}^H-\beta\cdot\delta_t^H\cdot\frac{\partial}{\partial{\theta}^H}\ln(\pi^H(a_t^H|G_t;{\theta}^H)),\\{W}^H\leftarrow{W}^H-\alpha\cdot\delta_t^H\cdot\frac{\partial}{\partial{W}^H}\ln(v^H(G_t;{W}^H)), θHθHβδtHθHln(πH(atHGt;θH)),WHWHαδtHWHln(vH(Gt;WH)),
其中 α \alpha α β \beta β是超参数。对于优化 W H W^H WH,是朝着降低误差 δ t H \delta^H_t δtH的方向进行,也就是让状态价值评估函数在评估状态价值方面越来越准。

[外链图片转存中...(img-M39QHdHr-1734781155547)]

高阶策略

​  为了自适应地为子目标设置子区域,作者提出了一种高阶策略网络,该网络包括场景感知的自适应区域划分(Scene-aware adaptive Zone Partition, SZP)和目标导向的区域选择(Goal-oriented Zone Selection, GZS)。

场景感知的自适应区域划分(SZP)

​  在时间步长 t t t处,作者在当前的视角图中应用目标检测器来提取目标级别的视觉特征,之后参考DUET算法,采用跨模态Transformer来将当前视角/目标的视觉语言特征融入拓扑图 G t = ( H t , E t ) G_t=(H_t,E_t) Gt=(Ht,Et)中, G t G_t Gt包括 N t v N_t^v Ntv个节点,其中 H t ∈ R N t v × D h , E t ∈ R N t v × N t v H_t\in \mathbb R^{N_t^v\times D_h}, E_t\in\mathbb R^{N^v_t\times N^v_t} HtRNtv×Dh,EtRNtv×Ntv分别表示节点特征矩阵和加权邻接矩阵, E t E_t Et初始化为相应视点之间的距离。SZP的目标是在 G t G_t Gt上进行分区,得到一组子视图 G t i i = 1 N t z {G^i_t}^{N^z_t}_{i=1} Gtii=1Ntz,其中 N t z N^z_t Ntz表示分区序号。本算法在导航过程中自适应设置 N t z N^z_t Ntz G t G_t Gt越大,对应划分的区域就应该越多,计算公式为:
N t z = ⌈ v i s i t _ l e n t × r a t i o ⌉ N_t^z=\lceil visit\_len_t\times ratio\rceil Ntz=visit_lent×ratio
其中 v i s i t _ l e n t visit\_len_t visit_lent表示当前轨迹的长度, r a t i o ∈ ( 0 , 1 ) ratio\in(0,1) ratio(0,1)为超参数。

​  对于区域的划分,首先将所有的节点视为区域中心(zone centre),目标是为每个节点生成对应区域的特征 Z t = { z t i } i = 1 N t v Z_t=\{z^i_t\}_{i=1}^{N^v_t} Zt={ zti}i=1Ntv(具体见图3中的(a)子图),考虑到 z t i z^i_t zti应该代表其周围的状态,本算法以一种自适应的方式融合领域特征,具体地来说,我们计算节点特征 h t j ∈ R 1 × D h h^j_t\in\mathbb R^{1\times D_h} htjR1×Dh对节点特征 h t i ∈ R 1 × D h h^i_t\in\mathbb R^{1\times D_h} htiR1×Dh,的关系分数 s t i , j s^{i,j}_t sti,j
s t i , j = { σ ( [ h t i W H , h t j ] W S ) e t i , j < T H R d − inf ⁡ else s_t^{i,j}=\begin{cases}\sigma([h_t^iW_H,h_t^j]W_S)&e_t^{i,j}<THR_d\\-\inf&\text{else}\end{cases} sti,j={ σ([htiWH,htj]WS)infeti,j<THRdelse
其中 σ ( ⋅ ) \sigma(\cdot) σ()为激活函数, [ , ] [,] [,]为拼接操作, W H ∈ R D h × D h W_H\in\mathbb R^{D_h\times D_h} WHRDh×Dh W S ∈ R 2 D h × 1 W_S\in\mathbb R^{2D_h\times1} WSR2Dh×1分别为可学习的参数, e t i , j e^{i,j}_t eti,j为节点 i i i和节点 j j j之间的距离,预设一个距离阈值 T H R d THR_d THRd,当节点之间的距离超过阈值时,我们认为该节点不是相邻关系,经过上述运算之后,会得到关系分数矩阵 S t ∈ R N t v × N t v S_t\in\mathbb R^{N^v_t\times N^v_t} StRNtv×Ntv,之后再经过softmax运算对关系分数矩阵做标准化操作,具体过程可以表示为 S t ← s o f t m a x ( S t ) S_t\leftarrow softmax(S_t) Stsoftmax(St),之后通过 Z t = S t H t Z_t=S_tH_t Zt=StHt得到区域特征,即关系分数矩阵和节点特征矩阵相乘。

  其次,如图3(b)所示,通过计算节点 i i i的代表性得分 ϕ t i \phi^i_t ϕti,我们对区域特征 z t i z^i_t zti进行分级:
ϕ t i = σ ( z t i W 1 + ∑ ( z t i W 2 − z t j W 3 ) ) , e t i , j < T H R d \phi_t^i=\sigma(z_t^iW_1+\sum(z_t^iW_2-z_t^jW_3)),e_t^{i,j}<THR_d ϕti=σ(ztiW1+(ztiW2ztjW3)),eti,j<THRd
其中 W 1 , W 2 , W 3 ∈ R D h × 1 W_1,W_2,W_3\in\mathbb R^{D_h\times 1} W1,W2,W3RDh×1为可学习的参数, ( z t i W 2 − z t j W 3 ) (z^i_tW_2-z^j_tW_3) (ztiW2ztjW3)表示两个区域之间的差异线索,由于我们预计将 G t G_t Gt划分为 N t z N^z_t Ntz个子区域,因此我们根据 ϕ t \phi_t ϕt选择分数最高的前 N t z N^z_t Ntz个区域中心,我们将区域中心的索引表示为 i ^ t \hat{i}_t i^t,因此区域内节点的概率分布为 P t = s o f t m a x i ^ t ( S t ) ∈ R N t v × N t z P_t=softmax_{\hat{i}_t}(S_t)\in\mathbb R^{N^v_t\times N^z_t} Pt=softmaxi^t(St)RNtv×Ntz(每个区域在内部做一次归一化操作),之后根据 P t P_t Pt和距离将其他节点分配到选定的区域中心(具体如图3©所示)。因此,我们将 G t G_t Gt划分为 N t z N_t^z Ntz个子区域 { G t i } i = 1 N t z \{G^i_t\}^{N^z_t}_{i=1} { Gti}i=1Ntz,其中 G t i = ( H t i , E t i ) G^i_t=(H^i_t,E^i_t) Gti=(Hti,Eti) H t i H^i_t Hti E t i E^i_t Eti分别表示第 i i i个区域内的节点特征和邻接矩阵。

目标导向的区域选择(GZS)

​  本模块用于从 { G t i } i = 1 N t z \{G^i_t\}^{N^z_t}_{i=1} { Gti}i=1Ntz中选择一个区域 G t ∗ G^*_t Gt来进行进一步的低阶导航操作。首先,利用文本编码器对语言指令进行编码,得到文本编码特征 I ∈ R L × D h I\in\mathbb R^{L\times D_h} IRL×Dh,其中 L L L为语言指令长度。我们将生成的指令的句子级特征表示为 I ^ ∈ R 1 × D h \hat I\in\mathbb R^{1\times D_h} I^R1×Dh(这是什么意思?加个上标是什么意思,再看一下论文)。从本质上来说,我们希望所筛选的子目标区域是以指令为导向的,因此,如图3(d)所示,我们通过内部生产函数为每个区域计算一个区域分数:
z o n e _ s c o r e i = σ ( I ^ W I ) ⋅ σ ( z t i W Z ) T zone\_score_i=\sigma(\hat{I}W_I)\cdot\sigma(z^i_tW_Z)^T zone_scorei=σ(I^WI)σ(ztiWZ)T
其中, W I , W Z ∈ R D h × D w W_I,W_Z\in\mathbb R^{D_h\times D_w} WI,WZRDh×Dw为可学习的参数。因此,我们选择得分最高的区域 G t ∗ = ( H t ∗ , E t ∗ ) G^*_t=(H^*_t,E^*_t) Gt=(Ht,Et)当做当前子目标的导航区域,其中 N t ∗ N^*_t Nt为节点数, H t ∗ H^*_t Ht E t ∗ E^*_t Et分别为节点特征和邻接矩阵。选择完子区域之后,智能体沿着最短的路径移动到选定的区域中心,并在区域内执行后续的低阶动作预测。

低阶策略

导航决策

​  在时间步长为 t t t时,低阶策略网络 π L ( ⋅ ) \pi^L(\cdot) πL()产生低阶动作 a t L a^L_t atL(即导航决策)。具体地来说,只有当前区域 G t ∗ = ( H t ∗ , E t ∗ ) G^*_t=(H^*_t,E^*_t) Gt=(Ht,Et)中的视点才能作为导航动作。我们采用多层交叉注意力来对 G t ∗ G^*_t Gt中的每个节点特征 h t ∗ i h^{*i}_t hti进行评估,并选择得分最高的视点 a t L a^L_t atL作为导航目标,过程可以表示为:
a t L = a r g max ⁡ i ∈ G t ∗ C o r s s A t t e n t i o n ( h t ∗ i , I ) a^L_t=arg\max_{i\in G^*_t}CorssAttention(h^{*i}_t,I) atL=argiGtmaxCorssAttention(hti,I)
这里具体的节点动作预测过程可以参考DUET算法。

状态切换模块(SSM)

​  为了确定是否将当前状态切换到下一个子目标,即应用另一组高阶和低阶动作,作者在这里提出了SSM。具体地来说,我们对时间步 t t t处的状态分数做评估:
s t a t e _ s c o r e t = sigmoid ( σ ( I ^ W I ′ ) ⋅ σ ( h t c W S ) ) state\_score_t=\text{sigmoid}(\sigma(\hat IW'_I)\cdot\sigma(h^c_tW_S)) state_scoret=sigmoid(σ(I^WI)σ(htcWS))
其中 h i c ∈ R 1 × D h h^c_i\in\mathbb R^{1\times D_h} hicR1×Dh为当前视点的特征, W I ′ , W S ∈ R D h × D w W_I',W_S\in\mathbb R^{D_h\times D_w} WI,WSRDh×Dw为可学习的参数。然后,我们为状态分数设置阈值 T H R S ∈ [ 0 , 1 ] THR_S\in[0,1] THRS[0,1],用于判断是否切换到下一个子目标,即是否重新划分整个图 G G G并重新选择 G ∗ G^* G进行导航,如果智能体保持当前子目标,它将通过低级动作继续在当前区域中进行导航,并将新观察到的视点添加到当前区域的图结构 G t ∗ G^*_t Gt以进行更新。

训练目标

  训练损失主要包括两部分:高阶策略网络的辅助损失和低阶策略网络的行动损失。

辅助损失

​  对于高阶动作,作者采用分层强化学习和辅助损失来训练高阶策略网络,辅助损失包括区域划分损失 L z p L_{zp} Lzp和区域选择损失 L z s L_{zs} Lzs。对于 L z p L_{zp} Lzp,我们用启发式的方法划分 G t G_t Gt,并将结果作为分区标签,具体地来说,作者通过公式得到 N t z N^z_t Ntz区域的中心索引 i ‾ t \overline{i}_t it
i ‾ t = { r o u n d ( 1 + ( k − 0.5 ) × s t e p t ) ∣ k = 1 , … , N t z } \overline{i}_t=\{round(1+(k-0.5)\times step_t)|k=1,\dots,N^z_t\} it={ round(1+(k0.5)×stept)k=1,,Ntz}
其中, r o u n d ( ⋅ ) round(\cdot) round()表示四舍五入函数, s t e p t = ( v i s i t _ l e n t − 1 ) / N t z step_t=(visit\_len_t-1)/N^z_t stept=(visit_lent1)/Ntz i ‾ t k \overline{i}_t^k itk表示第 k k k个区域中心的索引,该运算过程会使区域中心分布均匀。之后通过最近邻搜索算法来计算节点 j j j的区域标签 z ‾ t j \overline{z}_t^j ztj
z ‾ t j = arg ⁡ min ⁡ i ∈ i ‾ t e t i , j \overline{z}^j_t=\arg\min_{i\in\overline{i}_t}e^{i,j}_t ztj=argiitmineti,j
此外,节点属于该分区的概率分布为 P t P_t Pt,其中 P t ( i , j ) P_t(i,j) Pt(i,j)为节点 j j j属于分区 i i i的可能性, L z p L_{zp} Lzp的计算过程可以表示为:
L z p = ∑ t = 1 T ∑ j = 1 N t v − log ⁡ P t ( j , z ‾ t j ) L_{zp}=\sum^T_{t=1}\sum^{N^v_t}_{j=1}-\log P_t(j,\overline{z}^j_t) Lzp=t=1Tj=1NtvlogPt(j,ztj)
​  对于 L z s L_{zs} Lzs,在时间步 t t t时,我们取 i ‾ t ∗ \overline{i}^*_t it为标签,其中 i ‾ t ∗ \overline{i}^*_t it为标签GT视点所在区域的索引号:
L z s = ∑ t = 1 T − log ⁡ [ s o f t m a x ( z o n e _ s c o r e ) ] i ‾ t ∗ L_{zs}=\sum^T_{t=1}-\log[softmax(zone\_score)]_{\overline{i}^*_t} Lzs=t=1Tlog[softmax(zone_score)]it
课程学习策略:由于所提出的 L z p L_{zp} Lzp L z s L_{zs} Lzs不基于GT标签,仅提供启发式监督,因此,我们在训练阶段开始时应用它们以提高初始学习的鲁棒性。之后,我们利用HRL对网络进行训练,旨在获得更灵活的高层策略。

行动损失:这一模块主要用低阶的导航动作损失来计算:
L n a v = − ∑ t = 1 T [ log ⁡ p ( a ‾ t ) + log ⁡ p ( a ‾ t π ) ] L_{nav}=-\sum^T_{t=1}[\log p(\overline{a}_t)+\log p(\overline a^{\pi}_t)] Lnav=t=1T[logp(at)+logp(atπ)]
其中 a ‾ t \overline{a}_t at为教师动作, a ‾ t π \overline{a}^{\pi}_t atπ为启发式动作标签(例如:从当前节点到目标节点的最短路径)。另外再采用 L o g = − log ⁡ p ( o ‾ ) L_{og}=-\log p(\overline o) Log=logp(o)作为object grounding损失,其中 o ‾ \overline o o为真实的对象。因此,总损失可以表示为:
L = λ 1 L z p + λ 2 L z s + λ 3 L n a v + L o g L=\lambda_1L_{zp}+\lambda_2L_{zs}+\lambda_3L_{nav}+L_{og} L=λ1Lzp+λ2Lzs+λ3Lnav+Log

补充:该算法同样分为预训练和微调两个阶段,具体用到的辅助损失与DUET中使用的相同。

实验结果

REVERIE数据集
在这里插入图片描述
R2R数据集

在这里插入图片描述

以上仅是笔者个人见解,若有问题,欢迎指正。