【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
文章目录
- 一、前述
- 二、不同的先验及代表性论文
- 2.1 几何先验(Geometric Prior)
- 2.2 生成式先验(Generative Prior)
- 2.3 codebook先验(Vector Quantized Codebook Prior)
- 2.4 扩散先验 (Diffusion Prior)
- 2.5 参考人脸的先验(Reference Prior)
一、前述
人脸修复(face restoration)任务,起源于人脸超分辨率(face super resolution),可以算是从超分出来的一个分支。作为图像低级任务(low level)中的一个,主要目的就是在低清、受损画质中尽可能的恢复人脸细节。与传统的全图超分的区别在于,人脸是有明确的先验知识在里面的,可以利用这些先验增加模型的信息量,尽可能的恢复人脸的细节。这些先验可以包括面部特征,也称为几何先验(Geometric Prior),有基于高清参考人脸的先验(Reference Prior) ,有基于强的生成器先验(Generative Prior),也有基于离散的codebook的先验(Vector Quantized Codebook Prior),当然,还有近几年爆火的diffusion,作为强的文生图基本模型,他可以作为一种扩散先验(Diffusion Prior)。
论文整理链接:
https://blog.csdn.net/weixin_43707042/article/details/147993213?spm=1011.2124.3001.6209
或
https://github.com/qianx77/Face_Restoration_Ref
整理下各个先验个人觉得比较有代表性的论文。
二、不同的先验及代表性论文
2.1 几何先验(Geometric Prior)
要回答什么是几何先验,可以先问一下,人脸超分比全图超分优势点在哪里?直观感受就是人脸有比较统一的分布规律,例如,正常的人脸都有一个嘴巴、一个鼻子、一双眼睛、有眉毛、有额头等等,这些器官在每个人身上都是不一样的,但是大体形状又是一样的。因此可以利用这些特点来增强人脸的细节。这方面的代表性论文有2018 年 CVPR的FSRNet,利用额外的网络结构预测parsingmap,然后利用parsingmap辅助人脸恢复。
在2023年之前我觉得这方面效果最好的当属2021 CVPR PSFRGAN 主要思想其实是借鉴PGGAN、Stylegan这种渐进式生成的启发,从小尺度到大尺度生成图像,然后在这期间使用LQ image 和 parsingmap作为引导,利用style transformation block,将信息嵌入backbone。
但是我在实际使用中发现,如果LQ的图像太差,影响了parsingmap的提取,错误的parsingmap会对整体恢复效果产生不好的影响。
2.2 生成式先验(Generative Prior)
生成式先验得益于stylegan的发展,stylegan是一个强大的生成器,可以生成十分逼真的图像,如果使用人脸数据进行训练(FFHQ),那么将会生成很多生活中不存在的面孔,且十分逼真。生成式先验中的人脸恢复的想法就是,既然你的生成器这么厉害,可以生成逼真的图像,那我直接把你的生成器拿过来用,作为我的解码器,那不就是可以恢复十分逼真的纹理了?
想法确实就是这样,但是还有一个问题,就是LQ信息怎么嵌入?如果只是单纯的生成,那我随机数给生成器就行了,但是现在做的是恢复任务,增加了一个LQ信息,怎么处理好这个LQ信息?
可以预想到,LQ利用的最优结果是:模型输出结果中的人脸id信息完全遵从LQ,然后又可以恢复逼真的细节。
GFPGAN! 腾讯作品,生成式先验的集大成者! 目前这个算法在GitHub上已经斩获30+k的star了,是一个非常经典且恢复效果泛化性挺好的一个算法。像上段中描述的GAN预训练模型已经是可以作为解码器了,应该考虑的是如何将LQ信息进行嵌入。
GFPGAN多种策略来使用LQ信息,
1、首先,LQ需要经过一个简单的UNet结构,这个UNet结构作为一些降质的去除(Degradation Removal),这个结构的目的就是将原始LQ的一些噪声模糊去除,确保进行到预训练GAN中的信息是干净的。因此有个额外的restoration loss 来监督这个过程。
2、简单UNet结构中的解码器特征和GAN预训练模型中的特征进行空间特征的变换(spatial feature transform)。主要目的是将干净的解码器特征和stylegan2生成器特征结合在一起。
多说一句,GFPGAN有多个版本v1、v1.2、v1.3、v1.4.效果都不太一样。不知道是数据原因还是啥。反正我最后通过一些方式只能复现出1.4版本的效果。
GPEN阿里作品,另外一个经典作品,也是2021年产出的。
GPEN,我个人认为是一个非常简便的结构,甚至可以直接看出是一个UNet结构+w空间的调控,他没有GFPGAN中对于LQ信息的预处理,同时LQ编码器特征嵌入stylegan结构的过程也不一样,采用的是将LQ特征作为noise嵌入生成器。然后由于结构发生一点改变,并没有使用预训练模型,而是端对端直接训练。
由于结构比较简单,且缺少对LQ降质的去除,不管在我的测试数据或者复现中,效果都比不上GFPGAN,当然,对于轻度降质来说,其效果其实还不错。
2.3 codebook先验(Vector Quantized Codebook Prior)
我们知道stylegan中的w空间是连续的,因此相同的GT,不同的退化,可能产生的差距会很大,模型也会增加一些模棱两可的困境,因此Vector Quantized Codebook来解决这个问题。最经典最能打的论文,莫过于CodeFormer!
这个文章首先先利用高清图像HQ生成codebook,然后LQ经过encoder之后,利用transformer结构找到对应的码本索引,从而实现高清图像的恢复。由于前后仅有码本约束会让结果产生极大的不确定性,因此引入CFT结构和调控因子W,来控制LQ信息的嵌入,让用户可以选择fidelity 或者 quality。
第二个经典可能是VQFR
讲真虽然挺火,但是我论文看过印象不深,可能是因为我用预训练模型测了我数据,发现效果并不惊艳。
2.4 扩散先验 (Diffusion Prior)
和GAN先验类似,就是使用强大的生成能力来辅助人脸的恢复,两篇比较经典的应该是2023 NeurIPS的PGDiff 以及2024 TCSVT 的BFRffusion,但是这两篇我在自己数据集测试中发现效果一般。
远不如real world image super resolution中的DiffBIR 和 OSEDiff。后面这两个直接使用ffhq训练就吊打上面两个了。
上图是DiffBIR 的模型结构,他其实将恢复分割成两个子任务,一个是高保真,一个是增加细节,因此前面一个网络可以仅仅使用L1损失来确保内容是保真但是模糊的,然后再用扩散在保真的图像中增加细节。
OSEDiff 则是单步扩散,已经落地在OPPO手机上了。
2.5 参考人脸的先验(Reference Prior)
这个为啥写在最后,因为我发现这个挺有意思的,一开始我只追溯到2022年,发现这部分的论文基本都是CNN结构,而且很多都是Xiaoming Li 这个大佬的文章,例如GFRNet 、DFDNet、ASFFNet、DMDNet,说实在的,面部细节确实是一般。
后面有这个需求之后,发现后面还是挺多相关工作的,甚至变成了Personalized Face Restoration 这种特殊的子领域。我认为其中我跑完觉得结果比较好的是adobe 2024 CVPR gen2res,
通过个人相册或者生成的相册来约束扩散模型的生成空间,我觉得效果还挺不错的,但是时序上可能会抖动。
相关文章:

