1.使用地平线x3开发手册中的算法工具链进行一个图片示例的转换。链接如下
9.2 入门指南 | RDK X3用户手册 (horizon.cc)
在进行模型转换前,请确保已在开发机的Ubuntu或Centos系统中安装完成支持 Python 3.8.x 版本的 Anaconda3 环境。如果没有安装Anaconda3的小伙伴可以参考以下链接
【详细】Ubuntu 下安装 Anaconda_ubuntu安装anaconda-CSDN博客
2.在进行完一个图片的模型示例后你的ubuntu应该会生成以下文件

此文件为包含图片示例模型的所有权重文件
在目录yolov5s_v2.0/04_detection/03_yolov5s/mapper/下

模型转换完成后,会在 model_output 文件夹下保存模型文件和静态性能评估文件。
- torch-jit-export_subgraph_0.html # 静态性能评估文件(可读性更好)
- torch-jit-export_subgraph_0.json # 静态性能评估文件
- hb_model_modifier.log # 模型转换步骤生成日志信息
- cache.json # 缓存文件(RDK Ultra 优化等级optimize_level配置为O3场景下会自动生成)
- yolov5s_672x672_nv12.bin # 用于在地平线处理器上加载运行的模型
- yolov5s_672x672_nv12_calibrated_model.onnx # 中间过程模型文件,可用于后续模型的精度校验
- yolov5s_672x672_nv12_optimized_float_model.onnx # 中间过程模型文件,可用于后续模型的精度校验
- yolov5s_672x672_nv12_original_float_model.onnx # 中间过程模型文件,可用于后续模型的精度校验
- yolov5s_672x672_nv12_quantized_model.onnx # 中间过程模型文件,可用于后续模型的精度校验

.bin为后缀的就是上板运行所需的模型了。
3.如何转换自己所需的模型?
①首先我们需要将训练好的.pt 模型转换为.onnx模型,因为地平线算法工具只支持.onnx类型。
这里就不过多赘述,既然会训练模型那转换应该不成问题,大家可以在csdn上搜索具体教程。
把模型拖到yolov5s_v2.0/04_detection/03_yolov5s/mapper/目录下。

②其次我们只需要将以下几个文件的输入输出头改为自己模型文件名,再使用地平线算法工具链进行转换即可。

第一个没有改过点进去应该是如下名称

将文件名改为自己的模型,例如改为my_model.onnx.

③然后我们需要将两个配置文件名改为自己所需的名称,不然模型验证时,工具链无法找到配置文件,就无法进行转换。我这里已经改过:

两个配置文件的输入输出改为自己的模型名,因为工具链是根据两个配置文件来进行转换的,不改,工具链就无法输出模型。

④接下来打开一个conda环境的进行浮点型模型检测
先进入开发机模型转换环境
source activate horizon_bpu
检测模型
ls -l yolov5s_v2.0/04_detection/03_yolov5s/mapper
命令执行完毕后,若出现以下日志,说明模型已准备完成:

模型验证
进入浮点模型转换目录
cd yolov5s_v2.0/04_detection/03_yolov5s/mapper
#确认模型结构及算子是否支持,并提供每个算子执行硬件的分配情况(BPU/CPU),RDK X3 执行脚本:01_check_X3.sh ; RDK Ultra 执行脚本:01_check_Ultra.sh
bash 01_check_X3.sh

如果报错请检查配置文件和验证文件的输入输出是否替换成功。
这里大家需要注意下,运行的过程中会有模型的输出结构信息,需要记录下来,上板我们的后处理需要根据这里进行一定的调整和修改,672*672分辨率,二分类的模型特征输出如下:

模型转换
进行校准数据预处理
bash 02_preprocess.sh
出现以下日志信息无报错则预处理成功

模型转换
bash 03_build_X3.sh
命令执行完出现以下信息则转换成功

转换成功后我们可在yolov5s_v2.0/04_detection/03_yolov5s/mapper/目录下找到

转换后生成的.bin模型以及其他权重文件都在此文件下

我们所需的.bin模型就成功转换出来了,根据手册再进行上板运行。
第一次写博客,有问题的地方大家可以在评论区提出来,欢迎大家讨论。这篇博客是针对地平线智能车竞赛的,希望可以帮助到大家。谢谢观看!!!

117

被折叠的 条评论
为什么被折叠?



