Pytorch到ONNX导出功能失败,并导致旧功能错误
我正在尝试使用以下代码将link中的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
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",