最强的AI视频去码图片修复模型:CodeFormer
目录
1 CodeFormer介绍
1.1 CodeFormer解决的问题
1.2 人脸复原的挑战
1.3 方法动机
1.4 模型实现
1.5 实验结果
2 CodeFormer部署与运行
2.1 conda环境安装
2.2 运行环境构建
2.3 模型下载
2.4 运行
2.4.1 人脸复原
编辑编辑
2.4.2 全图片增强
2.4.3 人脸颜色增强
2.4.4 人脸补全
2.4.5 视频增强
3 安装问题定位与解决
3.1 安装错误描述
3.2 问题分析
3.3 问题解决
1 CodeFormer介绍
1.1 CodeFormer解决的问题
CodeFormer是由南洋理工大学-商汤科技联合研究中心S-Lab在NeurIPS 2022上提出的一种基于VQGAN+Transformer的人脸复原模型。该方法基于预训练VQGAN离散码本空间,改变复原任务的固有范式,将人脸复原任务转成Code序列的预测任务,大幅度降低了复原任务映射的不确定性,同时VQGAN的码本先验也为复原任务提供了丰富的人脸细节。最后,通过Transformer全局建模,进一步增加了模型对严重退化的鲁棒性,使得复原的人脸更加真实。
- 论文地址:https://arxiv.org/pdf/2206.11253.pdf
- 代码地址:https://github.com/sczhou/CodeFormer

主要用途:
- 老照片修复与增强
- 面部修复
- 面部颜色增强和修复
- 马赛克还原
1.2 人脸复原的挑战
人脸复原任务面临的诸多挑战:
图片复原任务中的共性问题:高度不适定性。
低清图像(LQ)和潜在的高清图像(HQ)存在多对多的映射关系,如下图所示。这种多解的映射使得网络在学习过程中产生疑惑,无法获得一个高质量的输出,且退化越严重,这种不适应性就会越大。“如何才能降低这种映射的不确定性”是其挑战之一。

纹理细节丢失
从上图可以看出,真实场景的低清人脸图片中往往会引入各种退化,包括噪声、JPEG压缩伪影、模糊、下采样等。这些退化不同程度地损害了原有人脸纹理细节,造成信息丢失。“如何更好地补充真实高清纹理”也一直是人脸复原的一大难题。
人脸身份丢失
以上两点都会导致人脸复原的结果很难保持身份的一致性。然而现实应用中又往往对输出人脸的身份一致性有着很高的要求,在输出高清人脸细节的同时,又要与低清人脸的身份保持一致,这无疑增加了复原过程的难度。
1.3 方法动机
我们首先引入了VQGAN的离散码本空间来缓解以上 (1)、(2) 两个问题。有限且离散的映射空间大大降低了复原任务映射的不适定性 (1)。通过VQGAN的自重建训练,码本先验保存了丰富的高清人脸纹理信息,帮助复原任务补充真实的人脸纹理细节 (2)。
如下图所示,相比连续先验空间 (d、e),离散码本空间 (f、g) 可以输出更高质量的结果 (没有伪影),保持完好脸庞轮廓的同时,也展现出更真实、细致的纹理。

如何更准确地得到Code序列呢?我们对比分析了两种不同Code序列的查找方式:最近邻特征查找 (f) 和基于Transformer预测 (g),我们发现基于Transformer预测 (g)会得到更准确的Code序列,即生成更高质量的人脸图像且保持更好的身份一致性,如上图所示。

