【Android-NCNN-Vulkan】记录一次ncnn-vulkan在低性能开发板上出...

【Android-NCNN-Vulkan】记录一次ncnn-vulkan在低性能开发板上出...

2023年6月28日发(作者:)

【Android-NCNN-Vulkan】记录⼀次ncnn-vulkan在低性能开发板上出。。。模型作⽤:⼈脸关键点检测原模型:tensorflow 转化后:ncnn *.param *.model主⼲⽹络:shufflenet v2CPU:ARM A53 2.0GHz 2G MEMGPU: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 执⾏到 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速度慢问题,参见 。

【PS】复现vulkan average pooling 内存溢出问题:77675172 2Input images 0 1 images 0=13 1=13 2=1024Pooling pool1 1 1 images pool1 0=1 1=12 11=12 2=12 12=12 5=1unsigned char m[16];std::string param = "/";Net->load_param(param.c_str());Net->load_model(m);设置kernal 和 stride >=13 时,在本次记录的配置中,出现内存溢出

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687954628a60541.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信