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

    文章

    2849

    浏览量

    53435
  • 图像处理
    +关注

    关注

    29

    文章

    1346

    浏览量

    59697
  • 深度学习
    +关注

    关注

    73

    文章

    5607

    浏览量

    124620

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    [VirtualLab] VirtualLab Fusion参数扫描动画教程—以轴锥镜-透镜生成3D瓶束案例

    图1. 轴锥镜和透镜将光束转化为中空的瓶束 建模任务 : 轴锥镜和透镜构成的系统可以将高斯光束整形环形光束,并且可以生成三维的瓶底光束。这一期将通过对这个系统的建模带领大家了解
    发表于 04-02 08:17

    穿孔机顶头检测仪 机器视觉深度学习

    ,能适用恶劣工况,在粉尘、高温、氧化皮等恶劣环境中均可正常工作。 测量原理 利用顶头与周围的物质(水、空气、导盘等)红外辐射能量的差异,用热成像相机拍摄出清晰的图片,再通过深度学习短时间内深度优化,判断
    发表于 12-22 14:33

    如何深度学习机器视觉的应用场景

    检测应用 微细缺陷识别:检测肉眼难以发现的微小缺陷和异常 纹理分析:对材料表面纹理进行智能分析和缺陷识别 3D表面重建:通过深度学习进行高精度3D建模和检测 电子行业应用 PCB板复杂缺陷检测:连焊、虚焊、漏焊等焊接质量问题 芯片
    的头像 发表于 11-27 10:19 326次阅读

    影像仪AI自动寻边技术精准捕捉边界测量,检测效率翻倍!

    【智能制造测量】影像测量仪的AI自动寻边技术是通过深度学习模型,实现对工件特征的自主识别与边缘精准提取。能解决质检环节中多重边界提偏、刀纹干扰、对比度低等测量痛点。
    发表于 11-18 10:16

    智能显示模块可以播放动画吗?动画功能怎么实现,在哪可以添加

    智能显示模块可以播放动画吗?动画功能怎么实现,在哪可以添加
    发表于 11-08 08:57

    如何在机器视觉中部署深度学习神经网络

    图 1:基于深度学习的目标检测可定位已训练的目标类别,并通过矩形框(边界框)对其进行标识。 在讨论人工智能(AI)或深度学习时,经常会出现“
    的头像 发表于 09-10 17:38 1049次阅读
    如何在机器视觉中部署<b class='flag-5'>深度</b><b class='flag-5'>学习</b>神经网络

    分享---储能UI界面能量流动动画实现方法

    本文分享 工商业储能设备的UI界面中如何实现 能量流动的动画效果。 本例子效果 基于拓普微工业级 7寸屏电容串口屏(HMT070ETA-D型号)实现: 第1步:建立工程和页面 使用SGTools新建
    发表于 09-02 18:22

    深度学习对工业物联网有哪些帮助

    深度学习作为人工智能的核心分支,通过模拟人脑神经网络的层级结构,能够自动从海量工业数据中提取复杂特征,工业物联网(IIoT)提供了从数据感知到智能决策的全链路升级能力。以下从技术赋能
    的头像 发表于 08-20 14:56 1202次阅读

    行业龙头企业家深度走访达实智能与金蝶集团

    此前,2025年7月19至20日,“新形势、新决策、新未来”润泽1000企业家(深圳)学习会在达实智能大厦隆重召开。来自全国各地约170位企业家通过深度参访、互动课堂、圆桌访谈等形式,共同探寻企业稳健发展的底层逻辑与实践路径。
    的头像 发表于 07-28 14:17 1033次阅读

    【EASY EAI Orin Nano开发板试用体验】使用Linux posix文件读取接口和LVGL的animimg(图像动画)控件实现动画播放以及

    , LV_EVENT_ALL, NULL); // 添加事件回调 可以通过api改变播放时每帧的间隔: lv_animimg_set_duration(animimg1 , 5000); 看看播放效果:(置顶视频
    发表于 07-22 00:34

    通过易于使用的相机模组快速应用添加机器视觉

    ) 的神经科学家就发现,大脑只需 13 毫秒 (ms) 就能根据眼睛看到的东西形成完整的图像。 视觉如此重要,因此许多人都希望在机器上添加视觉传感器就不足奇了。产品添加机器视觉,可
    的头像 发表于 05-25 14:48 1030次阅读
    <b class='flag-5'>通过</b>易于使用的相机模组快速<b class='flag-5'>为</b>应用<b class='flag-5'>添加</b>机器视觉

    提高IT运维效率,深度解读京东云AIOps落地实践(异常检测篇)

    基于深度学习对运维时序指标进行异常检测,快速发现线上业务问题 时间序列的异常检测是实际应用中的一个关键问题,尤其是在 IT 行业。我们没有采用传统的基于阈值的方法来实现异常检测,而是通过深度
    的头像 发表于 05-22 16:38 1154次阅读
    提高IT运维效率,<b class='flag-5'>深度</b>解读京东云AIOps落地实践(异常检测篇)

    如何通过SFL设备添加Flash编程支持

    SEGGER Flash Loader(SFL)是J-Link设备支持套件(DSK)的一部分,通过SFL,用户可以为自己的新设备添加Flash编程支持。
    的头像 发表于 05-19 16:35 1658次阅读
    如何<b class='flag-5'>通过</b>SFL<b class='flag-5'>为</b>设备<b class='flag-5'>添加</b>Flash编程支持

    深度学习赋能:正面吊车载箱号识别系统的核心技术

    支撑。 深度学习驱动的智能识别 传统OCR技术易受光线、污损或箱体图案干扰,而新一代识别系统通过深度卷积神经网络(CNN)和注意力机制,实现了复杂场景下的高精度动态识别: - 抗干扰优化:系统可自适应处理反光、阴影、油漆剥落等复
    的头像 发表于 05-07 10:10 670次阅读

    用Manim动画生动演示勾股定理

    用Manim这一专业的数学动画引擎,我们可以将抽象的数学概念转化为生动的视觉呈现,大幅提升教学效果。 二,Manim动画的优势 1. 动态可视化:通过
    的头像 发表于 04-27 16:36 1120次阅读