【数字人】12、DINet | 使用形变+修复模块实现高清 talking head 生成(AAAI2023)

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 deformation part
      • 2.2 inpainting part
      • 2.3 Loss 函数
    • 三、效果
      • 3.1 数据集
      • 3.2 实现细节
      • 3.3 可视化效果

论文:DINet: Deformation Inpainting Network for Realistic Face Visually Dubbing on High Resolution Video

代码:https://github.com/MRzzm/DINet

出处:AAAI2023

贡献:

  • 提出了能产生高分辨率视频的方法,能够同时产生准确的嘴型且保留纹理细节
  • 本文方法是【形变模块】+【修复模块】组成的,在参考帧的基础上对嘴型进行形变从而产生新的口型结果,而非直接生成

一、背景

在这里插入图片描述

本文针对 few-shot learning,提出了一种 Deformation Inpainting Network (DINet)

DINet 和之前的方法最大的不同在于:

  • 之前的方法主要依赖于多个上采样层来直接从隐空间来生成最终的像素结果
  • DINet 在 referece image 的特征图上使用了 spatial deformation,能够保留更多的高频纹理细节

DINet 的组成:

  • 一个 deformation 模块:嘴部形变模块,为了避免生成的结果产生模糊,本文是会对嘴部区域附近的特征图进行空间形变,用于产生音频同步的嘴型
    • 首先会自适应的选取 5 个参考帧(面部图片)
    • 然后使用 spatial deformation 来为这些参考帧的人脸的特征图进行形变,生成形变后的特征图,目标是为了让【嘴部】和输入的【音频+头部姿态】保持对齐
  • 一个 inpainting 模块:也就是一个解码器,能够将形变后的嘴部特征和上半脸+头部姿态合并起来,输出自然的生成结果
    • 通过卷积层融合源人脸特征和变形结果,修复嘴部区域像素

二、方法

在这里插入图片描述

本文提出的 DINet 的结构如图 2 所示,主要由变形模块( P D P^D PD)和修复模块 ( P I P^I PI)组成,前者是在空间上对参考帧的特征图进行形变,后者是利用变形后的结果来修复源人脸中的嘴部区域

2.1 deformation part

如图 2 的上半部分就是变形模块( P D P^D PD):

  • 给定源图片 source image I s ∈ R 3 × H × W I_s \in R{3 \times H \times W} IsR3×H×W
  • 给定驱动声音 A d ∈ R T × 29 A_d \in R^{T \times 29} AdRT×29
  • 给定 5 张参考图片 reference image I r e f ∈ R 15 × H × W I_{ref} \in R{15 \times H \times W} IrefR15×H×W

变形模块的主要目标是生成形变特征 F d ∈ R 256 × H / 4 × W / 4 F_d \in R{256 \times H/4 \times W/4} FdR256×H/4×W/4,并且这个特征是要和驱动音频 A d A_d Ad 同步的嘴型,并和 source 图片 I s I_s Is 对齐头部姿态

  • 首先,将音频特征输入 audio encoder 得到 audio feature F a u d i o F_{audio} Faudio
  • 然后,将 source image I s I_s Is 和 reference image I r e f I_{ref} Iref 输入两个不同的 encoder 网络来分别生成对应的特征 F s ∈ R 256 × H / 4 × W / 4 F_s \in R^{256 \times H/4 \times W/4} FsR256×H/4×W/4 F r e f ∈ R 256 × H / 4 × W / 4 F_{ref} \in R^{256 \times H/4 \times W/4} FrefR256×H/4×W/4
  • 接着,将 F s ∈ R 256 × H / 4 × W / 4 F_s \in R^{256 \times H/4 \times W/4} FsR256×H/4×W/4 F r e f ∈ R 256 × H / 4 × W / 4 F_{ref} \in R^{256 \times H/4 \times W/4} FrefR256×H/4×W/4 进行 concat 后输入一个 alignment encoder 来得到对齐后的特征 F a l i g n ∈ R 128 F_{align} \in R^{128} FalignR128 F a l i g n ∈ R 128 F_{align} \in R^{128} FalignR128 的作用是对 I s I_s Is I r e f I_{ref} Iref 的 head pose 进行对齐
  • 最后,使用 F a u d i o F_{audio} Faudio F a l i g n F_{align} Falign 被用于将 F r e f F_{ref} Fref 形变为 F d F_d Fd

