Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pytorch到ONNX导出功能失败,并导致旧功能错误_Pytorch_Onnx - Fatal编程技术网

Pytorch到ONNX导出功能失败,并导致旧功能错误

Pytorch到ONNX导出功能失败,并导致旧功能错误,pytorch,onnx,Pytorch,Onnx,我正在尝试使用以下代码将link中的pytorch模型转换为onnx模型: device=t.device('cuda:0' if t.cuda.is_available() else 'cpu') print(device) faster_rcnn = FasterRCNNVGG16() trainer = FasterRCNNTrainer(faster_rcnn).cuda() #trainer = FasterRCNNTrainer(faster_rcnn).to(device) tr

我正在尝试使用以下代码将link中的pytorch模型转换为onnx模型:

device=t.device('cuda:0' if t.cuda.is_available() else 'cpu')
print(device)

faster_rcnn = FasterRCNNVGG16()
trainer = FasterRCNNTrainer(faster_rcnn).cuda()
#trainer = FasterRCNNTrainer(faster_rcnn).to(device)
trainer.load('./checkpoints/model.pth')

dummy_input = t.randn(1, 3, 300, 300, device = 'cuda')
#dummy_input = dummy_input.to(device)
t.onnx.export(faster_rcnn, dummy_input, "model.onnx", verbose = True)
但我得到了以下错误(很抱歉,stackoverflow下面的块引号不会让整个跟踪以代码格式显示,也不会让问题以其他方式发布):

回溯(最近一次呼叫最后一次):
小对象检测主程序samirsen\onnxtest.py“,第44行,in
t、 导出(更快的rcnn,伪输入,“fasterrcnn\u 10120119\u 0602584847785781.onnx”,verbose=True)
文件“C:\Users\HP\AppData\Local\Programs\Python\36\lib\site packages\torch\onnx\\uuuu init\uuuu.py”,
第132行,出口 条带(文档字符串、动态轴) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\onnx\utils.py”, 第64行,在导出中 示例输出=示例输出,带文档字符串=带文档字符串,动态轴=动态轴) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\onnx\utils.py”, 第329行,输入输出 _保留参数名称,执行常数折叠) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\onnx\utils.py”, 第213行,在模型到图中 graph,torch_out=_trace_和_get_graph_from_model(model,args,training) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\onnx\utils.py”, 第171行,在_trace_和_从_模型中获取_图 trace,torch\u out=torch.jit.get\u trace\u图(model,args,\u force\u outplace=True) 文件“C:\Users\HP\AppData\Local\Programs\Python\36\lib\site packages\torch\jit\uuuuuu init\uuuuuuuuu.py”, 第256行,在get_trace_图中 返回LegacyTracedModule(f,力输出,返回输入)(*args,**kwargs) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第547行,在呼叫中 结果=自我转发(*输入,**kwargs) 文件“C:\Users\HP\AppData\Local\Programs\Python\36\lib\site packages\torch\jit\uuuuuu init\uuuuuuuuu.py”, 第323行,前进 输出=内部(*跟踪输入) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第545行,在呼叫中 结果=self.\u slow\u forward(*输入,**kwargs) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第531行,慢速前进 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第531行,慢速前进 结果=自我转发(*输入,**kwargs) 文件“D:\smallobject2\export test s\small\u object\u detection\u master\u samirsen\model\faster\u rcnn.py”,第行 133,前进 h、 roi、roi_指数) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第545行,在呼叫中 结果=self.\u slow\u forward(*输入,**kwargs) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第531行,慢速前进 结果=自我转发(*输入,**kwargs) 文件“D:\smallobject2\export test s\small\u object\u detection\u master\u samirsen\model\faster\u rcnn\u vgg16.py”, 第142行,向前 pool=self.roi(x、指数和roi) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第545行,在呼叫中 结果=self.\u slow\u forward(*输入,**kwargs) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site packages\torch\nn\modules\module.py”, 第531行,慢速前进 结果=自我转发(*输入,**kwargs) 文件“D:\smallobject2\export test s\small\u object\u detection\u master\u samirsen\model\roi\u module.py”,第行 85,前进 返回self.RoI(x,RoI) RuntimeError:尝试跟踪RoI,但不支持跟踪遗留函数


这是因为ONNX不支持torch.grad.Function。问题在于ROI类

为了克服这个问题,您必须将向前和向后函数作为一个单独的函数定义来实现,而不是作为ROI类的一个成员来实现。
FasterRCNNVGG16中对ROI的函数调用应该更改为显式前向和后向调用函数。

该模型似乎正在执行pytorch导出到onnx功能不支持的操作。可以找到支持的运算符列表。代码中包含一些C函数以及python代码。我想这些都是造成问题的原因。有没有办法让这个导出成功?有没有人尝试过或者有人可以尝试这个模型导出?
  Traceback (most recent call last):
     small_object_detection_master_samirsen\onnxtest.py", line 44, in <module>
       t.onnx.export(faster_rcnn, dummy_input, "fasterrcnn_10120119_06025842847785781.onnx", verbose = True)
     File "C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site-packages\torch\onnx\__init__.py",