本文档记录 RRDBNet (RealESRGAN) 图像超分辨率模型在昇腾 NPU (Ascend 910B3) 上的迁移适配与精度验证结果。
RRDBNet 是 RealESRGAN 的核心生成器网络,采用 RRDB (Residual-in-Residual Dense Block) 架构,在模拟真实复杂降质的数据上训练,可以实现 4 倍图像超分辨率。
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
CANN | 8.5.1 |
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
torchvision | 0.23.0 |
modelscope | 1.37.0 |
numpy | 2.2.6 |
opencv-python-headless | 4.13.0 |
Ascend 910B3,单卡推理conda create -n cv_rrdb_image python=3.10 -y
conda activate cv_rrdb_image# PyTorch + Ascend NPU 后端
pip install torch==2.8.0 torch_npu==2.8.0.post4 torchvision==0.23.0 \
-i https://mirrors.huaweicloud.com/repository/pypi/simple \
--trusted-host mirrors.huaweicloud.com
# 模型与工具库
pip install modelscope==1.37.0 opencv-python-headless numpy \
sortedcontainers simplejson pyyaml addict datasets pyarrow \
-i https://mirrors.huaweicloud.com/repository/pypi/simple \
--trusted-host mirrors.huaweicloud.com# 使用 modelscope CLI
modelscope download --model damo/cv_rrdb_image-super-resolution \
--local_dir ./cv_rrdb_image-super-resolution
# 或使用 HuggingFace 镜像
huggingface-cli download --resume-download \
damo/cv_rrdb_image-super-resolution \
--local-dir ./cv_rrdb_image-super-resolution \
--local-dir-use-symlinks False# CPU 推理
python inference.py --image input.jpg --output sr_cpu.png --device cpu
# NPU 推理
python inference.py --image input.jpg --output sr_npu.png --device npufrom inference import run_inference
import cv2
# NPU 推理(4倍超分)
result = run_inference("input.jpg", device="npu")
cv2.imwrite("output.png", result["output"])
print(f"耗时: {result['time_ms']:.2f} ms")
print(f"输入: {result['input_shape']} → 输出: {result['output_shape']}")Smoke 测试使用 64x64 随机噪声图片:
测试条件:input 1x3x64x64,单次推理,30 轮取平均。
| 指标 | CPU | NPU (Ascend 910B3) | 加速比 |
|---|---|---|---|
| 平均耗时 | 3707.32 ms | 51.30 ms | 72.27x |
| 中位耗时 | 3711.07 ms | 51.10 ms | 72.62x |
| 最小耗时 | 3611.80 ms | 50.49 ms | 71.53x |
| 最大耗时 | 3772.05 ms | 52.94 ms | 71.25x |
| 标准差 | 42.75 ms | 0.63 ms | — |
对比 CPU (PyTorch) 与 NPU (torch_npu) 在同一 64x64 输入下的 4 倍超分输出:
| 指标 | 数值 |
|---|---|
| 输入尺寸 | [1, 3, 64, 64] |
| 输出尺寸 | [1, 3, 256, 256] |
| 最大绝对误差 | 0.000211 |
| 鲁棒平均相对误差 | 0.0063% |
| 鲁棒 P99 相对误差 | 0.0197% |
| PSNR (CPU vs NPU) | 87.58 dB |
本模型基于 PyTorch 框架,通过 ModelScope pipeline 加载 RRDBNet 权重,使用 torch_npu 将模型迁移至 NPU。
核心适配步骤:
pipeline(Tasks.image_super_resolution, model=model_dir)model = sr.sr_modelmodel.to("npu:0")tensor.to("npu:0")torch.npu.synchronize()无需修改模型结构或权重。RRDBNet 全部使用标准卷积、ReLU 等算子,NPU 可直接高效执行。
| 依赖 | 用途 |
|---|---|
torch_npu | Ascend NPU 的 PyTorch 后端 |
modelscope | 模型加载与 pipeline 管理 |
opencv-python-headless | 图像读取与后处理 |
addict | ModelScope 配置解析 |
datasets / pyarrow | ModelScope 数据处理 |