# yolov5_for_rk1126
**Repository Path**: linux12345/yolov5_for_rk1126
## Basic Information
- **Project Name**: yolov5_for_rk1126
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-10-12
- **Last Updated**: 2025-03-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 仓库说明:
原版仓库:https://github.com/ultralytics/yolov5
环境要求:python version >= 3.6
模型训练:python3 train.py
模型导出:python3 models/export.py --rknn_mode
模型预测:python3 detect.py --rknn_mode
## 删改说明:
将common文件中激活层修改为ReLU,此外模型结构、训练、测试及其他操作均与原版本 Yolov5 一致。模型测试、导出时增添 rknn_mode 模式,导出对rknn友好型模型。(基于opset_version=10, rknn_toolkit_1.6.0测试通过)
实现细节:
- onnx.slice 在 rknn_toolkit_1.6.0 的模型载入会有报错。增添等价替换模型。(卷积)
- ~~onnx.opset_version=12 不支持 SiLU 激活层,可增添等价替代模型解决。(x* sigmoid(x))~~
- ~~onnx.upsample.opset_version=12 在 rknn_toolkit_1.6.0的实现 暂时存在问题,增添等价替换模型。(反卷积) 。~~
***4.29更新***:
- 导出模型可选择去掉尾端的permute层,从而**兼容rknn_yolov5_demo的c++部署代码**
`python3 models/export.py --rknn_mode --ignore_output_permute`
- 导出模型可选择增加**图片预处理层**,可**有效降低部署段 rknn_input_set 的时间耗时**。具体使用方法参考 models/common_rk_plug_in.py 里的 preprocess_conv_layer 的说明。
`python3 models/export.py --rknn_mode --add_image_preprocess_layer`
(rknn_mode、ignore_output_permute、add_image_preprocess_layer 三者不互斥,可同时使用)
- 增加onnx->rknn模型导出工具,详见rknn_convert_tools文件夹。
##### *5.12更新*:
- 导出模型使用 --rknn_mode 时候,默认将 大尺寸的 maxpool 等价替换成 多个 小尺寸的 maxpool,对计算结果无影响,但可以显著提升在 rknpu 上的推理速度。
## 已知问题说明(不影响目前使用):
- onnx.opset_version=12 不支持 SiLU 激活层,可增添等价替代模型解决。(x* sigmoid(x)) 但是rknn_toolkit_1_6_0 模拟中结果正常,部署到板子端会出现异常。默认暂不使用,等待rk修复。
- onnx.upsample.opset_version=12 在 rknn_toolkit_1.6.0的实现 暂时存在问题,增添等价替换模型。(反卷积) 。rknn_toolkit_1_6_0模拟中结果正常,部署到板子端会出现异常。默认暂不使用,等待rk修复。
------
### rk_npu速度测试[4](#脚注4) [5](#脚注5)(单位:ms):
| 模型(416x416输入) | rknn_toolkit_1.6.0模拟器评估(800MHZ)_rv1109 | rv1109[3](#脚注3) | rv1109(模型预编译) | rv1126 | rv1126(模型预编译) | rknn_toolkit_1.6.0模拟器评估(800MHZ)_rk1808 | rk1808 | rk1808(模型预编译) |
| :---------------------- | :-----------------------------------------: | :-------: | ------------------ | :-----: | :----------------: | :-----------------------------------------: | :----: | :----------------: |
| yolov5s_int8[1](#脚注1) | 92 | 113 | | 80 | 77 | 89 | 83 | 81 |
| yolov5s_int8_optimize[2](#脚注2) | **18** | **45** | | **36** | **33** | **15** | **30** | **29** |
| yolov5s_int16 | 149 | 160 | | 110 | 108 | 106 | 178 | 174 |
| yolov5s_int16_optimize | 76 | 90 | | 67 | 64 | 32 | 126 | 122 |
| yolov5m_int8 | 158 | 192 | | 132 | 120 | 144 | 132 | 123 |
| yolov5m_int8_optimize | **47** | **88** | | **66** | **55** | **33** | **54** | **45** |
| yolov5m_int16 | 312 | 302 | | 212 | 202 | 187 | 432 | 418 |
| yolov5m_int16_optimize | 202 | 198 | | 147 | 137 | 76 | 354 | 344 |
| yolov5l_int8 | 246 | 293 | | 199 | | 214 | 192 | |
| yolov5l_int8_optimize | **98** | **155** | | **110** | | **66** | **88** | |
| yolov5l_int16 | 577 | 522 | | 362 | | 301 | 697 | |
| yolov5l_int16_optimize | 432 | 384 | | 275 | | 154 | 592 | |
1: 是指基于原版的yaml配置,激活层修改为relu。
2: optimize是指在导出模型时对 大尺寸maxpool 进行优化,现已开源,导出参数 --rknn_mode 时默认使用。不会影响精度。
3: 统计时间包含 **rknn_inputs_set**、**rknn_run**、**rknn_outputs_get** 三部分时间,不包含cpu端后处理时间。除模拟器评估外,本表其他平台的测试均遵循此原则。
4: 该测试仅供参考,测试时为单线程循环执行计时,仅测试npu效率。实际使用时应该考虑后处理的时间。
5: 本库仅涉及 python 端的开发, 暂不涉及 部署端代码。
## TODO
- [x] 兼容前端的slice操作。
- [x] 兼容原版激活函数。
- [x] npu速度测试
- [x] 开源优化方式。
## 参考库:
https://github.com/soloIife/yolov5_for_rknn
https://github.com/ultralytics/yolov5
## 技术交流群:
QQ群:810456486