Real-ESRGAN:把模糊老图放大四倍的开源超分辨率模型
📖 简介
📝 详细介绍
这篇教程带你做什么
跟着走完,你会在本地装好 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