Python - 面向现实世界的人脸复原 GFP-GAN 简介与使用

news2024/11/24 4:03:32

目录

一.引言

二.GFP-GAN 简介

1.GFP-GAN  数据

2.GFP-GAN 架构

3.GFP-GAN In Wave2Lip

三.GFPGAN 实践

1.环境搭建

2.模型下载

3.代码测试

4.测试效果

四.总结


一.引言

近期 wav2lip 大火,其通过语音驱动唇部动作并对视频质量进行修复,其中涉及到三个知识点:

◆ tts 文本到语音转化

◆ wav2lip 语音驱动唇部动作

◆ GFP-GAN 图像质量修复

本文主要介绍腾讯在人像复原、超分等方面的佳作 GFP-GAN。其在 wav2lip 中扮演视频质量判别器的任务,负责对嘴唇修复后的图像帧进行质量修复,提供更高质量的视频效果。

可以看到与多种新兴方法相比,GFP-GAN 的效果相对更优。

二.GFP-GAN 简介

1.GFP-GAN  数据

GFP-GAN 基于 FFHQ 上训练,由 70000 张高质量图像组成。在训练过程中,将所有图像的大小调整为5122。GFP-GAN是在合成数据上训练的,这些合成数据近似于真实的低质量图像,并在推理过程中推广到真实世界的图像。我们遵循惯例采用以下退化模型:

◆ kσ 高斯模糊 - 高质量图像 y 首先与高斯进行卷积模糊核 kσ,采样范围 [0.2:10]

◆ r - 基于比例因子 r 进行下采样,采样范围 [1:8]

◆  - 添加高斯白噪声,采样范围 [0:15]

◆ JPEGq - 具有质量因子 q 的 JPEG 图像,采样范围 [60: 100]

从这个样本构造的过程也可以看出,GFP-GAN 是一种无监督或者是自监督的训练模型,其不需要人工的标注数据。除此之外,我们在色彩增强训练中添加色彩抖动。下图是图像模型在三个真实世界数据集的定性比较,通过放大以获得最佳视图:

2.GFP-GAN 架构

GFP-GAN 模型主要用到了一个 <Degradation Removal > 退化清除模块,其引入了 <Restoration Loss> 面部恢复损失和一个预训练的 GAN 作为先验。二者通过 Channel-Split SFT 进行桥接。训练过程由 3 类 Loss 混合控制: 

Adversarial Loss -中间恢复 Loss 消除复杂退化

Facial Component Loss - 面部成分 Loss 增强面部细节

Identify Preserving Loss - 身份保留 Loss 以保留人脸身份

其整个恢复训练过程就像低维向量 X 向高维向量 Y 的重建过程。借助 GFP-GAN,我们可以将视频关键帧进行截取与处理,最终拼接为高质量的视频。

3.GFP-GAN In Wave2Lip

wav2lip 模型的训练分为两个阶段,第一阶段是专家音频和口型同步判别器预训练;第二阶段是GAN网络训练。训练部分包括一个生成器和两个判别器,这里的两个判别器分别是专家音频和口型同步判别器和视觉质量判别器,前者预训练完毕后,在GAN训练过程中保持冻结。GFP-GAN 在这里扮演视觉质量判别器的任务,其有多个卷积块组成,训练目标是最大化目标函数 Ldisc:

其中 Lg 对应生成器 G 生成的图像,LG 对应真实图像。其中最右侧的 Visual Quality Discriminator 视觉质量鉴别器用于引入视频质量的 Loss 进行图像修复。其训练数据可以参照 LRS2 数据集,这是一个来自 BBC 的唇语视频,包含 4w 多个口语句子。其中推荐视频帧率为 25fps,音频采样率为 16k,视频一帧对应音频块的长度为 16:

三.GFPGAN 实践

1.环境搭建

创建 Python 环境

需要 python >= 3.7 且 PyTorch >= 1.7,我们直接创建并激活 Python 3.8 的新环境:

conda create --name GFP-GAN python=3.8
conda activate GFP-GAN

Clone repo

git clone https://github.com/TencentARC/GFPGAN.git
cd GFPGAN

Install dependent packages

# Install basicsr - https://github.com/xinntao/BasicSR
# We use BasicSR for both training and inference
pip install basicsr

# Install facexlib - https://github.com/xinntao/facexlib
# We use face detection and face restoration helper in the facexlib package
pip install facexlib

pip install -r requirements.txt
python setup.py develop

# If you want to enhance the background (non-face) regions with Real-ESRGAN,
# you also need to install the realesrgan package
pip install realesrgan

最终的 py 3.8 其余 package 依赖版本如下:

torch==2.0.1
torchvision==0.15.2
basicsr==1.4.2
facexlib==0.3.0
realesrgan==0.3.0
opencv-python==4.8.1.78
scipy==1.11.3

2.模型下载

官方 Githuba 提供三个修复模型供使用:

◆ V1 - Paper 中对应模型,带彩色。

