模型作用:人臉關鍵點檢測
原模型:tensorflow pb.model
轉化後:ncnn *.param *.model
主幹網絡:shufflenet v2
CPU:ARM A53 2.0GHz
GPU:IMG GS 8200
問題描述:
加載兩個模型--人臉檢測和人臉關鍵點檢測
人臉檢測模型: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 ShuffleNetV2/Stage2/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 ShuffleNetV2/Stage2/concat_splitncnn_0 pool1 0=1 4=1
可以在確保正確forward的同時,在該硬件環境上推理速度上升30ms。
load model速度慢問題,暫時未得到解決方法。