本教程演示如何使用 QAI AppBuilder 运行分类模型。在运行本教程之前,请参阅以下要求:

确保 Qualcomm® AI Runtime SDK 中的依赖库已准备就绪。要检查这一点,您可以查看 sample/qai_libs 中是否有文件。您可以从
QAI AppBuilder快速上手(4):用户指南
获取有关如何手动准备这些库的更多信息。

安装 Python 依赖扩展:

运行以下命令以安装 Python 依赖项。

! pip install matplotlib matplotlib-inline
! pip install notebook jupyter-client ipykernel

下载 imagenet_classes.txt

  1. 使用以下代码下载“imagenet_classes.txt”文件
import os
import sys
sys.path.append("../samples/python")
import utils.install as install

IMAGENET_CLASSES_URL = "https://raw.githubusercontent.com/pytorch/hub/refs/heads/master/imagenet_classes.txt"
IMAGENET_CLASSES_FILE = "imagenet_classes.txt"
MODEL_NAME = "inception_v3"

workspace = os.getcwd()
model_dir = os.path.abspath(os.path.join(workspace, "inception_v3", "models"))  # The model directory is under docs/inception_v3/models
model_path = os.path.join(model_dir, f"{MODEL_NAME}.bin")
imagenet_classes_path = os.path.join(model_dir, IMAGENET_CLASSES_FILE)

if not os.path.exists(imagenet_classes_path):
    if not install.download_url_pywget(IMAGENET_CLASSES_URL, imagenet_classes_path):
        print("Error while downloading imagenet classes label text.")
  1. 下载模型文件
  • 在本教程中,我们使用预训练的 InceptionV3 模型。我们可以直接从 Qualcomm下载 QNN 模型。打开 inception_v3 页面并单击“下载模型”按钮,然后选择以下模型下载选项:

  • 选择运行时:Qualcomm® AI Engine Direct。

  • 选择精度:浮点和 w8a8 都是可以接受的。

  • 选择设备:Snapdragon® X Elite。

  • 将下载的模型保存到路径:docs\inception_v3\models\inception_v3.dlc

  • 将 inception_v3.dlc 转换为 inception_v3.bin。

  1. 设置 QNN 环境

Python 环境设置后,您应该在路径下找到 Qualcomm® AI Runtime SDK 的动态库文件:“samples/qnn_libs”。

然后,您可以配置 AppBuilder 并加载预训练模型,如下所示。



from qai_appbuilder import (QNNContext, Runtime, LogLevel, ProfilingLevel, PerfProfile, QNNConfig)

qnn_dir = os.path.abspath(os.path.join(workspace, "../samples/qai_libs"))

QNNConfig.Config(qnn_lib_path=qnn_dir, runtime=Runtime.HTP, log_level=LogLevel.WARN, profiling_level=ProfilingLevel.BASIC)

model = QNNContext("inceptionV3", model_path)


初始化 SDK 的配置

  • qnn_lib_path=qnn_dir:用于设置 SDK 库路径
  • runtime=Runtime.HTP:用于设置在 Qualcomm 硬件上执行模型的运行时。(Runtime.HTP 或 Runtime.CPU)
  • log_level=LogLevel.WARN:用于将日志记录级别设置为 WARN
  • profiling_level=ProfilingLevel.BASIC :用于设置 QNN HTP 分析。具体请参考 QNN SDK 文档

预推理过程

加载输入图像并进行预处理



from matplotlib import pyplot as plt
from PIL import Image
import torch
from torchvision import transforms
import numpy as np

IMAGE_SIZE = 224

image = Image.open(os.path.join("../samples/python/inception_v3/input.jpg"))
plt.imshow(image)

preprocessor = transforms.Compose(
    [
        transforms.Resize(IMAGE_SIZE),
        transforms.CenterCrop(IMAGE_SIZE),
        transforms.ToTensor(),
    ]
)
img = preprocessor(image)
img = img.unsqueeze(0).numpy() # Add batch dimension
img = np.transpose(img, (0, 2, 3, 1)) # Convert to NHWC format


运行推理

要对预处理的图像运行推理,请设置性能配置文件,执行模型,并获取如下输出:

  • 设置性能配置文件: 将 SDK 配置为使用 BURST 配置文件以获得最佳推理速度
  • 运行推理: 将预处理后的图像传递给模型的推理方法
  • 重置性能配置文件: 将性能配置文件恢复到以前的状态

输出将包含模型的预测,可以进一步处理这些预测以获得类概率和顶级预测。



# Set the performance profile to BURST
PerfProfile.SetPerfProfileGlobal(PerfProfile.BURST)

# Run inference
output = model.Inference([[img]])[0]

PerfProfile.RelPerfProfileGlobal()


后处理和解码 Top-K 预测

运行推理后,模型输出原始分数(logits)。要解释这些结果,请执行以下作:

  • 应用 Softmax: 使用 softmax 函数将 logits 转换为概率
  • Top-K 选择: 确定前 K 个概率的指数(例如,前 5 个)
  • 类解码: 使用 ImageNet 类标签将这些索引映射到人类可读的类名

通过此过程,您可以显示输入图像最有可能的预测类及其关联概率。



output = torch.from_numpy(output)
probabilities = torch.softmax(output, dim=0)
top5_probabilities, top5_indices = torch.topk(probabilities, 5)

# Read the ImageNet classes
with open(imagenet_classes_path, "r") as f:
    imagenet_classes = [line.strip() for line in f.readlines()]

# Print the top 5 predictions
for i in range(5):
    class_id = top5_indices[i]
    class_name = imagenet_classes[class_id]
    probability = top5_probabilities[i].item()
    print(f"Prediction {i + 1}: {class_name} ({probability:.4f})")




Prediction 1: Samoyed (0.9999)
Prediction 2: Arctic fox (0.0001)
Prediction 3: white wolf (0.0000)
Prediction 4: Eskimo dog (0.0000)
Prediction 5: Pomeranian (0.0000)


释放资源

del(model)
model = None

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