yyccR / yolov5-tflite-android

Depoly yolov5.tflite in android.
MIT License
140 stars 37 forks source link

为什么NNAPI更慢了 #2

Open kingmacth opened 2 years ago

kingmacth commented 2 years ago

同样跑yolov5s,官方程序可以跑到30ms以下。你这个GPU跑100多。NNAPI跑300多。 但是没有拿到官方到源码

yyccR commented 2 years ago
  1. 训练代码都是官方v5转出来的格式,测试环境不同,使用的处理器不一样,得到的时延也就不一样
  2. 数据预处理大概占了一半的时间,从打开摄像头,到对每一帧画面做旋转缩放需要耗时40-50ms
  3. 实测NNAPI确实会比GPU代理慢一点,这一点可能跟NNAPI的算子或者是tflite对GPU的专门优化使用有关
kingmacth commented 2 years ago

3. 实测NNAPI确实会比GPU代理慢一点,这一点可能跟NNAPI的算子或者是tflite对GPU的专门优化

谢谢回复。 1.无是使用的同一台设备测试,所以环境相同。无是很好奇官方是怎么做大那么快到。 2.无也在想你的时间统计应该不只是推理时间。无看看能不能找到位置把图像处理时间、推理时间和后处理时间区分出来。而且这三个时间实际是可以异步并行处理到,就会快很多,图像可能会出现一两帧到延迟。 3.是否存在yolov5有nnapi不支持到算子情况。理论上应该NNAPI更快。无测试TensorFlow官方到模型都是NNAPI效率最高。

yyccR commented 2 years ago
  1. tf官方使用的模型是ssd, 精度和大小都相比v5会低和小,所以会在推理上快很多
  2. 不可否认,tf案例中使用的是Android camera2的相关API,相比于本项目上使用的cameraX api会少了更多封装,后续本项目会参考tf案例中的方法做相应尝试。
  3. v5和nnapi的转化上,还没去仔细看nnapi支持的算子在v5上的影响,但是可以肯定的是,tf官方案例中nnapi的例子转换的那些模型都是比较旧和算子比较常见的。
kingmacth commented 2 years ago

我说到官方模型是https://play.google.com/store/apps/details?id=com.ultralytics.ultralytics_app。是yolov5给出到一个yolov5s在安卓上到app。在无这台设备上可以跑到30ms。但是他们没有开源代码。所以不知道如何实现到

yyccR commented 2 years ago

看了一下确实是29ms,快很多,有空去翻翻v5的issue和wiki看看有没有想过资料。

kingmacth commented 2 years ago

看了一下确实是29ms,快很多,有空去翻翻v5的issue和wiki看看有没有想过资料。

这两天都翻遍吧。把所有第三方实现到都跑了一遍没有能达到这个效果到。官方到偏偏不公布代码。正在联系他们看看能不能拿到。

visonpon commented 6 months ago

您好,我用NNAPI确实更快了,但没显示检测框是为什么? @yyccR ,麻烦解答一下,谢谢~

yyccR commented 6 months ago

有什么错误信息吗,Android-studio logcat里面的日志输出 @visonpon

visonpon commented 6 months ago

@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

yyccR commented 6 months ago

看报错信息是模型不支持 NNAPI 相关算子,请问你的模型是哪个版本的tflite导出的?