目录

写在前面

任务描述:Image Animation

作者动机

作者贡献

流程概述

用局部仿射变换描述运动

考虑遮挡的图像生成

代价函数

测试阶段:相对运动迁移


写在前面

这篇文章是百度顶会论文复现营GAN方向五篇之一,选择读这篇是因为被老师说的“万物皆可动”打动了,读完之后,发现做出了一个比较正确的选择,作者把一堆难懂的都丢到附录里去了,阅读起来十分友好,再加上这篇其实更多的再讲Image Animation的专业知识,对GAN本身说的倒不是很多,新手就相当舒服了。

任务描述:Image Animation

Video generation 是让静止的图片动起来,Image Animation 是视频生成的一个子类,让静止影像中的物体按照驱动视频的运动轨迹运动,这其中要求静止影像和驱动视频的物体属于同一类别。换脸,制造假新闻等等都可以由这个技术完成,这里的物体是脸,叫face animation,主要捕捉的是表情;也可以捕捉人体动作,可以让一个不会跳舞的人也跳起极乐净土。要说这和GAN有什么关系呢,就是因为要生成图片序列,而不仅仅是动作捕捉。而这篇文章的重点其实是动作捕捉来着。

作者动机

1.特定领域设计

传统方法对要迁移的对象有很强的先验假设,导致各个领域方法不统一,简单来讲就是表情迁移,动作迁移,手势迁移这样相关性很强的工作并不能统一到一个框架下来,因为他们对三维模型的假设不同,脸有一个鼻子,一个嘴巴,两个眼睛,而人体是按关节划分。对先验的要求就是只能各自处理各自的。解决的方法就是不依赖先验,而是做关键点的探测(通过半监督训练得到,对某一类物体进行训练以获得它的关键点个数及分布)

半监督是因为没有办法做完全的监督,因为两个不同物体按相同轨迹运动的数据实在太少了。

2.需要冗长的语义标签,以及目标物体的样本数据

可以把Image Animation 看成一个迁移的问题,这个缺陷也是主要针对这类方法说的,迁移问题是一个域转化到另一个域,只不过两个域训练样本数目不一样,但仍然是需要样本的,也就是说这类方法必须对每一个你要操控的物体进行单独的训练,同时还要那个物体几个小时的视频数据,这一点显然是不友好的。而本文的方法呢,在训练好之后,测试或部署截断,只需要输入源影像和驱动视频就够了,要求只是他们属于和你训练数据的同一类别。

作者贡献

动机只是说的这一类方法的好处,与之属于同一类别的还有X2Face, MonkeyNet,不需要类别先验知识,不需要操控对象的大量样本数据,这两篇也是作者在本文中主要对比的工作。

本文究竟干了啥呢,如题所述,一阶运动模型,MonkeyNet是零阶的,我对阶数的理解是这样的(如有错误,欢迎指正),这类方法将要动的物体划分为K个刚体,对应K个关键点,零阶认为刚体内部所有像素与关键点的运动是一致的,而一阶的运动模型认为还需要考虑像素到关键点的距离,也就是刚体内部的不同像素可以有不同的运动(由于是图像变形,并不影响三维刚体的概念)。围绕这一点,在训练时需额外输出关键点处局部仿射变换矩阵的导数信息,这一点是其他关键点探测方法所不具备的。

另外作者还使用了掩膜,以指示生成网络生成的图像哪些部分应该通过图像变形(Image Wrapping)得到,哪些部分通过图像修补(Image Inpainting)得到。这个掩膜是源影像物体的子集,源影像可以分为背景和要驱动的物体,物体动了之后,原来物体占据的部分就空了出来,需要结合背景进行图像修补,再考虑动了之后其实还是有和之前部分重叠的,这一部分不需要修补,所以掩膜就是源影像物体减去(源影像物体和驱动帧物体的交集),也就是源影像物体减去驱动帧物体。

流程概述

