PMRF
PMRF 是一款专为照片级真实感图像修复设计的先进算法,其核心目标是在确保修复后图像视觉效果自然逼真的前提下,尽可能降低图像与原始清晰图像之间的均方误差(MSE)。传统修复方法往往难以兼顾“看起来真实”与“数值误差最小”这两个目标,而 PMRF 通过独特的“后验均值整流流”技术,从理论上证明了其能够逼近这一最优平衡点,有效解决了去模糊、超分辨率等任务中常见的细节丢失或伪影问题。
该工具特别适合从事计算机视觉研究的科研人员、需要高质量复原方案的算法开发者,以及对图像画质有极致追求的专业设计师。作为入选 ICLR 2025 的前沿成果,PMRF 的创新之处在于将感知质量约束与最小化误差目标巧妙结合,并采用了高效的 HDiT 架构进行实现。项目不仅提供了完整的官方代码和预训练模型,还集成了 Hugging Face 在线演示,方便用户快速体验其在人脸修复及自然场景还原上的卓越表现。无论是用于学术探索还是实际工程落地,PMRF 都为高保真图像恢复提供了一个强有力的新选择。
使用场景
一家数字档案修复团队正在处理一批因年代久远而严重模糊、带有噪点且细节丢失的历史人像照片,目标是还原出既清晰又符合真实光影质感的高清图像。
没有 PMRF 时
- 细节过度平滑:传统去噪算法为了降低误差,往往将人脸纹理当作噪声抹除,导致皮肤呈现不自然的“塑料感”或蜡像感。
- 伪影与失真:基于生成对抗网络(GAN)的方法虽然能生成纹理,但容易 hallucinate(幻觉化)出不存在的五官特征,破坏人物原本的真实面貌。
- 画质与感知难以兼得:团队被迫在“数学误差最小化(模糊但准确)”和“视觉感知好(清晰但可能造假)”之间做痛苦的二选一,无法同时满足档案记录的严谨性与观赏性。
- 迭代调试成本高:需要反复调整多组参数尝试平衡点,且不同退化程度的照片需要定制不同的处理流程,效率极低。
使用 PMRF 后
- 最优误差控制:PMRF 通过数学证明逼近了最小均方误差(MSE)的最优估计器,在保留原始像素统计准确性的同时,有效去除了噪声。
- 照片级真实还原:利用后验均值整流流技术,恢复出的皮肤毛孔、发丝等高频细节自然逼真,彻底消除了传统方法的模糊感或虚假纹理。
- 打破质量悖论:完美解决了感知质量与保真度的冲突,输出结果既符合人眼对高清照片的审美期待,又严格忠实于原图的人物特征,无需妥协。
- 统一高效流程:针对不同程度的退化图像,PMRF 仅需一套模型即可自适应处理,大幅减少了人工干预和参数调优的时间。
PMRF 核心价值在于它从理论层面打破了图像修复中“清晰度”与“真实性”不可兼得的魔咒,为专业影像修复提供了兼具数学最优解与视觉真实感的终极方案。
运行环境要求
- Linux
- Windows
- macOS
- 需要 NVIDIA GPU,安装命令指定 pytorch-cuda=11.8,需支持 CUDA 11.8
- 若使用 HDiT 架构需安装对应 CUDA 版本的 natten 包
未说明

快速开始
PMRF 是一种新颖的逼真图像修复算法。它(在理论上)近似于在完美感知质量约束下,能够最小化均方误差(MSE)的最优估计器。
📈 我们论文中的部分结果
CelebA-Test 定量对比
红色、蓝色和绿色分别表示最佳、第二佳和第三佳的成绩。

