其他
【他山之石】libtorch使用经验
最近花了点时间用pytorch的c++前端实现了faster rcnn的推理模型,在此分享一下libtorch的使用体验。
代码地址:
https://github.com/Mabinogiysk/ResNet50_libtorchfaster
rcnn使用mmdetection2.2.1版本,未做任何修改;
c++的代码与mmdetection的inference代码一致,包括函数名和变量名,可以同步比对输入输出结果;
地址:https://www.zhihu.com/people/sky-3-42
01
先说说libtorch的使用体验和优缺点
libtorch前端完善程度超出我的预期,api非常友好,跟python很相似,模型转换的时候照着python代码一行一行翻译成c++就行。整个转换过程80%的时间都用来熟悉api,环境调试和代码编译,真正用来写代码的时间不多,一旦熟悉整个流程之后,模型转换就比较简单了; 简单的模型迁移非常方便,使用tracing或script保存后在c++中一行代码加载就能使用; 调试非常方便,直接跟python对各层的输出结果就行;
2. 缺点:
文档缺少示例,需要对c++有一定了解,否则可能看不懂; 教程匮乏,官方只有一个最简单的示例,对我帮助不大。期间遇到一个比较大的问题是不知道怎么把libtorch和.cu文件一起编译,这部分的CMakeLists我基本上是连蒙带猜写出来的,导致只能在cmake3.17上使用,此外libtorch1.6.0以下版本不能跟.cu文件一起编译;
02
模型转转换
Tracing之后保存,适用于模型没有分支的情况; Script编译,适用于模型有分支的情况,并且可以使用c++扩展; 使用c++从零开始写模型,然后加载pytorch的权重;
class Container(torch.nn.Module):
def __init__(self, my_values):
super().__init__()
for key in my_values:
setattr(self, key, my_values[key])
my_values = {
'img': torch.load('img.pt'),
'proposal_list': torch.load('proposal_list.pt'),
'cls_score': torch.load('cls_score.pt'),
'bbox_pred': torch.load('bbox_pred.pt'),
'det_bboxes': torch.load('det_bboxes.pt'),
'det_labels': torch.load('det_labels.pt'),
}
# Save arbitrary values supported by TorchScript
# https://pytorch.org/docs/master/jit.html#supported-type
container = torch.jit.script(Container(my_values))
container.save("results.pt")
torch::jit::script::Module results = torch::jit::load("results.pt");
Tensor std_img = results.attr("img").toTensor().to(device);
//auto feature_maps = results.attr("img").toTuple();
//auto cls_out = results.attr("img").toTensorVector();
std::cout << torch::sum(torch::abs(std_img - img)) << std::endl;
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
直播预告
历史文章推荐
【CVPR 2020 Tutorial】如何写好论文和评审(概述)
太牛逼了!一位中国博士把整个CNN都给可视化了,每个细节看的清清楚楚!
Nature发表牛津博士建议:我希望在读博士之初时就能知道的20件事
沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题
如何看待2021年秋招算法岗灰飞烟灭?
独家解读 | ExprGAN:基于强度可控的表情编辑
独家解读 | 矩阵视角下的BP算法
独家解读 | Capsule Network深度解读
独家解读 | Fisher信息度量下的对抗攻击
论文解读 | 知识图谱最新研究综述
你的毕业论文过了吗?《如何撰写毕业论文?》
卡尔曼滤波系列——经典卡尔曼滤波推导
分享、点赞、在看,给个三连击呗!