《Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks》 论文研读
目录摘要
Social GAN是
一. Motivation
行人轨迹预测中一项具体而重要的任务是:给定观测到的行人运动路径,给出所有可能的(或者多条)未来运动轨迹。由于Social LSTM只是旨在给出行人的单条未来运动轨迹,因此从任务的角度来看,Social GAN和Social LSTM解决的任务是不完全相同的。
在拥挤场景下预测行人运动的固有属性有以下几点:
①Interpersonal(人际的):每个行人的运动依赖其周围的人,人们拥有能读懂周围人运动行为的天性,建模这样的依赖是复杂的。
②Socially Acceptable(社交可接受的):有些轨迹物理上可行,但是在社交上不可接受。人们可能做出让路/尊重私人空间这样的行为。
③Multimodal(多模态的):给定一条历史轨迹,不止有一条正确的未来轨迹。有多条轨迹都可能是合理且社交可接受的。
由于给定一个温和或者激进的运动风格,行人可以在拥挤环境下有多条运动轨迹,因此论文认为预测任务需要有多条可能的输出。
而先前方法有如下的问题:
①在预测时,为每个行人建模了一个局部的“neigborhood”,导致不能对场景中所有的行人建模一个计算高效的整体交互。
倾向于学习一个“平均行为”,因为损失函数的设定是最小化预测输出与真值的欧氏距离。但论文的目标是学习多条社交可接受的行人轨迹,也就是学习多个“好的行为”。
为了避免先前工作的限制,作者用GAN来生成多条轨迹:生成器生成候选路线,判别器来进行评估。对抗损失(adversarial loss)可以规避L2损失的限制,学习能够欺骗判别器的“good behaviors”的分布。
二. Contributions
①引入variety loss,来帮助GAN展开在空间的分布,来覆盖所有存在可能足够好的解的样本空间。
②引入了一个新的池化机制,学习一个全局的池化向量,该向量包含了场景中所有人的feature,从而整体需要走一遍LSTM,而不是为每个行人均安排LSTM+池化,降低了时间开销。
二. Proposed Method
2.1 问题定义
论文的目标是联合推理与预测场景中全部行人的多条未来轨迹。假设行人的全部输入轨迹是\(X=X_1,X_2,...,X_n\),并且同时预测所有行人的未来轨迹\(Y=Y_1,Y_2,...,Y_n\)。第i个人的输入轨迹定义为:\(X_i=(x_i^t,y_i^t)\),时间点为\(t=1,...,t_{obs}\),输出轨迹定义为\(Y_i=(x_i^t,y_i^t)(真值)\),时间点为\(t=t_{obs+1},...,t_{pred}\),预测的轨迹标注为\(\hat{Y}_i\)。
2.2 GAN
GAN包括一个生成器G和一个判别器D。G接收一个隐变量z,输出样例G(z)。判别器D接收一个样例x,输出D(x)代表其是真实样例的概率。
训练过程是一个min-max问题:
\[\underset{G}{min}\underset{D}{max}V(G,D)=\mathbb{E}_{x\sim{p_{data}(x)}}[logD(x)]+\mathbb{E}_{z\sim{p(z)}}[log(1-D((G(z)))] \]2.3 Socially-Aware GAN
Social GAN模型结构如下图给出:
模型包含了三个关键部分:Generator(G),Pooling Module(PM)以及Discriminator(D)。G基于encoder-decoder框架,通过PM来连接encoder和decoder的隐藏状态。G接受输入\(X_i\)并且输出预测轨迹\(\hat{Y}i\)。D接受完整序列\(X_i+\hat{Y}_i\)或\(X_i+Y_i\)并且判断真伪。
G的Encoder:将输入的第i个人的观测轨迹序列\(X_i\)编码为\(H_i^t\)。
PM:接受每个人的\(H_i^{t_{obs}}\)并且输出每个人的池化向量\(P_i\)。
G的Decoder: 根据\(H_i^{t_{obs}}\)以及\(P_i\)生成未来轨迹。
D:判断给定的完整轨迹(观测轨迹+真实轨迹或观测轨迹+预测轨迹)的真伪。
2.3.1 Generator-Encoder
将每个人的位置\((x_i^t,y_i^t)\)首先通过MLP做embedding得到一个定长向量\(e_i^t\),与上一时刻的隐藏状态合并作为LSTM的输入。
\[e_i^t=\phi(x_i^t,y_i^t;W_{ee}) \] \[h_{ei}^t=LSTM(h_{ei}^{t-1},e_t^t;W_{encoder}) \]其中\(\phi(·)\)是嵌入函数,采用ReLU激活函数。\(W_{ee}\)是embedding的权重,\(W_{encoder}\)是LSTM的权重,是所有行人共享的。也就是说encoder中只有一个共用的LSTM。
2.3.2 Pooling Module
由于需要统一考虑所有人,因此需要引入池化模块。需要解决的问题有二:
①场景中的行人数目不确定,数目可能较大,因此需要一个对全部行人的压缩表示。
②需要建模人与人之间的交互。局部信息不是总会有效,因此论文中采用了建模全局环境的方法。
论文中给出的PM模块如下图所示:
对于行人i(如图中红人所示),得到其他所有人(图中蓝人和绿人)与其的相对坐标,经过MLP后,与每个人的隐藏状态\(h_e^j(j=1,...,n,j\neq{i})\)或者\(h_d^j(j=1,...,n,j\neq{i})\)分别相连,然后再经过MLP后,做元素层面的pooling,论文中使用的为max-pooling,得到行人i的池化向量\(P_i\)。
2.3.3 Generator-Decoder
Decoder的初始化:
\[c_i^t=\gamma(P_i,h_{ei}^t;W_c) \] \[h_{di}^t=[c_i^t,z] \]\(\gamma(·)\)是带有ReLU激活函数的MLP,\(W_c\)是嵌入权重,z是噪声向量。
初始化后的decoder,通过如下公式产生预测序列:
\[e_i^t=\phi(x_i^{t-1},y_i^{t-1};W_{ed}) \] \[P_i=PM(h_{d1}^{t-1},...,h_{dn}^{t-1}) \] \[h_{di}^t=LSTM(\gamma(P_i,h_{di}^{t-1}),e_i^t;W_{decoder}) \] \[(\hat{x}_i^t,\hat{y}_i^t)=\gamma(h_{di}^t) \]2.3.4 Discriminator
判别器包含了一个分离的encoder。其接收输入\(T_{real}=[X_i,Y_i]\)或者\(T_{fake}=[X_i,\hat{Y}_i]\)并且区分真伪,对于encoder的最后一个隐藏状态,应用MLP来得到一个分类打分。判别器会学习不易察觉的社交规则并且把非社交可接受的轨迹视为fake。
2.3.5 损失函数
在对抗损失的基础上,添加L2损失对预测的轨迹与真值的偏差进行估计。
2.3.6 鼓励轨迹生成的多样性
提出了一个variety loss function来促使模型产生不同的轨迹样例。
\[L_{variety}=\underset{k}{min}||Y_i-\hat{Y}_i^{(k)}||_2 \]其中k是生成的轨迹数目,对噪声z在\(\mathcal{N}(0,1)\)的正态分布上采样来生成,并且选择基于L2损失最优的预测作为最终的预测。这一损失函数与Minimum over N(MoN) loss类似,但首次在GAN中应用来鼓励不同样例的生成。