文章目录
一直没有看到介绍深度学习相关项目从PC端训练到嵌入式端部署全流程的文章,故在此写一个全面的介绍,以花分类模型为例,使用PyTorch框架,在地平线X3开发板上部署的整个流程。
欢迎大家多多指教,一起学习,一起交流!
1 故事开头
有一天,老板给了我一堆花的图片,要求我在嵌入式设备上实现任意给一张图片,能分辨出它属于什么类别。
2 问题分析
在我看来,问题主要包括以下几个方面:
- 卷积神经网络结构理解
- 分类数据集的制作
- 服务器端训练模型并预测
- 服务器端训练得到的pth模型转换成onnx模型并验证
- 地平线X3开发板系统安装、docker环境搭建
- 将onnx模型转换成能在X3开发板上跑的异构模型
- 模型在X3开发板上跑起来
本系列以mobilenetv2
网络为例进行介绍,为了说明整个流程的可行性,同时在resnet34网络上进行了实验,在文章中两者均会提供源码供大家选择。
本系列主要是为了打通模型训练、部署全流程,故内容会介绍的非常基础,请高端玩家选择性“食用”。
3 Mobilenetv2网络结构介绍
详细内容参考博文:MobileNetV2网络结构详解并获取网络计算量与参数量
4 服务器端训练自制分类数据集并预测
详细内容参考博文:MobileNetV2训练自定义分类数据集
5 将pth模型转换成onnx模型
详细内容参考博文:pytorch分类模型导出onnx模型并验证
6 文件1下载
3, 4,5节均是在服务器端完成的,在这里提供与之对应的数据和代码:
- 原始数据集
链接:https://pan.baidu.com/s/1JFF4TE7wb1MSNYbuaOLIXQ
提取码:karm
- 已划分成train和val的数据集
链接:https://pan.baidu.com/s/1F1Wd7prt7IJ58W60h6J-yQ
提取码:l973
- mobilenetv2对应代码
链接:https://pan.baidu.com/s/1hpE3m7S_Bmkwu_u5qHfrxg
提取码:pl0f
- resnet34对应代码
链接:https://pan.baidu.com/s/1Uq8fXi5x7yiGhiyAK71-FQ
提取码:ncbx
7 旭日3开发板Ubuntu20.04系统镜像安装
详细内容参考博文:地平线旭日3开发板Ubuntu20.04系统镜像安装
8 配置地平线提供的docker开发环境
详细内容参考博文:配置地平线提供的docker开发环境
9 在docker环境中将onnx模型转换成上板模型
详细内容参考博文:将pytorch生成的onnx模型转换成.bin模型
在这里,踩了个坑,记录一下:地平线X3开发板 模型转换期间config.yaml文件中的input_layout_rt踩坑记录
10 文件2下载
在文件1下载
处,最后会得到onnx模型,将这个onnx模型在docker环境中进行转换,其数据与代码如下:
- mobilenetv2对应代码
链接:https://pan.baidu.com/s/1U42Bqn5OvWdkSukress9zg
提取码:r7w6
- resnet34对应代码
链接:https://pan.baidu.com/s/14Xuqn4tfaZWSwmqI2YT6MA
提取码:317f
11 将异构模型部署在X3开发板上
详细内容参考博文:地平线x3开发板bin模型上板运行
12 文件3下载
在开发板上运行的代码如下:
- mobilenetv2对应代码
链接:https://pan.baidu.com/s/10L5bv8kUo_mmW1wK5O6stg
提取码:0nz3
- resnet34对应代码
链接:https://pan.baidu.com/s/1RpZQkr4A5OTqOkCzLI1z1g
提取码:kqbp
13 所有文件下载
链接:https://pan.baidu.com/s/172894sZRWe4GoGs_pmqQDQ
提取码:1arz