高通AI Hub Android ImageClassification程式介绍

上一篇博文“Qualcomm AI Hub介绍”。高通AI Hub为开发者提供了一个强大的平台,以优化、验证和部署在Android设备上的机器学习模型。这篇文章将介绍如何使用高通AI Hub进行图像分类的程式码开发,并提供一个实际的例子来展示其在Android平台上的应用。

程式码介绍

高通AI Hub支持多种机器学习框架,如TensorFlow Lite、Quancomm AI Engine Direct和ONNX Runtime,并能够将训练好的模型转换为优化的on-device执行格式。开发者可以通过AI Hub的模型库,选择适合自己应用需求的模型,并进行相应的优化。此外,AI Hub还提供了详细的on-device性能分析工具,帮助开发者了解模型在实际设备上的运行情况。

于官方提供的Github ai-hub-apps进行下载,使用Android Studio开启app/android,就可以看到ImageClassification、SemanticSegmentation及SuperResolution,本篇博文介绍ImageClassification程式码的部分及执行,使用Android Studio开启专案画面如下图:
 

高通AI Hub Android ImageClassification程式介绍

ImageProcessing.java

    里面有一个静态方法 resizeAndPadMaintainAspectRatio,其功能是调整图片大小,同时维持图片的宽高比(Aspect Ratio)。如果图片无法完全符合给定的输出尺寸,则会加入填充区域(padding),使得最终输出的图片符合要求的宽度和高度。
 

TFLiteHelpers.java

    TensorFlow Lite (TFLite) 的辅助工具,用于为 TensorFlow Lite 模型建立解译器(interpreter)和相应的硬体加速委派(delegate),例如 GPU 或 NPU。主要功能是根据指定的硬体加速选项,自动尝试为 TFLite 模型分配不同的硬体委派来优化推论性能。

  1. CreateInterpreterAndDelegatesFromOptions

            用于根据指定的优先级顺序,创建 TFLite 解译器并分配硬体加速委派。它会根据委派的优先顺序来尝试分配不同的委派类型,如 GPU 或 NPU,并在无法使用时降级至 CPU 运算(例如使用 XNNPack 提供的 CPU 加速)。

  1. CreateInterpreterFromDelegates

           此函式实际上是根据之前创建的委派来生成解译器。主要负责配置 TFLite 解译器的参数,例如 CPU 线程数和是否使用 XNNPack 作为后备计算选项。若解译器创建失败,则会记录失败原因并返回 null。

  1. CreateDelegate

            此函式根据指定的委派类型(如 GPUv2 或 QNN_NPU)创建对应的硬体委派。每一个委派都有对应的函式进行初始化,例如 CreateGPUv2Delegate 或 CreateQNN_NPUDelegate。

  1. CreateGPUv2Delegate

            这个函式负责创建和配置 GPUv2 委派,它会将 GPU 设定为最大性能模式,允许使用浮点精度 FP16 进行计算,来提升 GPU 运行效率。

  1. CreateQNN_NPUDelegate

            此函式负责为支援 Qualcomm NPU 的装置创建 QNN 委派,根据装置支援的硬体类型来选择使用 DSP 或 HTP 来加速推论计算。

