通过深度学习+TensorFlow.js对蒙娜丽莎进行动画处理
看蒙娜丽莎(Mona Lisa)画像时,你会发现她的眼睛将四处移动跟随你。这就是所谓的“蒙娜丽莎效应”。为了娱乐,我们把蒙拉丽莎画像制成交互式数字肖像,通过你的浏览器和网络摄像头将这种现象变为现实。
该项目的核心是利用TensorFlow.js,深度学习和一些图像处理技术。总体思路如下:首先,我们必须生成蒙娜丽莎(Mona Lisa)头的图像序列,眼睛从左到右凝视。从该项目中,我们将根据观看者的位置连续不断地实时选择并显示单个帧。
在通过深度学习+TensorFlow.js对蒙娜丽莎进行动画处理中,我将详细介绍该项目的技术设计和实施。
通过深度学习对蒙娜丽莎进行动画处理
图像动画是一种允许通过驾驶视频伪造静态图像的技术。使用基于深度学习的方法,能够产生令人信服的蒙娜丽莎注视动画。
具体来说,使用了Aliaksandr Siarohin等人发布的一阶运动模型(FOMM)。在2019年,此方法在较高级别上由两个模块组成:一个模块用于运动提取,另一个模块用于图像生成。运动模块从行驶视频中检测关键点和局部仿射变换。然后,将连续帧之间的这些值的差异用作预测密集运动场的网络的输入,以及指定需要修改或根据上下文推断的图像区域的遮挡遮罩。然后,图像生成网络检测面部标志,并产生最终输出-根据运动模块的结果扭曲和修复的源图像。
之所以选择FOMM,是因为它易于使用。在该领域中,先前的模型是“特定于对象的”,这意味着它们需要对要进行动画处理的对象的详细数据,而FOMM对此却不可知。更重要的是,作者发布了一种开源,开箱即用的实现,带有针对面部动画的预先训练的权重。因此,将模型应用于Mona Lisa变得出乎意料的直接:我将回购克隆到了Colab笔记本中,制作了一段简短的驾驶视频,眼睛四处移动,并通过模型和截图将其反馈给模型。 Gioconda的头部。最终的电影很出色。由此,我最终仅采样了33张图像来构成最终的动画。
FOMM生成的驾驶视频和图像动画预测的示例。
使用一阶运动模型生成的最终动画帧的子样本。
图像融合
尽管可以出于项目目的重新训练模型,但还是决定在Siarohin权重的约束范围内进行工作,以避免原本需要的时间和计算资源。但是,这意味着将生成的帧固定在比所需的更低的分辨率上,并且仅由对象的头部组成。但是,由于希望最终的视觉效果包含蒙娜丽莎的全部内容(包括手,躯干和背景),因此我们的计划是将输出的头部框架简单地叠加到绘画的图像上。
头部框架覆盖在基础图像之上的示例。为了更好地说明问题,此处显示的版本来自项目的早期迭代,其中头部框架中的分辨率进一步降低。
但是,这带来了自己的挑战。如果你看上面的示例,你会注意到,由于FOMM的变形过程,模型的较低分辨率输出(加上一些细微的附带背景变化)使头部框架从视觉上突出了。换句话说,这显然只是一张图片在另一张图片之上。为了解决这个问题,在Python中进行了一些图像处理,以将头部图像“融合”到底层图像中。
首先,将头架调整为原始分辨率。从那里开始,使用这些模糊像素和基础图像中相应像素的加权平均值创建了一个新帧,其中,头部帧中像素的权重(或alpha)随着其远离中点而减小。
用于确定alpha的函数是从2D乙状结肠开始改编的,表示为:
其中j决定逻辑函数的斜率,k是拐点,m是输入值的中点。绘制出来的函数看起来像:
在将上述过程应用于动画集中的所有33帧之后,对于不产生怀疑的眼睛,每个叠加所产生的叠加似乎是一张图像:
通过BlazeFace跟踪查看者的头部
此时剩下的就是确定如何通过网络摄像头跟踪用户并显示相应的框架。
自然地,转向TensorFlow.js来完成这项工作。该库提供了一组相当强大的模型来检测给定视觉输入下人类的存在,但是经过一番研究和思考,选择了BlazeFace。
BlazeFace是基于深度学习的对象识别模型,可检测人脸和面部标志。经过专门培训,可以使用移动相机输入。这对于我的用例来说效果很好,因为我希望大多数观看者无论是通过移动设备还是在他们的移动摄像头上,都以类似的方式使用他们的网络摄像头-头部对准框架,正面并且距离摄像头非常近笔记本电脑。
但是,在选择此模型时,我最重要的考虑是其非凡的检测速度。为了使该项目具有说服力,我需要能够实时运行整个动画,包括面部识别步骤。BlazeFace适应了单发检测(SSD)模型,这是一种基于深度学习的对象检测算法,可同时提出边界框并仅在网络的前向通道中检测对象。BlazeFace的轻巧检测器能够以每秒200帧的速度识别面部标志。
给定输入图像,BlazeFace可以捕获的内容的演示:人头的边界框以及面部标志。
确定了模型之后,编写了代码,以将用户的网络摄像头数据不断地传输到BlazeFace中。在每次运行中,模型都会输出一组面部地标及其相应的2D坐标位置。使用此方法,通过计算眼睛之间的中点来近似脸部中心的X坐标。
最后,将此结果映射到0到32之间的整数。你可能还记得,这些值分别代表动画序列中的一帧–其中0代表左眼是蒙娜丽莎,而32代表左眼。正确的。从那里开始,只需要在屏幕上显示框架即可。
转载自:https://www.aaa-cg.com.cn/?xmta7
通过深度学习+TensorFlow.js对蒙娜丽莎进行动画处理相关推荐
- tensorflow sigmoid 如何计算训练数据的正确率_“来自蒙娜丽莎的凝视”— 结合 TensorFlow.js 和深度学习实现...
客座博文 / Emily Xie,软件工程师 背景 坊间传闻,当您在房间里走动时,蒙娜丽莎的眼睛会一直盯着您. 这就是所谓的"蒙娜丽莎效应".兴趣使然,我最近就编写了一个可互动的数 ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...
- 使用深度学习TensorFlow框架进行图片识别
Apsara Clouder大数据专项技能认证:使用深度学习TensorFlow框架进行图片识别 本认证系统的介绍了深度学习的一些基础知识,以及Tensorflow的工作原理.通过阿里云机器学习PAI ...
- 百度云-深度学习tensorflow搭建
百度云上部署Tensorflow进行模型训练 上半年就了解过百度云但是还是tf1.0版本的,而谷歌3月份的升级到1.2改动挺大的,百度云上更新滞后,所以尽管有tf平台,版本落后每小时付费还是有点小贵, ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(四)(Python语言基础(2))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(四)(Python语言基础(2)) 第4讲 Python语言基础(2) 4.1 内置数据结构 4.1.1 序列数据结构(sequ ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十二)(人工神经网络(1)))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十二)(人工神经网络(1))) 12 人工神经网络(1) 12.1 神经元与感知机 12.1.1 感知机 12.1.2 Delt ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十四)(卷积神经网络))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十四)(卷积神经网络)) 14 卷积神经网络 14.1 深度学习基础 14.1.1 深度学习的基本思想 14.1.2 深度学习三 ...
- GitHub 热点速览 Vol.16:化身蒙娜丽莎和乔布斯对话
作者:HelloGitHub-小鱼干 摘要:妙趣横生,上周的 GitHub 热点的关键词.无论是让你化身为爱因斯坦开启会议脑暴模式 avatarify,还是和上周人人都是抠图师项目的同门项目 3D 照 ...
- 你动、蒙娜丽莎跟着一起动,OpenCV这么用,表情口型造假更难防了
梅宁航 发自 凹非寺 量子位 报道 | 公众号 QbitAI 有没有想过让蒙娜丽莎跟着你的表情动,来一番亲切的交流? Aliaksandr的一阶运动模型(First Order Motion Mode ...
最新文章
- 用Java求一个三位数,该三位数是与其每位数字的阶乘之和
- Oracle VDI 安装
- TP5安装失败怎么办?
- NioEventLoopGroup的构造函数
- LuoguP2292 L语言
- 要做华为最强竞争对手,荣耀新动作曝光...
- maven build时报错Failed to execute goal org.apache.maven.plugins......
- python实现关键词提取
- 单片机串口实现字符串命令解析
- DNS 基础知识及 Linux DNS 服务器操作知识
- Quartus17下使用Modelsim10进行仿真
- 一张图看懂“火星坐标系”
- 【Unity3D开发小游戏】《太空射击游戏》Unity开发教程
- MySQL -update语句流程总结
- 电脑一般预装access吗_我告诉你惠普预装office是永久的吗
- 黑客泄露微软XP系统源代码,就连比尔盖茨的私密文件也难逃一劫
- 漂流幻境服务器文件,飘流幻境 飘流幻境常用合成资料汇总
- 2018最新云知梦Laravel5.4电商实战项目VIP实战
- 网络协议 一 网络层( 版本、首部长度、区分服务、总长度、 标识、标志、片偏移生存时间、协议、首部校验和)
- 有些人的成功,并不是偶然(一个真实的故事)
热门文章
- javascript的findIndex()方法
- 什么样的公司会让员工有归属感
- SPA的理解与优缺点
- 六大设计原则(SOLID)
- 厦门大学c语言在线测试,(完整版)厦门大学《C语言》模拟试卷(10级)(12页)-原创力文档...
- 瑞克斯外汇平台9月第三周时事(二)
- KeyError: [] not found in axis_最IN黄浦 | 万圣狂欢倒计时!露台派对、变装游、沉浸式密室...请收下这份黄浦活动指南~_电竞...
- 莫言遭遇获奖烦恼-传闻缠身疲于应付采访-莫言-诺贝尔文学奖-采访
- pytorch 梯度爆炸调试方法
- java 身份证地址提取籍贯_获取身份证信息中的籍贯、出生及性别信息