Champ: Controllable and Consistent Human Image Animation with 3D Parametric Guidance

  • Alibaba&南京大学&复旦大学
  • https://fudan-generative-vision.github.io/champ/#/代码开源
  • related works:16, 43(skeleton),36,47(semantic),18,56(dense motion flows),9, 24,35, 40, 44, 45(gan),14, 39,11, 18, 18, 43, 52(diffusion-based)
  1. 问题引入
  • 问题基本定义:输入参考人体图片和一段视频,视频描述了运动序列,输出的是参考人根据视频序列进行运动的视频;
  1. methods
    在这里插入图片描述
  • 整体框架:本文提出了SMPL模型来提取pose和shape信息,之后这些信息作为LDM模型的输入指导信息,具体如下图所示;
  • SMPL model:参数化的表示人体,其中pose表示在空间 θ ∈ R 24 × 3 × 3 \theta\in\mathbb{R}^{24\times3\times3} θR24×3×3,shape表示在空间 β ∈ R 10 \beta\in\mathbb{R}^{10} βR10,融合两个参数空间,就可以生成一个人体的3d网格表示 M ∈ R 3 × N M\in\mathbb{R}^{3\times N} MR3×N,其中 N = 6890 N=6890 N=6890表示定点个数,定点权重 W ∈ R N × k W\in\mathbb{R}^{N\times k} WRN×k表示顶点和关节之间的关系;
  • 给出参考图片 I r e f I_{ref} Iref和一段视频 I 1 : N I^{1:N} I1:N,使用模型4D-Humans得到SMPL表示, H r e f , H 1 : N H_{ref},H^{1:N} Href,H1:N,之后得到对应的人体网格表示,从而可以从网格中提取对应的深度图、法向量图和semantic;
  • 因为要生成的事参考图片的视频,所以SMPL表示是 H t r a n s i = S M P L ( β r e f , θ m i ) H^i_{trans}=SMPL(\beta_{ref},\theta_m^i) Htransi=SMPL(βref,θmi),其中 i i i表示帧序号,表示融合参考图片的shape参数空间和第 i i i帧的pose参数空间;
  • 除了上面三种条件(depth,semantic,normal)以外还加入了skeleton来增强对面部表情和手部动作的表示;
  • 四种guidence的监督方式,分别有各自的guidence网络 F i ( ⋅ , θ i ) F^i(\cdot,\theta^i) Fi(,θi),在对条件进行编码之后将得到的结果进行加和 y = ∑ i = 1 N F i ( ⋅ , θ i ) y = \sum_{i = 1}^NF^i(\cdot,\theta^i) y=i=1NFi(,θi),作为最后的guidance和noise latent结合作为网络的输入;
  1. 实验
  • 数据:从各个平台上收集的5000段视频;
  • 训练:两阶段,8卡A100
  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一段 C++ 代码,包含了几个语句,主要功能是订阅ROS话题,加载URDF模型,并获取ROS节点的命名空间。 具体来说,这段代码中: - `if (orientation_from_imu_)` 表示如果满足条件 `orientation_from_imu_`,则执行下面的语句。这里的 `orientation_from_imu_` 是一个成员变量,可能是一个布尔类型的变量。 - `imu_subscriber_ = nh->subscribe<sensor_msgs::Imu>("imu/data", 1, &StateEstimation::imu_callback_, this);` 表示创建了一个 ROS 订阅者对象 `imu_subscriber_`,订阅了名为 "imu/data" 的话题,并指定了回调函数 `&StateEstimation::imu_callback_`。其中,`nh` 是一个 ROS 节点句柄,用于创建 ROS 订阅者对象;`1` 表示订阅话题的队列长度为 1;`this` 表示回调函数的对象是当前对象。 - `base_.setGaitConfig(gait_config_);` 表示调用对象 `base_` 的成员函数 `setGaitConfig()`,并将参数 `gait_config_` 传递给该函数。这里的 `base_` 可能是一个对象。 - `champ::URDF::loadFromServer(base_, nh);` 表示调用 `champ::URDF` 命名空间中的静态成员函数 `loadFromServer()`,并将 `base_` 和 `nh` 作为参数传递给该函数。这个函数的作用是从 ROS 参数服务器中加载 URDF 模型,然后将模型设置到 `base_` 对象中。 - `joint_names_ = champ::URDF::getJointNames(nh);` 表示调用 `champ::URDF` 命名空间中的静态成员函数 `getJointNames()`,并将 `nh` 作为参数传递给该函数。这个函数的作用是从 ROS 参数服务器中获取机器人关节名称列表,并将结果保存到 `joint_names_` 变量中。 - `node_namespace_ = ros::this_node::getNamespace();` 表示调用 ROS API 中的 `ros::this_node::getNamespace()` 函数,获取当前节点的命名空间,并将结果保存到 `node_namespace_` 变量中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值