yolov5的pt模型转化为rk3588的rknn,并在rk3588上调用api进行前向推理

当使用yolov5进行目标检测且进行边缘计算的场景时,要考虑性价比或者国产化的话,rk3588板子是个不错的选择。

本篇介绍yolov5的pytorch模型转化为rknn的流程,并展示在rk板子上如何调用相关api来使用转好的rknn模型进行前向推理。

pt转rknn流程

pt转onnx

首先将训练好的pt模型转为onnx中间模型,在转之前需要先修改主目录底下的models下的yolo.py的部分代码,将如图的forward推理部分进行注释。
在这里插入图片描述
替换为:

    def forward(self, x):
        z = []
        for i in range(self.nl):
            x[i] = self.m[i](x[i])
 
        return x

如果识别出现乱框的现象,则替换为:

    def forward(self, x):
        z = []
        for i in range(self.nl):
            x[i] = torch.sigmoid(self.m[i](x[i]))
 
        return x

记得在训练时再给他改回去,否则会报错,在转模型时才需要改这部分代码。
接下来运行export.py来转onnx:

python export.py --weights runs/train/exp/weights/best.pt --img 320 --batch 1 --include onnx

onnx转rknn

首先创建一个虚拟环境,我创建的python版本为3.8。可以直接使用pip install -r requirements.txt来创建环境;
如果出现报错,则使用conda env create -f environment.yml来创建。如果pip安装可以的话,可以直接-i换源比较方便。
这里rknn-toolkit2安装会失败是正常的,下面会手动进行安装。

*以上为直接复制我的环境,也可以根据下面的步骤来自己安装相应的包。

接下来下载RKNN-Toolkit2,可以通过官网下载,也可以通过我上传的资源下载。
下载完先进入刚才创建的环境安装rknn-toolkit2包,如图,进入packages底下,安装相关依赖:

pip install -r requirements_cp38-1.6.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
然后安装相关rknn-toolkit2包:

pip install rknn_toolkit2-1.6.0+81f21f4d-cp38-cp38-linux_x86_64.whl

*接下来进行onnx转rknn
在如图所示路径下打开test.py
在这里插入图片描述
修改相关参数
在这里插入图片描述
在这里插入图片描述
最后一个参数要改为rk3588,默认为rk3566。改完后直接运行test.py文件即可转为rknn。

rk板子上进行前向推理

因为rk3588是aarch64架构的,所以不能用rknn-toolkit2包,而是要用rknn-toolkit-lite2包,在rk上安装对应的whl:
在这里插入图片描述
代码如下:

from copy import copy
import time
import numpy as np
import cv2
from rknnlite.api import RKNNLite

RKNN_MODEL = 'best.rknn'
# IMG_PATH = './input/240513_00000741.jpg'
OBJ_THRESH = 0.25
NMS_THRESH = 0.45
IMG_SIZE = (640, 640)
OUTPUT_VIDEO_PATH = 'output_1.mp4'
BOX = (450, 150, 1100, 550)
CLASSES = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
           'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
           'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
           'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
           'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
           'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
           'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
           'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
           'hair drier', 'toothbrush']

anchors = [[[10, 13], [16, 30], [33, 23]],
           [[30, 61], [62, 45], [59, 119]],
           [[116, 90], [156, 198], [373, 326]]]

class Letter_Box_Info():
    def __init__(self, shape, new_shape, w_ratio, h_ratio, dw, dh, pad_color) -
### YOLOv5 .pt 模型RK3588(S)设备上进行实时摄像头检测的部署教程 #### 1. 准备工作环境 为了成功部署YOLOv5模型,在RK3588(S)设备上需要准备适当的工作环境。这包括但不限于安装特定版本的操作系统以及必要的开发工具。 - **操作系统**: RK3588应预装有Ubuntu 20.04 LTS系统[^3]。 - **辅助机器配置**: 推荐使用一台安装了Ubuntu 18.04或更高版本的计算机作为辅助开发平台,也可以采用虚拟机来满足此需求。 #### 2. 获取YOLOv5 PT模型 获得官方发布的YOLOv5 PyTorch (.pt) 文件之后,需将其转化为适合RK3588硬件加速器使用的格式——即RKNN文件。具体操作可以通过访问项目地址`https://gitcode.com/gh_mirrors/yo/yolov5-PT-to-RKNN`找到详细的指导说明和相关脚本[^1]。 ```bash # 下载yolov5-PT-to-RKNN仓库 git clone https://gitcode.com/gh_mirrors/yo/yolov5-PT-to-RKNN.git cd yolov5-PT-to-RKNN/ ``` #### 3. 安装依赖项与设置运行环境 确保所有必需软件包都已正确安装,特别是Python库和其他第三方组件。这部分通常涉及pip命令或其他包管理器来进行自动化处理[^4]。 ```bash # 更新apt源列表升级现有包 sudo apt update && sudo apt upgrade -y # 使用pip安装所需的Python库 pip install numpy opencv-python torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu ``` #### 4. 编译与优化模型 完成上述准备工作后,可以按照文档指示编译针对RK3588架构特点进一步优化YOLOv5模型性能。该过程可能涉及到调整超参数、量化权重等技术手段以提高推理速度而不显著降低精度。 ```bash # 运行换脚本将.pt为.rknn python convert_to_rknn.py --weights ./path/to/model.pt --output rknn_model_file_path.rknn ``` #### 5. 开发应用程序接口(API) 最后一步是编写能够调用经过化后的RKNN模型的应用程序逻辑。这里可以根据实际应用场景选择合适的编程语言实现API层面上的功能集成,比如通过OpenCV读取视频流YOLOv5预测结果相结合展示给用户。 ```python import cv2 from rknn.api import RKNN def detect_objects(image, model_path='rknn_model_file_path.rknn'): """加载RKNN模型对输入图片执行对象检测""" # 初始化RKNN实例 rknn = RKNN() # 加载RKNN模型 ret = rknn.load_rknn(model=model_path) if ret != 0: print('Load RKNN model failed') exit(ret) # 构建计算图 ret = rknn.init_runtime(target='rk3588') # 或者 'rk3566',取决于具体的芯片型号 if ret != 0: print('Init runtime environment failed') exit(ret) # 对单帧图像做向传播推断 outputs = rknn.inference(inputs=[image]) # 清理资源 rknn.release() return parse_output(outputs) cap = cv2.VideoCapture(0) # 打开默认摄像机 while True: ret, frame = cap.read() # 抓取当画面 if not ret: break results = detect_objects(frame) # 显示带有标注框的结果图像... cv2.destroyAllWindows() ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值