libtorch学习相关

Libtorch是Pytorch的C++接口,支持网络训练和推理,提供与Pytorch相似的易用接口,降低了C++中处理张量的复杂性。它提供了torch::einsum等函数,弥补了C++Tensor库中某些功能的缺失。通过torch::from_blob可以方便地转换C++数组到torchtensor。文章还介绍了如何在C++中进行索引操作,并推荐了入门学习的资源。
摘要由CSDN通过智能技术生成

Libtorch是Pytorch的C++接口,实现了在C++中进行网络训练、网络推理的功能。

除此之外,由于Libtorch中的大部份接口都是与Pytorch一致的,所以Libtorch还是一个很强大的张量库,有着类似Pytorch的清晰接口,这在C++中很难得的。如果你用过C++ Tensor库,就会发现写法比较复杂,学习成本高。因为强类型的限制和通用容器类型的缺失,C++相比Python天然更复杂,库设计者因为语言使用习惯,以及为了性能等因素,设计的接口一般都是高效但难用的。而Libtorch采用了与Pytorch类似的函数接口,如果你使用过Pytorch的话,使用Libtorch学习成本很低,后面会看到具体的例子。

另一个问题是,很多Python库中基础的操作,例如numpy.einsum函数,在C++的Tensor库中没有合适的替代,看看这些搜索你就能了解这个迁移过程有多麻烦。Libtorch解决了这个问题,Pytorch中有的它都有,所以在C++中可以简单地用torch::einsum来使用einsum函数,简直是C++开发者的福音。大部分pytorch中的操作在libtorch中使用torch::都有对应的库函数实现。

使用时只需添加如下头文件即可

#include <torch/torch.h>
  1. 使用torch::from_blob能够将C++中的数组转换成对应的torch tensor类型。
float arr[] = {1.0, 2.0, 3.0, 4.0};
// 第二个参数表示创建的Tensor shape,会自动对原生数组进行reshape
torch::Tensor bar = torch::from_blob(arr, {1, 4}); // shape是[1, 4]
bar = torch::from_blob(arr, {2, 2}); // shape是[2, 2]

torch::Tensor pose_skeleton = torch::from_blob(pred_xyz_jts_29,{1,87}) * depth_factor;
auto& shapedirs_pre = smpl_neutral_lbs_npz.at("shapedirs");//(6890, 3, 10)
float* shapedirs_data =  shapedirs_pre.data<float>(); 
torch::Tensor shapedirs = torch::from_blob(shapedirs_data, {6890, 3, 10});
  1. 取tensor中一些特定索引的值会有一些大的区别,但是也比较好接受,取索引用Slice()来实现,具体看如下代码:
torch::Tensor transforms = torch::stack(transform_chain, 1);// (1, 24, 4, 4)
//---------------python code------------------
// posed_joints = transforms[:, :, :3, 3]
torch::Tensor posed_joints = transforms.index({Slice(), Slice(), Slice(None, 3), 3});  // 所有关节点在相机坐标系下的位置
// 等效于Python中的foo[:, 0:1, 2:, :-1]
auto bar = foo.index({Slice(), Slice(0, 1), Slice(2, None), Slice(None, -1)});

入门学习libtorch的文档:
https://zhuanlan.zhihu.com/p/609288586
https://zhuanlan.zhihu.com/p/609689737
https://www.cnblogs.com/yanghailin/p/12901586.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位不愿暴露自己的小可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值