为什么NNAPI更慢了
同样跑yolov5s,官方程序可以跑到30ms以下。你这个GPU跑100多。NNAPI跑300多。 但是没有拿到官方到源码
- 训练代码都是官方v5转出来的格式,测试环境不同,使用的处理器不一样,得到的时延也就不一样
- 数据预处理大概占了一半的时间,从打开摄像头,到对每一帧画面做旋转缩放需要耗时40-50ms
- 实测NNAPI确实会比GPU代理慢一点,这一点可能跟NNAPI的算子或者是tflite对GPU的专门优化使用有关
3. 实测NNAPI确实会比GPU代理慢一点,这一点可能跟NNAPI的算子或者是tflite对GPU的专门优化
谢谢回复。 1.无是使用的同一台设备测试,所以环境相同。无是很好奇官方是怎么做大那么快到。 2.无也在想你的时间统计应该不只是推理时间。无看看能不能找到位置把图像处理时间、推理时间和后处理时间区分出来。而且这三个时间实际是可以异步并行处理到,就会快很多,图像可能会出现一两帧到延迟。 3.是否存在yolov5有nnapi不支持到算子情况。理论上应该NNAPI更快。无测试TensorFlow官方到模型都是NNAPI效率最高。
- tf官方使用的模型是ssd, 精度和大小都相比v5会低和小,所以会在推理上快很多
- 不可否认,tf案例中使用的是Android camera2的相关API,相比于本项目上使用的cameraX api会少了更多封装,后续本项目会参考tf案例中的方法做相应尝试。
- v5和nnapi的转化上,还没去仔细看nnapi支持的算子在v5上的影响,但是可以肯定的是,tf官方案例中nnapi的例子转换的那些模型都是比较旧和算子比较常见的。
我说到官方模型是https://play.google.com/store/apps/details?id=com.ultralytics.ultralytics_app。是yolov5给出到一个yolov5s在安卓上到app。在无这台设备上可以跑到30ms。但是他们没有开源代码。所以不知道如何实现到
看了一下确实是29ms,快很多,有空去翻翻v5的issue和wiki看看有没有想过资料。
看了一下确实是29ms,快很多,有空去翻翻v5的issue和wiki看看有没有想过资料。
这两天都翻遍吧。把所有第三方实现到都跑了一遍没有能达到这个效果到。官方到偏偏不公布代码。正在联系他们看看能不能拿到。
您好,我用NNAPI确实更快了,但没显示检测框是为什么? @yyccR ,麻烦解答一下,谢谢~
有什么错误信息吗,Android-studio logcat里面的日志输出 @visonpon
@yyccR logcat里边确实出现了错误,如下:
E ANeuralNetworksModel_setOperandValue setting operand 117 which has operand type that is not fully specified
2024-03-08 10:31:56.749 7209-7209 ModelBuilder com.example.yolov5tfliteandroid
E ANeuralNetworksModel_setOperandValue setting operand 119 which has operand type that is not fully specified
2024-03-08 10:31:56.750 7209-7209 ModelBuilder com.example.yolov5tfliteandroid
E ANeuralNetworksModel_setOperandValue setting operand 126 which has operand type that is not fully specified
2024-03-08 10:31:56.750 7209-7209 ModelBuilder com.example.yolov5tfliteandroid
E ANeuralNetworksModel_setOperandValue setting operand 130 which has operand type that is not fully specified
2024-03-08 10:31:56.765 7209-7209 ModelBuilder com.example.yolov5tfliteandroid
E Graph contains at least one cycle or one never-written operand
2024-03-08 10:31:56.770 7209-7209 image com.example.yolov5tfliteandroid
E load model error: Internal error: Failed to apply delegate: NN API returned error ANEURALNETWORKS_BAD_DATA at line 1944 while setting new operand value for tensor 'model_1/tf_detect_1/mul_1/y'.
NN API returned error ANEURALNETWORKS_BAD_DATA at line 1944 while setting new operand value for tensor 'model_1/tf_detect_1/sub/y'.
NN API returned error ANEURALNETWORKS_BAD_DATA at line 1944 while setting new operand value for tensor 'model_1/tf_detect_1/strided_slice_14'.
NN API returned error ANEURALNETWORKS_BAD_DATA at line 19java.lang.IllegalArgumentException: Internal error: Failed to apply delegate: NN API returned error ANEURALNETWORKS_BAD_DATA at line 1944 while setting new operand value for tensor 'model_1/tf_detect_1/mul_1/y'.
NN API returned error ANEURALNETWORKS_BAD_DATA at line 1944 while setting new operand value for tensor 'model_1/tf_detect_1/sub/y'.
NN API returned error ANEURALNETWORKS_BAD_DATA at line 1944 while setting new operand value for tensor 'model_1/tf_detect_1/strided_slice_14'.
NN API returned error ANEURALNETWORKS_BAD_DATA at line 19
看报错信息是模型不支持 NNAPI 相关算子,请问你的模型是哪个版本的tflite导出的?