0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过深度学习为蒙娜丽莎添加动画效果

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2020-11-18 17:29 次阅读

背景

坊间传闻,当您在房间里走动时,蒙娜丽莎的眼睛会一直盯着您。

这就是所谓的“蒙娜丽莎效应”。兴趣使然,我最近就编写了一个可互动的数字肖像,通过浏览器和摄像头将这一传说变成现实。

这个项目的核心是利用 TensorFlow.js、深度学习和一些图像处理技术。总体思路如下:首先,我们必须为蒙娜丽莎的头部以及从左向右注视的眼睛生成一系列图像。从这个动作池中,我们根据观看者的实时位置连续选择并显示单个帧。

TensorFlow.js
https://tensorflow.google.cn/js

接下来,我将从技术层面详细介绍该项目的设计和实现过程:

通过深度学习为蒙娜丽莎添加动画效果

图像动画是一种调整静止图像的技术。使用基于深度学习的方式,我可以生成极其生动的蒙娜丽莎注视动画。

具体来说,我使用了 Aliaksandr Siarohin 等人在 2019 年发布的一阶运动模型 (First Order Motion Model, FOMM)。直观地讲,此方法由两个模块构成:一个模块用于提取运动,另一个模块用于生成图像。运动模块从摄像头记录的视频检测关键点并进行局部仿射变换 (Affine Transformation)。然后,将在相邻帧之间这些关键点的值的差值作为预测密集运动场的网络的输入,并且用作遮挡掩模 (Occlusion Mask),遮挡掩模可以指定或根据上下文推断需要修改的图像区域。之后,图像生成网络会检测面部特征,并生成最终输出,即根据运动模块结果重绘源图像。

一阶运动模型
http://papers.nips.cc/paper/8935-first-order-motion-model-for-image-animation.pdf

我之所以选择 FOMM 是因为它易于使用。此领域以前使用的模型都“针对特定目标”:需要提供详细的特定目标数据才能添加动画效果,而 FOMM 则不需要知道这些数据。更为重要的是,这些作者发布了开箱即用的开源实现,其中包含预先训练的面部动画权重。因此,将该模型应用到蒙娜丽莎的图像上就变得十分简单:我只需将仓库克隆到 Colab Notebook,生成一段我眼睛四处观看的简短视频,并将其与蒙娜丽莎头部的屏幕截图一起传进模型。得到的影片超级棒。我最终仅使用了 33 张图片就完成了最终的动画的制作。

源视频和 FOMM 生成的图像动画预测示例

使用 FOMM 生成的帧示例

图像融合

虽然我可以根据自己的目的重新训练该模型,但我决定保留 Siarohin 得到的权重,以免浪费时间和计算资源。但是,这意味着得到的帧的分辨率较低,且输出仅有主体的头部。介于我希望最终图像包含整个蒙娜丽莎,即包括手部、躯干和背景,我选择将生成的头部动画叠加到油画图像上。

头部帧叠加到基础图像上的示例:为了说明问题,此处显示的版本来自项目的早期迭代,其中头部帧存在严重的分辨率损失

然而,这带来了一系列难题。查看上述示例时,您会发现,模型输出的分辨率较低(由于经过了 FOMM 的扭曲程序,背景附带有一些细微的更改),从而导致头部帧在视觉上有突出的效果。换句话说,很明显这是一张照片叠加在另一张照片上面。为了解决这个问题,我使用 Python 对图像进行了一些处理,将头部图像“融合”到基础图像中。

首先,我将头部帧重新 resize 到其原始分辨率。然后,我构造一个新的帧,该帧的每个像素值由原图像素和模型输出的像素求均值后加权 (alpha) 求得,离头部中心越远的像素权值越低。

用于确定 alpha 的函数改编自二维 sigmoid,其表达式为:

其中,j 确定逻辑函数的斜率,k 为拐点,m 为输入值的中点。以下是函数的图形表示:

我将上述过程应用到动画集中的所有 33 个帧之后,得到的每个合成帧都会让人深信不疑这就是一个图像:

通过 BlazeFace 跟踪观看者的头部

此时,剩下的工作就是确定如何通过摄像头来跟踪用户并显示相应的帧。

当然,我选择了 TensorFlow.js 来完成此工作。这个库提供了一组十分可靠的模型,用于检测人体,经过一番研究和思考后,我选择了 BlazeFace。

BlazeFace
https://github.com/tensorflow/tfjs-models/tree/master/blazeface

BlazeFace 是基于深度学习的目标识别模型,可以检测人脸和面部特征。它经过专门训练,可以使用移动相机输入。它特别适合我的这个项目,因为我预计大部分观看者都会以类似方式(即头部位于框内、正面拍摄以及非常贴近相机)使用摄像头,无论是使用移动设备还是笔记本电脑

但是,在选择此模型时,我最先考虑到的是它异常快的检测速度。为了让这一项目有意义,我必须能够实时运行整个动画,包括面部识别步骤。BlazeFace 采用 Single-Shot 检测 (SSD) 模型,这是一种基于深度学习的目标检测算法,在网络的一次正向传递中可以同时移动边界框并检测目标。BlazeFace 的轻量检测器能够以每秒 200 帧的速度识别面部特征。

BlazeFace 在给定输入图像时的捕获内容演示:包围人体头部以及面部特征的边界框

