继上次的目标驱动的视觉语义导航之后,再介绍几篇比较优秀的论文。
以下两篇论文都提出了使用context feature对当前观测进行编码的思想。
Visual Object Search by Learning Spatial Context (RA-L2020)
个人人为,这是一篇非常优秀的文章。
该论文针对视觉导航问题,提出了一种context grid的表示方式,来表示当前看到的场景和target之间的相似度。该方法具有更好的泛化性,更适合宽阔的场景,并在实验中和人类进行了比较。
论文中提出,视觉导航的巨大挑战便是在未知的场景中进行导航的泛化能力,目前的很多工作都是在不同场景中使用其独特的网络,很难在未知场景中充分泛化。针对这一问题,可以使用语义信息或上下文信息(contextual)进行解决。受人类寻找目标的启发,人类不会将所有场景都看一遍,而是寻找最可能存在的、可能最相关的object。本文提出了一种基于上下文信息的导航方式,使用context grid来表示当前观测的物体,从而帮助机器人找到更小的或隐藏的目标。基于该方法,可以使用同一个网络泛化到未知的场景中。
整个框架的任务定义为: T = { s i , o i , p i } T=\left\{s_{i}, o_{i}, p_{i}\right\} T={si,oi,pi},其中 s i s_{i} si表示场景, o i o_{i} oi表示目标, p i p_{i} pi表示初始位置。对于机器人的可执行动作,论文中定义的比较多: A = { MoveAhead , MoveBack , MoveRight , MoveLeft , RotateRight , RotateLeft , LookUp , Look Down , DONE \mathrm{A}=\{\text {MoveAhead}, \text {MoveBack}, \text {MoveRight}, \text {MoveLeft},\text {RotateRight}, \text {RotateLeft}, \text {LookUp}, \text {Look Down}, \text {DONE} A={MoveAhead,MoveBack,MoveRight,MoveLeft,RotateRight,RotateLeft,LookUp,Look Down,DONE。文中特地解释了一下任务的完成标准:需要机器人实施动作 DONE \text {DONE} DONE并且看到目标物体。
文章提前将baseline列举出来进行解释:
该baseline的结构非常简单,使用预训练好的Resnet-50对当前RGB图像进行特征提取,产生2048维数据,并将前四帧的数据特征concat到一起形成8192维特征(借鉴前人的思想)。将8192维特征经过一个全连接层之后,再经过ReLU,最终输出512维特征。而对于语义目标,采用了Word2Vec将target world转化为300维的特征同样经过一个全连接层,并ReLU,输出300维特征。将图像特征和语义特征级联后,经过全连接层转化为512维特征向量,作为A3C网络的输入,经过由两层全连接组成的策略网络和值函数网络,输出下一步的动作空间和值函数。
奖励函数部分,当机器人执行 DONE \text {DONE} DONE并看到物体时,有最大奖励表示任务完成;若只观测到目标,则根据观测到目标的Bbox大小来作为奖励(肯定是越接近目标,Bbox越大,以此来训练策略网络尽可能的接近目标);否则就是-0.01进行小小鞭策。
R e w a r d = { 5 , if D O N E signal is emitted and object is visible S bbox if S b b o x is the highest in the episode − 0.01 , otherwise Reward=\left\{\begin{array}{cl}5, & \text { if } D O N E \text { signal is emitted and object is visible } \\ S_{\text {bbox }} & \text { if } S_{bbox} \text {is the highest in the episode } \\ -0.01, & \text {otherwise}\end{array}\right. Reward=⎩⎨⎧5,Sbbox −0.01, if DONE signal is emitted and object is visible if Sbboxis the highest in the episode otherwise
以下是本文的重点内容,即本文使用的网络架构:
该框架的观测部分仍和baseline一样,使用了Resnet-50进行特征提取,而在Context Grid构建上,使用yolo检测到的Bbox目标和target world的词向量进行表示。Context Grid的构建方式,可以满足快速查找当前视角是否存在target或找到具有上下文关联的目标。整个Context Grid由16*16的网格组成,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vKsGN5vY-1593866295457)(F:\nas\SynologyDrive\文件\博客\第十三篇 目标驱动的视觉导航(二)\3-3.png)]
该网格计算通过yolo检测到的目标与target之间的相似度,语义相似度的计算如下:
C S ( v x , v y ) = v x ⋅ v y ∥ v x ∥ ⋅ ∥ v y ∥ C S\left(\boldsymbol{v}_{x}, \boldsymbol{v}_{y}\right)=\frac{\boldsymbol{v}_{x} \cdot \boldsymbol{v}_{y}}{\left\|\boldsymbol{v}_{x}\right\| \cdot\left\|\boldsymbol{v}_{y}\right\|} CS(vx,vy)=∥vx∥⋅∥vy∥vx⋅vy
这里的CS和下文提到的定义基本一致,为了更好的计算空间关系相似度而非语义关系(这里相似度还是表示上下文空间关联,和语义无关),这里使用的word2vec网络在Visual Genome数据集中进行了训练,Bbox更接近的目标从而有了更高的相似度。agent在空间中寻找时,即使未见到target,也可以根据Context Grid,去找空间相似度更高的物体,从而有助于更快找到物体,并且具有更好的泛化性,可以适用于未见过的场景和目标。
对于Context Grid和scene graph的对比,文中也进行了一定的探讨。作者认为,之前使用GCN提取scene graph特征的方式没有表示具体的关系细节,关系太过稀疏。对于大规模的导航问题,context grid这种简单的表示足够使用,并且便于学习。(个人认为,若能编码更多的关系,应该可以取得更好的效果,因为context grid只能表示一帧图像中的上下文关系,而scene graph可以表示整个场景的上下文关系,理论上应该具有更高的导航效率)
实验部分同样使用了AI2-THOR,将四类场景分为训练集和测试集。为了对比效果,使用context grid和不使用context grid的方法都寻找相同的goal。实验中,整个网络训练的24个小时,25million帧的图像,每个episode不超过300步。在测试时,每个类型的场景进行了250个episode。评估方式和之前的一样,实验SR和SPL。整个实验最有意思的一点是对比实验加上了human导航的评估。
实验分析不再详述,需要注意的是作者提出,在multiple room场景下,recurrent model比简单的将前四帧特征级联的方式要好得多,这也是下面一篇文章中提到的内容。同时,在和人类导航进行比较时发现,人类的成功率很高但是SPL比较低,说明人类比较擅长探索环境,但不擅长走最优路径(和RL相比肯定长啊),也比较符合现实情况。文中还提到,使用LSTM可以显著减少失败率,说明了时间特性对于机器人动作决策具有较大的影响,避免机器人做重复动作。在实验中大部分失败的情况都是机器人观测到目标,但是距离目标太远,作者认为通过增加深度信息可以减少失败率。
在讨论部分,作者提出了几个关于目标导航的发展方向:在大场景中导航、在超市等场景中寻找一系列目标(最优规划)、通过句子下达语义命令(感觉应该是VLN)等,这几个方向个人认为非常好,作者能提出来和大家共享可以说非常良心了,做语义导航相关方向的同学可以往这几个方向靠一靠,基本都是很新的内容。
本文提到的方法虽然有他自己的局限性(只能在单幅图像中寻找上下文信息),但是文章的内容、实验的设置还是非常丰富,给人非常多的启发,特别是实验部分将人的导航效果进行对比,有点类似图灵实验的意思了,还是非常有趣的!
Target driven visual navigation exploiting object relationships (2020IROS submitted)
该论文的重点在于提出了parent object 为目标寻找多了一层搜索关系。论文开头提出了基于关系推理进行导航根本上的两个挑战是:
- 如何高效地将层次化的parent-target表示
- 如何将先验知识高效的整合到机器人任务中,以实现未知区域的泛化
本文的主要贡献就是定义了一个状态空间,RL模型可以从中学习去探索目标间的关系。并提出,之前的一些工作,在训练时可以很快完成任务,但是test时却很poor,是由于机器人只是记住了训练场景,因此不能实现很好的泛化性。本文的工作平衡了先验知识与当前观测之间的平衡,保证了充分的训练与泛化。
本文对于关系的定义方式:为每个target提供一个parent集合 P = { p 1 , … , p M } P=\left\{p_{1}, \ldots, p_{M}\right\} P={p1,…,pM},表示与target具有关系的其他parent目标。而对于关系的定义,则是根据Visual Genone数据集生成的,并对数据集中人工标注的误差(即同一概念的不同说法)进行了prun,从而可以查找更strong的关系。(但是对于多strong才能作为parent关系,论文没有说明)
对于当前状态的图,使用一个人为设定的5-D vector: [ b i , x c , y c , b b o x , C S ] T \left[b_{i}, x_{c}, y_{c}, b b o x, C S\right]^{T} [bi,xc,yc,bbox,CS]T进行表示而非ResNet等神经网络方式提取,分别是当前观测图像中的每个object是否被检测到、bbox的中心和大小,还有当前object于target object之间的相似度计算: C S ( g o i , g t ) = g o i ⋅ g t ∥ g o i ∥ ⋅ ∥ g t ∥ C S\left(\mathbf{g}_{o_{i}}, \mathbf{g}_{t}\right)=\frac{\mathbf{g}_{o_{i}} \cdot \mathbf{g}_{t}}{\left\|\mathbf{g}_{o_{i}}\right\| \cdot\left\|\mathbf{g}_{t}\right\|} CS(goi,gt)=∥goi∥⋅∥gt∥goi⋅gt,其中的 g g g表示词向量(即判断是否为同一object或相似object)。
该论文最大的创新点为使用Context Vector代替了ResNet表示图像的特征。整体框架如下图所示:
该框架的输入图像经过Context Vector向量提取当前观测信息,并于ResNet进行了对比;同时,又根据当前图像和先验信息,通过GCN编码为特征。其中先验特征编码过程如下:
对于这个Graph Embedding的计算操作就有点骚了,愣是没看懂为何要这样设计:首先根据当前检测到的物体和先验关系,生成当前图像的graph,对于graph中的每个节点的特征,重新进行了定义,即左图中,将当前节点物体的词向量concat上当前图像的物体类别向量(即设定场景中共101类object,因此向量为101维,二进制判断,当前检测到即为1,否为为0)。定义好节点特征后,通过两层GCN后生成5-D特征向量,再将该特征向量于前面计算的当前的观测特征Context Vector进行concat,然后再经过一层GCN,才得到当前CGN流程的graph embedding(完全不懂为何要如此操作?结合context vector干啥?)。
最后,将当前的观测特征Context Vector与Graph Embedding进行concat,输入到A3C model中。
文中对于奖励函数也进行了一定的改进,即加入了relationship作为计算依据。在寻找target任务中,若发现了该target的parent,则定义 R p = R t ∗ Pr ( t ∣ p ) ∗ k R_{p} = R_{t} * \operatorname{Pr}(t \mid p) * k Rp=Rt∗Pr(t∣p)∗k,其中 Pr ( t ∣ p ) \operatorname{Pr}(t \mid p) Pr(t∣p)表示target与parent之间的相似度(relative closeness),相似度是根据AI2-THOR俯视图中的相对空间距离计算的。若观测到target的多个parent,则取相似度最大的parent计算 R p R_{p} Rp,在下一次再观测到多个parent时,agent便不会再采用上次选择的parent,以鼓励agent探索更多的parent关系(主要是为了学习图卷积网络)。
R ( s , a ) = { R p , if p is visible R t , if t is visible at termination R t + R p , if both are visible at termination − 0.01 , otherwise R(s, a)=\left\{\begin{array}{ll}R_{p}, & \text { if } \mathrm{p} \text { is visible } \\ R_{t}, & \text { if } \mathrm{t} \text { is visible at termination } \\ R_{t}+R_{p}, & \text { if both are visible at termination } \\ -0.01, & \text { otherwise }\end{array}\right. R(s,a)=⎩⎪⎪⎨⎪⎪⎧Rp,Rt,Rt+Rp,−0.01, if p is visible if t is visible at termination if both are visible at termination otherwise
对于伪代码还是比较好理解的:
论文实验部分还是在AI2-THOR环境中进行的,采用的评估方式与之前的相同(SR,SPL),在对比模型方面,对于当前场景观测的编码,分别对比了使用ResNet和Context Vector之间的效果,训练了3 million的episode。实验结果如下:
其中的L表示从start到target的最短路径,这里为了突出效果,分为了这两类。
结果还是比较不错,使用context vector的指标要高一些对于收敛速度倒是差不多,同样对于不同场景的泛化性也比较好。
Exploring the Task Cooperation in Multi-goal Visual Navigation (IJCAI2019)
该文章提出了一种用于目标驱动的视觉导航的深度强化学习框架,包含两个trick:逆动态模型和多目标合作学习。
整个过程可视为一个马尔可夫决策过程(MDP),可用公式表示为: M ( s , g , a , r , γ ) \mathcal{M}(s, g, a, r, \gamma) M(s,g,a,r,γ), s s s表示当前状态, g g g表示目标状态, a a a为动作集中的动作, r r r为设置的奖励,这里使用了稀疏奖励 r g ( s , a , g ) r_{g}(s, a, g) rg(s,a,g)=[0,1]。在每个时刻t,智能体观察到状态 s t s_t st,然后根据策略函数 π ( a t ∣ s t , g t ; θ π ) \pi\left(a_{t} | s_{t}, g_{t} ; \theta_{\pi}\right) π(at∣st,gt;θπ)选择一个动作 a t a_t at,一个时间步后,智能体获得了一个奖励值 r t r_t rt,同时智能体达到了一个新的状态 s t + 1 s_{t+1} st+1。这一过程一直持续到智能体达到指定的目标。该算法使用多步自举n-step进行值函数计算 V ( s t , g t ; θ v ) V\left(s_{t}, g_{t} ; \theta_{v}\right) V(st,gt;θv),整个回报值计算公式为: R t = ∑ i = 0 k − 1 γ i r t + i + γ k V ( s k + t , g k + t ; θ v ) R_{t}=\sum_{i=0}^{k-1} \gamma^{i} r_{t+i}+\gamma^{k} V\left(s_{k+t}, g_{k+t} ; \theta_{v}\right) Rt=i=0∑k−1γirt+i+γkV(sk+t,gk+t;θv), k k k表示自举步数。整个框架是基于A3C的,梯度函数为:
∇ θ π log π ( a t ∣ s t , g t ; θ π ) ( R t − V ( s t , g t ; θ v ) ) + β ∇ θ π H ( π ( s t , g t ; θ π ) ) \begin{array}{r} \nabla_{\theta_{\pi}} \log \pi\left(a_{t} | s_{t}, g_{t} ; \theta_{\pi}\right)\left(R_{t}-V\left(s_{t}, g_{t} ; \theta_{v}\right)\right) +\beta \nabla_{\theta_{\pi}} H\left(\pi\left(s_{t}, g_{t} ; \theta_{\pi}\right)\right) \end{array} ∇θπlogπ(at∣st,gt;θπ)(Rt−V(st,gt;θv))+β∇θπH(π(st,gt;θπ))
根据梯度对策略函数和值函数的参数进行更新:
θ
π
←
θ
π
+
η
∇
θ
π
log
π
(
a
t
∣
s
t
,
g
t
;
θ
π
)
(
R
t
−
V
(
s
t
,
g
t
;
θ
v
)
)
+
β
∇
θ
π
H
(
π
(
s
t
,
g
t
;
θ
π
)
)
θ
v
←
θ
v
+
η
∇
θ
v
(
R
t
−
V
(
s
t
,
g
t
;
θ
v
)
)
2
\theta_{\pi} \leftarrow \theta_{\pi}+\eta \nabla_{\theta_{\pi}} \log \pi\left(a_{t} | s_{t}, g_{t} ; \theta_{\pi}\right)\left(R_{t}-\right. \left.V\left(s_{t}, g_{t} ; \theta_{v}\right)\right)+\beta \nabla_{\theta_{\pi}} H\left(\pi\left(s_{t}, g_{t} ; \theta_{\pi}\right)\right) \\ \theta_{v} \leftarrow \theta_{v}+\eta \nabla_{\theta_{v}}\left(R_{t}-V\left(s_{t}, g_{t} ; \theta_{v}\right)\right)^{2}
θπ←θπ+η∇θπlogπ(at∣st,gt;θπ)(Rt−V(st,gt;θv))+β∇θπH(π(st,gt;θπ))θv←θv+η∇θv(Rt−V(st,gt;θv))2
其中
η
\eta
η表示学习率。
对于整体流程、逆动态模型(Inverse Dynamics Model)和多目标合作学习(Multi-goal Co-learning)描述框架如下:
- 整体流程:对于目标图像和当前状态图像,分别经过两层卷积层和一层全连接层提取其特征,当前状态的特征会经过LSTM网络 h s ( f s ) h_{s}\left(f_{s}\right) hs(fs),最后两个256维特征concat,用来预测更新策略函数和值函数。
- Inverse Dynamics Model:逆动态模型的主要作用是判断当前状态图像和目标状态图像之间的差异情况。如上图所示,讲当前状态 x t x_t xt和前一状态 x t − 1 x_{t-1} xt−1的图像输入到相同的网络中,concat后再映射为动作空间的大小,输出一个动作的概率分布,这里和Yuke Zhu在17年的目标导航开山之作中提到的孪生网络siamese layers类似,都是计算两个输入的相似度,这里只是对其进行修改了网络结构。这个动作预测作为一个额外的优化项,由交叉熵分类损失函数定义: L a = − ∑ i a i ⋅ log a ˉ i \mathcal{L}_{a}=-\sum_{i} a_{i} \cdot \log \bar{a}_{i} La=−i∑ai⋅logaˉi, i i i表示动作的索引, a a a和 a ˉ \bar{a} aˉ表示实际采取的动作和预测的动作。
- Multi-goal Co-learning:多目标学习的主要目的是为了提高采样效率,即本来是为了找C,但是途中经过B,即可将从出发点到目标B的这段轨迹用于学习,实现了数据的重复利用,思想和Improving Target-driven Visual Navigation with Attention on 3D Spatial Relationships这篇论文中的Sub-targets Extraction基本一致。需要注意的是,只有在前期训练的时候才会大量出现这种漫无目的探索,找到其他目标的情况,通过多目标学习可以加快收敛,在后期逐渐收敛时,智能体的探索路径会更直接,多目标学习的效果就会减弱。
实验也是基于AI2-THOR环境进行,实验结果如下:
可以看出,加入了逆动态模型和多目标学习后收敛速冻明显变快。
作者的期望是将仿真效果泛化到真实环境中,实现Sim2Real,这也是后面可以研究的方向。
Vision-based Navigation Using Deep Reinforcement Learning (ECMR2019)
该论文出自Delft的认知机器人实验室,也在做DRL视觉导航相关的工作,算是欧洲为数不多的做这个方向的实验室之一吧。
该论文关注于未知场景中的导航任务,提出使用辅助性任务(auxiliary task)来拓展A2C算法,以提升视觉导航效果。主要是以预训练的图像分割网络、深度预测网络来减少训练步数。本文认为当前存在的两个挑战,一是agent的观测空间维度过大,二是当前的状态是部分观测的。对于观测空间的维度,可以实验手工设置的特征,或基于学习的特征来表示,本文想采用图像的分割和深度图作为输入。对于观测的环境,当前大都使用AI2-THOR这种只包含小的单场景环境(这也是我认为的AI2-THOR存在的重要问题之一,场景小,类型单一),并且动作空间下的运动大都按照网格的方式运行。本文提出了基于原始图像的导航方法,不同的是采用了A2C强化学习算法。训练过程中使用深度图像和分割图像作为输入,有助于增强泛化性。
机器人环境探索时,每一个episode可以表示为: ζ = s 0 , a 0 , r 1 , s 1 , a 1 , r 2 , … \zeta=s_{0}, a_{0}, r_{1}, s_{1}, a_{1}, r_{2}, \dots ζ=s0,a0,r1,s1,a1,r2,…,终止表示完成任务或达到最大步数限制。训练时,episode被分割为同等长度的rollouts,其中最后一段可以短一些(不一定凑够这个长度): ζ t ℓ = s t , a t , r t + 1 , s t + 1 , a t + 1 , r t + 2 , … , r t + ℓ + 1 , s t + ℓ + 1 \zeta_{t}^{\ell}=s_{t}, a_{t}, r_{t+1}, s_{t+1}, a_{t+1}, r_{t+2}, \dots, r_{t+\ell+1}, s_{t+\ell+1} ζtℓ=st,at,rt+1,st+1,at+1,rt+2,…,rt+ℓ+1,st+ℓ+1。(为什么这么分不太理解)
本文的框架在A2C的基础上通过unreal auxiliary task和additional auxiliary task去实现视觉导航,称为A2CAT-VN。网络架构如下:
其中,卷积层conv-base的具体细节如下图所示,通过共享权重的卷积网络将输入图像与目标图像concat为512维特征,类似于之前提到的孪生网络,主要是寻找当前状态与目标状态之间的差异。
该卷积网络的特征concat上一动作和上一奖励,输入到LSTM当中去。其中,上一个动作是一个one-hot分布的向量(只有一个动作是1,其他都是0)。LSTM的特征作用于actor,critic和pixel-control中。
对于场景中的部分观测问题,之前有人提出使用前四帧图像concat的特征来解决,也有人提出使用LSTM来解决,作者这里实验对比了这两种方式,得出LSTM比concat前四帧图像的特征效果更好一些,过去四帧特征不足以捕获复杂场景中的足够信息,而更多的过去的图像帧则会增加参数空间的内存。
下面就是一些针对A2C的辅助任务。首先是Unreal Auxiliary tasks,包括根据之前的观测进行下一步的奖励预测,和像素的控制(没看明白这里怎么操作的)。对于Additional Auxiliary tasks,主要使用预训练的深度图、分割图用来加速训练过程。
针对场景环境过大、初始位置离目标过远等导致agent初始训练困难的问题,本文在训练智能体时先从distance较近的情况开始,逐渐增大start与target之间的距离,以实智能体学习的更快。
实验部分与其他基本一致不再赘述,最后作者在展望里提到了几个未来的研究方向:一是将该探索能力落地到真实场景的移动机器人上,二是增强在未知场景中的泛化能力。作者认为机器人处理未知场景的能力将是未来的一个重要的研究方向!(俺也一样!)