作者和机构
解决的问题
给定3D场景和起点终点,生成长时间人体动作和场景互动
难点
- 生成长时间真实的动作
- 建模人与场景之间的交互以及可供性
相关研究
- 场景限制:大多数方法只是停留在静态人体生成,很少有研究人体运动
- 人体动作预测:有很多轨迹预测和姿势预测的研究,但很少有关注人与场景之间的相互关系
- 运动合成:已有的方法要么依赖于预定义的对象,要么使用了简单的手工环境
方法
给定场景,以及起点和终点,子目标位置和输入,以及SMPL-x体形参数 β \beta β,根据子目标确定运动路径,用条件变分自编码器CVAE在每一个子目标位置生成一个3D人体,根据这些3D人体生成每一段人体的运动序列,从而组成长段人体运动。
两阶段生成方法好处有两个:生成的序列容易连接,因为确定了序列之间的连接点的3D人体模型;可以生成不同的人体运动序列,采样不同的隐向量即可在子目标上生成不同的人体,从而生成不同的子序列。
第一阶段使用CVAE在每个子目标处生成人体。给定体形参数 β ∈ R 10 \beta\in\R^{10} β∈R10,位移参数 t ∈ R 3 t\in\R^3 t∈R3,方向参数 r ∈ R 6 r\in\R^6 r∈R6,以及场景点云 v s v^s vs作为输入。首先使用PointNet Φ \Phi Φ从点云中提取特征 F s = Φ ( v s ) F^s=\Phi(v^s) Fs=Φ(vs),然后与 { β , t , r } \{\beta,t,r\} { β,t,r}一起输入到FC层中得到特征 F h s F^{hs} Fhs,作为CVAE的条件特征。训练CVAE使用标准的重建误差和KL散度,然后用接触和碰撞约束进行限制。
-
Encoder部分。令起始位置的人体网格 M 0 = M ( t 0 , r 0 , β , p 0 , h 0 ) M_0=\mathcal{M}(t_0,r_0,\beta,p_0,h_0) M0=M(t0,r0,β,p0,h0)通过两个含有两层FC层的残差块,得到的输出与 F h s F^{hs} Fhs一起送到含有两层FC层的Encoder预测均值 μ ∈ R 32 \mu\in\R^{32} μ∈R32和方差 σ 2 ∈ R 32 \sigma^2\in\R^{32} σ2∈R32。然后从 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)中采样 z z z作为解码器的输入。
-
Decoder部分。将隐向量 z z z和 F h s F^{hs} Fhs一起输入到含有两个残差块,每个残差块有两层FC层的解码器中,输出人体参数。Loss包括与 M 0 M_0 M0的重建误差和 Q ( z ∣ μ , σ 2 ) Q(z|\mu,\sigma^2) Q(z∣μ,σ2)与 μ ( 0 , I 2 ) \mu(0,I^2) μ(0,I2)之间的KL散度。预测时仅需使用解码器。
-
PointNet部分。删除PointNet的transformation架构,因为这会导致人与环境的坐标不匹配。用S3DIS数据集训练PointNet。取PointNet的encoder作为 Φ \Phi Φ,输出256D的特征向量。
第二阶段为动作合成框架。作者使用两个顺序连接的网络:RouteNet R \mathcal{R} R预测两个子目标之间路径的位置和朝向,PoseNet P \mathcal{P}