PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.64k stars 2.87k forks source link

将rtdetrv2动态图模型转化为静态图模型失败 #9140

Open qiyuezhiguang opened 1 week ago

qiyuezhiguang commented 1 week ago

问题确认 Search before asking

Bug组件 Bug Component

Export

Bug描述 Describe the Bug

导出rtdetrv2模型时提示错误,即使按照官方的教程也是报如下错误: cd PaddleDetection python tools/export_model.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \ -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams trt=True \ --output_dir=output_inference

输出为:

Warning: Unable to use numba in PP-Tracking, please install numba, for example(python3.7): pip install numba==0.56.4 Warning: Unable to use numba in PP-Tracking, please install numba, for example(python3.7): pip install numba==0.56.4 [09/14 20:05:18] ppdet.utils.checkpoint INFO: Finish loading model weights: output/best_model/model.pdparams loading annotations into memory... Done (t=0.32s) creating index... index created! [09/14 20:05:19] ppdet.engine INFO: Export inference config file to output_inference/rtdetrv2_r18vd/infer_cfg.yml Traceback (most recent call last): File "/home/zhuhuijie/PaddleDetection/tools/export_model.py", line 118, in main() File "/home/zhuhuijie/PaddleDetection/tools/export_model.py", line 114, in main run(FLAGS, cfg) File "/home/zhuhuijie/PaddleDetection/tools/export_model.py", line 80, in run trainer.export(FLAGS.output_dir, for_fd=FLAGS.for_fd) File "/home/zhuhuijie/PaddleDetection/ppdet/engine/trainer.py", line 1267, in export static_model, pruned_input_spec = self._get_infer_cfg_and_input_spec( File "/home/zhuhuijie/PaddleDetection/ppdet/engine/trainer.py", line 1219, in _get_infer_cfg_and_input_spec input_spec, static_model.forward.main_program, File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py", line 1043, in main_program concrete_program = self.concrete_program File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py", line 930, in concrete_program return self.concrete_program_specify_input_spec(input_spec=None) File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py", line 971, in concrete_program_specify_input_spec concreteprogram, = self.get_concrete_program( File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py", line 864, in get_concrete_program concrete_program, partial_program_layer = self._program_cache[ File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py", line 1606, in getitem self._caches[item_id] = self._build_once(item) File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py", line 1552, in _build_once concrete_program = ConcreteProgram.from_func_spec( File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/decorator.py", line 232, in fun return caller(func, *(extras + args), kw) File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/base/wrapped_decorator.py", line 26, in impl return wrapped_func(*args, *kwargs) File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/base/dygraph/base.py", line 66, in impl return func(args, kwargs) File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/program_translator.py", line 1320, in from_func_spec error_data.raise_new_exception() File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/jit/dy2static/error.py", line 448, in raise_new_exception raise new_exception from None AssertionError: In transformed code:

File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/architectures/meta_arch.py", line 59, in forward
if self.training:
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/architectures/meta_arch.py", line 69, in forward
for inp in inputs_list:
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/architectures/meta_arch.py", line 76, in forward
outs.append(self.get_pred())
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/architectures/detr.py", line 118, in get_pred
return self._forward()
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/architectures/detr.py", line 89, in _forward
out_transformer = self.transformer(body_feats, pad_mask, self.inputs)
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/transformers/rtdetr_transformerv2.py", line 480, in forward
out_bboxes, out_logits = self.decoder(
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/transformers/rtdetr_transformer.py", line 235, in forward
output = layer(output, ref_points_input, memory,
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/transformers/rtdetr_transformerv2.py", line 259, in forward
tgt2 = self.cross_attn(
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/transformers/rtdetr_transformerv2.py", line 173, in forward
            format(reference_points.shape[-1]))

    output = self.ms_deformable_attn_core(value, value_spatial_shapes,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE
                                          sampling_locations, attention_weights)
    output = self.output_proj(output)

File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/transformers/utils.py", line 162, in deformable_attention_core_func_v2
value_list = [
File "/home/zhuhuijie/PaddleDetection/ppdet/modeling/transformers/utils.py", line 163, in <listcomp>
value.reshape([batch_num * num_heads, head_dim, h, w])
File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/tensor/manipulation.py", line 4520, in reshape
attrs["shape"] = get_attr_shape(shape)
File "/home/zhuhuijie/anaconda3/envs/paddle_env/lib/python3.10/site-packages/paddle/tensor/manipulation.py", line 4426, in get_attr_shape
assert dim_size > 0, (

AssertionError: Each dimension value of 'shape' in reshape must not be negative except one unknown dimension. But received shape[0] = -8.

复现环境 Environment

linux ubuntu 22.04 paddle3.0 beta python 3.10

Bug描述确认 Bug description confirmation

是否愿意提交PR? Are you willing to submit a PR?

zhang-prog commented 6 days ago

切到 release/2.7 分支试一下。我这边复现了一下,是可以转换的。 11782fee644f0bb57f57ebcc6

yski commented 3 days ago

切到 release/2.7 分支试一下。我这边复现了一下,是可以转换的。 11782fee644f0bb57f57ebcc6

你复现用的配置文件不对,你用的是rtdetr不是rtdetr v2,他这个问题我也遇到了,一样的错误

zhang-prog commented 3 days ago

我使用的命令是 cpBug描述 部分的命令。

qiyuezhiguang commented 2 days ago

我使用的命令是 cpBug描述 部分的命令。

不好意思,bug描述的命令写错了,应该是rtdert v2。v2 有bug,rtdert貌似没有bug

zhang-prog commented 2 days ago

好的,麻烦提供一下正确的命令吧

yski commented 2 days ago

好的,麻烦提供一下正确的命令吧

cd PaddleDetection python tools/export_model.py -c configs/rtdetrv2/rtdetrv2_r50vd_6x_coco.yml \ -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetrv2_r50vd_6x_coco.pdparams trt=True \ --output_dir=output_inference 请使用develop版本测试,2.7是没有v2网络相关代码的

zhang-prog commented 15 hours ago

@lyuwenyu 大佬有空看下呢