ImageClassification.java

    基于 TensorFlow Lite 的影像分类器,用来从给定的影像中推测出最有可能的物件类别。主要的功能包括模型的加载、预处理影像、推论以及后处理推论结果,并且能够返回处理时间等性能资讯。

  1. ImageClassification

        功能:从指定的模型和标签路径中创建影像分类器。

        参数:
            context:应用程式的上下文。
            modelPath:模型文件的路径。
            labelsPath:标签文件的路径。
            delegatePriorityOrder:指定计算单元优先顺序(例如 GPU、CPU 等)。 

  1. preprocess

        功能:将输入的影像预处理为模型可以接受的格式。

        步骤:
            检查影像尺寸是否符合模型的输入要求,必要时进行缩放。
            根据模型的数据类型(如 FLOAT32 或 UINT8)转换影像数据。

  1. postprocess

       功能:将模型输出的结果转换为可读取的标签(类别)。

        步骤:
            读取模型的输出。
            根据预测值选出信心最高的几个结果(TOP-K),并转换为对应的标签名称。

  1. predictClassesFromImage()

        功能:对给定的影像进行分类,返回最有可能的类别。

        步骤:


            进行预处理(preprocess)。
            使用解释器进行推论。
            后处理输出结果(postprocess)。
            返回分类结果。

  1. findTopKFloatIndices() 和 findTopKByteIndices()

        功能:从模型输出的数据中找出信心最高的 K 个结果,分别处理 float 和 byte 类型的输出。

        实现:使用优先伫列(PriorityQueue)来追踪最大值,并返回这些最大值对应的索引。

MainActivity.java

使用 TensorFlow Lite 来进行影像分类。它主要负责初始化 UI 元件、管理影像选择与处理、并进行模型推论。如果执行时发生图像读取错误问题,需要在loadImageFromStringAsync函式做调整:

// try (InputStream inputImage = getAssets().open("images/" + imagePath))
try (InputStream inputImage = getAssets().open( imagePath))

►模型及App执行

TFLite模型:

模型部分可以依据AI Hub提供的Image Classification选项的TFLite模型,下载自己所需的模型,并放置于ImageClassification/src/main/assets档案夹底下,修改Android Studio内的 gradle.properties,修改:classification_tfLiteModelAsset=xxxxxxx.tflite

程式运作:

高通AI Hub提供的Android程式码,除了在高通提供相关芯片的开发板上执行,也可以在拥有高通芯片的手机上执行,实机测试是使用小米11手机。

执行结果如下方Gif动画,App最下方Image透过下拉式选单选择内建的三张图片或相簿图片,所泽完成后上方会出现选择的图片,按下RUN MODEL按钮即可开始推论,当然也可以选择CPU Only体验一下没有硬体加速的推论时间,而All Hardware则会使用QNN_NPU + GPUv2 + XNNPack等硬体加速。

小结

本篇博文就到这里,通过高通AI Hub Android开发者可以更轻松地将先进的AI模型集成到他们的应用中。高通AI Hub的文档和模型库提供了丰富的资源,帮助开发者探索和实现AI领域的应用。希望这篇博文对你有所帮助,谢谢你的阅读!

参考

ai-hub-apps

AI Hub Image Classification 

►Q&A

问:如何获取高通AI Hub Model的ImageClassification模型?
答:您可以访问高通AI Hub的GitHub页面或官方网站,这里提供了模型的开源代码和安装指南。

问:部署模型时需要注意哪些性能和精度问题?
答:在部署模型时,您需要考虑模型的延迟、记忆体使用等性能指标,以及模型在特定设备上的精度。高通AI Hub提供了性能指标和优化指南,帮助您选择最适合您需求的模型。

问:如果在部署过程中遇到问题,该如何解决?
答:如果在模型部署过程中遇到性能、精度或其他问题,您可以通过高通AI Hub的支持Slack 提交问题。此外,您也可以参考官方文档中的疑难解答部分。

问:高通AI Hub Model可以在哪些设备上运行?
答:高通AI Hub Model支持在多种设备上运行,包括但不限于Snapdragon 845, Snapdragon 855/855+, Snapdragon 865/865+, Snapdragon 888/888+等多款芯片组的设备。

问:高通AI Hub Model支持哪些计算单元和精度?
答:高通AI Hub Model支持CPU、GPU、NPU(包括Hexagon DSP、HTP)等计算单元,并支持FP16的浮点数和INT8、INT4的整数精度。这些特性使得模型能够在不同的硬件上实现高效运行。

阅读原文,登录大大通!获取更多精彩技术内容吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值