将GpuMat复制到CUDA Tensor

时间:2018-12-04 15:05:37

标签: c++ opencv cuda pytorch

我正在尝试在C ++中运行模型推断。
我使用torch.jit.trace在Python中成功跟踪了模型。
我可以使用torch::jit::load()在C ++中加载模型。
我可以在cpu和gpu上执行推理,但是起点始终是torch::from_blob方法,该方法似乎正在创建cpu侧张量。
为了提高效率,我想将cv::cuda::GpuMat直接投射/复制到CUDA Tensor。我一直在研究pytorch testsdocs来寻找方便的示例,但是找不到一个。

问题: 如何从cv :: cuda :: GpuMat创建CUDA张量?

1 个答案:

答案 0 :(得分:1)

这里是一个例子:

//define the deleter ...
void deleter(void* arg) {};

//your convert function 

cuda::GpuMat gImage;

//build or load your image here ...

std::vector<int64_t> sizes = {1, static_cast<int64_t>(gImage.channels()),
                          static_cast<int64_t>(gImage.rows),
                          static_cast<int64_t>(gImage.cols)};

long long step = gImage.step / sizeof(float);

std::vector<int64_t> strides = {1, 1, step, static_cast<int64_t>(gImage.channels())};

auto tensor_image = torch::from_blob(gImage.data, sizes, strides, deleter,  torch::kCUDA);
std::cout << "output tensor image : " << tensor_image << std::endl;