◆ V2 - 无着色,不需要CUDA扩展。通过预处理使用更多数据进行训练。

◆ V3 - 基于V1.2,更自然的恢复结果;在非常低质量 / 高质量的输入上获得更好的结果。

我们这里直接下载 V1.3 对应的 GFPGANv1.3.pth,大小约为 333 M:

wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth -P experiments/pretrained_models

3.代码测试

这里快速测试的话只需要 -i 传入图片对应的文件夹,-o 传入输出地址: 

python inference_gfpgan.py -i inputs/whole_imgs -o results -v 1.3 -s 2

-v 代表模型版本,-s 代表上采样比例,由于原始代码中逻辑涉及到从 URL 中获取 .pth 的复原模型,所以我们需要对代码稍作修改,避免网络原因导致模型下载失败进而异常。

直接指定模型,避免 URL 下载

直接将下载好的 .pth 的模型全路径传给 model_path 即可,除此之外 gfpgan/weights 下面还需要下载两个辅助的 .pth 模型,这里需要等代码执行完毕,如果中途退出下载再运行会在加载时报模型文件异常:

RuntimeError: unexpected EOF, expected xxx more bytes. The file might be corrupted.

4.测试效果

运行结束后会得到多个文件夹:

◆ cmp 即为 compare 对应每个人物的修复效果前后对比

◆ cropped_faces 为裁剪得到的原始人脸图像

◆ restored_faces 为对应的修复人脸图像

◆ restored_imgs 为完整的修复图像。

为了获得比较真实的老图,我们上网找到了三张老板本 <三国演义> 的剧照,看看整体恢复效果:

再看看不同角色的对比修复效果:

case 整体的修复效果还是不错的,不过鲁肃脸上由于光线的原因,修复后有些棱角分明。

四.总结

上面是一些 GFP-GAN 的基本信息与调用流程,官方 Github 还提供了自定义的训练脚本,如果有自己场景的图像数据也可以对模型持续训练。后面有空我们也会分享 wave2lip 的其他相关知识。

参考数据与链接:

LRS2: LRS2数据集处理

GFP-GAN 论文: https://arxiv.org/pdf/2101.04061.pdf

GFP-GAN 代码: GitHub - developing Practical Algorithms for Real-world Face Restoration.

Wave2Lip 论文: http://cdn.iiit.ac.in/cdn/cvit.iiit.ac.in/images/Projects/Speech-to-Lip/paper.pdf

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dd爱科学1.0(最长不下降子序列)

解析&#xff1a; 要求序列非递减&#xff0c;只需求出最长不上升子序列即可&#xff0c;其余位置则需要修改。 #include<bits/stdc.h> using namespace std; #define int long long const int N1e65; int n,dp[N]; void solve(){string s;cin>>n>>s;int cn…

Kubernetes 亲和性 反亲和性 污点 容忍及维护驱逐

亲和性 官方网站&#xff1a; https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/&#xff08;1&#xff09;节点亲和性 pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution&#xff1a;软策略 ●requiredDuringSchedulin…

如何在后台执行 SwiftData 操作

文章目录 前言Core Data 私有队列上下文SwiftData 并发支持使用 ModelActor合并上下文更改的问题通过标识符访问模型总结 前言 SwiftData 是一个用于处理数据操作的框架&#xff0c;特别是在 Swift 语言中进行并发操作。本文介绍了如何在后台执行 SwiftData 操作以及与 Core D…

九州未来入选2023边缘计算TOP100,边缘计算能力再获认可

近日&#xff0c;德本咨询、互联网周刊、中国社会科学院信息化研究中心联合发布 “2023边缘计算TOP100”榜单&#xff0c;九州未来凭借领先的技术优势、产品服务能力、落地实践经验等综合实力入选。 数字时代&#xff0c;算力成为第一生产力。边缘计算凭借其低时延、节省带宽、…

FL Studio2024破解版激活码序列号

对于唱作人来说&#xff0c;一款优秀、全能的音乐制作软件&#xff0c;能帮助他们在创作上获得更多的灵感、以及为歌曲带来更多的变化。 FL Cloud 音效库包含开放版权的Loop和采样&#xff0c;以及来自 FL Studio 著名用户的艺术家独家内容。更新后&#xff0c;现在还可以使用…

软约束与硬约束

软约束硬约束 软约束硬约束 硬约束优化 1.基于走廊的光滑轨迹生成 2.基于贝塞尔曲线的轨迹优化 软约束优化 1.基于距离的轨迹优化 2.目标函数的设计 目标函数 光滑代价函数 碰撞代价函数 动力学代价函数。 光滑代价函数&#xff1a; 使用minimum snap来实现。 碰撞…

代码随想录第四十五天 | 动态规划 完全背包的应用:爬楼梯改编;求最小个数,循环顺序无影响(322 零钱兑换,279 完全平方数)