选定模型后,我持续将用户的摄像头数据输入 BlazeFace 中。每次运行后,模型都会输出一个含有面部特征及其相应二维坐标位置的数组。借助此数组,我计算两只眼睛之间的中点,从而粗略估算出面部中心的 X 坐标。

最后,我将此结果映射到介于 0 与 32 之间的某个整数。您可能还记得,其中的每一个值分别表示动画序列中的一个帧,0 表示蒙娜丽莎的眼睛看向左侧,32 表示她的眼睛看向右侧。之后,就是在屏幕上显示结果了。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2722

    浏览量

    47583
  • 图像处理
    +关注

    关注

    27

    文章

    1295

    浏览量

    56810
  • 深度学习
    +关注

    关注

    73

    文章

    5508

    浏览量

    121305

原文标题:“来自蒙娜丽莎的凝视”— 结合 TensorFlow.js 和深度学习实现

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NPU在深度学习中的应用

    随着人工智能技术的飞速发展,深度学习作为其核心驱动力之一,已经在众多领域展现出了巨大的潜力和价值。NPU(Neural Processing Unit,神经网络处理单元)是专门深度
    的头像 发表于 11-14 15:17 697次阅读

    GPU深度学习应用案例

    GPU在深度学习中的应用广泛且重要,以下是一些GPU深度学习应用案例: 一、图像识别 图像识别是深度学习
    的头像 发表于 10-27 11:13 419次阅读

    AI大模型与深度学习的关系

    AI大模型与深度学习之间存在着密不可分的关系,它们互为促进,相辅相成。以下是对两者关系的介绍: 一、深度学习是AI大模型的基础 技术支撑 :深度
    的头像 发表于 10-23 15:25 948次阅读

    深度学习GPU加速效果如何

    图形处理器(GPU)凭借其强大的并行计算能力,成为加速深度学习任务的理想选择。
    的头像 发表于 10-17 10:07 208次阅读

    FPGA做深度学习能走多远?

    支持不同的数据精度、量化和激活函数等。这种灵活性使其能够适应各种深度学习任务,不同的应用场景提供定制化的解决方案。 • 低功耗:FPGA 是可编程的,可以在设计中仅使用所需的计算资源,从而避免不必要
    发表于 09-27 20:53

    深度学习与nlp的区别在哪

    方法,它通过模拟人脑的神经网络结构,实现对数据的自动特征提取和学习深度学习的核心是构建多层的神经网络结构,每一层都包含大量的神经元,这些神经元通过
    的头像 发表于 07-05 09:47 982次阅读

    深度学习常用的Python库

    深度学习作为人工智能的一个重要分支,通过模拟人类大脑中的神经网络来解决复杂问题。Python作为一种流行的编程语言,凭借其简洁的语法和丰富的库支持,成为了深度
    的头像 发表于 07-03 16:04 670次阅读

    深度学习模型训练过程详解

    深度学习模型训练是一个复杂且关键的过程,它涉及大量的数据、计算资源和精心设计的算法。训练一个深度学习模型,本质上是通过优化算法调整模型参数,
    的头像 发表于 07-01 16:13 1376次阅读

    深度学习与传统机器学习的对比

    在人工智能的浪潮中,机器学习深度学习无疑是两大核心驱动力。它们各自以其独特的方式推动着技术的进步,众多领域带来了革命性的变化。然而,尽管它们都属于机器
    的头像 发表于 07-01 11:40 1441次阅读

    HarmonyOS开发案例:【自定义下拉刷新动画

    主要介绍组件动画animation属性设置。当组件的某些通用属性变化时,可以通过属性动画实现渐变效果,提升用户体验。
    的头像 发表于 04-29 16:06 992次阅读
    HarmonyOS开发案例:【自定义下拉刷新<b class='flag-5'>动画</b>】

    OpenHarmony实战开发-如何实现组件动画

    ArkUI组件提供了通用的属性动画和转场动画能力的同时,还为一些组件提供了默认的动画效果。例如,List的滑动动效,Button的点击动效
    的头像 发表于 04-28 15:49 646次阅读
    OpenHarmony实战开发-如何实现组件<b class='flag-5'>动画</b>。

    HarmonyOS开发案例:【动画

    使用动画样式,实现几种常见动画效果:平移、旋转、缩放以及透明度变化。
    的头像 发表于 04-25 15:13 488次阅读
    HarmonyOS开发案例:【<b class='flag-5'>动画</b>】

    深度学习检测小目标常用方法

    深度学习效果在某种意义上是靠大量数据喂出来的,小目标检测的性能同样也可以通过增加训练集中小目标样本的种类和数量来提升。
    发表于 03-18 09:57 754次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>检测小目标常用方法

    为什么深度学习效果更好?

    导读深度学习是机器学习的一个子集,已成为人工智能领域的一项变革性技术,在从计算机视觉、自然语言处理到自动驾驶汽车等广泛的应用中取得了显著的成功。深度
    的头像 发表于 03-09 08:26 642次阅读
    为什么<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>效果</b>更好?

    【RISC-V开放架构设计之道|阅读体验】先睹快-学习RISC-V的案头好书

    蒙娜丽莎让人想到的就是优雅,这也契合RISC-V的设计哲学。本书从电子发烧友申请到,扉页有电子发烧友的签名。 前面附录了RISC-V的指令集参考卡,这个比较有用,有时看下汇编代码可以参考。参考卡
    发表于 01-20 22:37