Real-ESRGAN:把模糊老图放大四倍的开源超分辨率模型

Real-ESRGAN:把模糊老图放大四倍的开源超分辨率模型

AI 绘画

📖 简介

Real-ESRGAN 是面向真实退化图像的超分辨率模型,36.9k Stars。它用高阶退化建模模拟压缩噪点、模糊与振铃,让老照片、低清截图、动漫素材放大后依然干净锐利,是图像修复流水线里最常被调用的开源组件。

📝 详细介绍

这篇教程带你做什么

跟着走完,你会在本地装好 Real-ESRGAN,并用两种方式把一张模糊老照片放大 4 倍:先用官方命令行脚本跑通,再写一个 15 行的 Python 脚本接进你自己的流程。全程不需要 GPU 也能跑,有 GPU 会快很多。

仓库地址:https://github.com/xinntao/Real-ESRGAN,BSD 3-Clause 协议,可商用。项目最近一次提交是 2024-08-06,接口已经稳定,不用担心边写边变。

前置条件

  • Python 3.8–3.10(basicsr 对 3.11+ 兼容性不好,别用最新版)
  • PyTorch 1.10 及以上,有 CUDA 的话先确认 torch.cuda.is_available() 为 True
  • git 命令行工具,用于拉仓库和权重
  • 显存 4GB 以上体验最好;纯 CPU 也能出图,只是慢
  • 磁盘预留 2GB 左右,权重文件单个约 64MB
  • 只有处理视频时才需要 ffmpeg,图片推理用不到

安装部署

Step 1:克隆仓库并建虚拟环境

git clone https://github.com/xinntao/Real-ESRGAN.git
cd Real-ESRGAN

python -m venv venv
source venv/bin/activate   # Windows 用 venvScriptsactivate

Step 2:安装依赖

basicsr 负责模型结构,facexlib/gfpgan 负责 --face_enhance 的人脸修复,缺一不可。

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
pip install basicsr facexlib gfpgan
pip install -r requirements.txt
python setup.py develop

Step 3:验证安装

python -c "from realesrgan import RealESRGANer; from basicsr.archs.rrdbnet_arch import RRDBNet; print('ok')"

打印 ok 就说明环境通了。如果报 functional_tensor 的错,先跳到下面的排错表。

第一个 Demo:把一张模糊人脸放大 4 倍

Step 1:准备输入

这一步要做什么:把待处理的图片放进仓库自带的 inputs/ 目录。名字随意,这里假设叫 old.jpg。

cp ~/Pictures/old.jpg inputs/

Step 2:跑官方命令行脚本

这一步要做什么:用预训练的 RealESRGAN_x4plus 模型推理,权重会自动从 GitHub Releases 下载到 weights/。

python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs --face_enhance --outscale 4

预期输出:终端会打印 Testing 1 images...,结束后在 results/ 目录下得到一张文件名带模型名后缀的 PNG(例如 old_RealESRGAN_x4plus_face.png),尺寸是原图的 4 倍。第一次运行会多花几十秒下载权重,之后就走本地缓存。

Step 3:用 Python API 自己写脚本

这一步要做什么:不依赖命令行参数,把超分封装成可直接复用的函数,方便接批处理或 Web 服务。新建 my_upscale.py:

import cv2
from basicsr.archs.rrdbnet_arch import RRDBNet
from realesrgan import RealESRGANer

# 1. 定义网络结构,x4plus 是 23 个 RRDB block
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64,
                num_block=23, num_grow_ch=32, scale=4)

# 2. 包装成推理器,model_path 可以直接给 URL,会自动下载
upsampler = RealESRGANer(
    scale=4,
    model_path='https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth',
    model=model,
    tile=0,        # 0 表示不切片,显存吃紧时改成 256
    tile_pad=10,
    pre_pad=0,
    half=True,     # GPU 上用 fp16,CPU 上改成 False
)

img = cv2.imread('inputs/old.jpg', cv2.IMREAD_UNCHANGED)
output, _ = upsampler.enhance(img, outscale=4)
cv2.imwrite('outputs/old_x4.png', output)
print('done:', output.shape)
mkdir -p outputs
python my_upscale.py

预期输出:终端打印 done: (H*4, W*4, 3),outputs/old_x4.png 就是结果图。

配置与调优

显存不够:开 tile 切片

加 --tile 256,脚本会把图切成 256×256 的小块分别推理再拼回去。显存 4GB 以下用 256,2GB 以下用 128。代价是速度变慢,但结果基本一致。Python API 里对应 tile=256。

动漫图和真人图用不同权重

真人照片用 -n RealESRGAN_x4plus;二次元插画换成 -n RealESRGAN_x4plus_anime_6B,模型小得多、速度快、线条更干净。想放大 2 倍用 -n RealESRGAN_x2plus,或者任何模型配 --outscale 2 直接输出 2 倍图。

降噪与精度取舍

老照片噪点多可以试 -n realesr-general-x4v3 --denoise_strength 0.5,这个模型支持 0–1 的降噪强度调节。--fp32 会关掉半精度,速度下降约一半但数值更稳,遇到输出出现异常色块时可以打开对比。

常见坑与排错

报错信息原因解决办法
ImportError: cannot import name 'functional_tensor' from 'torchvision.transforms' basicsr 引用了新版 torchvision 已移除的内部模块 降级 pip install torchvision==0.16.1,或把 site-packages/basicsr/data/degradations.py 里的 import 改成 from torchvision.transforms.functional import rgb_to_grayscale
CUDA out of memory 整图一次性进显存,或 tile 值设得太大 命令行加 --tile 256,仍不够就降到 --tile 128
ModuleNotFoundError: No module named 'facexlib' 用了 --face_enhance 但人脸相关依赖没装 pip install facexlib gfpgan 后重跑;不需要人脸修复就去掉该参数
ffmpeg: command not found(跑 video 脚本时) 视频脚本调用了外部 ffmpeg 可执行文件,pip 装了也没用 apt install ffmpeg 或 brew install ffmpeg,确认 ffmpeg -version 能跑通

下一步

  • 试用 ncnn-vulkan 可执行版:仓库 Releases 里有免 Python 环境的单文件程序,支持批量图片和视频,适合发给不懂代码的同事或在无 GPU 机器上跑。
  • 在自己的数据集上微调:走 BasicSR 的训练流程(仓库 docs/Train.md),用真实的老照片退化数据训练,效果通常比通用权重更贴合你的场景。
  • 封装成服务:把上面的 my_upscale.py 包一层 FastAPI,加个上传接口和队列,就能给内部工具或小程序供 API;注意推理器初始化只做一次,复用 upsampler 实例。
🚀

AI 项目推荐

AI 绘画
标签
#超分辨率 #图像增强 #GAN #老照片修复 #开源
浏览
👁️ 1
发布日期
2026-10-02