Libtorch部署编译报错问题:non-scalar type, ‘->‘ has non-pointer type等

使用libtorch在C++中部署遇到了问题,大多是关于torch的API接口问题,因为使用网上大多的示例是很久之前的,而现在torch的很多API接口已经发生了改变,所以才会在编译的时候出现各种接口问题报错。

1. CMake error: conversion from ‘torch::jit::script::Module’ to non-scalar type ‘std::shared_ptrtorch::jit::script::Module .

这个问题是很多教程在声明模型的时候使用了:

 std::shared_ptr<torch::jit::script::Module> module = torch::jit::load("../xxx.pt");

因为std::shared_ptr这个是libtorch测试版本使用的变量类型,现在已经变更,将以上代码修改为:

 torch::jit::script::Module module = torch::jit::load("../xxx.pt");

2. 另外,有些教程里会出现一个空指针判断的断言:

assert(module != nullptr);

然后会出现错误:error: no match for ‘operator!=’ (operand types are ‘torch::jit::script::Module’ and ‘std::nullptr_t’)
根据官方说法,现在的Module已经不是指针,这个断言没有存在的必要了,删掉就行。

3. error: base operand of ‘->’ has non-pointer type 'torch::jit::script::Module’

问题出现在这一行:

torch::Tensor output = module->forward(std::move(inputs)).toTensor();

原因也很简单,module已经不是指针,把代码修改为:

torch::Tensor output = module.forward(std::move(inputs)).toTensor();

4. “tensorFromBlob”: 不是“at::DeprecatedTypeProperties”的成员

“tensorFromBlob”: 不是“at::DeprecatedTypeProperties”的成员

1)错误代码:

auto img_tensor = torch::CPU(torch::kFloat32).tensorFromBlob(img_float.data, { 1, input_image_size, input_image_size, 3 });

原因:libtorch 1.1的接口改了,

正确代码:

  auto img_tensor = torch::from_blob(image.data, {1, inp_dim[0], inp_dim[1], 3}).permute({0, 3, 1, 2}).to(torch::kCUDA);

2)旧版代码:

auto img_tensor = torch::CPU(torch::kFloat32).tensorFromBlob(img_float.data, { 1, input_image_size, input_image_size, 3 });
img_tensor = img_tensor.permute({ 0,3,1,2 });
auto img_var = torch::autograd::make_variable(img_tensor, false).to(device);

新版代码:

auto img_tensor = torch::from_blob(image.data, {1, inp_dim[0], inp_dim[1], 3}).permute({0, 3, 1, 2}).to(torch::kCUDA);

3)旧版代码:

bn_imp->running_variance.set_data(bn_running_var);

新版代码:

bn_imp->running_var.set_data(bn_running_var);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值