使用博主@Tchunren 的方法来训练resnet网络以实现reid,训练完成后因为要部署到libtorch上,所以准备导出成torchscript。
网络代码来源:https://blog.csdn.net/t20134297/article/details/105519411
自己执行下面代码时
net.eval()
cpu_model = net.cpu()
traced_script_module = torch.jit.script(cpu_model(torch.rand(64, 3, 7, 7)))
traced_script_module.save("resnet_model7.pt")
第三句报错:
'method_descriptor' object has no attribute 'globals'
AttributeError Traceback (most recent call last)
/tmp/ipykernel_25840/1831791302.py in <module>
1 for data in try_dataloader1:
2 input, labels = data
----> 3 traced_script_module = torch.jit.script(cpu_model2(torch.rand(64, 3, 7, 7)))
4 traced_script_module.save("traced_resnet_model7.pt")
5 #traced_script_module = torch.jit.trace(cpu_model2,input)
~/anaconda3/lib/python3.9/site-packages/torch/jit/_script.py in script(obj, optimize, _frames_up, _rcb, example_inputs)
1316 return fn
1317 else:
-> 1318 return torch.jit._recursive.create_script_class(obj)
1319
1320
~/anaconda3/lib/python3.9/site-packages/torch/jit/_recursive.py in create_script_class(obj)
415 """
416 qualified_class_name = _jit_internal._qualified_name(type(obj))
--> 417 rcb = _jit_internal.createResolutionCallbackForClassMethods(type(obj))
418 # Script the type of obj if it hasn't already been scripted.
419 _compile_and_register_class(type(obj), rcb, qualified_class_name)
~/anaconda3/lib/python3.9/site-packages/torch/_jit_internal.py in createResolutionCallbackForClassMethods(cls)
392
393 for fn in fns:
--> 394 captures.update(get_closure(fn))
395 captures.update(get_type_hint_captures(fn))
396
~/anaconda3/lib/python3.9/site-packages/torch/_jit_internal.py in get_closure(fn)
166 """
167 captures = {}
--> 168 captures.update(fn.__globals__)
169
170 for index, captured_name in enumerate(fn.__code__.co_freevars):
AttributeError: 'method_descriptor' object has no attribute '__globals__'
网上也没有问这个的,可以说毫无头绪了……
环境:
anaconda3+jupyternotebook
pytorch1.10.1
python3.9