Liang Su

Results 16 comments of Liang Su

我也尝试这个c#的GUI版本,发现release模式下可以运行,但debug模式下模型加载不了,貌似应该是paddle_inference.dll库没有debug版提供造成,不知道您是否有相同现象?有解决吗?

debug下还需要修改libyaml-cppmt.lib成libyaml-cppmtd.lib才能生出成功。不过即使生成model_infer.dll的debug版本成功过来了,也没用,因为用不了。

感谢您的回复,我尝试了下libtorch训练出来的分类模型,发现在推理这块有几个不同的思路: 1. 直接用libtorch这套指令,比如如下的方式 `torch::load(model,` path); model.forward();` 这种方式是把权重加载到已经有代码结构的model上面,推理的速度非常慢(resnet18分类模型都需要k+ms) 这种方式跟python的方式基本没有什么区别。 2. 另外看到一种利用torch::jit的指令,比如 `torch::jit::Module model = torch::jit::load(path); model.forward();` 这种方式不需要用代码先定义模型结构,加载了就可以跑,在速度上可以通过torch-tensorrt库加速。这种方式我理解就属于torchscript模型了,通过pytorch的torch.jit.trace/script导出的模型可以这样操作。但我发现libtorch训练后用torch::save()模型没法用这个指令加载,那就应该需要把libtorch训练的模型也进行一次jit.trace或者jit.script导出?但这个操作用libtorch的c++ api能完成吗?毕竟都已经用libtorch训练了,就不想再用python做ts模型导出了 3. 您提到的方式,那就要先用pytorch/python构建这个模型,然后导出onnx,然后要把libtorch训练得到的torchscript模型权重赋值到onnx模型,不知道有没有合适的demo可以参考? 希望libtorch训练的模型能够真正部署到应用场景、运行速度也能跟onnx模型部署相当,但感觉这块的资料不太多,还请多指教

尝试了两个简单思路: 1. 用libtorch训练出pt模型(该模型也验证过可以在libtorch中做推理),然后尝试在python中用torch.jit.load()加载该pt模型,该步加载可以成功,但jit_model.forward()会报错,AttributeError: 'RecursiveScriptModule' object has no attribute 'forward',看了下导入的这个jit模型在pycharm的变量栏中forward()函数显示为找不到,对应模型子模块也是同样问题(encoder/header),其他正常jit模型都应该有相应的forward函数。 2. 用libtorch训练出pt模型,重新通过libtorch的torch::jit::load()加载,forward()同样报错;把该pt模型送入torch_tensorrt做compile转换能够成功得到trt_model,但推理同样报错。 `auto device = torch::Device(torch::kCUDA, 0);` `auto image = cv::imread("D:\\suliang\\My_Dataset\\misc\\cat.jpg");` `cv::resize(image, image, cv::Size(512, 512));` `auto input_tensor = torch::from_blob(image.data, { image.rows,...

翻了半天的libtorch论坛,就看到这个: ![image](https://user-images.githubusercontent.com/24242483/174989833-ff336eb6-b0c2-4ac6-a27d-99d949a2416c.png) 我理解下来libtorch c++的定位就是用来部署torchscript,而libtorch c++训练出来的模型基本没有什么途径转为静态图的部署模型,甚至不能转自家的torchscript模型,那封装出来这些训练相关的api到底有什么实际用处,太不理解了? 把libtorch保存的pt模型要转换到真正的torchscript或者onnx,除了权重要转,还有op这种东西都要转,而pt的文件结构又不清楚,难度不是一般大啊,大佬给点思路啊,要不然真的只能弃疗了~

onnx模型我在python里边预先建好了也可以导出来,onnx的proto结构也是可以查到,但libtorch的这种pt模型结构是什么样的呢,我尝试探索了下libtorch_model的结构,发现libtorch_model.graph都解析不出来...

哦,pt模型是个压缩文件,可以解压缩... ![image](https://user-images.githubusercontent.com/24242483/174995325-a7ecb783-950d-4130-90c7-d2cc808252eb.png) 不知道是不是要把data.pkl跟data文件夹里边的东西解析出来...

另外一个问题: - labelme的标注数据转mask时,为什么不直接绘制成单通道mask(比如填充的时候就不用name2color填充,而用name2index填充),而是要先绘制彩色mask然后再转单通道mask?