tensorflow 输出的 tensor 数据格式是怎么定义的?

发布于 2022-09-12 22:39:18 字数 1751 浏览 28 评论 0

各位好, 我是刚刚开始接触机器学习, 打算做一个行人检测的应用,也就是检测图片内中的行人并标注出来。 我在 Github 上找到一份代码,编译调试后, 确认可以进行, 所以想改改他的代码来适应我的项目, 经过长时间的调试后, 最后出现了一个不能解决的问题,就是在获取输出的 tensor 后,作者取数据计算行人边框的方式很难理解。

主要问题有下面几个:

  1. tensor 里面不是存的 NCHW 或者 NHWC 的数据么? 为什么会有位置信息?
  2. 为什么输出的 tensorboxes->host<float>()[i * 4] 和中心点有关, boxes->host<float>()[i * 4 + 2] 和 宽度有关, 这个定义是如何定义的, 是训练的时候定义 model 时定义的么?
  3. 如何确定一个 tensor 里面的数据组成呢?

下面是作者获取 边框 的函数:

void UltraFace::generateBBox(std::vector<FaceInfo> &bbox_collection, MNN::Tensor *scores, MNN::Tensor *boxes) {
    for (int i = 0; i < num_anchors; i++) {
        if (scores->host<float>()[i * 2 + 1] > score_threshold) {
            FaceInfo rects;
            float x_center = boxes->host<float>()[i * 4] * center_variance * priors[i][2] + priors[i][0];
            float y_center = boxes->host<float>()[i * 4 + 1] * center_variance * priors[i][3] + priors[i][1];
            float w = exp(boxes->host<float>()[i * 4 + 2] * size_variance) * priors[i][2];
            float h = exp(boxes->host<float>()[i * 4 + 3] * size_variance) * priors[i][3];
            
            rects.x1 = clip(x_center - w / 2.0, 1) * image_w;
            rects.y1 = clip(y_center - h / 2.0, 1) * image_h;
            rects.x2 = clip(x_center + w / 2.0, 1) * image_w;
            rects.y2 = clip(y_center + h / 2.0, 1) * image_h;
            rects.score = clip(scores->host<float>()[i * 2 + 1], 1);
            bbox_collection.push_back(rects);
        }
    }
}

刚刚接触, 所以无从下手, 希望好心人能帮个忙, 给个搜索的关键词, 上面的问题主要是不知道怎么搜才能搜索相关信息 ~~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文