1、爬楼梯改编 之前讲这道题目的时候&#xff0c;因为还没有讲背包问题&#xff0c;所以就只是讲了一下爬楼梯最直接的动规方法&#xff08;斐波那契&#xff09; 改为&#xff1a;一步一个台阶&#xff0c;两个台阶&#xff0c;三个台阶&#xff0c;…&#xff0c;直到 m个台…

nanodet训练自己的数据集、NCNN部署到Android

nanodet训练自己的数据集、NCNN部署到Android 一、介绍二、训练自己的数据集1. 运行环境2. 数据集3. 配置文件4. 训练5. 训练可视化6. 测试 三、部署到android1. 使用官方权重文件部署1.1 下载权重文件1.2 使用Android Studio部署apk 2. 部署自己的模型【暂时存在问题】2.1 生成…

MCUXpresso GBK 汉字编码 lcd显示用

在上面添加 -fexec-charsetGBK &#xff0c;之后IDE就可以解码&#xff08;GBK&#xff09;汉字了

高防CDN与高防服务器:谁更胜一筹?

在当今数字化世界中&#xff0c;网络安全对于保护网站和应用程序至关重要。在这一背景下&#xff0c;高防CDN和高防服务器是两种流行的解决方案&#xff0c;用于应对不同类型的网络攻击。本文将分析高防CDN是否能够替代高防服务器&#xff0c;以及它们各自的优势和限制。 高防C…

数据库 高阶语句

目录 数据库 高阶语句 使用select 语句&#xff0c;用order by来对进行排序 区间判断查询和去重查询 如何对结果进行分组查询group by语句 limit 限制输出的结果记录&#xff0c;查看表中的指定行 通配符 设置别名&#xff1a;alias 简写就是 as 使用select 语句&#x…

用C++编写动画+音频版极乐净土

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<graphics.h> #include<Windows.h> #include<MMSystem.h>//播放音乐所需要的头文件 #pragma comment(lib,"winmm.lib")//告诉编译器&#xff0c;加载winmm.lib库文件 #define C…

文件包含漏洞培训

CTF介绍 MISC(Miscellaneous)类型,即安全杂项,题目或涉及流量分析、电子取证、人肉搜索、数据分析等等。CRYPTO(Cryptography)类型,即密码学,题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。PWN类型,PWN在黑客俚语中代表着攻破、取得权限…

项目管理之如何召开项目时间箱启动会议

时间箱启动会议是项目管理中至关重要的一环&#xff0c;它帮助项目团队明确目标、分配任务、制定计划&#xff0c;并为项目的顺利实施提供指导和支持。下边为大家介绍有关如何召开时间箱启动会议的一些建议&#xff1a; 确定会议目标 在召开时间箱启动会议前&#xff0c;首先…

分布式任务调度(02)--ElasticJob-Lite

1 简介 轻量级无中心化解决方案&#xff0c;jar包提供分布式任务的协调服务。 // 应用内部定义任务类&#xff0c;实现SimpleJob接口 public class MyElasticJob implements SimpleJob {// 编写自己任务的实际业务流程Overridepublic void execute(ShardingContext context) {…

Alert警告提示(antd-design组件库)简单使用

1.Alert警告提示 警告提示&#xff0c;展现需要关注的信息。 2.何时使用 当某个页面需要向用户显示警告的信息时。 非浮层的静态展现形式&#xff0c;始终展现&#xff0c;不会自动消失&#xff0c;用户可以点击关闭。 组件代码来自&#xff1a; 警告提示 Alert - Ant Design 3…

VM虚拟机逆向---羊城杯2023 vm_wo复现【详解】

文章目录 前言题目分析还原汇编exp后言 前言 兜兜转转终于回到这里了。之前复现了羊城杯较简单点的三题&#xff0c;到这一题vm卡住了&#xff0c;刷了好几道&#xff0c;终于搞定了。 题目分析 第一次遇到Mac os的题目&#xff0c;幸好还可以做。 opcode 和 指令操作 密文…

【Azure 架构师学习笔记】-Azure Storage Account(5)- Data Lake layers

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account&#xff08;4&#xff09;- ADF 读取Queue Storage 前言 不管在云还是非云环境中&#xff0c; 存储是IT 系统的其中一个核心组件。在…

uni-app基于vue实现商城小程序

一、前言 参考“网易严选”小程序 项目采用传统vue项目结构&#xff0c;即uni-app打包和运行成小程序&#xff0c;使用HBuilder开发工具开发项目&#xff0c;通过运行启动“微信开发者工具”完成项目启动。 二、功能效果图 1.首页 2.分类 3.活动 4.我的 5.商品详情 6.购物车…

什么是AI算子开发

今天在某离职群里看到前同事聊天&#xff0c;说到国内某大厂的一个面试&#xff0c;本来求职面试的岗位是通信库&#xff0c;类似于英伟达的 nccl&#xff0c; 但是却被问到了很多与算子开发相关的问题。 看来算子开发岗位依然很稀缺。 联想到之前写过的一篇关于AI算子开发的文…