PaddleVideo
PaddleVideo copied to clipboard
不能导出AttentionLstm和slowfast推理模型
Traceback (most recent call last):
File "tools/export_model.py", line 104, in
@chajchaj
将这行代码注释掉:cfg.backbone.pretrained = "" 也不能导出, 出现以下错误
` File "export_model.py", line 106, in
File "/home/liuhy/project/video_completion/PaddleVideo/paddlevideo/modeling/framework/recognizers/recognizer3d.py", line 27, in forward (* user code *)
feature = self.extract_feature(imgs)
File "/home/liuhy/project/video_completion/PaddleVideo/paddlevideo/modeling/framework/recognizers/base.py", line 55, in extract_feature (* user code *)
feature = self.backbone(imgs)
File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 891, in __call__
outputs = self.forward(*inputs, **kwargs)
File "/home/liuhy/project/video_completion/PaddleVideo/paddlevideo/modeling/backbones/resnet_slowfast.py", line 757, in forward (* user code *)
x = self.s1(x) #VideoModelStem
File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 891, in __call__
outputs = self.forward(*inputs, **kwargs)
File "/tmp/tmptput2j8p.py", line 18, in forward
for_loop_condition_1, for_loop_body_1, [self, x, pathway])
File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_operators.py", line 42, in convert_while_loop
loop_vars = _run_paddle_while_loop(cond, body, loop_vars)
File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_operators.py", line 52, in _run_paddle_while_loop
loop_vars = control_flow.while_loop(cond, body, loop_vars)
File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/layers/control_flow.py", line 1217, in while_loop
output_vars = body(*loop_vars)
File "/home/liuhy/project/video_completion/PaddleVideo/paddlevideo/modeling/backbones/resnet_slowfast.py", line 505, in forward (* user code *)
m = getattr(self, "pathway{}_stem".format(pathway))
File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 1039, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'VideoModelStem' object has no attribute 'pathwayvar fill_constant_1.tmp_0 : paddle.VarType.LOD_TENSOR.shape(1,).astype(VarType.INT64)_stem'
`
错误信息表明,在执行视频分类模型的过程中,尝试访问VideoModelStem
对象的一个不存在的属性:'pathwayvar fill_constant_1.tmp_0 : paddle.VarType.LOD_TENSOR.shape(1,).astype(VarType.INT64)_stem'
。这个问题很可能是由于动态图转静态图过程中的变量名处理出现了问题,导致属性名被错误地解析或构造。
解决步骤
-
检查属性名的构造:错误发生在
resnet_slowfast.py
文件中,具体在尝试通过getattr
访问self
的属性时。问题可能出在构造属性名的字符串上。检查代码中类似于"pathway{}_stem".format(pathway)
这样的字符串构造逻辑,确保变量pathway
的值是正确的,并且没有意外地包含了不应该出现在属性名中的字符串。 -
理解
for_loop
相关的逻辑:错误堆栈显示,在一个for_loop
中调用了这段问题代码。如果你在for_loop
中处理多个路径(比如SlowFast网络中的slow pathway和fast pathway),确保循环逻辑和索引的使用是正确的。 -
检查PaddlePaddle版本:确保你使用的PaddlePaddle版本与项目要求相匹配。有时候,新版本的PaddlePaddle可能在动态图转静态图的处理上有所改进或变化,导致不兼容的问题。
-
调试技巧:为了定位问题,可以在出错的地方打印出相关变量的值,比如打印
pathway
的值,以及"pathway{}_stem".format(pathway)
的结果,看是否符合预期。
示例调试代码
在resnet_slowfast.py
中,找到报错的地方,加入打印语句帮助定位问题:
pathway_attr_name = "pathway{}_stem".format(pathway)
print("Trying to access attribute:", pathway_attr_name) # 调试打印
m = getattr(self, pathway_attr_name)
总结
这个错误提示一个动态图转静态图时的属性访问问题,需要检查属性名的构造是否正确,以及相关循环逻辑是否按照预期工作。通过加入调试打印语句和确认代码逻辑,你可以逐步缩小问题范围并找到解决方案。如果问题仍然存在,建议查看PaddlePaddle的文档或搜索相似问题的解决方法,也可能需要检查PaddlePaddle的版本兼容性。