Peeking into the Future: Predicting Future Person Activities and Locations in Videos 文章理论部分的问题和详细解析

1. 本文研究的具体内容

  • 系统根据1到Tobs的帧内容,预测 T o b s + 1 T_{obs+1} Tobs+1 T p r e d T_{pred} Tpred 时间范围的人的轨迹和活动
  • 预测的轨迹表示方法:以xy坐标表示
  • 预测的人的活动的表示方法:以活动标签的形式

2. 本文主体部分用到的知识及概念

以上知识我都写了对应的文章来解释,大家可以浏览一下这些文章,对理解这篇论文有很大的益处。因为这篇论文涉及的东西太多,所以希望大家能一点点研究,一点点理解

3. 本文主体结构

在这里插入图片描述

  • 新提出的 “next” 网络:
    ① 人类行为模块
    ② 人类与场景交互模块
    ③ 轨迹产生模块
    ④ 行为预测模块
    其中 ①、② 属于“next”网络前端的部分,负责整个网络前端数据的处理和输入,③、④则属于“next”网络的后端部分,负责整个网络的预测和结果
  • 网络的各个模块的理论细节

3.1 人类行为模块

人类行为模块由两个主要部分组成:

① 沿着不同的时间步,人类在每一个时间步的帧中提取出来的 【外表特征】
② 沿着不同的时间步,通过人类关键点节点提取出来的 【活动特征】

3.1.1 外表特征
  • 用Mask-RCNN中 RoIAlign 的方法:锚定一个人的边界框(bounding box)并且在这个小范围内用带有 ROIAlign 功能的 CNN 网络来提取这个人的特征图信息并得到经过更加精确地压缩的小特征图。
    在这里插入图片描述
    图 1 一张带有 “目标人物的特征图 ”,模型会先定位到这个人,然后沿着时间轴 T 1 − T o b s T_1 -T_{obs} T1Tobs 使用 CNN 网络来提取每个时间步中人的外貌特征,然后输入图 2 中的LSTM中

  • 然后在 T 1 − T o b s T_1 -T_{obs} T1Tobs 的帧中,由于人一直是在行走变化的,所以对于每一个时刻,人的姿态都不一样。根据在每个时刻人的“锚框”中提取到的 CNN 特征,将其输入到 LSTM 编码器 进行处理。
    在这里插入图片描述
    图 2 从特征图中提取出感兴趣的区域(目标人物所在区域),然后对本区域进行特征提取和 RoIAlign 特征图缩小操作,然后送入LSTM编码的全过程

  • 假设每个LSTM单元的隐藏层的隐藏状态维度都是 512 512 512,那么 d 1 , . . . , d T o b s d_1,...,d_{T_{obs}} d1,...,dTobs就都是 1 × 512 1×512 1×512 的向量。
    在这里插入图片描述
    图 3 所有时间步的 LSTM 隐藏层状态向量的集合表示

  • 最终将每一个时间步提取的隐藏状态信息都放到一个张量里面,所得到的综合的张量如上图所示,维度为: T o b s × d T_{obs} × d Tobs×d ( d = 512 ) (d=512) (d=512)

3.1.2 活动特征
  • 使用在MSCOCO数据集上训练的人物关键点检测模型提取人物的关键点特征
  • 利用线性变换来 嵌入关键点特征 ,将特征的维度也变换为 T o b s × d T_{obs} × d Tobs×d (这里不懂的可以去看 embedding,就是进行矩阵的维度转换从而达到前后两个矩阵维度相匹配的目的)
  • 这样一来,【外表特征】和【活动特征】是具有相同维度的张量,后续可以对他们进行一致的处理,免去了很多麻烦。

现在再来理解原文中给出的图,相信就没有困难了,所谓的 “Person Appearance Encoder” 和 “Person Keypoint Encoder” 不过是 两个具有相同隐藏层维度的 LSTM 网络
在这里插入图片描述
图 4 原论文给出的 人类行为模块的结构图

3.2 人与环境交互模块

人与环境的交互模块也分了两个部分:

① 是人与周围场景的关联关系(交互):这里的场景指的是,人是站在路边,还是草坪,或者是靠近一片水池、一幢办公楼…
② 是人与对象的关联关系:这里强调一下,所谓的对象,就是除了被关注的人以外的其他的人或者物体,例如:目标人物周围是否有汽车、是否有其他的人物、是否有动物从旁边经过…