这是一个半监督的网络,训练时的输入是一个个视频,但实际上还是要拆分成一对对的帧,代价函数是驱动帧和生成帧的差值,再加上一个运动恒等变换的约束。网络分成两个部分(仍然是端到端的),运动模块和生成模块。运动模块又可分为两个部分,关键点探测器和密集运动场,关键点探测器除了要探测关键点位置,还要计算局部的仿射变换矩阵加上这个矩阵的一阶导数(Jacobi),要同时估计源影像和驱动帧的关键点变换参数,参数都是相对于虚拟的参考帧(为什么引入,容后再讲)。关键点探测部分是一个U-Net.然后把关键点的参数给密集运动场以生成每一个像素的运动(就是图像的光流场)。同时密集运动场还要输出上面提到的那个掩膜,最后生成模块将密集运动场的输出和源影像结合生成一个新影像。

用局部仿射变换描述运动

先讲一下为什么要引入参考帧,因为源影像和驱动帧在外观上来看可能非常不同,而且这样可以分开处理两张影像。引入之后,D到S的变换还是要求的,因此要求变换是双射的也就是可逆的。

再讲一下为什么是 Ts<--d 而不是Td<--s,显然从源影像到驱动帧更好理解,论文里的说法是,Ts<--d是后向的光流,这样就可以用后向的变形,基于双线性插值的差分方式,更高效(有引文)。

然后上公式吧:

这个X就是S或D,一阶泰勒展开,很好理解,展开处的值加上导数×距离加上余项。描述关键点所对应刚体内的任一像素点的仿射变换矩阵和关键点处仿射变换矩阵的关系

引入参考帧,D到S的变换还是要求的,因此要求变换是双射的也就是可逆的。

经过一番推导变成这个样子,变成这样应该更好算吧,可能要看附录才能理解。

这个是热图(heatmap)的计算公式,主要用于关键点探测,应该是要看前置论文才能理解。

这个公式我理解,Mk是指的掩膜,第k个关键点对应的刚体,M0是指的背景,这个公式的意义就是说像素点只受所在掩膜对应关键点的局部仿射变换影响(私以为,这里是一个改进点,可以考虑蒙皮动画的形式,一个像素可受多个关键点影响,将有利于关节接边处的视觉效果)。这里的掩膜应该也和接下来要输出的整体的掩膜从计算上有点关系。

考虑遮挡的图像生成

这里主要考虑源影像和驱动帧像素之间不是一一对应的关系,这个问题可以通过特征变形的方式解决,两个下采样卷积层得到一个特征图,然后将这个特征图按照仿射变换矩阵进行变形,具体的估计还得看引文和代码。

代价函数

第一项重建损失:驱动帧和生成影像特征图的差值

这里是特征图的差值(由VGG-19输出,I是特征通道数),推荐使用下采样形成金字塔再做差值,一共有四种分辨率,20个误差项(意思是,输出有五个特征通道?)

第二项恒等约束,是一个正则项

从参考影像到Y再到X和直接从参考影像到X变换应该是一样的,但实际上不一样,所以要约束。不仅要约束零阶的值相等,还要考虑导数的相等(毕竟有了导数,不用白不用)

约束的实际形式就是考虑等式两边变成一个L1 loss。只不过对于导数恒等式而言,由于数值计算的问题,不能直接使用L1,需要变形为下面的形式,将右边和单位阵做L1 loss.

测试阶段:相对运动迁移

预测的时候输入是原始影像和驱动视频,而具体计算是将驱动视频变成若干帧,这里有两种策略,第一种是绝对的,直接计算,以生成影像St,就按照前面的公式;另一种是相对的,借助D1(驱动视频第一帧)做过渡,按照下式

虽然要求驱动视频的第一帧和原始影像位姿基本一致,但带来的好处也是显而易见的,这样可以只传播驱动视频的运动信息,而不包含物体属性信息(因为第一帧位姿已经基本对齐了,要不然每次都要受关键点位置偏差的影响)。

