YOLO-V5 系列算法和代码解析(八)—— 模型移植
创始人
2024-05-28 17:01:37
0

文章目录

    • 工程目标
    • 芯片参数
    • 查阅官方文档
    • 基本流程
      • Python 版工具链安装
      • RKNPU2的编译以及使用方法
    • 移植自己训练的模型

工程目标

将自己训练的目标检测模型【YOLO-V5s】移植到瑞芯微【3566】芯片平台,使用NPU推理,最终得到正确的结果。整个过程涉及模型量化、转换,C++部署。

芯片参数

芯片参数介绍:https://www.rock-chips.com/a/cn/product/RK35xilie/2021/0113/1273.html
CPU:四核,1.8GHZ.
NPU:1TOPs@Int8,每秒一万亿次运算。
在这里插入图片描述
在这里插入图片描述

查阅官方文档

通常每一款芯片都有其对应的使用文档和工具链,以此作为开发的参考。通过官方文档,可以确认开发环境(Ubuntu, python版本等),工具链版本,不同深度学习框架的Demo,以及一些特别的注意事项等。

  1. python 版本工具链
    rknn-toolkit2:https://github.com/rockchip-linux/rknn-toolkit2.
    在这里插入图片描述
  2. C 版本工具链
    rknpu2:https://github.com/rockchip-linux/rknpu2,用于编译在RK板子上推理的工具链。
    在这里插入图片描述

基本流程

部署流程:

  1. 安装 Python 版本的工具链(RKNN-ToolKit2),可以在PC端将(.onnx,.pt,.ckpt)导出为(.rknn)模型。该步骤可以验证自己训练的模型是否可以成功导出,卷积算子是否支持,预测效果是否可用,量化效果等功能。
  2. PC 端配置 C 版本工具链(RKNPU2),编译自己的 C++ 推理工程,编译得到的可执行文件可以在RK芯片运行。
  3. 将得到RKNN模型和可执行文件,以及RK一些必要的依赖库(.so)放入芯片上,可以直接运行。

Python 版工具链安装

下图是Python版本工具链目录结构,在【DOC】目录中提供了英文版和中文版的使用文档。
在这里插入图片描述
初次使用该工具链的时候,仔细阅读如下文档:

  1. “Rockchip_Quick_Start_RKNN_SDK_V1.4.0_CN.pdf”,该文档主要介绍了安装教程,运行demo以及一些基本的硬件参数,内容相对较少,(配置环境,运行demo建议阅读此文档)。
  2. “Rockchip_User_Guide_RKNN_Toolkit2_CN-1.4.0.pdf”,详细介绍了API接口得使用规则,以及其它相关内容,(具体API的使用,可以参考此文档)。

本教程使用【pip】的方式安装,docker也是官方建议的安装方式,看自己对哪种方式更为熟悉。结合文档的流程,具体操作过程如下:

  1. 创建虚拟环境
    conda create -n rknn2 python==3.6
    conda activate rknn2
  2. 安装依赖库
    在这里插入图片描述
  3. 进入工程的根目录
    在这里插入图片描述
  4. 安装必要相应版本的依赖包
    pip install -r doc/requirements_cp36-1.4.0.txt (下图是官方给的问题解决办法)
    在这里插入图片描述
    值得注意:在配置软件包的过程中,遇到“匹配不到XX版本”的问题,按照上述方式,并不能解决。
    解决办法:首先安装Numpy(pip install numpy==1.19.5),然后执行上述命令,pip install -r doc/requirements_cp36-1.x.x.txt. 可能还有其它的错误,要根据错误提示,具体问题,具体分析。
  5. 安装RKNN软件包
    python pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl
  6. 检查RKNN-Toolkit2是否安装成功
    如下图所示,没有出错,则表示安装成功
    在这里插入图片描述
  7. 测试官方 YOLO-V5 Demo
    在这里插入图片描述
  8. 运行目录下的【test.py】
    python test.py
    如下图所示,运行平台是PC(linux)模拟器,转换得到【yolov5s.rknn】模型。
    在这里插入图片描述

RKNPU2的编译以及使用方法

主要介绍板子上为Linux系统64位的编译以及使用,具体流程如下:

  1. 下载编译工具链(Arm版)
    由于板子上是Linux系统,所以下载gcc编译器,下图是【官方推荐】的gcc版本以及下载链接,
    在这里插入图片描述
    遇到问题:上述GCC的下载链接不存在,也没有找到gcc-9.3版本的下载链接。后来又找到gcc-9.3(没有测试是否可用),https://gitlab.com/firefly-linux/prebuilts/gcc/linux-x86/aarch64/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu.
    解决办法:下载其它版本的交叉编译器,【gcc-6.3】,下载链接如下,
    http://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/(参考博客为:https://blog.csdn.net/song_lee/article/details/105487177)。
  2. 下载部署源码
    下载地址:https://github.com/rockchip-linux/rknpu2.
  3. 编译官方 YOLOV5 Demo
    Git官方上的方法如下:https://github.com/rockchip-linux/rknpu2/tree/master/examples/rknn_yolov5_demo
    在这里插入图片描述
    仿照上述方式,针对自己下载的版本,终端命令如下:
      export TOOL_CHAIN=/opt/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/
      ./build-linux_RK356X.sh
    按照上述方法,仍并无法编译成功,报错如下图所示,找不到如下可执行文件 “aarch64-linux-gnu-gcc”
    在这里插入图片描述
    为此,修改【build-linux_RK356X.sh】脚本,将编译器所在目录写完整,具体修改如下图所示:
    在这里插入图片描述
    至此,可以成功编译YOLO-V5的例子,会在当前路径下生成【install】目录,目录中包含了扫地机上运行所需要的库,模型(可以通过rknn-toolkit2转换得到),测试图片,可执行程序,目录展开如下:
    在这里插入图片描述
    板子上运行(使用adb)
    下图是Git上给的方式,将adb线插到扫地机,进行扫地机和PC端进行数据传输
    在这里插入图片描述
    Xshell 连接板子,运行程序即可。

移植自己训练的模型

移植自己训练的YOLOV5s,由于应用任务场景的不同,输出与官方YOLOV5的输出略有差异。与官方的Demo相比,需要修改一些输出的尺寸。具体流程如下:

  1. 导出RKNN模型
    注意修改网络的输出大小:官方的模型yolov5s 输出的形状如下
      output[0].shape=(1, 255, 80, 80), 自训练的模型输出为(1, 3, 80, 80,21)
      output[0].shape=(1, 255, 40, 40), 自训练的模型输出为(1, 3, 40, 40,21)
      output[0].shape=(1, 255, 20, 20), 自训练的模型输出为(1, 3, 20, 20,21)
    为了适配官方提供的后处理,可以导出中间层的模型。用软件【Netron】打开自训练的模型,获得指定输出层的编号,如下图所示,得到输出为 (1, 63, 40, 40),
    在这里插入图片描述
    根据上述的网络节点的编号,代码需要修改的位置如下图所示,这样导出的模型可以完全与官方的后处理代码兼容。
    在这里插入图片描述
  2. 编译RK板子的运行程序
    参考上面的流程,修改相应的输出,直接编译即可。
  3. 板子上运行
    参考上面的流程,运行即可。

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...