我们把这两部分对于目标人物的综合影响称为【环境】的影响,所以人与【环境】的交互模块要研究的就是:目标任务与这两个模块分别的关联和交互行为

要研究人与【环境】关联,我们用类比的方式。上面的 “人类行为模块” 已经将人的各种特征提取出来了,那么下面的工作也是同样的思路,只需要:

  • 提取出【环境】(包括场景和对象)的特征;

  • 对目标人物的特征和【环境】(包括场景和对象)的特征放在一个张量里面然后放到计算机里进行关联运算。这样就就可以通过计算机学出他们之间的关联关系。

所以,我们先来看 【人与场景的关联】

3.2.1 人与场景的关联

要获取不同场景特征,首先要对已知的场景分类,而且要具备在一个图像中把场景分辨的非常精细的能力。而这就要用到 Mask-RCNN 中的场景分割技术,来达到像素级的分割。

  • 使用总共 N s = 10 N_s=10 Ns=10 个常见的场景类,例如:道路,人行道
  • 对于时间步 T 1 − T o b s T_1 - T_{obs} T1Tobs 之间,对于 每一个时间步的帧 ,都要进行一次场景分割和归类,在每一个时间步都会得到一个尺寸为: h × w h×w h×w场景语义特征图(其中 h h h w w w 是分辨率的大小) 。这个过程是使用二元掩膜(binary mask)来完成的,每个二元掩膜的尺寸为 h × w h×w h×w

经过了 T o b s T_{obs} Tobs 的时间步后, 最终得到的场景语义特征图的尺寸为 T o b s × h × w T_{obs}×h×w Tobs×h×w

  • 然后,对于最后的场景语义特征图,我们采用两个不同尺度的、步长( s t r i d e stride stride)为 2 2 2 的卷积层,对一张语义分割后的场景特征图进行 CNN 特征提取(下图中CNN卷积层1、2)。
    在这里插入图片描述
    图 5 对语义分割特征图的卷积特征提取

  • 给定一个人的坐标 x , y x,y x,y,我们从卷积特征图中汇集此人当前所在位置( x , y x,y x,y)的场景特征。通俗点讲,就是首先给定这个人站的位置一个坐标 x , y x,y x,y,然后把这个坐标信息和特征图的场景信息放到一个张量里面作为一个整体。相当于在这一步,将人的坐标与场景特征图建立了联系。从整体效果来看,后面经过训练,计算机会学出来:具有不同动作和表征特点的人更愿意出现在何种场景的哪个位置

    由于特征图的感受野在不同的卷积层有差别,而且与卷积层的卷积核大小、池化的规模、方式都有关系。在这个实验中,我们将 s c a l e scale scale 设置为 1 1 1 k e r n e l _ s i z e kernel\_size kernel_size 设置为 3 3 3,也就是此模型在每个瞬间会观察“目标人物”周围 3 × 3 3×3 3×3 的区域 。

  • 一个人-场景的交互表示为: R T o b s × C \mathbb R^{T_{obs}×C} RTobs×C C C C 是卷积层中的通道数,通俗点讲,就是每个卷积层中有多少个卷积核, C C C 是卷积层中卷积核的个数。做完卷积之后得到的是特征图,代表 CNN 网络从分割的场景中学到的信息

    这个集合如此表示的意义在于:一共有 T o b s T_{obs} Tobs 个时间步,每个时间步中根据上面说的,都会将人的位置坐标在对应的场景特征图中标注出来,以此来建立关系。其实就相当于把在场景中的 位置特征 嵌入到场景特征图中,把这两个特征进行融合,所以最后当 T o b s T_{obs} Tobs 个时间步结束的时候,一共有 T o b s T_{obs} Tobs 这么多张图中把人的坐标和场景特征图建立了联系。而对于每张场景特征图,使用了两层卷积层做卷积运算,每个卷积层的通道数(也就是包含卷积核的数量)为 C C C

    所以,最终 R T o b s × C \mathbb R^{T_{obs}×C} RTobs×C 代表了:在 T o b s T_{obs} Tobs 张 “人物坐标和场景特征图建立关系”的图中,每个图提取了 C C C 个特征!也就是通过这些有意义的特征,才能使计算机学出来 【人物坐标】和场景特征图中的【场景】到底有什么关系。

    最后一步,把所有的结果输入到 LSTM 编码器中建立联系,并获取时间信息,不管进去的维度是多少,出来总是 d d d(因为LSTM的隐藏层维度是 d d d),又因为一共有 T o b s T_{obs} Tobs 张图,所以最终获得的的人员-场景特性为 R T o b s × d \mathbb R^{T_{obs}×d} RTobs×d

    下图将这些关系表示的非常清楚
    在这里插入图片描述
    图 6 人物与场景交互模块的结构