我们进一步发现,基于VQGAN最近邻特征查找的Code序列查询方式并不适用于低清图像。通过对高清 (HQ) 和低清 (LQ) 特征进行聚类可视化,我们分析了原因,如上图所示。
由于VQGAN的码本通过存储HQ的Code来重建高清人脸图,HQ特征分布在准确的Code簇附近,因此HQ特征可以通过最近邻来进行Code查找。然而,LQ特征丢失了大量的纹理信息,导致其分布到错误的Code簇中 (即便Finetune过Encoder)。
由此得出,最近邻Code查找对于LQ特征并不是最优的解决方案,我们通过Transformer进行全局人脸建模,缓解了局部特征最近邻查找带来的不准确性,从而找到更准确的Code序列,使得模型对严重细节损失更为鲁棒,复原的人脸图片也更加自然。
虽然Transformer可以缓解身份不一致的问题 (3),但由于VQGAN的码本空间并不能100%完美地重建出任意人脸,比如个人特有面部特征或首饰,因此引入可调节特征融合模块来控制对输入LQ人脸的依赖。
当输入LQ图像退化轻微时,LQ特征很好地保留了个人的身份信息,因此该模块倾向于融合更多的输入信息,使得模型输出和输入图保持身份一致;当输入LQ图像退化严重时,LQ特征中个人的身份信息已经严重损坏且包含了大量的退化噪声,无法对输出身份一致性提供太大的帮助,因此该模块倾向于融合较少的输入信息,从而降低退化对输出质量的影响。
1.4 模型实现
了解本文动机后,这里简单介绍一下本文方法,实现细节请查看原文和代码。
该方法分为3个训练过程:

Stage I:Codebook Learning
首先通过高清人脸自我重建学习,训练VQGAN,从而得到HQ码本空间作为本文的离散人脸先验。为了降低LQ-HQ映射之间的不确定性,我们设计尽量小的码本空间和尽量短的Code序列作为人脸的离散表达。因此,我们采用了大的压缩比 (32倍),即将原来的人脸图片压缩为的离散Code序列。该设计使得码本中Code具有更丰富的上下文信息,有助于提升网络表达能力以及鲁棒性。
Stage II:Codebook Lookup Transformer Learning
基于得到的码本空间,我们在原来Encoder后又嵌入一个Transformer模块对特征全局建模,以达成更好的Code序列预测。该阶段固定Decoder和Codebook,只需学习Transformer模块并微调Encoder。将原本的复原任务转变为离散Code序列预测任务,改变了复原任务的固有范式,这也是本文的主要贡献之一。
Stage III:Controllable Feature Transformation
尽管Stage II已经实现非常好的人脸复原,我们还希望在人脸复原的质量和保真方面达成更灵活的权衡。因此,该阶段引入可控特征融合模块 (CFT) 来控制Encoder特征和Decode特征 的融合,即:

从而达到:当调小,模型输出质量更高;当调大,模型输出能保持更好的身份一致性。如下图示例,随着 变大,输出人脸身份越来越像输入图,个人特征 (如眉中痔) 也逐渐恢复。

1.5 实验结果
CodeFormer在人脸复原、人脸颜色增强以及人脸补全三个任务上均表现出了优势,此处只展示输出结果,和其他方法的对比和消融实验请查看原文。
- 人脸复原

- 人脸补全

- 人脸颜色增强

- AI生成人脸校正

- 老照片修复



2 CodeFormer部署与运行
2.1 conda环境安装
conda环境准备详见:annoconda
2.2 运行环境构建
git clone https://github.com/sczhou/CodeFormer
cd CodeFormerconda create -n codeformer python=3.9
conda activate codeformerpip install -r requirements.txt
python basicsr/setup.py develop
2.3 模型下载
python scripts/download_pretrained_models.py facelibpython scripts/download_pretrained_models.py CodeFormer
parsing_parsenet 下载模型存储到weights/facelib/目录下
codeformer_colorization下载模型存储到weights/CodeFormer/目录下
codeformer_inpainting下载模型存储到weights/CodeFormer/目录下
RealESRGAN_x2plus下载模型存储到weights/realesrgan/目录下
2.4 运行
2.4.1 人脸复原
python inference_codeformer.py -w 0.5 --has_aligned --input_path inputs/cropped_faces/0143.png
2.4.2 全图片增强
python inference_codeformer.py -w 0.7 --input_path inputs/whole_imgs/03.jpg


2.4.3 人脸颜色增强
python inference_colorization.py --input_path inputs/cropped_faces/0368.png


