Report/Yolov5s部署RK3588.md

106 lines
3.8 KiB
Markdown
Raw Normal View History

2024-10-13 16:23:54 +08:00
# 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`