问题标签 [torchscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
509 浏览

python - 从 python 导出的模型在 C++ 中加载时会给出不同的结果

问题描述

所以我有使用 PyTorch 用 python 编写的模型类:

在 python 环境中使用时,它工作得非常好。我已经对其进行了训练,在测试集上获得了约 65% 的准确率,并希望使用 TorchScript 将其导出,然后导入 C++ 应用程序。

这是用于导出的代码:

在将其导入 C++ 之前,我已经检查了模型是否正确导出,方法是将其导入 python 脚本,torch.jit.load并再次对照我的测试数据集进行检查,以获得与预期相同的约 65% 的准确度。

因此,下一个合乎逻辑的步骤是将模型导入 C++ 程序,并使用相同的数据评估加载的模型。这是代码:

实际问题

但是发生的事情是在 C++ 中计算的准确度等于 ~12%。为什么?

到目前为止我尝试/发现了什么:

  1. 将模型加载到 C++ 中时的所有预测都是相同的(等于6)。当模型在 python 中加载时,一切都很好。
  2. 获取后的所有计算outputs在 Python 和 C++ 中都是相同的,所以问题不在于我计算准确性的方式。
  3. 使用torch::manual_seed什么都不做。(它不应该改变任何东西,但为什么不尝试......)
  4. torch::NoGradGuard也什么都不做。
  5. 我还确保测试数据在 Python 和 C++ 中以相同的顺序进入模型。
  6. 在这两种情况下,模型都在 eval 模式下运行

更新 1

torch.ones使用python 和 c++对静态输入检查加载的模型仍然会产生不同的结果。

按照@gspr 的要求更新 2 Python 代码:

0 投票
1 回答
107 浏览

save - RuntimeError:用于酸洗的未知 IValue 类型:设备

我想将 pytorch 模型转换为 torchscript,这model是一个 pytorchLSTM模块。

第1步:score_pos如预期正常

第 2 步:转换为 torchscript 模块

score_pos_scripted 第3步:脚本模块运行的分数相同score_pos但顺序错误

第4步:保存torchscript模块错误!

错误消息(我的 pytorch 版本:1.3.1):

有人可以帮我解决第 2 步和第 4 步的错误吗?

0 投票
0 回答
419 浏览

pytorch - 在 C++ 中使用 *.pth 模型

我想使用我用 pytorch 训练的 yolo3 模型在 C++ 中运行推理。我无法使用 pytorch 提供的跟踪和脚本进行转换。我在转换过程中遇到此错误

0 投票
0 回答
425 浏览

python - 澄清 PyTorch 上的 TorchScripts 和 JIT

只是想澄清我对 JIT 和 TorchScripts 工作方式的理解并澄清一个特定的例子。

因此,如果我没有错torch.jit.script,将我的方法或模块转换为 TorchScript。我可以在 python 之外的环境中使用我的 TorchScript 编译模块,但也可以在 python 中使用它并进行预期的改进和优化。一个类似的情况torch.jit.trace是跟踪权重和操作,但大致遵循类似的想法。

如果是这种情况,TorchScripted 模块通常应该至少与 python 解释器的典型推理时间一样快。在进行了一些实验后,我观察到它通常比典型的解释器推理时间要慢,并且在阅读后发现显然 TorchScripted 模块需要“预热”一下,以实现其最佳性能。这样做时,我看到推理时间没有任何变化,它变得更好但不足以称为对典型的做事方式(python解释器)的改进。此外,我使用了一个名为 的第三方库torch_tvm,如果启用该库,据说可以将任何方式的 jit-ing 模块的推理时间减半。

直到现在这一切都没有发生,我真的无法说出原因。

以下是我的示例代码,以防我做错了什么 -

以下是上述代码在我的 CPU 上的结果 -

对此的任何帮助或澄清将不胜感激!

0 投票
0 回答
840 浏览

python - 转换 Pytorch Yolact (.pth) 模型以在 C++ 中部署

我正在使用YOLACT++,我想使用 C++ 部署它。最初模型保存为 yolact.pth 文件,我从无法直接将 .pth 转换为可以在 C++ 中调用的 .pt 文件的问题中意识到这个问题,我需要先将其转换为 ONNX输出 yolact.onnx 作为输出。我在问题中使用此解决方案将其转换为 ONNX ,在此问题下方的评论中,您可以看到他用于从 yolact.pth 实现 yolact.onnx 转换模型的终端命令。

所以我的问题是我真的不明白接下来如何使用 C++ 部署它。我应该寻找从 yolact.onnx 转换为 yolact.pt 的解决方案,还是可以从 C++ 调用 yolact.onnx?在此工作流程的一个问题中给出了一个有趣的方向: Pytorch->ONNX->NCNN,他在 ARM 设备上使用 C++ 推理对其进行了测试。这就是我要找的。我对 C++ 不是很熟悉,所以我不知道方向。

我还尝试将其添加到调用模型的 eval.py 末尾:

我得到了错误:

第 570 行是:

我把它注释掉了,它在第 574 行的下一个“timer.env”上给出了错误,依此类推!

0 投票
0 回答
358 浏览

c++ - 在 C++ 中加载 torchscript 模型时如何解决“RuntimeError:预期的标量类型 Double 但发现 Float”

我尝试加载torchscript模型C++,但出现错误

RuntimeError:预期的标量类型 Double,但发现 Float。

完整的输出是

输入数据实际上是双精度类型。我尝试在此处.double()使用以下但无法运行。我的代码:make

请给我一些建议好吗?

0 投票
1 回答
2535 浏览

python - ValueError:您必须指定decoder_input_ids 或decoder_inputs_embeds

尝试将question-generationt5 模型转换为torchscript 模型,同时执行此错误

ValueError:您必须指定decoder_input_ids 或decoder_inputs_embeds

这是我在 colab 上运行的代码。

得到这个错误

如何解决这个问题?或者有没有更好的方法将 t5 模型转换为torchscript.

谢谢你。

0 投票
1 回答
475 浏览

pytorch - 如果我在 Cuda 上跟踪 PyTorch 网络,我可以在 CPU 上使用它吗?

torch.jit.trace我在兼容 CUDA 的 GPU 服务器上跟踪了我的神经网络。当我在同一台服务器上重新加载该 Trace 时,我可以重新加载它并正常使用它。现在,当我将它下载到我的笔记本电脑上(用于快速测试)时,当我尝试加载跟踪时,我得到:

我不能在跟踪上在 GPU 和 CPU 之间切换吗?还是有其他事情发生?

0 投票
0 回答
347 浏览

pytorch - 如何从 jit::script::module 访问模块属性,例如卷积步长

我目前正在编写一个 C++ 程序,该程序需要对 torchScript 格式的 CNN 模型的结构进行一些分析。我正在使用 C++ 火炬库,它在 torch.org 上显示的方式,像这样加载到模型中:

据我所知,module由一组嵌套的集合组成,torch::jit::script::Module其中最低的代表内置函数。我访问那些最低的模块如下:

该函数递归地遍历模块并打印最低级别的名称,这些名称对应于torch脚本的内置函数。

我现在的问题是,如何访问那些内置函数的详细信息,例如卷积的步长?

我一生都无法弄清楚如何访问模块的这些基本属性。

0 投票
1 回答
528 浏览

nvidia - Torchscript 与 TensorRT 进行实时推理

我已经训练了一个对象检测模型,用于实时应用的生产。我有以下两个选择。谁能建议在 Jetson Xavier 上运行推理以获得最佳性能的最佳方法是什么?也欢迎任何其他建议。

  1. 将模型转换为 ONXX 格式并与 TensorRT 一起使用
  2. 将模型保存为 Torchscript 并在 C++ 中运行推理