为什么 SNPE SDK 很慢?

Why SNPE SDK is very Slow?

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

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 开发工具包。

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

是的,这很令人困惑,我运行同样的问题。我注意到,至少在我的设备上 (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,不仅推理速度会提高一倍,而且伪影似乎也不太明显。当然,这样做会损失一些准确性。祝你好运!