首页 > 解决方案 > 为什么 SNPE SDK 很慢?

问题描述

我在这里尝试了高通提供的示例:

https://github.com/globaledgesoft/deeplabv3-application-using-neural-processing-sdk

https://github.com/globaledgesoft/deeplabv3-application-using-neural-processing-sdk/blob/master/AndroidApplication/app/src/main/java/com/qdn/segmentation/tasks/SegmentImageTask.java

它说在 GPU16 上完成这段代码需要 31 毫秒:

// [31ms on GPU16, 50ms on GPU] execute the inference

            outputs = mNeuralnetwork.execute(mInputTensorsMap);

对我来说,同样的例子需要 14 秒。我正在使用open-q 845 hdk 开发套件。

我问了我的教授,他说我正在安装的应用程序不受开发工具包固件的信任,这就是为什么我要花这么多时间来执行。他建议我将我的应用程序安装为系统应用程序来重建固件。还有什么其他原因?

标签: qualcommdeeplabsnpe

解决方案


是的,这很令人困惑,我遇到了同样的问题。我注意到的是,至少在我的设备(Snapdragon 835)上,ResizeBilinear_2 和 ArgMax 需要大量时间。如果禁用 CPU 回退,您将看到实际上不支持 ResizeBilinear_2,因为在 deeplab 实现中他们使用了 align_corner=true。

如果您选择 ResizeBilinear_1 作为输出层,则推理时间将得到显着改善,而您无需自己实现双线性调整大小层和 argmax。

但即便如此,使用 gpu 我也只能达到大约 200 毫秒的运行时间。使用 DSP,我确实设法获得了大约 100 毫秒。

还要确保您的工具包中包含 opencl 支持,否则 gpu 运行时将无法正常工作。

旁注:我目前仍在使用 deeplab + snpe 测试东西。我注意到比较这个和 TFLITE gpu 委托的输出有一些差异。虽然 SNPE 通常快两倍,但存在许多分割伪影错误,这可能导致模型无法使用。看看这个https://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-neural-processing-engine-sdk/34844

到目前为止,我发现如果将输出步幅降低到 16,不仅推理速度会提高一倍,而且所述伪影似乎不太明显。当然,这样做会失去一些准确性。祝你好运!


推荐阅读