首页 文章

将GpuMat复制到CUDA Tensor

提问于
浏览
0

我试图在C中运行模型推理 .
我用 torch.jit.trace 成功地用Python跟踪了模型 .
我可以使用 torch::jit::load() 在C中加载模型 .
我能够在cpu和gpu上进行推理,但是起点始终是 torch::from_blob 方法,这似乎是在创建cpu-side tensor .
为了提高效率,我想将 cv::cuda::GpuMat 直接投射/复制到CUDA Tensor . 我一直在挖掘pytorch testsdocs以寻找方便的例子,但却无法找到一个 .

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

1 回答

  • 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;
    

相关问题