我在这里尝试了高通提供的示例:
https://github.com/globaledgesoft/deeplabv3-application-using-neural-processing-sdk
它说要在GPU16上花费31毫秒才能完成这段代码:
// [31ms on GPU16, 50ms on GPU] execute the inference
outputs = mNeuralnetwork.execute(mInputTensorsMap);
对我来说,相同的示例需要14秒钟。我正在使用 open-q 845 hdk开发套件。
我问我的教授,他说开发套件固件不信任我正在安装的应用程序,这就是为什么我需要花费大量时间来执行。他建议我使用安装为系统应用程序的应用程序重建固件。还有什么其他原因?
答案 0 :(得分:1)
是的,这非常令人困惑,我遇到了同样的问题。我注意到的是,至少在我的设备上(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,不仅获得的推理速度将提高一倍,而且工件看起来也不太明显。当然,这样做会失去一些准确性。祝你好运!