コンテンツにスキップ

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() を追加しています。また、ラプラシアンカーネルは調整可能です。さらに、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 モデル変換環境の構築

ONNX モデルを CSUN RV1126B 基板で実行するには、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 超解像処理後の画像