WIDER-Test 视觉对比
WebPhoto-Test 视觉对比
⚙️ 安装
Windows 用户注意: 似乎有几位 Windows 用户无法安装 natten 包,而该包是使用 PMRF 中 HDiT 模型架构所必需的。一个对多人有效的解决方案已在 这里 提出。如果您仍未能解决此问题,可以尝试使用其他架构(如 UNet)来训练 PMRF,从而避免使用 natten 包。
我们通过以下命令创建了一个 conda 环境,务必严格按照给定顺序执行(这些命令也包含在 install.sh 文件中):
conda create -n pmrf python=3.10
conda activate pmrf
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 -c pytorch -c nvidia
conda install lightning==2.3.3 -c conda-forge
pip install opencv-python==4.10.0.84 timm==1.0.8 wandb==0.17.5 lovely-tensors==0.1.16 torch-fidelity==0.3.0 einops==0.8.0 dctorch==0.1.2 torch-ema==0.3
pip install natten==0.17.1+torch230cu118 -f https://shi-labs.com/natten/wheels
pip install nvidia-cuda-nvcc-cu11
pip install basicsr==1.4.2
pip install git+https://github.com/toshas/torch-fidelity.git
pip install lpips==0.1.4
pip install piq==0.8.0
pip install huggingface_hub==0.24.5
- 请注意,PMRF 使用的 HDiT 架构需要
natten包。请确保将natten==0.17.1+torch230cu118替换为您系统上安装的正确 CUDA 版本。可用版本请参阅 https://shi-labs.com/natten/。 - 我们安装了
nvidia-cuda-nvcc-cu11,因为否则torch.compile会无故卡住。不过,在您的系统上,torch.compile可能无需此包即可正常运行。无论如何,如果您希望如此,可以直接跳过该包,或从我们的代码中移除所有涉及torch.compile的行。 - 由于
basicsr存在兼容性问题,您需要修改该包中的一个文件。打开/path/to/env/pmrf/lib/python3.10/site-packages/basicsr/data/degradations.py,其中/path/to/env是您的 conda 环境安装路径。 然后将以下行:
from torchvision.transforms.functional_tensor import rgb_to_grayscale
改为:
from torchvision.transforms.functional import rgb_to_grayscale
⬇️ 下载
🌐 模型检查点
我们提供了盲脸图像修复模型的检查点,可在 Hugging Face 和 Google Drive 上获取。论文第 5.2 节中受控实验的检查点也可从 Google Drive 下载。请保持与 Google Drive 中相同的文件夹结构:
checkpoints/
├── blind_face_restoration_pmrf.ckpt # 盲脸图像修复模型检查点。
├── swinir_restoration512_L1.pth # DifFace 训练的 SwinIR 模型检查点。
├── controlled_experiments/ # 受控实验的检查点
│ ├── colorization_gaussian_noise_025/
│ │ ├── pmrf/
│ │ │ └── epoch=999-step=273000.ckpt
│ │ ├── mmse/
│ │ │ └── epoch=999-step=273000.ckpt
. . .
. . .
. . .
为了评估论文中的地标距离(LMD)和身份度量(Deg),您还需要从 VQFR 的 Google Drive 下载 resnet18_110.pth 和 alignment_WFLW_4HG.pth 检查点,并将其放置在 evaluation/metrics_ckpt/ 文件夹中。
🌐 盲脸图像修复测试数据集
- 从 https://xinntao.github.io/projects/gfpgan 下载 WebPhoto-Test、LFW-Test 和 CelebA-Test(HQ 和 LQ)。
- 从 https://shangchenzhou.com/projects/CodeFormer/ 下载 WIDER-Test。
- 将这些数据集存放在您系统中的任意位置。
🧑 盲脸图像修复(论文第 5.1 节)
⚡ 快速推理
为了快速使用我们的模型,我们提供了一个 Hugging Face 检查点,它会自动下载。只需运行以下命令:
python inference.py \
--ckpt_path ohayonguy/PMRF_blind_face_image_restoration \
--ckpt_path_is_huggingface \
--lq_data_path /path/to/lq/images \
--output_dir /path/to/results/dir \
--batch_size 64 \
--num_flow_steps 25
请根据需要调整 --num_flow_steps(这是我们论文中的超参数 K)。
你也可以提供本地的模型检查点(例如,如果你训练了自己的 PMRF 模型,或者希望使用我们的 Google Drive 检查点而不是 Hugging Face 的)。只需运行以下命令:
python inference.py \
--ckpt_path ./checkpoints/blind_face_restoration_pmrf.ckpt \
--lq_data_path /path/to/lq/images \
--output_dir /path/to/results/dir \
--batch_size 64 \
--num_flow_steps 25
需要注意的是,我们的盲人脸图像修复模型是针对方形且对齐的人脸图像进行训练的。如果要修复包含多个人脸的一般内容图像,可以使用我们的 Hugging Face 演示。
🔬 评估
我们从 VQFR 的 Google Drive 下载了
resnet18_110.pth和alignment_WFLW_4HG.pth检查点,并将它们放入evaluation/metrics_ckpt/文件夹中。 要在 CelebA-Test 数据集上评估结果,请运行:cd evaluation python compute_metrics_blind.py \ --parent_ffhq_512_path /path/to/parent/of/ffhq512 \ --rec_path /path/to/celeba-512-test/restored/images \ --gt_path /path/to/celeba-512-test/ground-truth/images要在真实世界数据集上评估结果,请运行:
cd evaluation python compute_metrics_blind.py \ --parent_ffhq_512_path /path/to/parent/of/ffhq512 \ --rec_path /path/to/real-world/restored/images \ --mmse_rec_path /path/to/mmse/restored/images其中
--mmse_rec_path参数是可选的,用于计算 IndRMSE,作为真实世界退化图像的真实 RMSE 指标。请注意,当你运行inference.py时,MMSE 重建结果会自动保存,因为 MMSE 模型也包含在 PMRF 检查点中。
💻 训练
在 scripts/ 文件夹中,我们提供了用于盲人脸图像修复以及基线模型训练的脚本。如果你想运行某个脚本,需要在根目录下执行(即 train.py 所在的目录)。训练该模型需要 FFHQ 数据集。我们下载了原始的 FFHQ 1024×1024 数据集,并使用双三次下采样将其缩小到 512×512。
- 将位于
scripts/train/blind_face_restoration中的train_pmrf.sh文件复制到根目录。 - 根据你系统中训练和验证数据的位置,调整
--train_data_root和--val_data_root参数。 - 由 DifFace 训练的 SwinIR 模型已放在
checkpoints/文件夹中。我们通过以下命令下载了它:wget https://github.com/zsyOAOA/DifFace/releases/download/V1.0/swinir_restoration512_L1.pth - 将
--mmse_model_ckpt_path参数调整为 SwinIR 模型的路径。 - 根据你的系统配置,调整
--num_gpus和--num_workers参数。 - 运行
train_pmrf.sh脚本以训练我们的模型。
👩🔬 对照实验(论文第 5.2 节)
我们提供了论文中对照实验的训练和评估代码,其中我们将 PMRF 与以下基线方法进行了比较:
- 基于 Y 的流模型:一种经过修正的流模型,它以输入测量值为条件,学习从纯噪声流到真实数据分布。
- 基于后验均值预测器的流模型:一种经过修正的流模型,它以后验均值预测为条件,学习从纯噪声流到真实数据分布。
- 直接从 Y 流动的模型:一种经过修正的流模型,它从退化的测量值流到真实数据分布。
- 后验均值预测器:一种旨在最小化 MSE 损失的模型。
🔬 评估
我们提供了用于快速评估 PMRF 及所有基线方法的检查点。
- 评估是在尺寸为 256×256 的 CelebA-Test 图像上进行的。为了获取这些图像,我们从 GFPGAN 下载了 CelebA-Test (HQ) 图像,并使用双三次下采样将其缩小到 256×256。
- 在
test.sh中将--test_data_root调整为 CelebA-Test 256×256 图像的路径,并根据你要评估的退化类型及相应模型检查点,调整--degradation和--ckpt_path参数。 - 运行
test.sh。
我们会自动保存重建后的输出、退化后的测量值以及来自源分布的样本(即 ODE 求解器开始处理的图像)。运行 test.sh 后,你可以通过以下方式评估结果:
cd evaluation
python compute_metrics_controlled_experiments.py \
--parent_ffhq_256_path /path/to/parent/of/ffhq256 \
--rec_path /path/to/restored/images \
--gt_path /path/to/celeba-256-test/ground-truth/images
💻 训练
- 我们在 FFHQ 256×256 数据上训练了模型。为了获得这些图像,我们将原始 FFHQ 1024×1024 图像使用双三次下采样缩小到了 256×256。
- PMRF 以及每个基线模型的训练脚本都位于
scripts/train/controlled_experiments/文件夹中。 - 要运行这些脚本,你需要将其复制到
train.py所在的根目录。你只需调整每个脚本中的--degradation、--source_noise_std、--train_data_root和--val_data_root参数即可。对于去噪任务,我们使用了--source_noise_std 0.025;而对于其他任务,则使用了--source_noise_std 0.1。 - 要运行
train_pmrf.sh和train_posterior_conditioned_on_mmse_model.sh脚本,首先需要通过train_mmse.sh训练 MMSE 模型。然后,根据 MMSE 模型最终检查点的路径,调整--mmse_model_ckpt_path参数。
📝 引用
@inproceedings{
ohayon2025posteriormean,
title={Posterior-Mean Rectified Flow: Towards Minimum {MSE} Photo-Realistic Image Restoration},
author={Guy Ohayon and Tomer Michaeli and Michael Elad},
booktitle={The Thirteenth International Conference on Learning Representations},
year={2025},
url={https://openreview.net/forum?id=hPOt3yUXii}
}
📋 许可证与致谢
本项目采用 MIT 许可证 开源。
我们借鉴了 BasicSR、VQFR、DifFace、k-diffusion 和 SwinIR 的代码。感谢这些仓库的作者提供了有用的实现。
📧 联系方式
如果您有任何问题或咨询,请随时联系我。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。