【个人开源】——从零开始在高通手机上部署sd(二)

代码:https://github.com/chenjun2hao/qualcomm.ai


推理耗时统计

单位/ms

硬件 qnncpu_clip qnncpu_unet qnncpu_vae htp_clip htp_unet htp_vae
骁龙8 gen1+ 24716.994 133440.397 23.215 411.097 696.327

1. 下载依赖

  • 下载opencv_x64.tar,提取码: rrbp
  • 下载opencv_aarch64.tar, 提取码: xj8w
    修改CMakeLists.txtOPENCV_X64_PATHOPENCV_AARCH64_PATH的路径
  • 安装高通QNN,并声明QNN_SDK_ROOT环境变量
  • 下载android_ndk, 我使用的版本android-ndk-r26c

2. 编译

1.linux

bash 复制代码
mkdir build_x64 && cd build_x64
cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j8

2.android

bash 复制代码
mkdir build_android && cd build_android
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \
	-DANDROID_ABI="arm64-v8a" \
	-DANDROID_NDK=$ANDROID_NDK_ROOT \
	-DANDROID_PLATFORM=android-28 \
	-DPLATFORM_X64=OFF \
	..
make -j8

3. x64 cpu执行浮点模型

  1. 转换浮点模型

    参考qualcomm.sd, readme导出浮点模型

  2. 执行

bash 复制代码
export FLOAT_MODEL_PATH=/data1/chenjun/2_qualcomm_ai/sd2.1			# 修改成自己导出模型的路径
./build_x64/example/sd2.1/sd_15.out \
 ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnCpu.so \
 ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnHtp.so \
 ${FLOAT_MODEL_PATH}/qnn_models/text_encoder_float/x86_64-linux-clang/libtext_encoder.so \
 ${FLOAT_MODEL_PATH}/qnn_models/unet_float/x86_64-linux-clang/libunet.so \
 ${FLOAT_MODEL_PATH}/qnn_models/vae_decoder_float/x86_64-linux-clang/libvae_decoder.so \
 10

可视化output/sd21_portrait.jpg(种子未固定,结果具有随机性):

4. 高通HTP执行量化模型

  1. 转换浮点模型

    参考qualcomm.sd, readme导出量化模型

  2. 执行

    参考高通的例子我自己的adb操作,将所有的依赖push到手机再跑模型

bash 复制代码
export LD_LIBRARY_PATH=$PWD
# 跑sd
./sd_15_htp.out ./libQnnCpu.so ./libQnnHtp.so ./model_quant/libtext_encoder.so ./model_float/libunet.so ./model_float/libvae_decoder.so 10

结果保存在output/sd21_portrait_quant.jpg, 再adb pull下来看

其他

  1. qnn输入输出dataformat都是NHWC
  2. qnn 2.14.0.230828 cpu不支持量化的模型推理,需要用htp的后端
  3. qnn 2.26.0.240827 cpu也不支持量化模型的推理,composeGraphs的时候报错
相关推荐
解压专家6661 天前
KRed阅读器用二维码重塑电子书分享体验
智能手机
wanhengidc2 天前
云手机性能如何?
运维·服务器·科技·智能手机·云计算
尊治2 天前
介绍一款手机电工仿真软件
智能手机·esim电工仿真·电工仿真软件·电工仿真·plc仿真
wanhengidc2 天前
云手机中的数据通常存储在哪里?
运维·服务器·安全·web安全·智能手机
wanhengidc2 天前
云手机中分布式存储的功能
运维·服务器·分布式·游戏·智能手机·云计算
扬道财经2 天前
2025年切膜机厂家推荐:手机切膜机,智能切膜机,自动切膜机,手机门店切膜机,源头工厂切膜机公司推荐
智能手机
wanhengidc2 天前
深度了解云手机是什么
运维·服务器·科技·智能手机·云计算
BigPomme3 天前
flutter share plus 华为/荣耀手机分享时异常
智能手机
2501_909996304 天前
软件测评:3大手机待办事项提醒app
智能手机
远程软件小帮手4 天前
UU远程上线mac被控!如何远程控制 macOS 设备办公?
游戏·macos·智能手机·电脑