PaddleVideo icon indicating copy to clipboard operation
PaddleVideo copied to clipboard

不能导出AttentionLstm和slowfast推理模型

Open hhh5446 opened this issue 3 years ago • 2 comments

Traceback (most recent call last): File "tools/export_model.py", line 104, in main() File "tools/export_model.py", line 75, in main cfg, model_name = _trim(get_config(args.config, show=False), args) File "tools/export_model.py", line 67, in _trim cfg.backbone.pretrained = "" File "/home/aistudio/work/PaddleVideo/paddlevideo/utils/config.py", line 25, in getattr return self[key] KeyError: 'backbone'

@chajchaj

hhh5446 avatar Mar 16 '21 08:03 hhh5446

将这行代码注释掉:cfg.backbone.pretrained = "" 也不能导出, 出现以下错误 ` File "export_model.py", line 106, in main() File "export_model.py", line 100, in main paddle.jit.save(model, osp.join(args.output_path, model_name)) File "", line 2, in save File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in impl return wrapped_func(*args, **kwargs) File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 39, in impl return func(*args, **kwargs) File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/jit.py", line 681, in save inner_input_spec) File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 488, in concrete_program_specify_input_spec *desired_input_spec) File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 402, in get_concrete_program concrete_program, partial_program_layer = self._program_cache[cache_key] File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 711, in getitem self._caches[item] = self._build_once(item) File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 702, in build_once class_instance=cache_key.class_instance) File "", line 2, in from_func_spec File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in impl return wrapped_func(*args, **kwargs) File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 39, in impl return func(*args, **kwargs) File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 658, in from_func_spec error_data.raise_new_exception() File "/home/liuhy/anaconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/error.py", line 189, in raise_new_exception six.exec("raise new_exception from None") File "", line 1, in AttributeError: In transformed code:

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'

`

yhl2018 avatar Mar 24 '21 07:03 yhl2018

错误信息表明,在执行视频分类模型的过程中,尝试访问VideoModelStem对象的一个不存在的属性:'pathwayvar fill_constant_1.tmp_0 : paddle.VarType.LOD_TENSOR.shape(1,).astype(VarType.INT64)_stem'。这个问题很可能是由于动态图转静态图过程中的变量名处理出现了问题,导致属性名被错误地解析或构造。

解决步骤

  1. 检查属性名的构造:错误发生在resnet_slowfast.py文件中,具体在尝试通过getattr访问self的属性时。问题可能出在构造属性名的字符串上。检查代码中类似于"pathway{}_stem".format(pathway)这样的字符串构造逻辑,确保变量pathway的值是正确的,并且没有意外地包含了不应该出现在属性名中的字符串。

  2. 理解for_loop相关的逻辑:错误堆栈显示,在一个for_loop中调用了这段问题代码。如果你在for_loop中处理多个路径(比如SlowFast网络中的slow pathway和fast pathway),确保循环逻辑和索引的使用是正确的。

  3. 检查PaddlePaddle版本:确保你使用的PaddlePaddle版本与项目要求相匹配。有时候,新版本的PaddlePaddle可能在动态图转静态图的处理上有所改进或变化,导致不兼容的问题。

  4. 调试技巧:为了定位问题,可以在出错的地方打印出相关变量的值,比如打印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的版本兼容性。

luyao-cv avatar Mar 14 '24 04:03 luyao-cv