最近的主要任务是完成自训练的yolov5s模型转rknn模型。
以下为收集资料阶段的结果:
1、首先从RP-rknpu配置说明的文件可以知道:
RV1126_RV1109 的 npu 默认配置为 mini 的,mini 是不带 rknn_server 的,所以不能通过 pc 端连接 主板仿真。但是可以解决。
——————————————————————
2、rknn lite 是仅仅包含推理功能的包.适合装在开发板上.
3、 rknn toolkit 是包含推理和模型转换还有模拟的开发包. 功能全面, 不建议装在开发板上. 此包依赖 TensorFlow和pytorch 等其它库比较多.
4、因我个人一般使用windows, 建议开发环境训练机是在windows下, 装python3.6版. (一定要装3.6) 然后装rknn toolkit, 如果需要交叉编译等建议使用Ubuntu
5、建议开发版上 装python3.7版 (一定要装3.7). 然后装rknn lite
6、开发板上安装 pytorch 有打包好的源, 无需编译. 详见:
https://blog.csdn.net/phker/article/details/118190816
7、建议使用pytorch训练, 然后转onnx, 然后再用onnx转rknn. 将转换得到的rknn文件, 复制到开发板上, 使用rknn lite 进行推理运算.
yolov5 还是得用修改过的库. 修改过的库才能正常转换成rknn...
对新算子的支持还没跟上, 需要将yolov5中的模型做一些修改,
改变之后重新训练新的模型. 再去转onnx, 然后转rknn
yolov5 的模型转换目前存在问题, 无法支持yolov5的全部op算子, 如需使用建议用魔改版的yolov5有下面两个:
https://github.com/EASY-EAI/yolov5
https://github.com/littledeep/YOLOv5-RK3399Pro
EASY-EAI属于比较基础能跑通的项目, 没有后面的可视化部分.
YOLOv5-RK3399Pro 是在 EASY-EAI 的基础上增加了, 可视化和量化,预编译部分的代码
建议不要使用官方的yolov5 模型, 官方的由于更新太快了, rknn的速度跟不上, 训练和转换模型是往往会出现各种各样的算子不支持的问题.
还是使用 https://github.com/littledeep/YOLOv5-RK3399Pro 比较好.
去下载 https://github.com/littledeep/YOLOv5-RK3399Pro吧,
训练的时候可能会遇到点小问题,
记得模型转换onnx的时候如果遇到失败了, 要把 opset 改成 11
把训练的weights 参数改成 ‘’ 空字符串, 这样是全新的训练. 不用下载官方模型.
2021-11-5日,
经过测试在3399pro这块板子上, 未做模型量化, 识别速度0.35秒一张图, 速度很慢无法达到实时.
https://github.com/littledeep/YOLOv5-RK3399Pro.git
这个项目里面, 把Detect 层给排除掉了, 放到了后处理之后单独再处理. 也就是放到了CPU中进行处理. 这样肯定是慢的...
把Detect层移到NPU里面算应该会快很多. 不知道rknn啥时候能支持Detect层的操作?
主要是学习Rockchip_User_Guide_RKNN_Toolkit_V1.7.1_CN这个文档。
10、针对yolov5的6.0版本:
这里有一个我觉得应该比较靠谱的,然后解决训练的问题就行了。
yolov5.onnx转rknn失败的解决方案 - 知乎 (zhihu.com)
11、有个收费专栏似乎内容相近,相信大家都明白如何解决:
(3条消息) rockchips--RV1126_陈 洪 伟的博客-CSDN博客
12、RKNN的可视化工具:
python3 -m rknn.bin.visualization
13、一个看起来不错的仓库
(3条消息) yolov5_for_rknn:PyTorch中的YOLOv5>ONNX>RKNN_rknnyolov5,yolov5转rknn-其它代码类资源-CSDN文库
14、PC端运行yolov5官方demo
(3条消息) PC端运行yolov5官方demo:onnx文件转rknn并仿真_gloryor的博客-CSDN博客_rknn yolov5
15、(十九)实践出真知——yolov5s转onnx细节修改 - 知乎 (zhihu.com)
(1)需要收费的资料:11和13
(2)官方demo:1和14
(3)一个比较适合yolov5部署的项目:8(缺点是detector是在cpu上跑)
(4)最为详细的文档:9
(5)yolov5-6.0:10(也可以试试)
(6)RKNN可视化:12
(7)2~7是经验之谈,主要是开发环境、rknn-toolkit和rknn-lite
ultralytics/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLite (github.com)
目前已经出到了6.1版本,然后在5.0版本的时候YOLOv5s还是最适合嵌入式的最小最快模型,但是在6.0版本出现了一个YOLOv5n的模型,更小更快。但怎么说呢?考量到复现难度、6.0是极限我能转rknn的版本以及mAP,估计我还是老老实实用YOLOv5s吧。
然后的话官方的这个项目应该能做到的是:训练、转onnx、模型推理。
所以我推测rknn能做到的就是得先对onnx模型处理,然后转成rknn,并对rknn模型进行推理。
rockchip-linux (github.com)
其中rv1126使用的是rknn-toolkit,不要以为rknn-toolkit2是改进版
[1]rknpu
rknpu有驱动:
手动更新NPU驱动,就是将相关的驱动拷贝到对应的目录就可以。
adb push drivers/linux-armhf-puma/ /
adb push drivers/npu_ko/galcore_puma.ko /lib/modules/galcore.ko
adb push drivers/linux-armhf-puma-mini/ /
adb push drivers/npu_ko/galcore_puma.ko /lib/modules/galcore.ko
注意:adb不同版本的默认行为不一样,有些是直接push目录的,有些是push目录下的文件。因此替换完后,需要检查一下相关的库是否已经替换成功。比如通过md5sum检查对应文件的md5值是否相同。
另外,toybrick可能对文件路径进行了调整,因此最好通过toybrick自带的方式进行更新。
librknn_api与librknn_runtime的区别:
librknn_api是对librknn_runtime的封装,主要是为了减少对其他so的编译依赖,功能上并未区别。检查驱动版本时,一般以librknn_runtime.so为准。
[2]rknn-toolkit
这里主要关注yolov5,我得建议是对着这的教程弄:
rknn-toolkit/examples/pytorch/yolov5 at master · rockchip-linux/rknn-toolkit (github.com)
这里提一个奇怪的点,我挂了fastgithub去edge浏览器的github上看项目,但是无论怎么点都显示无法下载,解决办法是换成火狐浏览器就好了。
我发现我是个笨比,分割线下面是我最初的想法,当时还傻傻的用cmd去输入指令运行,后来发现其实可以直接vscode运行export.py。
一开始跑不通官方的项目中的export.py还去找别的项目,但现在官方的也跑通了。
然后的话遇到报错可以去分割线下面翻,应该是都能解决。
我已经按下面的报错修改过代码了,然后才用vscode去运行export.py,会报那个关于ssl的错,把关于ssl的两行注释掉就行。
但是要注意的是:分割线下的项目和官方yolov5-5.0项目的pt和转成的onnx文件都不一样,暂时不知道对后续有什么影响。
——————————————————————————————————————
这里用的项目是:
(十八)实践出真知——yolov5s部署rknn - 知乎 (zhihu.com)
Dreamdreams8/yolov5s_rknn_deploy (github.com)
提一句:我检查了一下yaml文件,这个项目应该跟yolov5官方5.0版本的一样,所以只要是官方5.0版本训练出来的pt文件应该也能用这个项目转换。
安装完requirements.txt运行转换遇到的第一个报错:
解决方法:
读报错信息,发现问题出现在:
yolov5s_rknn_deploy\yolov5s-to-onnx\utils\google_utils.py
然后又看到一个这个博客:
(1条消息) 2020 python解决requests.exceptions.SSLError: HTTPSConnectionPool问题_ywj_486的博客-CSDN博客
第一步:安装依赖库
pip install cryptography
pip install pyOpenSSL
pip install certifi
接下来修改那个google_utils.py文件
第二步:加入这一句
第三步:加一个库和代码
解决方法:
(1条消息) AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘_阳光不锈@的博客-CSDN博客
说明下的pt权重文件有问题,建议下官方的
建议去ubuntu下弄,建议直接弄官方给的rknn-toolkit,不建议用上面的知乎项目,因为那个项目用的是rknntoolkit2,环境也和rv1126所用的rknn-toolkit不同。
官方的demo中的test.py想在PC上模拟只有一个要注意:
ret = rknn.init_runtime(),原来括号里有指定平台,但目前我想在PC上仿真,所以去掉括号内容即可,但是现在在running model报了一个错:
解决方法:
这个应该只是警告,似乎并不影响程序运行,但现在还比较慢。
2、官方yolov5demo有一个报错:
那个是索引有问题我记得应该是output[]啥的,报错位置把索引从1,2,3改成0,1,2
————————————————————————————————
1、实践说白了就两步:得到onnx(运行export.py)和运行官方yolov5的test.py(得到rknn模型并预测)
2、
从yolov5的官方demo来看,实际上只要是yolov5的5.0版本的算子都是支持的。就意味着,只要你能把pt或者pth转成onnx,都是可以转换成rknn模型进行推理的。
然后现在有了几个新问题:
一个是原来进行推理的detect层似乎是不支持转换成rknn的,所以一般现在的处理是对除去detect层的模型转换成rknn模型。然后输入图片,借助rknntoolkit进行推理,得到推理后的数据,然后再通过程序来进行后处理(即确定种类、画框和置信度),而后处理的程序则一般是用cpu运行的,速度相对来说就比较慢。
此外,rknn推理速度上也有一些不同。所以为了推理速度,一般是:
改变如下:
这个的话就相当于我笔记里群里推荐的两个专门用于板子的yolov5模型,相当于用精度换速度。
最后的话还可以通过量化进一步加快推理速度,当然精度也会下降。
3、ubuntu下usb驱动的摄像头也是能照常工作。
4、那现在我项目干脆直接先实现电脑摄像头读取,然后用板子去计算结果然后再用电脑后处理。