跳转到内容

AI 超分辨率算法使用指南

株式会社日昇テクノロジー
http://www.dragonwake.com
info@dragonwake.com
创建日期:2026/06/20

本教程说明 XLSR 超分辨率模型的 ONNX/RKNN 转换以及在 CSUN RV1126B 开发板上的部署流程。

copyright@2026 株式会社日昇テクノロジー

修改履历

NO版本修改内容修改日期
1Ver1.0新建2026/06/20

本文档的信息可能会为了改进文档而在未事先通知的情况下变更。最新版请参照公司主页。
https://www.dragonwake.com

未经株式会社日昇テクノロジー书面许可,严禁以任何形式复制本文档。

1. XLSR 概述

XLSR 是面向 2021 年移动 AI 实时单图像超分辨率挑战赛设计的图像超分辨率算法。它结合了高效的移动网络模块设计与考虑硬件特性的量化鲁棒训练策略,在移动设备上实现了兼具优秀重建质量、极少参数量和实时性能的轻量级超分辨率网络,并在该挑战赛中获得冠军。XLSR 的质量评价指标为 PSNR 29.58、SSIM 0.86。

1.1 模型导出优化

为了让 XLSR 算法在超分辨率处理后进一步增强图像细节,原模型最终层中追加了拉普拉斯算子层 SharpeningLayer()。拉普拉斯 kernel 可调整。此外,为了避免在 RKNN 模型后处理中对输出数据进行 NCHW 到 NHWC 的转置,模型的 forward 计算末尾追加了转置层,以提升速度。

在 PC 侧执行 export_onnx.py,将 PT 模型转换为 ONNX。

ONNX 导出的主要代码示例如下。

from model.models import *
import torch
h, w = 360, 640
scaling_factor = 2 # 2 or 4
weight = r"weight/xlsr_2x_checkpoint_float32.pth.tar"
output_file = r"weight/xlsr_{}x_{}x{}.onnx".format(scaling_factor, h, w)
model = XLSRRelease(scaling_factor=scaling_factor)
checkpoint = torch.load(weight, map_location='cpu', weights_only=False)
model.load_state_dict(checkpoint["state_dict"], strict=False)
model.eval()
input_size = (3, h, w) # c, h, w
example_input = torch.randn((1,) + input_size, requires_grad=False)
torch_out = torch.onnx.export(
model,
example_input,
output_file,
export_params=True,
input_names=["image"],
output_names=["upscaled_image"],
opset_version=11
)
print("export finish")

2. 资料下载

本手册所需资料及源代码请从以下链接下载。

  1. 训练源代码 GitHub:https://github.com/csunltd/rv1126b-yolov5
  2. 其他源代码:AIDemo_uhr_All.zip

解压后的目录结构如下。

|-- 03-model_convert AI 模型转换用源代码
|-- 04-AI_deploy AI 模型部署用源代码

图2-1 Ultra-high-resolution 软件包解压后的目录结构

图2-1 Ultra-high-resolution 软件包解压后的目录结构

3. rknn-toolkit 模型转换

3.1 构建 rknn-toolkit 模型转换环境

要在 CSUN RV1126B 开发板上运行 ONNX 模型,需要先将其转换为 RKNN 模型。因此,需要预先构建 rknn-toolkit 模型转换工具环境。TensorFlow、TensorFlow Lite、Caffe、Darknet 等模型也可以按照类似流程进行转换,本教程以 ONNX 模型为例进行说明。

模型转换环境的构建步骤请参照《AI 模型转换环境构建指南》。

3.2 将 ONNX 模型转换为 RKNN 模型

本文档支持 .rknn 扩展名模型的评估与执行。TensorFlow、TensorFlow Lite、Caffe、Darknet、ONNX、PyTorch 等常见训练完成模型,可以使用提供的 RKNN-Toolkit2 转换为 RKNN 模型。使用其他框架训练的模型,也可以先转换为 ONNX 格式,再转换为 RKNN。

详细转换步骤请参照《RKNN 模型转换教程示例》。

3.2.1 解压模型转换文件

从《资料下载》中下载模型转换 Demo 并解压后,执行以下命令。

Terminal window
cd /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial/Ultra-high-resolution/03-model_convert
tar -xvf xlsr-python-2x.tar

图3-1 解压 xlsr-python-2x.tar 的命令

图3-1 解压 xlsr-python-2x.tar 的命令

3.2.2 进入模型转换工具 Docker 环境

使用以下命令将工作目录挂载到 Docker 镜像中。/data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial 作为工作目录,并映射到容器内的 /test。同时通过 /dev/bus/usb:/dev/bus/usb 将 USB 设备挂载到容器中。

Terminal window
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial:/test rknn-toolkit2:2.3.2-cp38 /bin/bash

图3-2 启动 RKNN-Toolkit2 Docker 环境的命令

图3-2 启动 RKNN-Toolkit2 Docker 环境的命令

3.2.3 生成量化图片列表

在 Docker 环境内进入模型转换工作目录。

Terminal window
cd /test/Ultra-high-resolution/03-model_convert/xlsr-python-2x

图3-3 进入 XLSR 模型转换工作目录

图3-3 进入 XLSR 模型转换工作目录

