Press "Enter" to skip to content

轻读论文(三):Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

轻读论文(三):Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks

 

一开始以为Social GAN是指Social Network的GAN。后来发现其实Social 是指行人行走轨迹是否有符合社交礼仪的Social,不过其实这篇论文相当厉害是2018年的IEEE/CVF。其实我并没有完全了解这一篇论文,不过还是把一些心得感想写下来。

 

我只是菜鸡,不能保证写下的东西完全正确,最好还是亲自阅读最为準确

 

论文连结:

 

Social GAN: https://arxiv.org/pdf/1803.10892.pdf

 

一、 Introduction

 

行人轨迹预测可以在许多方面都有应用,如: 自驾车、扫地机器人。但是在一个拥挤的场景内,要预测所有人行走轨迹会有以下三个挑战:

 

 

    1. Interpersonal : 人在行走的路径规划,其实有很多会是依照周围人的反应,所以你必须要考虑不只是自己,而要考虑到整个画面的行人

 

    1. Social Acceptable: 有些路径是符合物理规律,但是你不会去走的,比如你不会无缘无故撞别人肩膀,行走要符合社交礼仪。

 

    1. MultiModel: 给定一个过去走过的道路,要预测未来可能并符合社会规範的道路,路肯定不只有一条,有很多种可能性都可以接受的。

 

 

在过去做路径规划,第一个直觉的会想到是RNN,但这会有两个挑战:

 

 

    1. Modal 只能观察到一个人过去路径,无法让modal感知周围所有人的行走与反应

 

    1. 因为是每个人单独与自己gound truth算L2 norm (预测与ground truth距离)来做loss,所以会倾向于预测对所有人都可以接受的预测路径(average behavior),而非针对不同人有不同行走规划。Social GAN 想要预测针对不同人有不同道路规划。

 

 

Social GAN主要贡献有两个:

 

 

    1. 提出新的 variety loss来鼓励GAN探索

 

    1. 提出新的Pooling mechanism来帮助一个行人感知周遭所有人的行走规划

 

 

那实际上整体呈现方式会如下,根据过去行走过程与和周遭人的反应来决定未来该行走路径 :

https://github.com/agrimgupta92/sgan

二、Social GAN

 

I、 DataSet

 

先来看Dataset:

 

由右至左依序是时间、人编号、x轴、y轴。那幺input 就是所有人的道路X ,每个人的X i (i 为person)由座标x,y自时间点t0 到 时间点t observed 组成。要预测的是每个人时间点t observed +1到时间点t pred。 详细见下图:

 

II、 model

 

Social GAN的Generator部分是由一个Seq2Seq组成输入进去所有人过去走过的道路,未来要预测出所有人未来走过的道路。并且把预测道路与真实人会走过的道路丢给Discriminator来判断是否为REAL/FAKE。objective function就是基本的GAN:

Social GAN objective function

Social GAN 主要改动是在Generator的部分,接下来我们就来慢慢拆解Generator吧!

 

III、 ENCODER

encoder

我们会先把每一个人座标(x,y) embedding成一个固定长度,也就是原本input维度是:

 

(人数量, 时间长度,2) -> (人数量,时间长度,embedding长度) ,经过embedding称作e并输入进去LSTM,output并取出每个人最后的短期hidden 包含了过去走过道路的资讯。

h : (人数量,hidden dim,layer数) 称作He

接着有了每一个人的短期hidden后,为了取得人与人之间的关係,我们会将所有hidden输入进去Pooling Module来取得每一个人与他人之间的关係Pi (i 为Person,第几个人与其他所有人的关係),Pooling的机制比较複杂一些,我们后面再讲。总之有了He (过去资讯 Encoder final hidden)、Pi (其他人资讯),我们最后再加入z (),将这三个融合后当作是decoder的initial hidden state。

decoder

decoder initial hidden state公式如下,得到Hd

 

IV、 Decoder

 

有了Decoder initial hidden state与我们最后观察到的座标点 (x obs,y obs)。我们可以输入进去decoder进行预测了。预测过程如同其他Seq2Seq一样,时间点一的output会是时间点2的input。但是Social在每个时间点的hidden state做了一些改变,接下来一一说明:

 

 

    1. 随机性问题。我们GAN会加入的z只在一开始加入,后面随着output时间拉长,受到ground truth影响,z的影响力会越来越小。但是Social GAN会需要鼓励道路行走的随机性越高越好,所以我们会需要在每次的hidden加入随机性。

 

    1. 他人资讯。我们在每一次的时间点就是所有人又更向前走了一步,那幺他们之间的相对关係也会随之改变,所以我们在每次的hidden加入Pi。

 

 

因此会得到如下的公式:

PM 那边应该是写错了是t-1才对

如果你看过SeqGAN,看到Seq2Seq在GAN上的应用第一个就会想到有关sampling无法传递backpropagation而导致无法训练Generator的问题。在这里他们是用一个gamma (MLP)来将输出的hidden转成一个座标位置,以此来避免sample的问题。

 

V、Pooling Module 与 model

 

看到这里你应该大致了解Pooling Module是观察其他人与自己的关係对吧。那实际是如何操作的呢?

 

我们会将现在位置与他人的现在位置经过embedding后与hidden state concat 起来丢入MLP并取max (我没看懂为什幺要max,如果知道欢迎留言回复),来获得Pi。这样讲一定很乱,接下来是我看程式码后统整出来的图,先说一句,不保证100%正确,程式码还蛮难懂的:

 

首先回到encoder,将每个人的座标位置embedding后(e^t_i)丢入LSTM得到final hidden (h^t_{ei})。接着将刚刚input进去encoder的座标位置取所有人最后一步座标 (x last, y last)。有了(x last, y last)就能够算出每个人的相对位置了,将相对位置embedding后与final hidden concat丢入MLP与max之后就能得到Pi (每个人与他人座标资讯)。将Pi 、hidden、z concat起来后丢入一个MLP转成Decoder hidden大小的state (这部分我忘记画上去)。得到了decoder hidden state 包含了每个人之前走过路径(hi)、与其他人之间关係(Pi)、随机性(z),我们称作hd (hidden state of decoder)。

 

接着将hd_i与每个人最后观察到的座标(x last, y last )经过embeddinㄕ后,两个输入进decoder LSTM得到了每个人时间1的hidden state (h¹_di),将这每个人hidden丢入MLP后得到规划出每个人下一步要走的座标(hat x¹_i,hat y¹_i )。

 

接着将每个人下一步要走的座标(hat x¹_i,hat y¹_i )当作新一轮的输入,同时把刚刚获得每个人的hidden与每个人下一步的座标丢入Pooling module得出新一个包含之前走过的路、与他人相对关係与随机性的新hidden (hd)。并以此往复得出所有人的路径规划。

 

整个Generator就是这样来获得一个充满随机性与他人资讯的路径。

 

VI、 Discriminator 与LOSS

 

接着来看看discriminator,其实也没什幺好讲的,就是用LSTM遍历所有路径后看是REAL/FAKE。

 

在Generator Loss方面,为了鼓励Generator探索,所以我们会先规划出k可能性的道路,再与gound truth做L2 norm,并只用最小的loss来backpropagation,如下:

 

VII、 实验

 

实验结果就是在各方面都赢过之前的model。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注