相关文章:
Mat data的排列样式 || 深度学习矩阵排列注意事项

1. cv mat的排列形式

这个可以参考上面的文章。

2. mat->tensor

mat的矩阵样式为:h,w,c。tensor的矩阵样式为:c,h,w。在pytorch中可以用ToTensor()函数实现。这里给出c++的参考代码:

void cvImageToTensor(const cv::Mat & image, float *tensor, nvinfer1::Dims dimensions)
{
  const size_t channels = dimensions.d[1];
  const size_t height = dimensions.d[2];
  const size_t width = dimensions.d[3];
  // TODO: validate dimensions match
  const size_t stridesCv[3] = { width * channels, channels, 1 };
  const size_t strides[3] = { height * width, width, 1 };

  for (int i = 0; i < height; i++) 
  {
    for (int j = 0; j < width; j++) 
    {
      for (int k = 0; k < channels; k++) 
      {
        const size_t offsetCv = i * stridesCv[0] + j * stridesCv[1] + k * stridesCv[2];
        const size_t offset = k * strides[0] + i * strides[1] + j * strides[2];
        tensor[offset] = (float) image.data[offsetCv];
      }
    }
  }
}

其实就是3层嵌套的loop,只是注意mat和tensor 索引计算的方式不同。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