AI 超分辨率算法使用指南
株式会社日昇テクノロジー
http://www.dragonwake.com
info@dragonwake.com
创建日期:2026/06/20
本教程说明 XLSR 超分辨率模型的 ONNX/RKNN 转换以及在 CSUN RV1126B 开发板上的部署流程。
copyright@2026 株式会社日昇テクノロジー
修改履历
| NO | 版本 | 修改内容 | 修改日期 |
|---|---|---|---|
| 1 | Ver1.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, 640scaling_factor = 2 # 2 or 4weight = 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, wexample_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. 资料下载
本手册所需资料及源代码请从以下链接下载。
- 训练源代码 GitHub:https://github.com/csunltd/rv1126b-yolov5
- 其他源代码:AIDemo_uhr_All.zip
解压后的目录结构如下。
|-- 03-model_convert AI 模型转换用源代码|-- 04-AI_deploy AI 模型部署用源代码
图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 并解压后,执行以下命令。
cd /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial/Ultra-high-resolution/03-model_converttar -xvf 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 设备挂载到容器中。
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.3 生成量化图片列表
在 Docker 环境内进入模型转换工作目录。
cd /test/Ultra-high-resolution/03-model_convert/xlsr-python-2x
图3-3 进入 XLSR 模型转换工作目录
执行 gen_datas.py 生成量化图片列表。
python gen_datas.py
图3-4 执行量化图片列表生成脚本
生成的量化图片列表会保存为 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')执行以下命令进行模型转换。
python onnx2rknn.py
图3-6 ONNX 转 RKNN 模型转换执行结果
生成的模型会保存到 output_path,可在 RKNN 环境以及 CSUN RV1126B 开发板上运行。

图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 连接结构
使用串口线(Type-C)连接。

图4-2 Type-C 串口连接结构
4.2.2 开发环境准备
如果是首次阅读本文档,请参考《入门指南》,并按照其中步骤构建编译环境。
在 PC 侧 Ubuntu 系统中执行 run 脚本,进入 RV1126B 编译环境。
cd ~/develop_environment./run.sh 2204
图4-3 启动 RV1126B Docker 开发环境
4.3 编译示例程序
将下载的软件包移动到 RV1126B Docker 开发环境后,执行以下命令解压。
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/Ultra-high-resolution/04-AI_deploytar -xvf SuperResolution.tar下载并解压后的结构如下图所示。

图4-4 SuperResolution 源码解压后的目录结构
本次直接在开发板上编译,因此先通过以下命令将解压后的源代码传输到开发板。
scp -r SuperResolution nano@192.168.10.85:/userdata传输完成后,通过 SSH 连接 CSUN RV1126B 开发板,并执行以下命令编译。
ssh nano@192.168.10.85
cd /userdata/SuperResolutionmkdir buildcd buildcmake ..make
图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.sudo apt-get updatesudo apt-get install libopencv-dev4.4 在开发板上运行 XLSR 模型
编译完成后,执行以下命令运行。
./SR-Demo ../model/xlsr_2x_360x640-int8.rknn ../image/SRC-360P.jpg
图4-6 使用 SR-Demo 运行 XLSR 模型的结果
原始 720P 图片如下。

图4-7 原始 720P 图片
AI 超分辨率处理后的图片如下。

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