【ncnn android】算法移植(八)——终于移植成功了DBface

   日期:2020-05-29     浏览:160    评论:0    
核心提示:1. 效果先上效果,密集。2.路线pytorch2onnx解决bilinear2d上采样问题编译ncnn创建项目,导入libncnn,完善DBface的推理代码解决nms有重框的问题3. 具体事项图像预处理:((image / 255 - mean) / std).astype(np.float32)项目初始调试成功的时候,结果和DBface.pytorch推理的结果有很大差距。从以下几个方面进行了检验。后面对导出的onnx模型进行了检验对onnx2ncnn的导出进行了检移动开发

1. 效果

先上效果,密集。

2.路线

  • pytorch2onnx
  • 解决bilinear2d上采样问题
  • 编译ncnn
  • 创建项目,导入libncnn,完善DBface的推理代码
  • 解决nms有重框的问题

3. 具体事项

  1. 图像预处理:((image / 255 - mean) / std).astype(np.float32)
    项目初始调试成功的时候,结果和DBface.pytorch推理的结果有很大差距。从以下几个方面进行了检验。
  • 后面对导出的onnx模型进行了检验
  • 对onnx2ncnn的导出进行了检查
  • 检查ncnn项目的数据预处理
    • 最后发现是数据预处理部分的问题。问题出在in.substract_mean_normalize,其中的源码是 × norm_value,所以需要对DBface的std_value取倒
    • 其次是image/255这部分,最初是cv::Mat image/255发现还是有问题,后面是先cv::Mat > ncnn::Mat,然后再 / 255.

对应的ncnn项目代码:

// 1. DBface的std取倒数
const float mean_value[3] = {0.408f, 0.447f, 0.47f};
const float std_value[3] = {1/0.289f, 1/0.274f, 1/0.278f};

// 2.先转到ncnn::Mat,再/255
in = ncnn::Mat::from_pixels(image.data, ncnn::Mat::PIXEL_BGR, image.cols, image.rows);

int c, h, w;
c = in.c;
h = in.h;
w = in.w;
float *data = (float *)(in.data);
for (int i = 0; i < c; ++i) {
    for (int j = 0; j < h; ++j) {
        for (int k = 0; k < w; ++k) {
            data[i*h*w + j*w + k] /= 255;
        }
    }
}

in.substract_mean_normalize(mean_value, std_value);

TO DO

  • 移植到android
  • 使android项目支持GPU
  • 速度测试报告
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服