CVPR 2018 Social GAN、CVPR 2019 Sophie、NIPS 2019 Social-BiGAT、CVPR 2019 Social Ways | 基于GAN的行人轨迹预测

目前广泛应用在行人轨迹预测领域的方法主要包括基于LSTM网络、GCN网络和GAN网络的轨迹预测方法,这些网络在训练完成后对同类型输入具有很好的适用性,拥有较高的轨迹预测精度。抽空整理下关于用GAN来做行人轨迹预测的相关论文与要点,顺便说的是一定要禁甄姬。

一、CVPR 2018 Social GAN

       Social GAN提出的思想很明确:以往的单一轨迹预测往往是一种“平均”的结果。换句话说,行人的轨迹并不是确定不变的,它受行人之间的交互、行人与环境间的交互等多种因素的动态影响,实际上预测的轨迹在可接受的范围内都是合理的,也就是标题说的“Socially Acceptable”。那Social GAN的网络框架长什么样子呢?它就长下面这样子:

       可以看到说这是一个基本的GAN的模型,它的generatordiscriminator是由LSTM组成而已。一个很直接的想法是,在看到Social GAN的模型架构时,你会想到说,模型的输入实际上就是一段处理过后的轨迹,先将轨迹映射到高维空间,然后交给generator的Encoder处理,得到每个行人的hidden_state,将hidden_state通过Pooling Module模块,得到的输出与之前的hidden_state、noise_z进行concat后作为generator Decoder的orignal hidden_state,再得到预测的轨迹;在判别阶段,将生成的轨迹与真实轨迹丢给我们的discriminator以输出real还是feak。实际上,这就是Social GAN的运作方式。那光是这样理解,还不是很完善,因为读者看到这里可能不知道说,每一部分的输入输出的维度究竟是多少啊,你的Pooling Module又是怎么运作的呢?这些问题需要仔细的看完论文和代码,那与以前一样,假定在看博客的读者已经看过代码,不然你可能不知道我接下来在说什么。

       首先是generator的Encoder部分,这里很简洁,就是一个LSTM的结构,那其实我想说的是,虽然上图Encoder架构画了三个不同颜色的LSTM,代表说它们可能对不同的行人进行轨迹建模,但是具体实现的时候我想应该是同一个LSTM在不同时间段进行“复用”。具体维度在图中已标注,就不再一一细说了。

      Encoder的最后输出hidden_state h_{7}(它包含了前8帧的行人交互信息)会被送给Pooling Module模块,文章在这一块实际上说的比较含糊,是因为整篇文章像是两个人写的,风格各异。那Pooling Module怎么操作呢?为了便于说明,运作过程以下图为例:Pool Module的输入有两部分。一开始,我们取观察轨迹最后一帧的行人坐标,其维度为(116,2)。读者可能疑惑说,这里我的能理解啊,但是你图中的n_{i}是什么意思呢,看上去蛮屌的样子。那其实这里的n_{i}指的是一个“场景片段”下的人数。为了让读者明白我在说什么,我们先要理清行人轨迹预测中batchsize意味着什么。什么意思呢?在单一轨迹预测时,我们把一个行人或说一条轨迹当做一个样本是完全OK的,但在Social GAN中,作为为了研究轨迹之间的交互,且研究联合轨迹预测模型(就是同时为多条轨迹预测),那么最好的方式就是让一个场景片段中所有的轨迹在一个batch中被处理,所以这116个人应该是来自不同场景片段下的总人数。n_{i}代表的含义就是指某个场景片段下的人数。之所以要把各个场景片段下的人数单独拿出来,是因为接下来的操作所要求的。举例来说,图中某个场景片段下有n_{i}个行人,我要对该场景片段下的行人做两种不同的repeat操作:第一种repeat的方式是整体复制,可以看到说最后得到的n_{i}^{2}是人数1~n_{i}的整体重复;而第二种repeat的方式是逐一复制,也就是第一个行人复制n_{i}行,第二个行人复制n_{i}行,...,可以看到说这种repeat方式下得到的n_{i}^{2}是人数 1~n_{i}的逐一重复。那为什么要进行这样一步操作呢?实际上是为了计算行人间的相对位置。你可以看到说接下来就是两种repeat得到的复制结果进行相减,得到的矩阵我们把它叫做relative_pos,它的维度大小是(n_{i}\times n_{i},2)。一个常规的操作是将其进行embedding,得到大小为(n_{i}\times n_{i},64)的映射矩阵。紧接着,我们第二部分输入是Encoder中得到的hidden_state  h_{7},它的大小是(116,64)。同理,我们也需要对不同场景片段下的h进行repeat操作,因为这样才能与上述的结果进行concat拼接。那可以看到说,h_{7}的repeat方式是之前所述的整体重复,得到的结果经reshape后,得到大小为(n_{i}\times n_{i},64)的矩阵。该矩阵与我们embedding后的relative_pos进行拼接,再将拼接后的向量送入MLP中,经reshape后得到大小为(n_{i}n_{i},1024)的矩阵。在这里,作者设计了一个Maxpooling函数以获得全局信息(n_{i},1024)(那其实这里为什么是Maxpooling,我也不是很明白)。那对不同的场景片段重复上述过程,最后Pooling module输出大小为(116,1024)的矩阵,为了便于接下的叙述,我们给它取个名字叫做pool_h。

       那在进入generator Decoder之前还有一步add_noise的操作,也就是对应论文架构里面的z。具体是怎么操作的呢?将上述的pool_h与之前Encoder的最后输出hidden_state h_{7}拼接,得到一个大小为(116,1088)的矩阵。将其送入MLP,将得到的结果与一个大小为(116,64)的高斯噪声进行concat拼接,得到的矩阵decoder_h将作为generator Decoder hidden_state的初始值。

       generator Decoder怎么做呢?除了将decoder_h将作为generator Decoder hidden_state的初始值外,我们还需要c_{0}和输入x_{t}。​​​​​​​c_{0}初始化为0,x_{t}来自观测轨迹的最后一帧,但往往都会做一个embedding以嵌入高维,之后经过LSTM输出h_{8},通过一个Linear得到预测坐标,再将该预测坐标送给x_{t},以预测下一个时刻的行人轨迹坐标。总的来说,Decoder就是输入前一帧,输出后一帧的预测坐标,那最后得到一个batch下所有行人的12帧轨迹坐标。

 

       得到的预测坐标送给discriminator以判断real/feak,因为我的discriminator看过真正的坐标,所以当它判断预测的坐标为feak时,就促使对应的generator产生更具迷惑性的结果,以达到欺骗discriminator的目的。那实际上我在想的是,Social GAN好像也并不是真正“多轨迹”的预测啊,你看最后的结果也是一个样本对应一条预测轨迹啊,并没有说一个样本对应多条轨迹。我的理解是:从整体来看,在整个动态的博弈中,一个样本确实生成了多条轨迹,只不过前期立马给我的潘别气给否决了,但是从“多轨迹“预测的角度看,Social GAN模型并没有学习到人类行为真正的多模态分布,而是学习具有高方差的单一行为模式(CVPR 2019 Social BiGAT 写到:However both models fall short of learning the truly multimodal distribution of human behavior, and instead learn a single mode of behavior with high variance.

      Social GAN最大的亮点是引入了Variety loss。由原先预测单一轨迹,创新性提出预测多条轨迹从里面找出best trajectory。在2018年,大家都在预测单一轨迹的时候,横空出世,用20条轨迹将其他方法按在地上摩擦...不讲武德的同时,之后的几乎所有方法,都补充上了多轨迹预测实验(这里摘自知乎的一段评论)。

 、CVPR 2019 Sophie

       以往的轨迹预测模型并没有将场景信息考虑在内,换句话说,以前的工作未能成功地联合场景信息与行人间的交互信息。Sophie利用GAN的可解释性框架,利用场景中行人的轨迹信息与场景上下文信息,即,使用场景图像和观测轨迹对行人轨迹进行预测。Sophie的代码似乎缺少了pkl文件,所以对Sophie的解读只能停留在论文阶段了。

      模型的(a)部分实际上是特征提取模块,上分支场景图像由VGG-19进行处理;下分支由LSTM处理观测到的行人轨迹,文章说为了捕获其他行人状态对预测行人轨迹的影响,我们需要从所有行人轨迹特征中提取联合特征(joint feature)。换句话说,我们需要对行人间的交互进行建模,因为每个人从LSTM出来后,并没有交互信息,所以在这里提取行人间的交互信息。文章对这一部分有详细的描述,由于我代码没有调通(缺少pkl文件),这里我就不多叙述。提取完的联合特征会被送入到attention模块,但是论文中是说喂给generator,这一点从图中看不出来还得看代码。模型的(b)部分是注意力模块,注意力机制,其本质是一种通过网络自主学习出的一组权重系数,并以“动态加权”的方式来强调我们所感兴趣的区域同时抑制不相关背景区域的机制。这里的physical Attention算的是编码场景与generator decoder hidden_state的注意力,其物理含义应该是对“行人-场景”进行建模,通过注意力机制得到行人轨迹更可能出现在场景中的哪些位置(当然,这是我的一点理解,也可能不正确),但是为什么这么做我也不太明白。Social Attention算的是联合特征(joint feature)与generator decoder hidden_state的注意力,其物理含义应该是对周围行人进行加权,也就是说哪些行人的轨迹特征对我预测行人的轨迹的影响是比较重要的。Sophie值得一读,但是不看代码的话很多细节没法了解。

三、NIPS 2019 Social-BiGAT

       Social BiGAT是继Social GAN, SoPhie后用GAN做行人轨迹预测的新成员,从整体成果上来说是用Cycle-GANGAT网络的方法更好解决在Social GAN时提出的问题:社会交互(Social Interaction)、静态场景(Context Cues)和预测的多元性(Multimodal prediction)。Social BiGAT的理解可以参考博客:文献阅读报告 - Social BiGAT + Cycle GAN - youzn99 - 博客园 (cnblogs.com)https://www.cnblogs.com/sinoyou/p/12159419.html

 因为没有找到论文代码,很多细节没法光看论文理解。

四、CVPR 2019 Social Ways

      Social Ways是继Social GAN、Sophie模型后的进一步提升,在理想的监控俯瞰数据库ETH、UCY上进行数据的预测。重点贡献有:

  1. 引入了注意力机制使模型自主分配对交互信息的关注。
  2. 舍弃了L2代价函数,引入基于互信息的Information Loss,增强了模型对多合理轨迹的预测能力。
  3. 提供了一种能够验证各模型的多轨迹预测能力的小型合成场景和轨迹生成效果的判断指标。

Social Ways的理解可以参考博客:文献阅读报告 - Social Ways: Learning Multi-Modal Distributions of Pedestrian Trajectories with GANs - youzn99 - 博客园 (cnblogs.com)https://www.cnblogs.com/sinoyou/p/11512830.html

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值