PaddlePaddle / PaddleClas

A treasure chest for visual classification and recognition powered by PaddlePaddle
Apache License 2.0
5.41k stars 1.16k forks source link

使用 python/predict_cls.py 预测时报错:给定的新形状和原始的张量大小不匹配 #2696

Open a-strong-python opened 1 year ago

a-strong-python commented 1 year ago
  1. PaddleClas版本以及PaddlePaddle版本:PaddleClas release/2.4和paddlepaddle-gpu 2.4.1.post112
  2. 涉及的其他产品使用的版本号:无
  3. 训练环境信息: a. 具体操作系统:Linux b. Python版本号:Python3.9 c. CUDA/cuDNN版本: CUDA10.2
  4. 完整的代码(相比于repo中代码,有改动的地方)、详细的错误信息及相关log

image

/home/aistudio/work/PaddleClas-2.4.0/deploy
2023-03-12 10:29:39 INFO: 
===========================================================
==        PaddleClas is powered by PaddlePaddle !        ==
===========================================================
==                                                       ==
==   For more info please go to the following website.   ==
==                                                       ==
==       https://github.com/PaddlePaddle/PaddleClas      ==
===========================================================

2023-03-12 10:29:39 INFO: Global : 
2023-03-12 10:29:39 INFO:     batch_size : 16
2023-03-12 10:29:39 INFO:     cpu_num_threads : 10
2023-03-12 10:29:39 INFO:     enable_benchmark : True
2023-03-12 10:29:39 INFO:     enable_mkldnn : True
2023-03-12 10:29:39 INFO:     enable_profile : False
2023-03-12 10:29:39 INFO:     gpu_mem : 8000
2023-03-12 10:29:39 INFO:     infer_imgs : /home/aistudio/work/data/test
2023-03-12 10:29:39 INFO:     inference_model_dir : models/SwinTransformer_infer
2023-03-12 10:29:39 INFO:     ir_optim : True
2023-03-12 10:29:39 INFO:     use_fp16 : False
2023-03-12 10:29:39 INFO:     use_gpu : True
2023-03-12 10:29:39 INFO:     use_tensorrt : False
2023-03-12 10:29:39 INFO: PostProcess : 
2023-03-12 10:29:39 INFO:     SavePreLabel : 
2023-03-12 10:29:39 INFO:         save_dir : ./pre_label/
2023-03-12 10:29:39 INFO:     Topk : 
2023-03-12 10:29:39 INFO:         class_id_map_file : /home/aistudio/work/data/data/labels.txt
2023-03-12 10:29:39 INFO:         topk : 5
2023-03-12 10:29:39 INFO:     main_indicator : Topk
2023-03-12 10:29:39 INFO: PreProcess : 
2023-03-12 10:29:39 INFO:     transform_ops : 
2023-03-12 10:29:39 INFO:         ResizeImage : 
2023-03-12 10:29:39 INFO:             resize_short : 256
2023-03-12 10:29:39 INFO:         CropImage : 
2023-03-12 10:29:39 INFO:             size : 224
2023-03-12 10:29:39 INFO:         NormalizeImage : 
2023-03-12 10:29:39 INFO:             channel_num : 3
2023-03-12 10:29:39 INFO:             mean : [0.485, 0.456, 0.406]
2023-03-12 10:29:39 INFO:             order : 
2023-03-12 10:29:39 INFO:             scale : 0.00392157
2023-03-12 10:29:39 INFO:             std : [0.229, 0.224, 0.225]
2023-03-12 10:29:39 INFO:         ToCHWImage : None
Traceback (most recent call last):
  File "python/predict_cls.py", line 165, in <module>
    main(config)
  File "python/predict_cls.py", line 139, in main
    batch_results = cls_predictor.predict(batch_imgs)
  File "python/predict_cls.py", line 99, in predict
    self.predictor.run()