通过以上方式,场景中的特征就可以被提取出来了,接下来就是图像中所出现的 “对象” 的特征了。

3.2.2 人与对象的交互

在本篇文章中,我们的模块明确地对场景中所有人 / 对象的几何关系和对象类型进行建模。而不像以前很多的研究中依赖于 LSTM 隐藏状态来对附近的人 / 对象建模。

其实这一部分也很简单,还是将 【人与对象的交互】 分成两个部分:
① 目标人物与对象之间存在的的几何特征
② 对象的类型特征

3.2.2.1 <目标人物与对象之间的几何特征>

任意时刻,给定场景 { ( x k , y k , w k , h k ) ∣ k ∈ ( 1 , K ) } \{(x_k,y_k,w_k,h_k)|k∈(1,K)\} {(xk,yk,wk,hk)k(1,K)} 中的一个人 ( x b , y b , w b , h b ) (x_b,y_b,w_b,h_b) (xb,yb,wb,hb) 和其他 K K K 个对象的观测框,我们将几何关系编码到 G ∈ R K × 4 G∈\mathbb R^{K×4} GRK×4,这个关系用的是一个 K K K 4 4 4 列的矩阵表示。其中第 K K K 行的表达式为:

G k = [ l o g ⁡ ( ∣ x b − x k ∣ w b ) , l o g ⁡ ( ∣ y b − y k ∣ h b ) , l o g ⁡ ( w k w b ) , l o g ⁡ ( h k h b ) ] G_k=[log⁡(\frac{|x_b-x_k |}{w_b} ),log⁡(\frac{|y_b-y_k |}{h_b} ),log⁡(\frac{w_k}{w_b }),log⁡(\frac{h_k}{h_b} )] Gk=[log(wbxbxk),log(hbybyk),log(wbwk),log(hbhk)] (1)

该编码根据几何距离和分式来计算几何关系,使用对数函数来反映我们观察的结果,即:人类的轨迹更有可能收到附近对象或者人的影响,这种编码方式已经被证明在检测中是有效的。

