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

阅读: 评论:0

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

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

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, ls, ws);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
  • 速度测试报告

本文发布于:2024-01-31 11:38:44,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170667232628249.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:算法   ncnn   android   DBface
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23