执行 gen_datas.py 生成量化图片列表。

Terminal window
python gen_datas.py

图3-4 执行量化图片列表生成脚本

图3-4 执行量化图片列表生成脚本

生成的量化图片列表会保存为 datas_360x640.txt

图3-5 确认生成的 datas_360x640.txt

图3-5 确认生成的 datas_360x640.txt

3.2.4 将 ONNX 模型转换为 RKNN 模型

onnx2rknn.py 脚本默认 do_quant = False,即不执行量化。需要 INT8 量化时,请改为 do_quant = True。主要设置包括输入分辨率、量化类型、目标平台、ONNX 输入模型、RKNN 输出路径以及量化数据列表。

from rknn.api import RKNN
if __name__ == '__main__':
h, w = 360, 640
do_quant = True
quant = "fp16"
if do_quant:
quant = "int8"
platform = "rv1126b"
model_path = r"weight/xlsr_2x_{}x{}.onnx".format(h, w)
output_path = r"weight/xlsr_2x_{}x{}-{}.rknn".format(h, w, quant)
data_set = r'datas_{}x{}.txt'.format(h, w)
# Create RKNN object
rknn = RKNN(verbose=False)
# Pre-process config
print('--> Config model')
rknn.config(mean_values=[[0, 0, 0]],
std_values=[[255, 255, 255]],
target_platform=platform,
optimization_level=3,
model_pruning=True,
compress_weight=True,
# sparse_infer=True,
output_optimize=True,
custom_string='output_format=nhwc',
)
print('done')
# Load model
print('--> Loading model')
ret = rknn.load_onnx(model=model_path, inputs=['image'], input_size_list=[[1, 3, h, w]])
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=do_quant, dataset=data_set)
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
# Export rknn model
print('--> Export rknn model')
ret = rknn.export_rknn(output_path)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')

执行以下命令进行模型转换。

Terminal window
python onnx2rknn.py

图3-6 ONNX 转 RKNN 模型转换执行结果

图3-6 ONNX 转 RKNN 模型转换执行结果

生成的模型会保存到 output_path,可在 RKNN 环境以及 CSUN RV1126B 开发板上运行。

图3-7 转换后生成的 RKNN 模型文件

图3-7 转换后生成的 RKNN 模型文件

4. XLSR 模型部署

4.1 模型部署说明

本节说明将 XLSR 模型部署到 CSUN RV1126B 开发板的步骤。本章使用的 xlsr_2x_360x640-int8.rknn 是由官方提供的 xlsr_2x_checkpoint_float32.pth.tar 转换得到的 2 倍放大模型。

4.2 准备工作

4.2.1 硬件准备

准备 RV1126B 开发板、Type-C 数据线、LAN 网线,并使用 MobaXterm 通过 SSH 登录 RV1126B 开发板。详细操作请参考入门指南。

使用 LAN 网线连接。

图4-1 RV1126B 开发板与 PC 的 LAN 连接结构

图4-1 RV1126B 开发板与 PC 的 LAN 连接结构

使用串口线(Type-C)连接。

图4-2 Type-C 串口连接结构

图4-2 Type-C 串口连接结构

4.2.2 开发环境准备

如果是首次阅读本文档,请参考《入门指南》,并按照其中步骤构建编译环境。

在 PC 侧 Ubuntu 系统中执行 run 脚本,进入 RV1126B 编译环境。

Terminal window
cd ~/develop_environment
./run.sh 2204

图4-3 启动 RV1126B Docker 开发环境

图4-3 启动 RV1126B Docker 开发环境

4.3 编译示例程序

将下载的软件包移动到 RV1126B Docker 开发环境后,执行以下命令解压。

Terminal window
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/Ultra-high-resolution/04-AI_deploy
tar -xvf SuperResolution.tar

下载并解压后的结构如下图所示。

图4-4 SuperResolution 源码解压后的目录结构

图4-4 SuperResolution 源码解压后的目录结构

本次直接在开发板上编译,因此先通过以下命令将解压后的源代码传输到开发板。

Terminal window
scp -r SuperResolution nano@192.168.10.85:/userdata

传输完成后,通过 SSH 连接 CSUN RV1126B 开发板,并执行以下命令编译。

Terminal window
ssh nano@192.168.10.85
cd /userdata/SuperResolution
mkdir build
cd build
cmake ..
make

图4-5 SuperResolution 示例程序编译结果

图4-5 SuperResolution 示例程序编译结果

如果编译时出现以下错误信息,需要安装 libopencv-dev

CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "OpenCV", but CMake did not find one.
Terminal window
sudo apt-get update
sudo apt-get install libopencv-dev

4.4 在开发板上运行 XLSR 模型

编译完成后,执行以下命令运行。

Terminal window
./SR-Demo ../model/xlsr_2x_360x640-int8.rknn ../image/SRC-360P.jpg

图4-6 使用 SR-Demo 运行 XLSR 模型的结果

图4-6 使用 SR-Demo 运行 XLSR 模型的结果

原始 720P 图片如下。

图4-7 原始 720P 图片

图4-7 原始 720P 图片

AI 超分辨率处理后的图片如下。

图4-8 AI 超分辨率处理后的图片

图4-8 AI 超分辨率处理后的图片