ValueError: In user code:

    File "tools/export_model.py", line 36, in <module>
      engine.export()
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/engine/engine.py", line 487, in export
      paddle.jit.save(model, save_path)
    File "<decorator-gen-123>", line 2, in save

    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 26, in __impl__
      return wrapped_func(*args, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/jit.py", line 649, in wrapper
      func(layer, path, input_spec, **configs)
    File "<decorator-gen-122>", line 2, in save

    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 26, in __impl__
      return wrapped_func(*args, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 67, in __impl__
      return func(*args, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/jit.py", line 928, in save
      inner_input_spec, with_hook=with_hook)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 580, in concrete_program_specify_input_spec
      is_train=self._is_train_mode())
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 485, in get_concrete_program
      concrete_program, partial_program_layer = self._program_cache[cache_key]
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 955, in __getitem__
      self._caches[item_id] = self._build_once(item)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 944, in _build_once
      **cache_key.kwargs)
    File "<decorator-gen-119>", line 2, in from_func_spec

    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 26, in __impl__
      return wrapped_func(*args, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 67, in __impl__
      return func(*args, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 888, in from_func_spec
      outputs = static_func(*inputs)
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/engine/engine.py", line 526, in forward
      x = self.base_model(x)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 950, in __call__
      return self._dygraph_call_func(*inputs, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 935, in _dygraph_call_func
      outputs = self.forward(*inputs, **kwargs)
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/arch/backbone/legendary_models/swin_transformer.py", line 747, in forward
      x = self.forward_features(x)
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/arch/backbone/legendary_models/swin_transformer.py", line 738, in forward_features
      for layer in self.layers:
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_operators.py", line 106, in convert_while_loop
      _run_py_while(cond, body, getter, setter)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_operators.py", line 165, in _run_py_while
      body()
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/arch/backbone/legendary_models/swin_transformer.py", line 739, in forward_features
      x = layer(x)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 950, in __call__
      return self._dygraph_call_func(*inputs, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 935, in _dygraph_call_func
      outputs = self.forward(*inputs, **kwargs)
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/arch/backbone/legendary_models/swin_transformer.py", line 536, in forward
      for blk in self.blocks:
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_operators.py", line 106, in convert_while_loop
      _run_py_while(cond, body, getter, setter)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_operators.py", line 165, in _run_py_while
      body()
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/arch/backbone/legendary_models/swin_transformer.py", line 537, in forward
      x = blk(x)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 950, in __call__
      return self._dygraph_call_func(*inputs, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 935, in _dygraph_call_func
      outputs = self.forward(*inputs, **kwargs)
    File "/home/aistudio/work/PaddleClas-2.4.0/ppcls/arch/backbone/legendary_models/swin_transformer.py", line 355, in forward
      x = x.reshape([B, H, W, C])
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/manipulation.py", line 3662, in reshape
      outputs={"Out": out, "XShape": x_shape},
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layer_helper.py", line 45, in append_op
      return self.main_program.current_block().append_op(*args, **kwargs)
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py", line 4023, in append_op
      attrs=kwargs.get("attrs", None),
    File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py", line 2858, in __init__
      for frame in traceback.extract_stack():

    InvalidArgumentError: The 'shape' in ReshapeOp is invalid. The input tensor X'size must be equal to the capacity of 'shape'. But received X's shape = [16, 3136, 128], X's size = 6422528, 'shape' is [16, 96, 96, 128], the capacity of 'shape' is 18874368.
      [Hint: Expected capacity == in_size, but received capacity:18874368 != in_size:6422528.] (at /paddle/paddle/phi/infermeta/unary.cc:1435)
      [operator < reshape2 > error]
cuicheng01 commented 1 year ago

使用的是哪个大小的SwinTransformer呢

a-strong-python commented 1 year ago

使用的是哪个大小的SwinTransformer呢

使用的是SwinTransformer_base_patch4_window12_384.yaml

a-strong-python commented 1 year ago

我如果用 tools/infer.py 进行预测是没有问题的,但使用 deploy/python/predict_cls.py 进行预测就会报错,半年之前也出现过这种问题但当时没有提issue

cuicheng01 commented 1 year ago

这个需要改一下图片的大小,从224改成384