【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
文章目录 一、前述二、不同的先验及代表性论文2.1 几何先验(Geometric Prior)2.2 生成式先验(Generative Prior)2.3 codebook先验(Vector Quantized Codebook Prior)2.4 扩散先验 (Diffusion Pr…...

无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测
引言 人工智能技术在医疗领域的应用正经历着从辅助决策向深度赋能的转变。无监督学习作为人工智能的核心范式之一,因其无需大量标注数据、能够自动发现数据内在规律的特性,在医疗AI领域展现出独特优势。尤其在2025年,无监督学习技术在医疗AI应用中呈现出多模态整合、疾病亚…...

计算机操作系统概要
不谋万世者,不⾜谋⼀时。不谋全局者 ,足谋⼀域 。 ——陈澹然《寤⾔》《迁都建藩议》 操作系统 一.对文件简单操作的常用基础指令 ls ls 选项 目录或⽂件名:罗列当前⽬录下的⽂件 -l:以长格式显示⽂件和⽬录的详细信息 -a 或 --all&…...
C语言进阶-数组和函数
C语言 一、数组 一维数组 通过数组,可以一次性的分配多个同类型的连续存储区 语法: 类型 数组名字[元素个数]; 例:int arr[6]; arr占用内存6个整型大小的连续存储空间 注意: 通过下标可以区分数组的每个…...

图片通过滑块小图切换大图放大镜效果显示(Vue3)
图片通过滑块小图切换大图放大镜效果显示 实现目标: 显示一组图片列表,鼠标进入小图记录当下小图下标,通过小图下标在数组中对应图片显示到大图位置; 鼠标进入大图位置时,带动滑块移动,并将放大两倍的大图…...

[SSL]1Panel添加阿里云DNS账户
1 创建一个子用户 将得到的key和secret贴到1panel的DNS账户配置中 添加权限 即可用DNS账号申请SSL证书...
C语言编程中的时间处理
最简单的time 在C语言编程中,处理时间最简单的函数就是time了。它的原型为: #include <time.h> time_t time(time_t *_Nullable tloc);返回自从EPOCH,即1970年1月1日的零点零时零分,到当前的秒数。 输入参数可以是NULL。…...

计算机网络 : 网络基础
计算机网络 : 网络基础 目录 计算机网络 : 网络基础引言1. 网络发展背景2. 初始协议2.1 初始协议2.2 协议分层2.2.1 软件分层的好处2.2.2 OSI七层模型2.2.3 TCP/IP五层(四层)模型 2.3 TCP/IP协议2.3.1TCP/IP协议与操作系统的关系&…...

C++跨平台开发:突破不同平台的技术密码
Windows 平台开发经验 开发环境搭建 在 Windows 平台进行 C 开发,最常用的集成开发环境(IDE)是 Visual Studio。你可以从Visual Studio 官网下载安装包,根据安装向导进行安装。安装时,在 “工作负载” 界面中ÿ…...
实现 STM32 PWM 输出:原理、配置与应用详解
实现 STM32 PWM 输出:原理、配置与应用详解 在嵌入式开发领域,STM32 微控制器凭借其强大的功能和丰富的外设资源,被广泛应用。PWM(脉冲宽度调制)作为 STM32 的重要功能之一,对于电机调速、LED 调光、信号合…...
Web 架构之负载均衡会话保持
文章目录 一、引言二、思维导图三、负载均衡会话保持的概念3.1 定义3.2 作用 四、负载均衡会话保持的实现方式4.1 基于 IP 地址原理代码示例(以 Nginx 为例)注释 4.2 基于 Cookie原理代码示例(以 HAProxy 为例)注释 4.3 基于 SSL …...

第一次做逆向
题目来源:ctf.show 1、下载附件,发现一个exe和一个txt文件 看看病毒加没加壳,发现没加那就直接放IDA 放到IDA找到main主函数,按F5反编译工具就把他还原成类似C语言的代码 然后我们看逻辑,将flag.txt文件的内容进行加…...

【Linux网络】传输层协议TCP
TCP协议 TCP全称为"传输控制协议(TransmissionControl Protocol"). 人如其名, 要对数据的传输进行一个详细的控制; TCP协议段格式 源、目的端口号:表示数据从哪个进程来,到哪个进程去。 32位序号、确认序号 4位TCP报头长度:表示该TCP头部有…...

AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
作者:Yifei Su, Dong An, Kehan Chen, Weichen Yu, Baiyang Ning, Yonggen Ling, Yan Huang, Liang Wang 单位:中国科学院大学人工智能学院,中科院自动化研究所模式识别与智能系统实验室,穆罕默德本扎耶德人工智能大学࿰…...

排序算法之基础排序:冒泡,选择,插入排序详解
排序算法之基础排序:冒泡、选择、插入排序详解 前言一、冒泡排序(Bubble Sort)1.1 算法原理1.2 代码实现(Python)1.3 性能分析 二、选择排序(Selection Sort)2.1 算法原理2.2 代码实现ÿ…...

Linux常用命令42——tar压缩和解压缩文件
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,tar 是 Linux 和 Unix 系统中用于归档文件和目录的强大命令行工具。tar 名字来自 "tape archive"(磁带归档),最初用于将文件打包到磁带…...

网络协议分析 实验七 FTP、HTTP、DHCP
文章目录 实验7.1 FTP协议练习二 使用浏览器登入FTP练习三 在窗口模式下,上传/下传数据文件实验7.2 HTTP(Hyper Text Transfer Protocol)练习二 页面提交练习三 访问比较复杂的主页实验7.3 DHCP(Dynamic Host Configuration Protocol) 实验7.1 FTP协议 dir LIST&…...

