专栏算法工具链Yolov5上板教程:使用yolov5改写yolov3_mobilenetv2_example

Yolov5上板教程:使用yolov5改写yolov3_mobilenetv2_example

已解决
Ethanyyy2022-01-01
237
7

一、前言

本教程在solution_zoo/solution_example中的yolov3_mobilenetv2_example基础上,使用yolov5替换yolov3,成功在板端运行yolov5。整个过程基本不需要自己写代码,只需对一些配置文件进行修改。

使用docker开发环境,开发包版本:horizon_x3_open_explorer_v1.3.9_20210805142932

二、Yolov5模型准备

这部分可以参考B站地平线_海盗旗的视频,链接:https://www.bilibili.com/video/BV1C44y187ZK?spm_id_from=333.999.0.0

原始模型我使用的是model_zoo中的YOLOv5l.onnx模型。然后用ai_toolchain提供的yolov5工具,将浮点模型转换成定点模型,得到yolov5_672×672_nv12.bin文件。

转换中用到的data没有提供,但是根据sh文件中data的路径,可以知道用的是coco数据集,去coco官网下载对应的data即可。

三、魔改yolov3_mobilenetv2_example

将models文件夹下的yolov3_nv12_hybrid_horizonrt.bin替换成刚才得到的yolov5_672×672_nv12.bin,建议将文件名改成yolov5_nv12_hybrid_horizonrt.bin,方便后面对配置文件的修改。

修改配置文件的过程很简单粗暴,把文件名和文件内容中的yolov3字段全部替换成yolov5。此外,configs文件夹下的infer_yolov3_config_2M.json和infer_yolov3_config_8M.json需要进一步修改,以infer_yolov_config_2M.json为例:

下面列出了所有需要修改的文件:

  • build_and_deploy.sh

  • CMakeLists.txt

  • main.cc

  • run_example.sh

  • configs/infer_yolov3_config_2M.json
  • configs/infer_yolov3_config_8M.json
  • configs/solution_yolov3.json
  • configs/workflow_yolov3.json
  • plugins/example_smart_plugin/include/example_smart_plugin.h

  • plugins/example_smart_plugin/src/example_smart_plugin.cc

四、更新model_inference库

yolov3_mobilenetv2_example中调用了model_inference库来完成yolov3的算法推理(predict和postprocess),但没提供yolov5的,需要自定义yolov5的处理method,然后更新model_inference库。

找到model_inference的开发包位置,路径为/ddk/package/host/source_code/model_inference。

/include/model_inference/postprocess存放模型的postprocess.h文件(例如yolov3_postprocess.h),在此新增yolov5_postprocess.h,代码如下:

/src/postprocess存放模型的postprocess.cc文件(例如yolov3_postprocess.cc),在此新增yolov5_postprocess.cc,代码如下:

新增了yolov5的postprocess方法后,需要注册yolov5_postprocess,将/scr/postprocess.cc修改为:

接下来,使用cmake对model_inference进行打包。因为我用的是docker环境,所以需要先将model_inference开发包添加到容器中。需要注意的是,因为model_inference依赖其他的一些库,所以我将整个/ddk/package都添加到了容器中。model_inference开发包中已经提供了cmake的配置文件CMakeLists.txt,所以只需要在model_inference目录下依次执行以下指令:

output文件夹里存放了cmake后的model_inference库,用它更新原来的model_inference库,docker容器中库的路径为/root/.horizon/aarch64/x3/model_inference。

五、运行yolov5_mobilenetv2_example

yolov3_mobilenetv2_example中调用了model_inference库来完成yolov3的算法推理(predict和postprocess),但没提供yolov5的,需要自定义yolov5的处理method,然后更新model_inference库。

算法工具链
+4
评论5
0/1000
  • gxwyxajh88
    Lv.1
    你好,根据文中提到的文件进行了修改也增加了yolov5的postprocess文件,但是编译的时候提示“CMakeFiles/model_inference.dir/build.make:335: recipe for target 'CMakeFiles/model_inference.dir/src/postprocess/yolov5_postprocess.cc.o' failed”
    2022-01-13
    0
    1
    • gxwyxajh88回复gxwyxajh88:

      问题找到了,yolov5_postprocess.cc后处理这里的209读取配置的时候用的还是yolov3的config定义

      2022-01-13
      0
  • wshrhhh
    Lv.1

    请问大佬,按照教程上板运行后,报以下错误:

    [000:000] (packed_model.cpp:440): Model not exists: Darkent2Caffe_hybrid

    (inference_engine_dnn.cc:203): not found model: Darkent2Caffe_hybrid

    (inferencer.cc:128): LoadModelHandle failed.

    (method_manager.cc:112): methods init failed

    请问是怎么回事?

    2022-01-18
    0
    1
    • ywh_tuoba回复wshrhhh:

      我也是出现这个问题

      2022-01-18
      0
  • Horizon_guosheng
    Lv.1

    感谢您的分享,我们提供一份礼物,请联系Horizon_robot获取

    2022-01-14
    0
    0
  • ywh_tuoba
    Lv.1
    作者好,我用模型转换示例中的yolov3生成的yolov3_416x416_nv12.bin替换solution_example里的yolov3_nv12_hybrid_horizonrt.bin,也出现Model not exists: Darkent2Caffe_hybrid错误,麻烦作者指导下,多谢!
    2022-01-19
    0
    0
  • 戒断多巴胺
    Lv.1

    编译model_inference模块报错如下:

    [ 96%] Linking CXX executable tensor_task

    ../../libmodel_inference.so:对‘vtable for inference::YoloV5PostProcess’未定义的引用

    collect2: 错误: ld 返回 1

    test/tensor_task/CMakeFiles/tensor_task.dir/build.make:97: recipe for target 'test/tensor_task/tensor_task' failed

    make[2]: *** [test/tensor_task/tensor_task] Error 1

    CMakeFiles/Makefile2:143: recipe for target 'test/tensor_task/CMakeFiles/tensor_task.dir/all' failed

    make[1]: *** [test/tensor_task/CMakeFiles/tensor_task.dir/all] Error 2

    make[1]: *** 正在等待未完成的任务....

    2022-02-15
    0
    0