针对公式1,这里稍作分析:

  • ∣ x b − x k ∣ |x_b-x_k | xbxk ∣ y b − y k ∣ |y_b-y_k | ybyk 两个部分结合来看就是两个点之间的 “曼哈顿距离”(关于曼哈顿距离,大家可以看我的另外一篇文章https://blog.csdn.net/qq_42902997/article/details/104986119),也就是目标人物和有关的对象之间的曼哈顿距离。之所以使用 l o g log log 函数的原因是, l o g log log 函数具有一项特质,那就是可以保证距离越近影响越大,距离越远,影响越小。
    在这里插入图片描述
    图 7 l o g log log 函数使用的意义

  • 关于 w b w_b wb h b h_b hb,很明显,这个是目标人物的边界框的尺寸,单位是像素。同样地, w k w_k wk h k h_k hk 分别是“对象”的边框尺寸。

  • 所以,不难理解 ∣ x b − x k ∣ w b \frac{|x_b-x_k |}{w_b} wbxbxk,这是目标人物(相对于他们自身的边框宽度)到对象的“曼哈顿”横向距离, ∣ y b − y k ∣ h b \frac{|y_b-y_k |}{h_b} hbybyk这是目标人物(相对于他们自身的边框高度)到对象的纵向距离。

  • w k w b \frac{w_k}{w_b } wbwk 表示“对象”的边框宽度(相对于“目标人物”的),鉴于 l o g log log 函数的特性, l o g ⁡ ( w k w b ) log⁡(\frac{w_k}{w_b }) log(wbwk) 可以使目标人物边框和对象边框在有差距的情况下,尽量地减小边框差距所带来的影响。

在这里插入图片描述
图 8 每个时间步目标人物-对象交互中几何特征的张量展示

从上图可以看出来,<目标人物与对象的几何特征> 在每一个时间步都是 K × 4 K×4 K×4 的张量,所以一共 T o b s T_{obs} Tobs 个时间步,总共的张量规模为: T o b s × K × 4 T_{obs}×K×4 Tobs×K×4

3.2.2.2 <对象的类型特征>

对于 <对象类型> 的问题,我们只需要使用 独热编码(one-hot encoding) 来获取 R K × N 0 \mathbb R^{K×N_0} RK×N0 维的特性,其中 N 0 N_0 N0 是对象类的总数,所以一共 T o b s T_{obs} Tobs 个时间步,【对象的类型特征】的张量规模为: T o b s × K × N 0 T_{obs}×K×N_0 Tobs×K×N0

所以,又已经知道 <目标人物与对象的几何特征> 的张量规模为: T o b s × K × 4 T_{obs}×K×4 Tobs×K×4<对象类型特征> 的张量规模为 T o b s × K × N 0 T_{obs}×K×N_0 Tobs×K×N0。输入LSTM编码器之前,又需要对这两个张量进行整合以及张量的规模调整。这两个向量直接合并到一起之后的规模是: T o b s × K × ( 4 + N 0 ) T_{obs}×K×(4+N_0) Tobs×K×(4+N0),这就是 【人与对象交互特征】 的规模。

然后我们将当前的几何特征和对象类型特征嵌入 d e d_e de 维向量中(其实在这里可以理解程一个 d d d 维的 e m b e d d i n g embedding embedding 向量 d e m b e d d i n g d_{embedding} dembedding),来实现已有独热编码矩阵的维度调整,然后将 e m b e d d i n g embedding embedding 向量的综合特征输入LSTM编码器,得到最终得到LSTM编码器的输出为整合后的 T o b s × d T_{obs} × d Tobs×d【人与对象交互特征】

总的来说,跟前面的【人与场景关联】中信息整合一样,【人与对象交互】模块也是分别将 <几何特征> 和 <对象特征> 汇集融合到一个张量里面,这个张量表示目标人物与 K K K 个其他类型的对象在各个时刻空间中的关系。文献中给出的本模块的图如下:
在这里插入图片描述
图 9 原论文中给出的【人-对象交互】部分的结构

所以, 整个【人与环境交互】模块 的示意图如下:
在这里插入图片描述
图 10 原论文中给出的人-环境交互的模块结构

3.3 轨迹生成和注意机制

在深入了解这个模块的具体工作之前,大家最好先了解一下什么是 <注意机制>,你要首先掌握注意机制的大致思想和符号: q t ~ \tilde{q_t} qt~ 指的是什么,语义向量 C C C 是怎么通过注意机制的运算得来的。在这里大家可以先通过这几篇文章和资源来大致了解注意机制:

还要注意的是,在此文章中: q t ~ \tilde{q_t} qt~ 表示的都是一个“经过了注意机制模型”计算之后的向量。

回顾一下前面的文章中分析了要实现轨迹预测所使用的两个模块,每个模块两个子模块的理论基础,分别是:

  • 人类行为模块
    ① 人类的外表特征
    ② 人类的活动特征

  • 人类与环境的交互模块
    ① 人类与场景的交互
    ② 人类与周围对象的交互

这四个子模块都是最终输入一个单独的LSTM编码器,最后 输出的张量维度相同 ,都是 T o b s × d T_{obs} × d Tobs×d

3.3.1 轨迹特征模块

给定目标人物最后时刻的 轨迹输出(最后一个时刻的坐标),可以通过以下公式提取出轨迹嵌入(给出轨迹预测):

e t − 1 = t a n h { W e [ x t − 1 , y t − 1 ] + b e ∈ R d } e_{t-1}=tanh\{W_e[x_{t-1},y_{t-1}]+b_e∈\mathbb R^d\} et1=tanh{We[xt1,yt1]+beRd} (2)

此公式本质上就是一个全连接层的公式,输入是一个坐标的矩阵 [ x t − 1 , y t − 1 ] [x_{t-1},y_{t-1}] [xt1,yt1],与权重 W e W_e We 作运算之后加偏置 b e b_e be 再经过激活函数 t a n h tanh tanh 最后得到一个向量 e t − 1 e_{t-1} et1 作为输出的轨迹预测特征。这个特征向量用 e t − 1 e_{t-1} et1 来表示,这是本文第 5 5 5个特征。

[ x t − 1 , y t − 1 ] [x_{t-1},y_{t-1}] [xt1,yt1] 是在时刻 t − 1 t-1 t1 时刻的轨迹; W e , b e W_e, b_e We,be 是可学习的参数,把第 5 5 5 个特征向量 e t − 1 e_{t-1} et1 嵌入到另外一个专门用于轨迹的 LSTM 编码器中,隐藏层的尺寸依然是 T o b s × d T_{obs}×d Tobs×d,暂且把这个LSTM编码器称作为 <目标人物轨迹特征的LSTM编码器>

前面提到的所有 5 5 5 个LSTM单独特征编码器的隐藏状态全部集中在一起被压缩成一个名为 Q Q Q 的张量 Q ∈ R M × T o b s × d Q∈\mathbb R^{M×T_{obs}×d} QRM×Tobs×d M = 5 M=5 M=5 代表特征总数, d d d 为LSTM隐藏尺寸的大小。把五个特征统一放到一个张量里面再输入到LSTM编码器的目的是为了将这 5 5 5 个特征进行联系,建立 5 5 5 个特征之间的关系,并对这 5 5 5 个非常重要的特征进行统一训练

3.3.2 注意机制

我们使用LSTM解码器来直接预测未来 ( x , y ) (x,y) (x,y) 坐标形式的目标人物轨迹 。使用 <目标人物轨迹特征的LSTM编码器> 的最后一个时间步的状态来初始化这个解码器的隐藏状态。在每一个时刻,系统将根据解码器状态:

h t = L S T M ( h t − 1 , [ e t − 1 , q t ~ ] ) h_t = LSTM(h_{t-1},[e_{t-1},\tilde{q_t}]) ht=LSTM(ht1,[et1,qt~]) (3)

和一个全连接层一起来计算 ( x , y ) (x, y) (x,y) 的坐标。

值得一提的是: q t ~ \tilde{q_t} qt~ 是一个重要的具有注意机制的 特征向量 ,被用来总结输入特征 Q Q Q 中的重要线索。

解析一下这个公式,首先这是典型的一个LSTM解码公式,公式中大体表示了一个这样的过程,如下:
在这里插入图片描述
图 11 解码端根据轨迹特征向量 e t − 1 e_{t-1} et1 和注意机制特征向量 q ~ t \tilde q_{t} q~t 来进行坐标 x , y x,y x,y 预测

上面说过,这里的 C C C 是由 2 2 2 个部分构成,在解码的时候,把这些特征分成了两拨,从这个公式可以看出:

  • 轨迹特征 e t − 1 e_{t-1} et1 单独作为一个特征,上面也说了,在一个时间步的维度为 d d d,总共为 T o b s × d T_{obs}×d Tobs×d

  • 5 5 5 个特征(分别是:人的外貌、动作、人与场景交互、人与动作交互、人的轨迹特征。)综合通过 注意机制生成的注意特征向量 生成的注意机制特征向量 q t ~ \tilde{q_t} qt~ 作为一个特征,维度也是单个时间步为 d d d ,总共为 T o b s × d T_{obs}×d Tobs×d 下面会给出解释。

在进行下面的工作之前,让我们首先再深入了解一下 Q i j : Q_{ij:} Qij: 这个概念:
在这里插入图片描述
图 12 如何将综合的特征向量 Q i j Q_{ij} Qij 进行切片,分成一个个单独的部分

  • 每一个特征向量 Q Q Q 都是由 5 5 5 个相同时间步的不同特征叠加起来的
  • 如果将所有的隐藏层特征向量 h i j h_{ij} hij i i i 表示行, j j j 表示列)都放到一个图里面,那么这个图中的每一个部分都是 Q Q Q 的一个切片。

