Report/Yolov5s部署RK3588.md

106 lines
3.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Yolov5s部署
实现步骤:
1. 本地: best.pth
2. 本地: best.pth -> best.onnx
2. 本地 Linux: best.onnx -> best.rknn
2. RK3588 Linux: best.rknn 部署在开发板
## 1 获取 best.pth
下载对应版本的yolo5代码训练得到best.pth
https://github.com/ultralytics/yolov5/tree/v6.0
## 2 best.pth 转化为 best.onnx
修改一段代码注意训练阶段不要修改。将yolov5/models/yolo.py文件中class Detect(nn.Module)类的函数forword修改。
![image-20240930142733290](./imgs/yolov5s/image-20240930142733290.png)
修改后将best.pt移动至yolov5/export.py同一文件夹下在命令行调用以下命令
```
python export.py --weights best.pt --img 640 --batch 1 --include onnx
python export.py --weights best.pt --include onnx
```
便可以得到成功转换的模型best.onnx。
(可能会报错说ONNX版本不支持那么就将export.py中parse_opt()函数的--opset参数修改为12)
(也可能报错说不支持SiLU把./models/common.py里的SiLU改成ReLU即可)
## 3 best.onnx 转化为 best.rknn
此处的转换工具只能在Linux系统上运行在linux上下载clone[转换工具rknn-toolkit2](https://github.com/rockchip-linux/rknn-toolkit2)。并配置好相关环境,使用`docker`或直接配置。
1. Docker
根据`rknn-toolkit2\docker\docker_file\ubuntu_18_04_cp36`目录下的`Dockerfile`构建。
2. 直接配置(我所采用的)
2.1 下载conda环境有的话跳过
```
wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod 777 Miniconda3-latest-Linux-x86_64.sh
sh Miniconda3-latest-Linux-x86_64.sh
```
结束后重启命令行或执行`source ~/.bashrc`。
2.2 创建名为rknntool的python3.8环境,并进入:
```
conda create -n rknntool python=3.8
conda activate rknntool
```
2.3 进入./doc目录
```
pip install -r requirements_cp38-1.5.0.txt
```
2.3进入./ packages目录
```
pip install rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
```
终端中运行python输入`from rknn.api import RKNN`,不报错即成功。
进入`./examples/onnx/yolov5`将上文得到的best.onnx文件和待预测图片也可以没有复制到此文件夹中修改test.py文件。
![image-20240930143123913](./imgs/yolov5s/image-20240930143123913.png)
![image-20240930143129692](./imgs/yolov5s/image-20240930143129692.png)
修改完后执行`python test.py`这里的test.py构建了一个虚拟的NPU运行环境模拟在RK3588上真实运行的情况。这时在当前文件夹`./example/onnx/yolov5`中可以看到生成的`best.rknn`模型和结果图片result.jpg。
## 4 RK3588 上部署 best.rknn
开发板环境还不完备后面需要什么就安装什么apt install xxx例如gitgccg++等。
1. 拉取官方demo[rockchip-linux/rknpu2](https://github.com/rockchip-linux/rknpu2)到自己的目录下
```
git clone https://github.com/rockchip-linux/rknpu2
```
(注意此步骤不能windows上下载后传到开发板要在开发板上拉取)
2. 进入`/home/lhk/rknpu2/examples/rknn_yolov5_demo`目录。有需要的话则修改下图内容为自己的。![image-20240930144426376](./imgs/yolov5s/image-20240930144426376.png)
3. 将转换后的best.rknn文件放在`model/RK3588`目录下,运行`bash ./build-linux_RK3588.sh`成功后生成install文件夹进入`install/rknn_yolov5_demo_Linux`。需要gccg++环境,安装即可)
4. 在model目录下放入需要推理的图片test.jpg运行`./rknn_yolov5_demo ./model/RK3588/best.rknn ./model/test.jpg`
也可以支持h264、h265、rtsp视频流。例如h264视频流指令:
`./rknn_yolov5_video_demo model/RK3588/best.rknn model/test.h264 264`