[飞桨] First Order Motion Model for Image Animation相关推荐

  1. Paper:《First Order Motion Model for Image Animation》翻译与解读

    Paper:<First Order Motion Model for Image Animation>翻译与解读 目录 <First Order Motion Model for ...

  2. Paper/CV之IA:《First Order Motion Model for Image Animation图像动画的一阶运动模型》翻译与解读

    Paper/CV之IA:<First Order Motion Model for Image Animation图像动画的一阶运动模型>翻译与解读 目录 <First Order ...

  3. First Order Motion Model for Image Animation

    仅  供  参  考 图像动画包括生成视频序列,以便根据驱动视频的运动使源图像中的对象动画.这篇论文的框架解决了这个问题,没有使用任何注释或关于动画特定对象的先验信息.一旦在一组描述同一类别对象的视频 ...

  4. 《First Order Motion Model for Image Animation》论文解读

    论文解读 1.前言 2.解读 3.整体概述 4.细节讲解 1.前言 早期的Facerig软件可以即时抓取摄像头视频中的人脸关键点,将表情.头部姿态等信息转化到三维虚拟化身上,比如一只猫.一个虚拟卡通人 ...

  5. 全网都在求的「蚂蚁呀嘿」教程--基于PaddleGAN的First order motion model实现

    什么?你还不知道「蚂蚁呀嘿」?这位兄台,那你可能out得相当严重! 这是引起男女老少的争相关注.火爆

  6. 飞桨PaddlePaddle论文复现:图像的一阶运动模型(初版)

    介绍 图片动画主要的任务是将源图像的'外表'提取出来和从驱动视频中提取出来的运动模式相结合. 本文和前任的最大区别是这个模型训练产生图像动画不需要网络有前置知识而仅仅依赖源图片和驱动视频进行生成,而且 ...

  7. Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!

    点击左上方蓝字关注我们 16年前的电影<功夫>可以说是家喻户晓,并将武侠片推向了一个新的高潮.在电影中,街头小混混阿星偶然间被打通了任督二脉,因善开悟,再有"如来神掌" ...

  8. 让您的照片动起来first motion model(1)-关键点抽取模型深度解析

    概述 先看一下模型的最后效果 目前计算机视觉的发展如火如荼,让老照片动起来让大家惊艳于计算机视觉的发展.该如何实现该功能呢?本文将一步一步的帮您实现.在阅读本文之前建议有一些基本知识. 1.泰勒公式与 ...

  9. 【飞桨PaddlePaddle】四天搞懂生成对抗网络(一)——通俗理解经典GAN

    ​​​​ 序言 做图像分类.检测任务时,为了提高模型精度,在数据处理方面,我尝试了很多数据增强tricks(包括了简单的裁切.变形.明暗.颜色调整,也包括了MixUp图像融合以及SMOTE这样的解决类 ...

最新文章

  1. 服务器上tomcat修改内存,修改Tomcat运行内存
  2. 3.4.2 停止等待协议
  3. 第五周项目二-游戏中的角色类(2)
  4. JavaScript学习笔记-JSON对象
  5. 双双拿下赛道全部指标最佳 | 腾讯新一代VAV1携手V265亮相MSU编码器大赛
  6. Java的LockSupport.park()实现分析
  7. VS2015+OpenCV3.4.5+QT5.12+WINDOWS10用c++调用tensorflow训练好的.pb文件图像检测
  8. 30美味的食物移动应用设计
  9. pos mac java_有没有谁搞过银联POS终端mac算法[php版本]?
  10. [HDOJ2512]一卡通大冒险(DP)
  11. 植树问题python_《程序员的数学》思考题(一)
  12. myeclipse黑色主题怎么还原
  13. python小孩子学有什么用_小孩子为什么一定要学习Python编程
  14. git操作时:遇到提示Unable to create ‘D:/xxx/.git/index.lock‘: File exists.的解决办法解决方案
  15. 通俗易懂的USB协议详解(转)
  16. 免费开源网站系统有哪些
  17. Spring Cloud H (五)服务网关 GateWay
  18. 字节序——Big Endian和Little Endian
  19. matlab 超分辨率,matlab超分辨率
  20. 最新android版本叫什么,Android版本今年将大更新,迈入10.0时代,新特性曝光

热门文章

  1. IT人士必须警惕这9个信号:说明你的IT架构很糟糕
  2. sql和java判断哪个效率高_如何写出高质量效率高的sql语句,看完这篇就懂了
  3. 人工智能滑翔机来了,无人机该向它学点什么?
  4. 对不起你现在真的不能打了
  5. Flipper TR膜张力传感器研究方案
  6. Code Jam 2017 Qualification Round Problem A. Oversized Pancake Flipper
  7. 无人驾驶的劳斯莱斯轿车_迪拜小姐姐体验劳斯莱斯2035年概念车,可能是最奢华的无人驾驶...
  8. Qt插件机制及加载流程
  9. Excel VBA实例39 - 一键批量查询基金信息、基金净值
  10. 计算变量中置位的bit数