那么接下来我们详细解析一下 Q Q Q 这个 包含了所有特征的向量到底是如何发挥作用的。其关键思想是:将多个特征投射到一个相关的空间中去(A space of correlation),然后通过注意机制从而使得那些 “具有识别性的” 特征更容易被注意机制捕获。为此,我们在每一个时间步 t t t 计算一个相似度矩阵 S t S^t St(也可以叫相似度矩阵)用来对比 h t − 1 h_{t-1} ht1 Q Q Q 张量中切片( h i j h_{ij} hij)的相似度 :


可能疑问: 为什么要用 h t − 1 h_{t-1} ht1 来衡量特征向量的相似度?

关于这个问题,大家可以先详细看一下注意机制的一些文章,这个问题是比较基础的一个问题,大家要自行去理解。


S t ∈ R M × T o b s S^t∈\mathbb R^{M×T_{obs}} StRM×Tobs

其中,每个通道:

S i j t = h t − 1 ┬ ⋅ Q i j : S_{ij}^t=h^{┬}_{t-1}·Q_{ij:} Sijt=ht1Qij (4)

本公式衡量相似度的方法是:将两个矩阵进行 “点积” 来度量; : : : 是一个从该维度中提取所有元素的切片操作符,也就是说上图中每个单独的LSTM的形成的 h 1 . . . h 1 ′ ′ , h 2 , . . . , h 2 ′ ′ , h 3 , . . . , h 3 ′ ′ h_1...h_1^{''},h_2,...,h_2^{''}, h_3,...,h_3^{''} h1...h1,h2,...,h2,h3,...,h3 都进行相似度计算最后 S i j t S_{ij}^t Sijt 的值代表每个特征向量 h n h_n hn 注意力得分,换句话说,该给 Q i j : Q_{ij:} Qij: 的每一个切片分配多少注意力权重 w w w

