模型作用:人脸关键点检测

原模型:tensorflow pb.model

转化后:ncnn *.param *.model

主干网络:shufflenet v2

CPU:ARM A53 2.0GHz 2G MEM

GPU:IMG GE 8300

问题描述:

加载两个模型--人脸检测和人脸关键点检测
人脸检测模型:ssd,param 10kb,model 509kb,cpu load param 需要1.7ms,load model 需要 19ms;
但是,使用vulkan load param 需要 32s,load model需要55s,一个初始化需要将近2min;

人脸关键点检测模型:shufflenet v2,param 40kb, model 2.5Mb, cpu load param 需要 5ms,load model 需要 10ms;
但是,使用vulkan load param 需要32s,load model时,mem 中native 狂飙,直接被杀死,导致初始化失败。

内存泄漏问题描述:

主干采用shufflenet v2,最后三层为reduce,由于vulkan不支持reduce,因此用如下方法代替

Pooling pool1 1 1 concat_splitncnn_0 pool1 0=1 1=20 11=20 2=20 12=20 5=1

但是在vulkan ncnn load model 执行到 pipeline.cpp 469行

VkResult ret = vkCreateComputePipelines(vkdev->vkdevice(), 0, 1, &computePipelineCreateInfo, 0, &pipeline);

内存崩掉了,然后被系统强杀。

内存泄漏原因分析:

0=1 表示average pool,1和11表示kernal的h和w,2和12表示pad的h和w,以此来代替reduce操作,该方法在ncnn arm cpu 上能够得到正确的结果,但是在vulkan gpu上内存会出现上述问题。

内存泄漏替换方案:

Pooling pool1 1 1 concat_splitncnn_0 pool1 0=1 4=1

可以在确保正确forward的同时,在该硬件环境上推理速度上升30ms。

load model速度慢问题,参见 【Android-NCNN-Vulkan】ncnn-vulkan load param & model 速度慢

【PS】复现vulkan average pooling 内存溢出问题:

pool.proto

7767517
2 2
Input            images  0 1 images 0=13 1=13 2=1024
Pooling          pool1   1 1 images pool1 0=1 1=12 11=12 2=12 12=12 5=1
unsigned char m[16];
std::string param = "/pool.proto";
Net->load_param(param.c_str());
Net->load_model(m);

设置kernal 和 stride  >=13 时,在本次记录的配置中,出现内存溢出

详细问题参见:https://github.com/Tencent/ncnn/issues/1874

【Android-NCNN-Vulkan】记录一次ncnn-vulkan在低性能开发板上出现的native内存溢出的问题相关推荐

  1. goodix gt911 在 Android 开发板上的适配流程

    2019-05-08 关键词:rk3128触摸屏适配.goodix gt911 适配.goodix gt9xx 触摸屏适配.gt9xx.c.rk平台触摸屏适配 本篇文章记录了笔者在运行着 Androi ...

  2. 开发板上烧上android,Android HAL实践:Mini6410开发板上的mokoid

    网上有很多人讲Android的HAL,都是基于jollen的实验代码的, 讲的都很好,但是缺少在板子上的实际操作.虽然这些实践步骤做过一次就很熟悉了,但是第一次还是挺麻烦的,要到处找资料,故特地在此将 ...

  3. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  4. 安卓开发板烧写程序与安装软件的区别_在开发板上安装Android

    一.安装串口调试工具 开发Linux驱动程序无法像开发Android应用程序直接在Eclipse中开发,但是可以通过串口来通信.所以就需要安装串口调试工具,在这儿我们使用的串口调试工具是minicom ...

  5. android移植 开发板,Android在TQ2440开发板上的移植

    原标题:Android在TQ2440开发板上的移植 一.目前进展 1.已经可以通过NFS在开发板上运行 最近自己编译了android的文件系统,并在TQ上运行了,比熊猫版的bin程序多些,基本功能已经 ...

  6. 在android开发板上测试neon加速实验

    今天为了测试在mtk6757上面的neon加速性能,从网上找来一个测试例子保留了它的汇编文件和cpp文件,做了一些简单的修改,然后自己写了一个Android.mk和Application.mk 采用n ...

  7. Android在TQ2440开发板上的移植(转)

    一.目前进展 1.Android已经可以通过NFS在TQ2440开发板上运行 最近自己编译了android的文件系统,并在TQ上运行了,比熊猫版的bin程序多些,基本功能已经实现,大家可以从: htt ...

  8. android原生系统开发板,刷android系统到开发板上.doc

    刷android系统到开发板上 将安卓系统刷系统到开发板上 马亲民 2014.12.20 1.擦除NAND FLASH中原有的Windows CE1 2.加载USB引导文件4 3.下载Linux内核9 ...

  9. 解决android开发在大屏手机图片出现内存溢出

    解决android开发在大屏手机图片出现内存溢出 http://jingyan.baidu.com/article/ed2a5d1f3191d109f6be17e8.html

最新文章

  1. bat 调用python
  2. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
  3. (五)Docker查看容器ip及指定固定IP
  4. 查询中国城市公交线路
  5. java 栈 先进后出_栈先进后出,堆先进先出
  6. 蜜蜂性别调控又有新机制?
  7. stride padding_关于Padding实现的一些细节
  8. unique函数_包含虚函数的类应该有虚析构函数或保护析构函数?
  9. 李炎恢python_前端教程:李炎恢jQuery视频教程 百度网盘
  10. 对于基金定投,以月、周、天为单位,哪个更好?
  11. python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_用Python爬取英雄联盟(lol)全部皮肤...
  12. php程序设置ip黑名单,网站访客IP黑名单源码有效屏蔽ip(PHP实现,CC防火墙)
  13. 亚马逊云科技启示录:创新作帆,云计算的征途是汪洋大海
  14. inet aton在java_地址转换函数:inet_aton inet_ntoa inet_addr和inet_pton inet_ntop
  15. python当当网爬虫
  16. JS中页面跳转,传值包含中文时乱码解决方案
  17. 深度学习:交叉验证(Cross Validation)
  18. 快速创建树 算法 treeCreate treeview
  19. js MD5的6种实现方式
  20. 买了个VR眼镜,体验一下元宇宙

热门文章

  1. 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
  2. 浪潮I9000革新传统刀片 解决基础架构统一难题
  3. 机房收费系统——转换list泛型时,字段名称不正确应出现故障
  4. Redis的几个认识误区
  5. mysql 内存占用过多的解决方法
  6. 前端 html结合css-1篇
  7. sdut 1730 数字三角形问题
  8. ASP.NET Google Maps Javascript API V3 实战基础篇一获取和设置事件处理程序中的属性...
  9. HQL多对多的查询语句
  10. php视频上传教程,PHP实现视频文件上传完整实例,_PHP教程