2.4.4 人脸补全
python inference_inpainting.py --input_path inputs/masked_faces/00105.png


2.4.5 视频增强
python inference_codeformer.py --bg_upsampler realesrgan --face_upsample -w 1.0 --input_path inputs/test.mp4
3 安装问题定位与解决
3.1 安装错误描述
安装依赖过程中出现如下错误:
ERROR: HTTP error 404 while getting https://pypi.doubanio.com/packages/66/9a/b6d21ad7d69ce6f78d57bf4cb6382c2121811deeb128c57da22b042fe147/tb_nightly-2.15.0a20230902-py3-none-any.whl#sha256=11ed86269422f5fe48208c732956ac5633b9b76eed5bfed587a0621ce39275b1 (from https://pypi.doubanio.com/simple/tb-nightly/) (requires-python:>=3.9)
ERROR: Could not install requirement tb-nightly from https://pypi.doubanio.com/packages/66/9a/b6d21ad7d69ce6f78d57bf4cb6382c2121811deeb128c57da22b042fe147/tb_nightly-2.15.0a20230902-py3-none-any.whl#sha256=11ed86269422f5fe48208c732956ac5633b9b76eed5bfed587a0621ce39275b1 (from -r requirements.txt (line 11)) because of HTTP error 404 Client Error: Not Found for url: https://mirrors.cloud.tencent.com/pypi/packages/66/9a/b6d21ad7d69ce6f78d57bf4cb6382c2121811deeb128c57da22b042fe147/tb_nightly-2.15.0a20230902-py3-none-any.whl for URL https://pypi.doubanio.com/packages/66/9a/b6d21ad7d69ce6f78d57bf4cb6382c2121811deeb128c57da22b042fe147/tb_nightly-2.15.0a20230902-py3-none-any.whl#sha256=11ed86269422f5fe48208c732956ac5633b9b76eed5bfed587a0621ce39275b1 (from https://pypi.doubanio.com/simple/tb-nightly/) (requires-python:>=3.9)
3.2 问题分析
从错误信息可知,doubanio源中没有tb-nightly这个包
3.3 问题解决
指定aliyun镜像安装tb_nightly
pip install tb_nightly==2.15.0a20230902 -i https://mirrors.aliyun.com/pypi/simple
相关文章:
最强的AI视频去码图片修复模型:CodeFormer
目录 1 CodeFormer介绍 1.1 CodeFormer解决的问题 1.2 人脸复原的挑战 1.3 方法动机 1.4 模型实现 1.5 实验结果 2 CodeFormer部署与运行 2.1 conda环境安装 2.2 运行环境构建 2.3 模型下载 2.4 运行 2.4.1 人脸复原 编辑编辑 2.4.2 全图片增强 2.4.3 人脸颜色…...
jenkins自动化部署安装
一、准备工作 1、安装jdk # 1、下载准备jdk包(也可以用docker安装) wget ... # 2、直接解压到,无需安装 unzip ...2、安装maven # 1、下载准备maven压缩包 wget ... # 2、直接解压,无需安装 unzip ... # 3、修改setting.xml,修改localRepository和MIRROR镜像地址…...
如何调用Zabbix API获取主机信息
自Zabbix 1.8版本被引进以后,Zabbix API开始扮演着越来越重要的角色,它可以为批量操作、第三方软件集成以及其他应用提供可编程接口。 在运维实践中,Zabbix API还有更多巧妙的应用。 面对规模庞大的监控设备,可能会出现某台机器发…...
批量执行redis命令总结
目录 批量执行redis命令方式1: redis-cli直接执行方式2:通过redis-cli和xargs等命令 批量执行redis命令 方式1: redis-cli直接执行 redis-cli command param redis-cli本身支持单个命令执行省略了连接参数操作的key等相关数据,可以通过线下获取或通过keys scan等命…...
命令行git联网失败,但是实际可以联网
最近下载代码的时候发现总是告诉我连不上github的网页,但是我自己通过浏览器又可以上网,找了半天发现这个方法可以。 记录下这个代理 打开git bash 执行以下命令: git config --global http.proxy http://127.0.0.1:7890 git config --glob…...
网络编程套接字,Linux下实现echo服务器和客户端
目录 1、一些网络中的名词 1.1 IP地址 1.2 端口号port 1.3 "端口号" 和 "进程ID" 1.4 初始TCP协议 1.5 UDP协议 2、socket编程接口 2.1 socket 常见API 2.2 sockaddr结构 3、简单的网络程序 3.1 udp实现echo服务器和客户端 3.1.1 echo服务器实…...
java+ssh+mysql智能化办公管理系统
项目介绍: 本系统为基于jspsshmysql的OA智能办公管理系统,包含管理员、领导、员工角色,功能如下: 管理员:公告信息;工作计划;公司资料;部门管理;员工管理;员…...
网络层抓包tcpdump
sudo tcpdump -i eth0 -s 0 -nn host iphost -w xxx.pcap 这段代码使用了命令行工具 tcpdump,用于在Linux系统上捕获网络数据包。让我详细介绍一下这段代码的含义和 tcpdump 的用法: 代码含义: sudo: 使用超级用户权限执行 tcpdump 命令&am…...
QT之形态学操作
形态学操作包含以下操作: 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作,其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…...
15、监测数据采集物联网应用开发步骤(11)
源码将于最后一遍文章给出下载 监测数据采集物联网应用开发步骤(10) 程序自动更新开发 前面章节写了部分功能模块开发: 日志或文本文件读写开发;Sqlite3数据库读写操作开发;定时器插件化开发;串口(COM)通讯开发;TCP/IP Client开发;TCP/IP Server 开发;modbus协议…...
Pygame中Trivia游戏解析6-2
3.1.2 读取保存题目的文件 在Trivia类的__init__()方法中,对各变量初始化完成之后,读取保存题目的文件,代码如下所示。 f open(filename, "r", encodingutf8) trivia_data f.readlines() f.close() 其中,open()函数…...
java 实现命令行模式
命令模式是一种行为设计模式,它允许您将请求封装为对象,以便您可以将其参数化、队列化、记录和撤销。在 Java 中实现命令模式涉及创建一个命令接口,具体命令类,以及一个接收者类,该接收者类执行实际操作。下面是一个简…...
A - Orac and Models(最长上升子序列——加强版)
There are nn models in the shop numbered from 11 to nn, with sizes s_1, s_2, \ldots, s_ns1,s2,…,sn. Orac will buy some of the models and will arrange them in the order of increasing numbers (i.e. indices, but not sizes). Orac thinks that the obtai…...
【python手写算法】逻辑回归实现分类(含公式推导)
公式推导: 代码实现: # codingutf-8 import matplotlib.pyplot as plt import numpy as npdef f(w1,x1,w2,x2,b):zw1*x1w2*x2breturn 1/(1np.exp(-z)) if __name__ __main__:X1 [12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43,2.1…...
【2023高教社杯数学建模国赛】ABCD题 问题分析、模型建立、参考文献及实现代码
【2023高教社杯数学建模国赛】ABCD题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间:2023年9月7日 18:00-2023年9月10日20:00 2 思路内容 可以参考我提供的历史竞赛信息内容,最新更新我会发布在博客和知乎上,请关注我获得最…...
yum安装mysql5.7散记
## 数据源安装 $ yum -y install wget $ wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm $ yum localinstall mysql57-community-release-el7-8.noarch.rpm $ yum repolist enabled | grep "mysql.*-community.*" $ yum install mysql-…...
DNS解析
1.DNS介绍 DNS 表示域名系统。此系统实质上是用于整理和识别各个域名的网络电话簿。电话簿将“Acme Pizza”之类的名称转换为要拨打的正确电话号码,而 DNS 将“www.google.com”之类的网络地址转换为托管该网站的计算机的物理 IP 地址,如“74.125.19.147…...
从jdk8 升级到jdk17的问题总结
目录 1. java.lang.reflect.InaccessibleObjectException: 2. java.lang.UnsatisfiedLinkError in autosys 3. java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser 4. java.lang.UnsatisfiedLinkError: **…...
一百七十二、Flume——Flume采集Kafka数据写入HDFS中(亲测有效、附截图)
一、目的 作为日志采集工具Flume,它在项目中最常见的就是采集Kafka中的数据然后写入HDFS或者HBase中,这里就是用flume采集Kafka的数据导入HDFS中 二、各工具版本 (一)Kafka kafka_2.13-3.0.0.tgz (二)…...
pnpm 升级
1. 在以下路径下删除pnpm包 2. 执行which pnpm,在结果目录中删除pnpm 3. sudo npm install -g pnpm 重新安装,node默认使用16...
02_RAGFlow之DeepDoc深度文档理解技术
RAGFlow之DeepDoc深度文档理解技术 知识体系 RAGFlow知识体系 | -- 文档解析层 | -- DeepDoc核心能力 | -- 文档布局分析模型 | -- 模板化分块策略 | -- 多模态处理层 | -- 表格结构识别 | -- 公式识别 | -- 图文混排处理 | -- 分块优化层 | -- 可视化模板市场 |…...
2026届必备的六大AI论文助手实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 此刻,针对学术写作情形的AI辅助网站已然构建起多元化生态,这类平台一…...
计算机毕业设计springboot展会门票系统 基于SpringBoot的会展票务数字化服务平台 SpringBoot框架下的博览会入场券预约与核销系统
计算机毕业设计springboot展会门票系统 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着会展经济的蓬勃发展和数字化转型的深入推进,各类展会活动规模不断扩大&am…...
JSP 语法详解
JSP 语法详解 引言 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在网页中嵌入Java代码,以实现与数据库的交互和动态内容生成。JSP语法简洁明了,易于学习和使用。本文将详细介绍JSP的语法结构,帮助读者更好地理解和应用JSP技术。 JSP基本语法 1. JSP页面结构…...
【实用技巧】-Mac系列设备自定义鼠标指针颜色与动态效果指南
1. 为什么需要自定义鼠标指针? 作为一个用了十年Mac的老用户,我深知默认的白色指针在复杂界面中经常"消失"的烦恼。特别是做设计时,盯着色彩斑斓的PS画布,那个小箭头简直像在玩捉迷藏。更糟的是在演示场景,观…...
vue-treeselect源码深度剖析:理解组件内部工作原理
vue-treeselect源码深度剖析:理解组件内部工作原理 【免费下载链接】vue-treeselect A multi-select component with nested options support for Vue.js 项目地址: https://gitcode.com/gh_mirrors/vu/vue-treeselect vue-treeselect是一个功能强大的Vue.js…...
H5与原生App高效通信:DSBridge桥方法实战解析
1. 为什么需要DSBridge? 在混合开发中,H5页面经常需要调用摄像头、地理位置等原生功能,而原生App也需要获取H5页面的数据更新。传统通信方式(如URL Scheme拦截)存在三个痛点:协议维护成本高(需…...
告别上位机!纯FPGA实现exFAT文件系统,让你的高速数据直接存成标准文件
纯FPGA实现exFAT文件系统:硬件工程师的高速存储革命 在高速数据采集领域,从雷达信号处理到卫星通信,工程师们长期面临一个核心痛点:如何将海量原始数据高效、可靠地转换为标准文件格式。传统方案依赖上位机或嵌入式处理器进行文件…...
RVC变声器全场景解决方案:6大核心问题的系统解决策略
RVC变声器全场景解决方案:6大核心问题的系统解决策略 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversi…...
python的模块和包
模块:1:在python里一个.py文件就是一个模块(module)2:模块可以包含:变量,函数,方法等许多内容3:通常把能够实现特定功能的代码,集中放在一个模块里4:模块可以…...


