Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

对faster rcnn 进行export_model报错 #9075

Open
1 task done
Ochre-amber opened this issue Jul 27, 2024 · 4 comments
Open
1 task done

对faster rcnn 进行export_model报错 #9075

Ochre-amber opened this issue Jul 27, 2024 · 4 comments
Assignees

Comments

@Ochre-amber
Copy link

问题确认 Search before asking

  • 我已经搜索过问题,但是没有找到解答。I have searched the question and found no related answer.

请提出你的问题 Please ask your question

为了将faster rcnn转为onnx模型,考虑先使用export_model.py导出,运行命令:
python tools/export_model.py -c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml -o weights=output/frcnn/model_final.pdparams export_onnx=True --output_dir=output_inference/frcnn/但出现报错

[07/28 01:10:02] ppdet.utils.checkpoint INFO: Finish loading model weights: frcnn/model_final.pdparams
[07/28 01:10:02] ppdet.engine WARNING: Exporting RCNN model to ONNX only support batch_size = 1
[07/28 01:10:02] ppdet.data.source.category WARNING: anno_file '/aidata/CYHan/project_benke/mmdetection-main/data/coco/annotations/instances_val2017.json' is None or not set or not exist, please recheck TrainDataset/EvalDataset/TestDataset.anno_path, otherwise the default categories will be used by metric_type.
[07/28 01:10:02] ppdet.data.source.category WARNING: metric_type: COCO, load default categories of COCO.
[07/28 01:10:02] ppdet.engine INFO: Export inference config file to output_inference/frcnn/faster_rcnn_r50_fpn_1x_coco/infer_cfg.yml
Traceback (most recent call last):
  File "tools/export_model.py", line 118, in <module>
    main()
  File "tools/export_model.py", line 114, in main
    run(FLAGS, cfg)
  File "tools/export_model.py", line 80, in run
    trainer.export(FLAGS.output_dir, for_fd=FLAGS.for_fd)
  File "/project/PaddleDetection-develop/ppdet/engine/trainer.py", line 1257, in export
    static_model, pruned_input_spec = self._get_infer_cfg_and_input_spec(
  File "/project/PaddleDetection-develop/ppdet/engine/trainer.py", line 1209, in _get_infer_cfg_and_input_spec
    input_spec, static_model.forward.main_program,
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/program_translator.py", line 1062, in main_program
    concrete_program = self.concrete_program
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/program_translator.py", line 941, in concrete_program
    return self.concrete_program_specify_input_spec(input_spec=None)
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/program_translator.py", line 986, in concrete_program_specify_input_spec
    concrete_program, _ = self.get_concrete_program(
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/program_translator.py", line 875, in get_concrete_program
    concrete_program, partial_program_layer = self._program_cache[
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/program_translator.py", line 1648, in __getitem__
    self._caches[item_id] = self._build_once(item)
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/program_translator.py", line 1575, in _build_once
    concrete_program = ConcreteProgram.from_func_spec(
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/base/wrapped_decorator.py", line 26, in __impl__
    return wrapped_func(*args, **kwargs)
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/base/dygraph/base.py", line 68, in __impl__
    return func(*args, **kwargs)
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/program_translator.py", line 1346, in from_func_spec
    error_data.raise_new_exception()
  File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/jit/dy2static/error.py", line 452, in raise_new_exception
    raise new_exception from None
IndexError: In transformed code:

    File "/project/PaddleDetection-develop/ppdet/modeling/architectures/meta_arch.py", line 59, in forward
        if self.training:
    File "/project/PaddleDetection-develop/ppdet/modeling/architectures/meta_arch.py", line 69, in forward
        for inp in inputs_list:
    File "/project/PaddleDetection-develop/ppdet/modeling/architectures/meta_arch.py", line 76, in forward
        outs.append(self.get_pred())
    File "/project/PaddleDetection-develop/ppdet/modeling/architectures/faster_rcnn.py", line 122, in get_pred
        if self.use_extra_data:
    File "/project/PaddleDetection-develop/ppdet/modeling/architectures/faster_rcnn.py", line 130, in get_pred
        bbox_pred, bbox_num = self._forward()
    File "/project/PaddleDetection-develop/ppdet/modeling/architectures/faster_rcnn.py", line 79, in _forward
        if self.training:
    File "/project/PaddleDetection-develop/ppdet/modeling/architectures/faster_rcnn.py", line 89, in _forward
        bbox, bbox_num, nms_keep_idx = self.bbox_post_process(
    File "/project/PaddleDetection-develop/ppdet/modeling/post_process.py", line 69, in __call__
        if self.nms is not None:
    File "/project/PaddleDetection-develop/ppdet/modeling/post_process.py", line 70, in __call__
        bboxes, score = self.decode(head_out, rois, im_shape, scale_factor)
    File "/project/PaddleDetection-develop/ppdet/modeling/layers.py", line 464, in __call__
        if self.export_onnx:
    File "/project/PaddleDetection-develop/ppdet/modeling/layers.py", line 465, in __call__
        if self.export_onnx:
            onnx_rois_num_per_im = rois_num[0]
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE
            origin_shape = paddle.expand(im_shape[0, :],
                                         [onnx_rois_num_per_im, 2])

    File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/base/framework.py", line 2500, in __getitem__
        return _getitem_static(self, item)
    File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/base/variable_index.py", line 800, in _getitem_static
        ) = parse_index(x, indices)
    File "/home/nvidia/plugs/yes/envs/paddle/lib/python3.8/site-packages/paddle/base/variable_index.py", line 300, in parse_index
        and x.shape[dim] is not None

    IndexError: tuple index out of range

请问如何正确导出faster rcnn?

@Ochre-amber
Copy link
Author

根本问题就是控制流怎么去掉的问题

@hzylalala
Copy link

您好,请问您解决这个问题了吗,我也遇到了同样的问题

@Ochre-amber
Copy link
Author

您好,请问您解决这个问题了吗,我也遇到了同样的问题

还没有,或许可以尝试一下PaddlePaddle/Paddle2ONNX#699 的解决方法,用老版本的paddle尝试一下。

@Ochre-amber
Copy link
Author

@hzylalala 用paddlepaddle2.4 paddledet2.4 似乎可以

您好,请问您解决这个问题了吗,我也遇到了同样的问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants