该研究提出一种迁移不同视频中人物动作的方法。给出两个视频,一个视频中是研究者想要合成动作的目标人物,另一个是被迁移动作的源人物,研究者通过一种基于像素的端到端流程在人物之间进行动作迁移(motion transfer)。该方法与这二十年来使用最近邻搜索 [4, 9] 或 3D 重定位运动 [7, 13, 26, 30] 的方法不同。研究者用该框架创建了多个视频,使未经训练的业余人员也能像专业芭蕾舞演员那样做出旋转等舞蹈动作,像流行明星那样跳舞。

图 1:从源人物到两个目标人物的动作迁移。

为了逐帧地实现两个视频中人物之间的动作迁移,研究者必须学习两个人物图像之间的映射。该研究的目标是发现源集合和目标集合之间的图像转换方法 [14]。但是,研究者并不具备执行同样动作的两个人物的对应图像对,来直接监督图像转换。即使两个人物按同样的方式执行动作,仍然有可能不具备帧到帧的身体姿态对应关系,因为每个人物的身材和风格都存在差异。

研究者观察到基于关键点的姿势可以作为两个人物之间的中间表示,关键点姿势本质上编码了身体位置而非外表。这些姿势与该研究的目标一致,能够保持随时间变化的运动特征,同时尽可能多地抽象人物特质。因此研究者把中间表示设计成姿势简笔画(见图 2)。研究者从目标视频中获取每一帧的姿势检测 [5, 27, 35],得到对应(姿势简笔画,目标人物图像)对集合。使用该对齐数据,研究者以监督的方式学习姿势简笔画和目标人物图像之间的图像转换模型。因此,该模型经过训练后可以生成特定目标人物的个性化视频。接下来就是动作迁移,研究者将姿势简笔画输入训练好的模型中,以获取目标人物持同样姿势的图像。研究者在模型中添加了两个组件来改善结果的质量:为了增强生成视频的时间流畅度(temporal smoothness),研究者每一帧的预测都基于前一个时间步的预测结果;为了增强结果的面部逼真程度,研究者在模型中纳入了一个专门化 GAN,用于生成目标人物的面部。

图 2:姿势简笔画和目标人物帧之间的对应。

该方法可以生成不同视频人物之间的动作迁移视频,无需昂贵的 3D 或运动捕捉数据。该研究的主要贡献是提出了一种基于学习的流程,用于视频间人物的动作迁移,结果在真实、详细的视频中实现了复杂的动作迁移。研究者还对提出的模型进行了模型简化测试(ablation study),并与基线模型进行对比。

论文:Everybody Dance Now

论文链接:https://arxiv.org/abs/1808.07371

摘要:本文提出了一种简单的方法,用于「do as I do」的动作迁移:给出一个人跳舞的源视频,我们可以在目标人物执行标准动作的几分钟之后,将该表演迁移到一个新的(业余)目标人物上。我们将该问题看作一个具有时间平滑的逐帧图像转换问题。我们使用姿势检测作为源和目标之间的中间表示,学习从姿势图像到目标人物外观图像的映射。我们将此设置用于时间相干视频生成,包括逼真的人脸合成。

方法

给出一个源人物视频和一个目标人物视频,我们的目标是生成目标人物执行源视频同样动作的新视频。为了完成这一任务,我们将工作流程分成以下三个步骤:姿势检测、全局姿势归一化、从归一化的姿势简笔画映射到目标人物。在姿势检测阶段,我们用一个预训练的当前最优姿势检测器,基于源视频中的帧来创建姿势简笔画。全局姿势归一化阶段考虑了帧内源人物和目标人物的身材、位置差异。最后,我们设计了一个系统,通过对抗训练学习从归一化姿势简笔画到目标人物图像的映射。

图 3.(上图)训练:我们的模型利用姿势检测器 P,基于目标人物的视频帧创建姿势简笔画。训练期间,我们学习映射 G 和对抗鉴别器 D,后者尝试区分「真」对应对 (x, y) 和「假」对应对 (G(x), y)。(下图)迁移:我们使用姿势检测器 P:Y ′ → X ′来获取源人物的姿势关节,然后通过归一化过程 Norm 将这些姿势关节迁移到目标人物的关节,为目标人物创建对应的姿势简笔画。接下来我们使用训练好的映射 G 来生成目标人物的新视频。

图像转换的对抗训练

我们修改了 pix2pixHD [33] 的对抗训练设置来生成时间相干视频帧、合成逼真的人脸图像。

为了创建视频序列,我们修改了单个图像生成设置来增强相邻帧之间的时间连贯性,如图 4 所示。

图 4:时间平滑设置。当合成当前帧 G(x_t ) 时,我们基于对应的姿势简笔画 x_t 和之前合成的帧 G(x_t−1),获得时间平滑的输出。然后鉴别器 D 尝试将「真」时间相干序列 (x_t−1, x_t , y_t−1, y_t ) 与「假」序列 (x_t−1, x_t , G(x_t−1), G(x_t )) 区分开来。

我们添加了专门的 GAN 设置,旨在为面部区域添加更多细节和真实感,如图 5 所示。结果显示该 GAN 设置产生了比较真实的面部特征,模型简化测试显示其改善了完整图像 GAN 的结果。

图 5:Face GAN 设置。残差由生成器 G_f 来预测,并从主生成器添加到原始人脸预测中。

图 6:迁移结果。每一部分展示了五个连续帧。顶部一行显示源人物,中间一行显示标准化的姿势简笔画,底部一行显示目标人物的模型输出。

表 4:每张图像的漏检平均值,数值越小越好。

图 7:不同模型合成结果的比较。图像被裁剪成围绕原始姿势的边界框。T.S. 表示具有时间平滑设置的模型,T.S. + Face 是具有时间平滑设置和 Face GAN 的完整模型。时间平滑设置为手、头、上衣和阴影添加了细节。这些细节在完整的模型中延续,包括脸部和周围区域的附加细节,从而产生最逼真的合成结果。

图 8:验证集上不同模型的人脸图像对比。T.S. 表示具有时间平滑设置的模型,T.S. + Face 是具有时间平滑设置和 Face GAN 的完整模型。时间平滑设置和 Face GAN 的增加使得细节得到改善,失真程度得以减少。

Dance GAN 迁移不同视频中人物动作的方法的更多相关文章

  1. 如何将已部署在ASM的资源迁移到ARM中

    使用过Azure的读者都知道,Azure向客户提供了两个管理portal,一个是ASM,一个是ARM,虽然Azure官方没有宣布说淘汰ASM,两个portal可能会在很长的一段时间共存,但是考虑到AR ...

  2. 网页中插入外部视频的几种方法(PC与手机网页通用)

    网页中加入视频的几种方法(PC与手机网页通用) 方法一: <!doctype html> <html> <head> <meta charset=" ...

  3. IOS从视频中获取截图

    从视频中获取截图: NSString *movpath =[[NSBundle mainBundle] pathForResource:@”iosxcode4″ ofType:@”mov”]; mpv ...

  4. 记OC迁移至swift中笔记20tips

    写久了OC后来写swift,总感觉写着是swift的皮毛,但是实际上是OC的核心,这里整理了OC迁移至swift中的一些小细节. 1 在当前类中,实例方法调用属性以及方法都可以将self省略掉,而且是 ...

  5. 将数据库从普通文件系统迁移到ASM中

    数据库存储的是普通的文件系统,现在将数据库迁移到ASM存储中. 准备ASM环境: [oracle@kel ~]$ asmcmd ASMCMD> ls ASM/ KEL/ ASMCMD> 在 ...

  6. python 从视频中提取图片,并保存在硬盘上

    使用python的moviepy库来提取视频中的图片,按照视频每帧一个图片的方式来保存. extract images from video, than save them to disk from ...

  7. 利用Effmpeg 提取视频中的音频(mp3)

    在B站看到一个up发的病名为爱的钢琴曲,感觉很好听,然后当然是要加入歌单啊.然而不知道怎么转换成mp3,找来找去找到了EFFmpeg 这篇只是达到了我简单的需求,以后可能会有EFFmpeg更详细的使用 ...

  8. python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框

    最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...

  9. 机器学习进阶-图像基本处理-视频的读取与处理 1.cv2.VideoCapture(视频的载入) 2.vc.isOpened(载入的视频是否可以打开) 3.vc.read(视频中一张图片的读取) 4.cv2.cvtColor(将图片转换为灰度图)

    1.vc = cv2.VideoCapture('test.mp4') #进行视频的载入 2.vc.isOpened() # 判断载入的视频是否可以打开 3.ret, frame = vc.read( ...

随机推荐

  1. 重构Tips

    一,重新组织函数1.首先找出局部变量和参数. 1>任何不会被修改的变量都可以当作参数传入.2.去掉临时变量Replace Temp with Query.用查询函数代替临时变量3.Extract ...

  2. CentOS7.5最小化安装与初始化配置(做标准化)

    本文分享CentOS的标准化安装配置方法,方便集群批量装机配置 ------------------------- 完美的分割线 ---------------------------- 1.安装标准 ...

  3. squeeze()

    一.说明 B = squeeze(A),B与A有相同的元素,但所有只有一行或一列的维度(a singleton dimension)被去除掉了.A singleton dimension的特征是siz ...

  4. DS博客作业04--树大作业说明

    大作业题目说明 1.目录树 按照如下目录路径,设计一颗目录树保存.并能实现对目录树遍历.目录路径存在file.txt,格式如下: b.txt c\ ab\cd.txt a\bc.txt ab\d.tx ...

  5. 共享仓库,远程仓库,多人协作,github操作

    1.共享仓库: 创建共享仓库 1.创建文件夹 mkdir file 2.设置文件夹属主 chown tarena:tarena file 3.将该文件夹设置为可共享的git仓库 cd file git ...

  6. LeetCode Majority Element Python

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  7. ArrayList和LinkedList插入删除效率的测试(完全不在一个数量级8/20)

    通过index获取元素的值 java里面的链表可以添加索引,而C中的链表,是没有索引的 package ArrayListVSLinkedList; import java.util.ArrayLis ...

  8. memsql 6.7集群安装

    预备环境处理 安装yum 源 yum install -y yum-utils yum-config-manager --add-repo https://release.memsql.com/pro ...

  9. vault 集群搭建(active standby 模式)

        参考架构图: consul server cluster 搭建 consul 基本配置格式 { "server": true, "node_name": ...

  10. prisma 服务器端订阅试用

      graphql 协议是支持数据的实时订阅功能的(一般基于websocket 进行实现) prisma 支持客户端订阅以及服务器端订阅(类似webhook),可以方便将 数据推送后端服务 目的 pr ...