HTML 表格与div深度解析区别及常见误区
一、HTML<div>元素详解 <div>是HTML中最基本的块级容器元素,本身没有语义,主要用于组织和布局页面内容。以下是其核心用法: 1. 基础结构与特性 <div><!-内部可包含任意HTML元素 --><h2>标题</h2><p…...
Linux 系统中设置开机启动脚本
Linux 系统中设置开机启动脚本有多种方法,适用于不同的场景和需求。以下是几种最常用且详细的方法: 核心理念: 无论哪种方法,核心都是让系统在启动过程中的某个阶段执行你的脚本。 1. 使用 systemd (推荐,现代 Linux 发行版的标准) systemd 是目前大多数主流 Linux 发行…...

linux-进程信号的产生
Linux中的进程信号(signal)是一种用于进程间通信或向进程传递异步事件通知的机制。信号是一种软中断,用于通知进程某个事件的发生,如错误、终止请求、计时器到期等。 1. 信号的基本概念 - 信号(Signal)&am…...

内容中台重构企业知识管理路径
智能元数据驱动知识治理 现代企业知识管理的核心挑战在于海量非结构化数据的有效治理。通过智能元数据分类引擎,系统可自动识别文档属性并生成多维标签体系,例如将技术手册按产品版本、功能模块、适用场景进行动态标注。这种动态元数据框架不仅支持跨部…...
ubuntu22.04卸载vscode
方法 1:通过 Snap 卸载 VSCode 如果你是通过 Snap 安装的 VSCode(Ubuntu 22.04 默认推荐方式),按照以下步骤卸载: 检查是否通过 Snap 安装: bash snap list | grep code如果输出显示 code,说明…...
AGI大模型(19):下载模型到本地之ModelScope(魔搭社区)
1 安装模块 魔塔社区提供了下载的模块,如下: pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple 2 模型下载 from modelscope import snapshot_download model_dirsnapshot_download(LLM-Research/Meta-Llama-3-8B,cache_dirrD:\…...

基于Spring Boot+Layui构建企业级电子招投标系统实战指南
一、引言:重塑招投标管理新范式 在数字经济浪潮下,传统招投标模式面临效率低、透明度不足、流程冗长等痛点。本文将以Spring Boot技术生态为核心,融合Mybatis持久层框架、Redis高性能缓存及Layui前端解决方案,构建一个覆盖招标代理…...

Kali安装详细图文安装教程(文章内附有镜像文件连接提供下载)
Kali镜像文件百度网盘:通过网盘分享的文件:kali-linux-2024.2-installer-amd64.iso 链接: https://pan.baidu.com/s/1MfCXi9KrFDqfyYPqK5nbKQ?pwdSTOP 提取码: STOP --来自百度网盘超级会员v5的分享 1.下载好镜像文件后,我们打开我们的VMwa…...

2.4GHz无线芯片核心技术解析与典型应用
2.4G芯片作为工作在2.4GHz ISM频段的无线通信集成电路,主要面向短距离数据传输应用。这类芯片具有以下技术特点: 多协议支持 兼容蓝牙、Wi-Fi和ZigBee等主流协议 采用SDR技术实现协议灵活切换 适用于智能家居和物联网设备 低功耗特性 采用休眠唤醒和动态…...
ai agent(智能体)开发 python高级应用4:什么是代理,如何设置squid代理服务器,让crawl4ai 0.6.3 用上代理,获取到数据平权
crawl4ai 0.6.3为啥用代理,什么情况下需要用到代理 在 crawl4ai 中设置代理服务器的好处: 一、设置代理的好处 避免IP封禁 高频请求同一网站时,目标服务器可能封禁真实IP。代理通过轮换IP分散请求,降低封禁风险。 绕过地理限制 …...
技术融资:概念与形式、步骤与案例、挑战与应对、发展趋势
一、技术融资概述 技术融资是指通过外部资金支持技术研发、产品开发或市场扩展的过程。它通常涉及风险投资、天使投资、私募股权、众筹等多种形式。技术融资的核心目标是为技术创新提供资金保障,推动技术从概念到市场的转化。 技术融资的主要形式包括以下几种&…...

Chrome代理IP配置教程常见方式附问题解答
在网络隐私保护和跨境业务场景中,为浏览器配置代理IP已成为刚需。无论是访问地域限制内容、保障数据安全,还是管理多账号业务,掌握Chrome代理配置技巧都至关重要。本文详解三种主流代理设置方式,助你快速实现精准流量管控。 方式一…...
微信小程序 密码框改为text后不可见,需要点击一下
这个问题是做项目的时候碰到的。 密码框常规写法: <view class"inputBox"><view class"input-container"><input type"{{inputType}}" placeholder"请输入密码" data-id"passwordValue" bindin…...