Android NNAPI 即将在 Android Q 迎来大更新( 三 )

新增的 operations 包括 GREATER、LOGICAL_AND、MINIMUM、REDUCE_ANY、SELECT 这些通用操作 , 还包括为检测网络准备的 BOX_WITH_NMS_LIMIT、ROI_ALIGN、ROI_POOLING 和 GENERATE_PROPOSALS , 为 keypoint 准备的 HEATMAP_MAX_KEYPOINT , shufflenet 必需的 CHANNEL_SHUFFLE、GROUP_CONV 等等 。

因此在 Android Q 里 , NNAPI 的表达能力将会获得极大的提升 , 原先 NNAPI 只能支持普通的分类网络和部分分割网络 , 加入这许多的新 operations 之后 , Faster R-CNN、Mask R-CNN、ShuffleNet 这些网络都可以支持了 。

更好的 NPU 支持

NPU 越来越火热 , Kirin 970、Snapdragon 855 等等芯片都集成了 NPU 或类似的加速芯片 。 NNAPI 从推出时就宣称可以在 CPU、GPU、DSP 上运行 , 但开发者却无法查看和指定模型运行在什么设备上 。 我在 Google Pixel 2 上测试时 , 发现尽管 Pixel 2 有类似于 NPU 的 Vision Core , 但实际上仍只有 CPU 可以被使用 。

NNAPI 1.2 在这一点上有重大的更新 , 它新增了一个 ANeuralNetworksDevice 类 , 表示每个支持 NNAPI 的设备 , 并分为 UNKNOWN、OTHER、CPU、GPU、ACCELERATOR 几类 , 还有 getSupportedOperationsForDevices、getVersion、getFeatureLevel 等等细粒度的接口 。 开发者可以判断设备是否支持给定的模型 , 也可以指定模型在哪几个设备上运行 。 这对融合日渐火热的 NPU 生态非常重要 。

推荐阅读