如何进行形变呢:

  • 本文使用了 AdaAT 的方法来进行形变(没有使用密集flow的方法),主要的原因是相比于 flow,AdaAT 能够通过对特征通道进行特定变形来变形特征图
  • AdaAT 会在不同的特征通道上计算不同的仿射系数
  • 在此处 P D P^D PD 使用全连接层来计算旋转、平移、缩放系数,然后使用这些仿射系数对 F r e f F_{ref} Fref 进行仿射变换

在这里插入图片描述

2.2 inpainting part

图 2 的黄色矩形就是 inpainting part P I P^I PI 的结构,这个模块的目标就是使用 source image 的特征图 F s F_s Fs 和形变后的 ref 特征图 F d F_d Fd 来合成最终的说话图片 I o ∈ 3 × H × W I_o \in 3 \times H \times W Io3×H×W

  • 首先,将 F d F_d Fd F s F_s Fs 进行 concat
  • 然后,使用一个 decoder(卷积层)来修复 source image 被 mask 掉的嘴部区域,并且生成 I o I_o Io

2.3 Loss 函数

作者在训练过程中使用了 3 个 loss 函数

  • perception loss
  • GAN loss
  • lip-sync loss

1、perception loss

作者使用两个尺度上的图片来计算感知损失,作者将生成的图像和原始的图像送入 VGG-19 得到特征后计算一次 loss,下采样 2 倍后送入 VGG-19 得到特征后再计算一次 loss,两个 loss 求均值:

在这里插入图片描述

2、GAN loss

作者使用 LS-GAN loss

在这里插入图片描述

3、Lip-sync loss

作者使用这个 loss 是为了提升生成的嘴型同步性,作者使用 audio spectrogram with deepspeech 特征重新训练了 syncnet

在这里插入图片描述

4、整体 loss

在这里插入图片描述

三、效果

3.1 数据集

作者使用 HDTF 和 MEAD 数据集

  • HDTF:约 430 个视频,分辨率为 720P 或 1080P,随机选择 20 个视频作为测试
  • MEAD:收集了约 1920 个正常表情的前视方向的视频作为训练数据,选择了 240 个视频(6个人)作为测试

3.2 实现细节

数据处理:

  • 视频首先会 resample 到 25fps
  • 使用 openface 提取到 68 个人脸关键点,然后 crop 出面部区域,将所有 crop 的面部区域 resize 到 416x320,其中嘴部区域会占 256x256
  • 使用 deepspeech 提取语音特征

训练阶段:

  • DINet 输入一个 source frame,分辨率为 3x416x320,再输入一个 driving audio,维度为 5x29,还有 5 帧 reference image,分辨率为 15416x320
  • syncnet 输入 5 帧 mouth image(256x256) 和对应的 deepspeech 特征
  • 优化器:Adam,学习率 0.0001
  • batch: DINet 是 3,syncnet 是 20

3.3 可视化效果

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/444016.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Yolov8-pose关键点检测:原创自研涨点系列篇 | 空间上下文感知模块(SCAM)结合超轻量高效动态上采样DySample

💡💡💡本文独家改进:YOLOV8-pose head创新,1)一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv8网络中的nn.Upsample;2)加入空间上下文感知模块(SCAM)进一步提升检测精度; 改进结构图如下: Yolov8-Pose关键点检测专栏介绍:ht…

回溯算法09-子集II(Java/子集问题的去重方法)

9.子集II 题目描述 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 输入&#xf…

VMware虚拟机安装Ubuntu kylin22.04系统教程(附截图详细步骤)

一、版本信息 虚拟机产品:VMware Workstation 17 Pro 虚拟机版本:17.0.0 build-20800274 ISO映像文件:ubuntukylin-22.04-pro-amd64.iso 二、安装步骤 打开虚拟机,点击创建新的虚拟机: 选择自定义: 硬…

2024年新手视频剪辑软件推荐-6款视频剪辑软件测评

视频剪辑软件推荐 premiere premiere 直达地址:各大软件网站 说到底,还是得专业的来,虽然很多人觉得他是收费的,但是你懂的,想要免费总是会有办法的.别的不说,剪辑这块,我还是很认可这个软件,虽然我现在还是刚入门. 剪映 剪映 抖音官方推出的一款手机视频编辑剪辑应用,提供切割…

Full GC的认识、预防和定位

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:传送门 🍹 本人24应届生一枚,技术和水平有限&am…

ChatGPT 串接到 Discord - 团队协作好助理