然后计算两个注意力权重分配矩阵:

A t = s o f t m a x ( m a x i = 1 M S i : t ) ∈ R M A^t = softmax(max_{i=1}^MS^t_{i:})∈\mathbb R^M At=softmax(maxi=1MSi:t)RM (5)

  • 就是用这个公式的 s o f t m a x softmax softmax 函数来分配的 纵向 的权重 w w w,这个决定的是不同的特征应该被赋予的注意力系数,通俗地讲就是不同相同时间步的不同特征哪一个更重要一些。

B t = [ s o f t m a x ( S 1 : t ) , ⋅ ⋅ ⋅ , s o f t m a x ( S M : t ) ] ∈ R M × T o b s B^t = [softmax(S^t_{1:}), ···,softmax(S^t_{M:})]∈\mathbb R^{M×T_{obs}} Bt=[softmax(S1:t),,softmax(SM:t)]RM×Tobs (6)

  • 这个公式里面的每一项,代表的都是一行中的注意力分配情况,通俗讲就是同一个特征在不同的时间步的注意力分配情况,例如第一项 s o f t m a x ( S 1 : t ) softmax(S_{1:}^t) softmax(S1:t) 代表的就是第一行 h 1 ′ ′ , h 2 ′ ′ , h 3 ′ ′ , . . . , h T o b s ′ ′ h_{1}^{''},h_{2}^{''},h_{3}^{''},...,h_{T_{obs}}^{''} h1,h2,h3,...,hTobs 中的注意力分配情况,同样地可以类推出最后一项代表的是第 M M M 行的注意力分配情况。

直观表示可以通过下图获得:
在这里插入图片描述
图 13关于公式(5)(6)的解析图

可以看到: A t A^t At 负责在不同特征之间分辨出 M = 1 M=1 M=1 M = 5 M=5 M=5 这些不同的特征哪一个是对当前时间步最有影响的特征,而 B t B^t Bt 则是 横向地分配 给同一类特征在不同时间步的特征向量注意力权重。

因此,加注意的特征向量 q t ~ \tilde{q_t} qt~ 为:

q t ~ = ∑ j = 1 M A j t ∑ k = 1 T o b s B j k t Q j k : ∈ R d \tilde{q_t} = \sum^M_{j=1}{A_j^t}\sum^{T_{obs}}_{k=1}B^t_{jk}Q_{jk:}∈\mathbb R^d qt~=j=1MAjtk=1TobsBjktQjk:Rd (7)

