Code Monkey home page Code Monkey logo

my-rknn-yolov5's Introduction

本工程以Yolov5算法为例介绍rknn的使用,流程包含了:转换模型和模型部署(不含训练)。

一、工程目录

|-- README.md
|-- commons                         # 帮助工具
|   |-- rknn-convert                # 转换其他框架的模型到rknn,包括(tensorflow、tflite、caffe、onnx)
|   `-- yolov5-torch2rknn-convert   # 将torch框架训练的yolov5的模型转成rknn支持的onnx
|       |-- common.py
|       |-- common_rk_plug_in.py    # rknn 中兼容的网络层
|       |-- experimental.py
|       |-- export.py               # 将torch框架训练的yolov5的模型转成rknn支持的onnx,内部做了兼容
|       |-- yolo.py                 # 自动生成torch下的yolov5网络
|       |-- yolov5l.yaml 
|       |-- yolov5m.yaml
|       |-- yolov5s.yaml
|       `-- yolov5x.yaml
|-- cpp                             # 使用rknn部署的yolov5算法的C++示例
|-- data                            # 数据/测试图片
|-- docs
|-- model                           # 模型文件(待转换的模型、待测试的模型)
|   |-- face-focus-removed.onnx     # python代码中使用的人脸检测测试模型(转换后的)
|   |-- face-model.pt               # 人脸检测训练好的模型,需要使用export.py转换成rknn
|   `-- yolov5s.onnx                # yolov5示例转换好的模型,
|-- packages                        # rknn-toolkit包
|-- python                          # 使用rknn部署的yolov5算法的python示例
|   |-- detector_bridge.py
|   |-- rknn_impl.py
|   |-- test.py                     # 示例程序入口
|   |-- torch_impl.py
|   `-- yolov5_detector_impl.py
`-- runs                            # 运行结果暂存

二、搭建环境

环境 :

  • python==3.6.13
  • torch==1.7.0
  • rknn-toolkit==1.6.0

安装 :

  • rknn-toolkit : 安装包位于工程目录packages下

三、使用步骤

1. 将训练好模型转成rknn支持的(tensorflow、tflite、caffe、onnx)

torch转rknn:

目前只是针对yolov5算法的torch模型转rknn,如遇其他算子不支持,可以按照此思路进行兼容

  • 工具位置 : /commons/yolov5-torch2rknn-convert/
  • 命令: python models/export.py --weights ./weights/yolov5s.pt --img-size 640 --batch 1 --rknn_mode

其他框架转rknn :

针对tensorflow、tflite、caffe、onnx转换rknn,并提供了自定义网络层的示例

  • 工具位置 : /commons/rknn-convert

2. 加载转换好的模型,使用rknn部署

目前针对yolov5算法做了部署rknn的示例代码,包括两个工程python和cpp

问题 :

1. 原计划直接使用commons中的export.py将训练好的pytorch模型直接转换为rknn支持的onnx,使用了个人间检测的,转换不成功

  • torch版本低,目前是用的项目中使用的torch版本1.7.0
(rknn-toolkit) autobuild@ubuntu-server-117:~/wangwengang/my-rknn-yolov5/commons/yolov5-torch2rknn-convert$ python models/export.py --weights /home/autobuild/wangwengang/my-rknn-yolov5/model/face-model.pt --img 640 --rknn_mode
Namespace(batch_size=1, device='cpu', dynamic=False, grid=False, img_size=[640, 640], rknn_mode=False, weights='/home/autobuild/wangwengang/my-rknn-yolov5/model/face-model.pt')
Using torch 1.5.1 CPU

weight :  /home/autobuild/wangwengang/my-rknn-yolov5/model/face-model.pt
Traceback (most recent call last):
  File "models/export.py", line 39, in <module>
    model = attempt_load(opt.weights, map_location=device)  # load FP32 model
  File "/home/autobuild/wangwengang/my-rknn-yolov5/commons/yolov5-torch2rknn-convert/models/experimental.py", line 119, in attempt_load
    ckpt = torch.load(w, map_location=map_location)  # load
  File "/home/autobuild/miniconda3/envs/rknn-toolkit/lib/python3.6/site-packages/torch/serialization.py", line 592, in load
    return _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)
  File "/home/autobuild/miniconda3/envs/rknn-toolkit/lib/python3.6/site-packages/torch/serialization.py", line 852, in _load
    result = unpickler.load()
AttributeError: Can't get attribute 'SiLU' on <module 'torch.nn.modules.activation' from '/home/autobuild/miniconda3/envs/rknn-toolkit/lib/python3.6/site-packages/torch/nn/modules/activation.py'>

2. numpy冲突

  • 使用conda重新起了环境

my-rknn-yolov5's People

Contributors

mrwangwg123 avatar

Stargazers

warm tan avatar liang zhuohua avatar  avatar  avatar  avatar Johnny Lai avatar shuike avatar PanYu avatar  avatar Kang avatar  avatar  avatar Tuo-Shi avatar  avatar zorro avatar  avatar BokaQin avatar alpha avatar  avatar 墨理学AI avatar  avatar Code1 avatar  avatar wanqi avatar  avatar  avatar zy avatar yy avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

my-rknn-yolov5's Issues

Nice Work!

Rebuild some op such as Focus, Silu etc... very good~

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.