ChatGPT 串接到 Discord - 团队协作好助理 ChatGPT 是由 OpenAI 开发的一个强大的语言模型,本篇文章教你如何串接 Discord Bot ,协助团队在工作上更加高效并促进沟通与协作。使 ChatGPT 发挥出最大的功效,进一步提升工作效率和团队协作能力。…

【已解决】无法删除自己上传在CSDN的资源怎么办?(2024亲测可用)

文章目录 1. 前情提要2. 实测过程3. 解决方案 1. 前情提要 我在 CSDN 上发布了一个免费资源,近几天却有粉丝反馈这个免费资源现在要开 VIP 才能下载,于是我想删除这个资源重新上传,但系统提示我没有权限,被下载过的资源无法删除&…

pytest测试框架使用基础06 fixture——parametrize

pytest.mark.parametrize 允许在测试函数或类中定义多组参数和 fixtures。 参数化场景: 只有测试数据和预期结果不一样,但操作步骤是一样的测试用例是可以用上参数化的。 创建test_cases02.py文件 示例一:未参数化 1.脚本代码: #…

Visual Studio 2022缺少项目模板的一种解决办法

检查设置 发现vs2022项目模板缺少,先打开vs2022,看看位置是否正确 缺少项目模板时处理 我在升级到:17.9.2时,在新建项目时,发现C#缺少“Windows窗体应用(.Net Framework)”,我装了个vs201…

一个用libcurl多线程下载断言错误问题的排查

某数据下载程序,相同版本的代码,在64位系统中运行正常,但在32位系统中概率性出现断言错误。一旦出现,程序无法正常继续,即使重启亦不行。从年前会上领导提出要追到根,跟到底,到年后的今天&#…

力扣由浅至深 每日一题.01 两数之和

万物惊鸿,唯我澄明 —— 24.3.9 1. 两数之和https://leetcode.cn/problems/two-sum/ 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会…

Redis持久化:RDB和AOF

RDB(Redis DataBase) AOF(Append Only File) AOF重写 auto-aof-rewrite-min-size:如果 AOF 文件大小小于该值,则不会触发 AOF 重写。默认值为 64 MB;auto-aof-rewrite-percentage:执行 AOF 重写…

Pytorch学习 day09(简单神经网络模型的搭建)

简单神经网络模型的搭建 针对CIFAR 10数据集的神经网络模型结构如下图: 由于上图的结构没有给出具体的padding、stride的值,所以我们需要根据以下公式,手动推算: 注意:当stride太大时,padding也会变得很大…

我的 4096 创作纪念日

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

PyQt5实现远程更新exe可执行文件

PyQt5实现远程下载更新exe可执行文件 1、实现流程 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新2、效果图 3、示例代码 conf.ini配置文件: {"http_address_edit_value": "http://xxx.com/xxx/…

python统计日志中数据从开始到结束的响应时间的最大值、最小值、平均值、中位数

应用场景:需要根据日志文件,统计出数据从开始下发到收到回复所需的时间,包括最大值、最小值、平均值、中位数。 日志格式如图类似,每一行日志开始部分就是所需要截取的时间;1条日记是以某些关键词作为开始,…

SSD的原理

简介 SSD(Solid State Drive)是一种使用闪存存储芯片(NAND Flash)的存储设备。与传统的机械硬盘不同,SSD没有移动部件,因此具有更快的读写速度和更低的能耗。 架构 NAND Flash是一种非易失性存储器&…

javase day01笔记

第一天课堂笔记 Java第三代高级语言中的面向对象的语言 b/s 浏览器/服务器c/s 客户端/服务端 1991年詹姆斯高斯林在sun公司开发的Java 常用的dos命令 磁盘操作系统:dos win + r -》 cmd dos命令 切换盘符:直接输入对应盘符目录操作&#x…

6个维度分析实时渲染和Webgl技术异同

在日常交流中,对Webgl技术熟悉的合作伙伴,在初次了解实时渲染技术时,都会问二者之间的异同。目前很多要求B/S架构的项目,很多在用webgl技术路线,而且这个方案在行业里比较普,业主方对这个也比较熟悉&#x…

基于git推送的ES检索pdf内容优化思路与代码实现

写在前面 在之前的内容中我们已经介绍了创建gitbucket的webHook,使得仓库有更新时自动推送到我们定义的接口;然后Java读取仓库的文件转码写入ES库,这些核心流程已经实现。 1. 实现ES检索pdf等文件内容的插件 2. 基于GitBucket的Hook构建ES…