Giter Club home page Giter Club logo

yolov5-rk's Introduction

仓库说明:

原版仓库: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 5(单位:ms):

模型(416x416输入) rknn_toolkit_1.6.0模拟器评估(800MHZ)_rv1109 rv11093 rv1109(模型预编译) rv1126 rv1126(模型预编译) rknn_toolkit_1.6.0模拟器评估(800MHZ)_rk1808 rk1808 rk1808(模型预编译)
yolov5s_int81 92 113 80 77 89 83 81
yolov5s_int8_optimize2 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_setrknn_runrknn_outputs_get 三部分时间,不包含cpu端后处理时间。除模拟器评估外,本表其他平台的测试均遵循此原则。

4: 该测试仅供参考,测试时为单线程循环执行计时,仅测试npu效率。实际使用时应该考虑后处理的时间。

5: 本库仅涉及 python 端的开发, 暂不涉及 部署端代码。

TODO

  • 兼容前端的slice操作。
  • 兼容原版激活函数。
  • npu速度测试
  • 开源优化方式。

参考库:

https://github.com/soloIife/yolov5_for_rknn

https://github.com/ultralytics/yolov5

技术交流群:

QQ群:810456486

yolov5-rk's People

Contributors

glenn-jocher avatar alexstoken avatar borda avatar nanocode012 avatar zen-xingle avatar taoxiesz avatar lornatang avatar anon-artist avatar ayushexel avatar yxnong avatar tkianai avatar laughing-q avatar aehogan avatar lorenzomammana avatar kinoute avatar wanghaoyang0106 avatar olehb avatar developer0hye avatar ownmarc avatar dlawrences avatar toretak avatar alexwang1900 avatar edurenye avatar dependabot-preview[bot] avatar ab-101 avatar yuriribeiro avatar uyzhang avatar williemaddox avatar wang-xinyu avatar vdlmv avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.