QAI AppBuilder介绍系列(2):图像超分应用实例
Real-ESRGAN-x4plus 是一种图像超分辨率模型,旨在将低分辨率图像放大四倍,同时保持高质量和细节。该模型基于 ESRGAN 架构,通过生成对抗网络(GAN)技术,有效去除图像噪声并恢复细微细节,使得放大的图像更加清晰和自然。Real-ESRGAN-x4plus 特别适用于老照片修复、图像增强、高分辨率图像生成等应用场景,并且经过优化,可以在 Qualcomm设备上高效运行,充分利用硬件加速器(如 CPU、GPU 和 HTP)。
原始模型下载后大多数情况下不能直接使用,因此需要QNN SDK中的库及工具将其转换方可使用。本文主要介绍 Real-ESRGAN-x4plus模型的快捷使用方法,Webui使用方式以及模型转换等多种使用方法。
前置条件
- 高通 Windows on Snapdragon
- Linux设备或VMware ubuntu虚拟机
- 各平台账号,包括:Github、高通 Software Center
操作方法及步骤
1. 快捷使用Real-ESRGAN-x4plus
- 执行前准备
确保在设备中已经搭建好对应的Python及QNN环境,具体方法请参考:AI-Engine-Direct-Helper 快速上手及环境配置
- 打开powershell终端,在Python虚拟环境中执行以下命令:
python real_esrgan_x4plus\real_esrgan_x4plus.py
- 运行结果
2. Webui方式
- 同样确保在设备中已经配置好对应的Python及QNN环境
- 打开powershell终端,在Python虚拟环境中执行以下命令,安装gradio包:
pip install gradio
- 进入到ai-engine-direct-helper\samples\webui目录下:
cd ai-engine-direct-helper\samples\webui
- 运行以下命令来启动web应用程序:
python ImageRepairApp.py
- 选择图片进行修复
选择需要修复的图片,点击修复图片按钮后,可以拖动滑块来查看修复前后的对比效果;
点击保存图片可以将修复好的图片保存到本地。
3. 原始模型的转换和使用
-
模型下载
模型下载链接:https://huggingface.co/qualcomm/Real-ESRGAN-x4plus
-
QNN模型转换
1)环境准备
打开linux 终端:
Python
配置好环境变量、虚拟环境以及所需要的依赖库,本文linux中使用的是python 3.10
QNN SDK
安装并配置QNN环境
按照QNN SDK对应版本的说明文档进行配置,本文以2.28.0版本为例:
/opt/qcom/aistack/qairt/2.28.0.241029/docs/QNN/index.html,具体地址以个人配置为准
2)模型尺寸修改
本文使用的是onnx格式的模型,因此在配置QNN环境时需要安装好onnx库及其依赖项。
由于量化的 real_esrgan_x4plus QNN 模型的输入分辨率为 128x128,输入分辨率太小,因此我们需要将模型尺寸修改成512x512。打开linux 终端,可以通过以下代码实现:
import onnx
from onnx import helper
from onnxsim import simplify
# 加载模型
model = onnx.load("real_esrgan_x4plus.onnx")
# 修改输入尺寸为动态尺寸
input_tensor = model.graph.input[0]
input_tensor.type.tensor_type.shape.dim[2].dim_param = 'height'
input_tensor.type.tensor_type.shape.dim[3].dim_param = 'width'
# 保存修改后的模型
onnx.save(model, "real_esrgan_x4plus.onnx")
# 简化模型并指定新的输入尺寸
model_simp, check = simplify(model, overwrite_input_shapes={'image': [1, 3, 512, 512]})
# 检查简化是否成功
assert check, "Simplified ONNX model could not be validated"
# 保存简化后的模型
onnx.save(model_simp, "real_esrgan_x4plus.onnx")
3)转换模型(onnx -> qnn)
使用qnn-onnx-converter工具可以将onnx格式的模型转换成qnn格式,得到real_esrgan_x4plus.bin、real_esrgan_x4plus.cpp、real_esrgan_x4plus_net.json三个文件,打开linux 终端,执行命令如下:
qnn-onnx-converter --input_network real_esrgan_x4plus.onnx --output_path real_esrgan_x4plus.cpp
4)编译模型
打开WOS设备,将上面生成的三个文件拷贝到WOS设备中,并同样配置好python及QNN环境(详细步骤请参考AI-Engine-Direct-Helper 快速上手及环境配置)。本文使用的是ARM64架构的WOS设备,因此在使用QNN工具时均选择ARM64工具包。在准备好的QNN目录中找到:
“C:\Qualcomm\AIStack\QAIRT\2.28.0.241029\lib\aarch64-windows-msvc”
“C:\Qualcomm\AIStack\QAIRT\2.28.0.241029\lib\hexagon-v73\unsigned”
“C:\Qualcomm\AIStack\QAIRT\2.28.0.241029\bin\aarch64-windows-msvc”
将三个目录下的所有文件和real_esrgan_x4plus.bin、real_esrgan_x4plus.cpp、real_esrgan_x4plus_net.json三个文件放在同一目录下。打开powershell终端,并执行以下命令对模型进行编译:
python qnn-model-lib-generator -c real_esrgan_x4plus.cpp -b real_esrgan_x4plus.bin -o ".\out_modle_for_test" -t windows-aarch64
5) 生成 QNN上下文二进制文件
得到生成的dll文件后,执行以下命令将模型转换成上下文二进制文件:
./qnn-context-binary-generator.exe --model real_esrgan_x4plus.dll --backend QnnHtp.dll --binary_file real_esrgan_x4plus
