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

关于算法后处理设计疑问,以yolov5为例 #2534

Open
mailliw2010 opened this issue Oct 12, 2024 · 1 comment
Open

关于算法后处理设计疑问,以yolov5为例 #2534

mailliw2010 opened this issue Oct 12, 2024 · 1 comment
Assignees

Comments

@mailliw2010
Copy link


温馨提示:根据社区不完全统计,按照模板提问,可以加快回复和解决问题的速度


环境

  • 【FastDeploy版本】: 说明具体的版本,如fastdeploy-linux-gpu-0.8.0
  • 【编译命令】如果您是自行编译的FastDeploy,请说明您的编译方式(参数命令)
  • 【系统平台】: Ubuntu 20.04
  • 【硬件】: sophon 1688
  • 【编译语言】: C++

问题日志及出现问题的操作流程

  • 附上详细的问题日志有助于快速定位分析
  • 【后处理复用问题】
    • sophon平台上基于yolov5算法实现了几个模型,后处理稍微有些不同。有的后处理可以在硬件加速,有的不能,因此不同的模型会涉及到对后处理方法重写的地方。但发现FastDeploy框架中没有对外提供对后处理的方式。
      考虑重载一个YOLOv5::Predict(cv::Mat* im, DetectionResult* result, YOLOv5PostprocessorImpl* post);
      方法来使用YOLOv5PostprocessorImpl继承YOLOv5Postprocessor,实现多态,如:
fastdeploy::vision::DetectionResult res;
//重写后处理的子类
fastdeploy::vision::detection::YOLOv5PostprocessorImpl post;
model.Predict(&det_image, &res, &post));

但发现YOLOv5的postprocessor_成员不是指针,

 protected:
  bool Initialize();
  YOLOv5Preprocessor preprocessor_;
  YOLOv5Postprocessor postprocessor_;

因此无法实现多态。如果修改postprocessor的成员为指针,其他方法的访问也需要修改。请问有什么更好的方法么?
从个人理解来看,每一个算法的后处理部分应该变化较多,做成一个可继承接口是不是更好些?

@Jiang-Jia-Jun
Copy link
Collaborator

赞同你的想法。

    1. 起初针对部分重点模型,有做不同预处理的实现来加速,但并不是所有模型。
    1. 我认为按你说的方法实现会更灵活,只是在最开始开发时,并没有考虑到会基于SDK来继承,从而修改后处理; 此前直接修改FastDeploy里面的源代码重新编译,后续也没有再改,因而沿用至今

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