通过这些步骤的运算,注意模型建立了对不同特征、不同时间步特征向量的不同关注度,并将它们综合归纳成为 1 1 1 个加注意的特征向量 q t ~ \tilde{q_t} qt~,从公式中可以看到 q t ~ \tilde{q_t} qt~ 单个时间步的维度是 d d d(从 R d \mathbb R^d Rd 看出),总共维度为 T o b s × d T_{obs}×d Tobs×d。 通过实验证明,这种方法是有效的。

3.4 行为预测模块

上面提到了,【轨迹产生模块】 每个时间步产生一个位置定位 ( x , y ) (x,y) (x,y),但是误差可能随着时间进行积累,从而导致最后的预测位置有较大的偏差。

使用错误的预测位置进行活动预测也可能会导致较差的准确性,因此为了克服这个缺点,除了在这个模块实现:【预测目标人物未来的活动标签】 之外,还引入了一个辅助的任务,即 【预测活动发生的位置】

使用【曼哈顿网格】进行【活动位置的预测】,这是为了弥补【轨迹预测】和【活动标签预测】之间可能出现的错误和偏差。本文提出了一个【活动位置的预测模块】来预测人在未来活动中的最终位置。而这个最终位置可以帮助【轨迹预测】出现偏差的时候进行修正。

曼哈顿网格主要进行如下步骤的作用:

  • 分类任务:预测最终【轨迹预测】的位置坐标处于哪个网格快
  • 回归任务:预测网格块中心(图中绿点)到最终【预测位置坐标】(绿箭头末端)的偏差。

添加回归任务的原因:

  • 这种方式相比于只提供区域范围相比更加精准
  • 按常理来讲,预测一个人的轨迹的位置,应该和他活动发生的位置是相近的,所以,可以利用这两个位置进行结果的修正以达到最佳预测轨迹位置的目的,简而言之,这种【预测活动发生位置】和【轨迹预测】这两种方法是互补的。

不同尺寸的曼哈顿网格上重复这个过程,并使用不同的预测前端对他们进行建模;这些预测前端与模型的其余部分进行端对端(seq-to-seq)的训练。这种想法部分受到了region proposal network 的启发。在这里需要一种经济高效的方式使用多尺度特征进行精准定位。

从上图可以看到,把最后一个时刻的编码器的隐藏状态 Q T o b s Q_{T_{obs}} QTobs(包括了 Q 1 T o b s , . . . , Q M T o b s Q_{1T_{obs}},...,Q_{MT_{obs}} Q1Tobs,...,QMTobs)和场景分割得到的 CNN 特征向量连接起来。
在这里插入图片描述
图 14 Q T o b s Q_{T_{obs}} QTobs实例

