一、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方法中:
3. 原因分析:
第一阶段原因分析:
目前确定到原因为from_pixels_resize方法的输入宽高是影响崩溃与否的关键因素,可以看到如下,我们高度固定为32,宽度自动缩放,当宽度为部分数值的时候会导致崩溃,另一种情况为宽度超过一定数值会导致崩溃。
目前可以确定是Android12底层修改了某些地方,导致了和ncnn这里对图像处理出现了兼容性的异常。
image.png
最终原因分析:
由于android12 在ncnn环境下对部分代码或者neon的底层要求更为严格,导致ncnn出现了内存溢出类似问题,目前已和官方沟通确认正在修复中.
4. 解决方案:
最终解决方案:
- 将项目调整为android api 31以下版本可以临时性解决
- 将最终崩溃节点的neon部分宏定义关闭,可临时性解决问题,缺点是识别效率会减半。
- 等待官方更新.
5. 说明
此问题只会在部分情况下出现,大家有其他的好的临时方案或见解可以留言一起讨论学习!
问题汇总不断更新中,大家有其他的问题也可以评论,一起共享!
网友评论