NCNN-兼容问题汇总(Android)

2022-09-14  本文已影响0人  Gavin_2020

一、Android12(api 31)环境下运行ncnn识别模块,偶发性崩溃?

1. 复现环境:

系统: Android12 系统
手机类型: 三星Galaxy Note20、IQOO 9、IQOO Neo5 SE
项目版本: api 31(android)

2. 崩溃节点:

第一种:


image.png

第二种:


image.png

以上方式均会出现偶发性的崩溃现象。

最终崩溃节点:
在ncnn库下的/arm/pooling_3x3.h下的pooling3x3s2_max_neon方法中:

image.png

3. 原因分析:

第一阶段原因分析:
目前确定到原因为from_pixels_resize方法的输入宽高是影响崩溃与否的关键因素,可以看到如下,我们高度固定为32,宽度自动缩放,当宽度为部分数值的时候会导致崩溃,另一种情况为宽度超过一定数值会导致崩溃。
目前可以确定是Android12底层修改了某些地方,导致了和ncnn这里对图像处理出现了兼容性的异常。


image.png

最终原因分析:
由于android12 在ncnn环境下对部分代码或者neon的底层要求更为严格,导致ncnn出现了内存溢出类似问题,目前已和官方沟通确认正在修复中.

4. 解决方案:

最终解决方案:

  1. 将项目调整为android api 31以下版本可以临时性解决
  2. 将最终崩溃节点的neon部分宏定义关闭,可临时性解决问题,缺点是识别效率会减半。
  3. 等待官方更新.

5. 说明

此问题只会在部分情况下出现,大家有其他的好的临时方案或见解可以留言一起讨论学习!

问题汇总不断更新中,大家有其他的问题也可以评论,一起共享!

上一篇下一篇

猜你喜欢

热点阅读