然后如下图:

  • Q T o b s Q_{T_{obs}} QTobs 的张量维度为: M × d M×d M×d,但是为了与图像的特征的兼容性,我们将这个特征张量调整成了 M × d × w × h M×d×w×h M×d×w×h,其中 w × h w×h w×h 是网格块的总数,也是特征图的尺寸。这一步就相当于把原本 M × d M×d M×d 的信息按照某种映射方式放到了一张特征图上,这张特征图的大小与从CNN网络出来的尺寸一致,都是 w × h w×h w×h
  • 把连接后的特征分别输入两个独立的卷积层进行分类和回归(这个过程同时在两个规模不同的曼哈顿网格进行)。
  • 用于网格分类的卷积输出结果 c l s g r i d ∈ R w ⋅ h × 1 cls_{grid}∈\mathbb R^{w·h×1} clsgridRwh×1,这个输出代表着每个网格块成为正确定位的概率(因为每个网格对应一个概率,所以结果 R w ⋅ h × 1 \mathbb R^{w·h×1} Rwh×1)。
  • 用于网格回归的卷积输出结果 r g g r i d ∈ R w ⋅ h × 2 rg_{grid}∈\mathbb R^{w·h×2} rggridRwh×2,这个输出代表最终目的地与每个网格块中心在 x , y x,y x,y 坐标下的误差(因为每个网格对应一个横坐标 x x x,一个纵坐标 y y y 所以这个结果的维度是 R w ⋅ h × 2 \mathbb R^{w·h×2} Rwh×2
  • r g g r i d rg_{grid} rggrid 中一行表示与网格块的差异,这是由 [ x t − x c i , y t − y c i ] [x_t-x_{ci},y_t-y_{ci}] [xtxci,ytyci]计算出来的,其中 ( x t , y t ) (x_t,y_t) (xt,yt) 代表的是预测位置, ( x c i , y c i ) (x_{ci},y_{ci}) (xci,yci) 代表第 i i i 个网格块的中心。同样地,也可以用类似的方法计算网格回归的 g r o u n d _ t r u t h ground\_truth ground_truth
  • 本文采用的方法和前人方法的不同之处在于:本文使用 网格位置场景语义 联系起来,并使用一个 分类卷积层 和一个 回归卷积层 来进行更加可靠的预测。
    在这里插入图片描述
    图 15 原论文对于位置回归和分类的模块
3.4.1 活动标签预测

使用 “综合向量” 的最后隐藏状态来计算未来活动 N a N_a Na 可能发生的概率:

c l s a c t = s o f t m a x ( W a ⋅ [ Q 1 T o b s : , Q 2 T o b s : , . . . , Q M T o b s : ] ) cls_{act}=softmax(W_a·[Q_{1T_{obs:}},Q_{2T_{obs:}},...,Q_{MT_{obs:}}]) clsact=softmax(Wa[Q1Tobs:,Q2Tobs:,...,QMTobs:]) (8)

其中 W a W_a Wa 是一个可学习的权重;一个人未来的活动可能是多级的,例如一个人可以同时 “行走” 和 “搬运”

3.5 训练

网络通过最小化一个多任务目标来进行端到端的训练。使用的损失函数有:

  • 主要被用在预测轨迹和 g r o u n d _ t r u t h ground\_truth ground_truth 轨迹之间的损失函数是常见的 L 2 L2 L2 损失。从 T o b s + 1 T_{obs+1} Tobs+1 T p r e d T_{pred} Tpred 之间的所有人员轨迹误差之和为 L x y L_{xy} Lxy

  • 第二种损失使用在行为 行为定位分类损失回归损失

    【行为定位分类损失】

    L g r i d _ c l s = ∑ i = 1 N c e ( c l s g r i d i , c l s g r i d ∗ i ) L_{grid\_cls}=\sum^N_{i=1}{ce(cls^i_{grid},cls^{*i}_{grid})} Lgrid_cls=i=1Nce(clsgridi,clsgridi) (9)

    其中 c l s g r i d ∗ i cls^{*i}_{grid} clsgridi g r o u n d _ t r u t h ground\_truth ground_truth 在第 i i i 次轨迹训练中的行为位置 I D ID ID
    在这里插入图片描述
    图 16 行为定位的损失计算演示,图中表示了预测值和 ground_truth 的差距和损失计算

    【回归损失】

    L g r i d _ r e g = ∑ i = 1 N s m o o t h L 1 ( r g g r i d i , r g g r i d ∗ i ) L_{grid\_{reg}}=\sum^N_{i=1}{smooth_{L_1}(rg^i_{grid},rg^{*i}_{grid})} Lgrid_reg=i=1NsmoothL1(rggridi,rggridi) (10)

    r g g r i d ∗ i rg^{*i}_{grid} rggridi g r o u n d _ t r u t h ground\_truth ground_truth 与正确的网格中心的差异;这种损失是为了 弥补轨迹生成任务活动标签预测 之间的差距

  • 第三种损失是为了 【活动标签预测】 而设计的损失,这里使用交叉熵损失函数:

    L a c t = ∑ i = 1 N c e ( c l s a c t i , c l s a c t ∗ i ) L_{act} = \sum^N_{i=1}{ce(cls^i_{act},cls^{*i}_{act})} Lact=i=1Nce(clsacti,clsacti) (11)

最后的综合损失计算方法如下:

L = L x y + λ ( L g r i d _ c l s + L g r i d _ r e g ) + L a c t L = L_{xy}+\lambda(L_{grid\_cls}+L_{grid\_reg})+L_{act} L=Lxy+λ(Lgrid_cls+Lgrid_reg)+Lact (12)

训练过程中为目标位置的预测部分引入一个平衡控制器 λ = 0.1 \lambda=0.1 λ=0.1,以抵消他们可能存在的更高损失值情况。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值