[rk3566AI模型部署]泰山派buildroot部署yolov5 使用rknn_model_zoo

YOLOV5部署

训练

网上训练教程很多, 这里主要记录模型转换

使用python train.py --data=./data/my_dest.yaml进行训练

导出

导出的时候需要更改一下模型的样式

使用下面的函数代替原本的forward函数在yolov5/models/yolo.py文件里面(只有导出的时候使用, 记得改回去), 原本的函数会在这个函数里面处理模型输出到实际的图片坐标转换, 这里不使用

python 复制代码
# RKNN 使用的forward
def forward(self, x):
    z = []
    for i in range(self.nl):
        # 只使用一个激活函数 sigmoid, 对每一个输出通道使用相同的激活函数
        # 直接获取预测结果
        # 输出 (bs, na*ny*nx, no) 的"原始预测值"(还没乘 grid、没乘 anchor、没算 xywh 到像素坐标)
        x[i] = torch.sigmoid(self.m[i](x[i]))
    return x

使用python export.py --opset=12, 如此即可获取到beat.onnx模型(需要根据你训练的模型位置设置权重文件)

可以使用工具再次简化模型

bash 复制代码
python -m onnxsim weights/best.onnx weights/best-sim.onnx

导出的模型记录在best-sim.onnx

模型转换

使用的工具是airockchip/rknn_model_zoo

手册在rknn_model_zoo/examples/yolov5 at main · airockchip/rknn_model_zoo

bash 复制代码
cd model
./download_model.sh

可以使用这个下载默认的模型, 使用的模型是yolov5s_relu.onnx

python 复制代码
python convert.py ../model/yolov5s_relu.onnx rk3566

使用自己模型的时候量化使用的图片文件要改一下

python 复制代码
DATASET_PATH = '../../../datasets/mydataset/dataset.txt'
DEFAULT_RKNN_PATH = '../model/yolov5_my.rknn'
DEFAULT_QUANT = True

在examples/yolov5/python/convert.py文件里面, 这个txt文件里面记录的一系列的图片目录, 下面的参数是输出的模型名字

模型转换, 自己的模型使用的时候需要自己转换

使用的编译工具是aarch64-linux-gnu-gcc, 直接使用apt-get安装即可sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

python 复制代码
export GCC_COMPILER=/usr/bin/aarch64-linux-gnu
./build-linux.sh -t rk3566 -a aarch64 -d yolov5

输出的文件在./install/rk356x_linux_aarch64/rknn_yolov5_demo/

板级文件

examples/yolov5/cpp/postprocess.cc这个文件里面有加载的label文件

cpp 复制代码
#define LABEL_NALE_TXT_PATH "./model/coco_80_labels_list.txt"

修改cpp代码examples/yolov5/cpp/postprocess.h里面的实际的分类的类型

cpp 复制代码
#define OBJ_NAME_MAX_SIZE 64
#define OBJ_NUMB_MAX_SIZE 128
#define OBJ_CLASS_NUM 3 // 你实际使用的类型数量
#define NMS_THRESH 0.45 // 置信度
#define BOX_THRESH 0.25 // 非极大值抑制
![请添加图片描述](https://i-blog.csdnimg.cn/direct/eb2d40e347854e188e6c7fb5469bfd9f.png)
#define PROP_BOX_SIZE (5 + OBJ_CLASS_NUM)

默认的CMake复制的文件是coco的分类

cmake 复制代码
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../model/coco_80_labels_list.txt DESTINATION ./model)

可以改成自己的分类文件

buildroot使用gcc11

需要更改buildroot系统

复制代码
-> Toolchain
	-> GCC compiler Version (<choice> [=y])
bash 复制代码
# 在SDK/buildroot目录里面使用下面的命令进入配置界面
make savedefconfig
# 手动将生成在 buildroot/defconfig 文件内容复制到 ./configs/rockchip_rk3566_defconfig 文件里面

# 回到SDK根目录
./build.sh rootfs
./mkfirmware.sh
./build.sh updateimg

测试

把./install/rk356x_linux_aarch64/rknn_yolov5_demo/放到板子上, 加载一个自己测试用的图片

bash 复制代码
root@RK356X:/userdata/install/rk356x_linux_aarch64/rknn_yolov5_demo# ./rknn_yolov5_demo /userdata/yolov5_my.rknn /userdata/test.jepg

使用自己的模型以及测试图片

改一下BOX_THRESH 可以避免边框重叠

相关推荐
AbandonForce2 小时前
递归、搜索与回溯:从板书到二叉树解题方法
c++·算法·决策树
Source.Liu2 小时前
【A11】服务器底层权限表笔记
运维·服务器·笔记
艾莉丝努力练剑3 小时前
【AI大模型接入SDK】ChatServer HTTP接口模块实现总览
网络·c++·人工智能·网络协议·学习·http·架构
噜~噜~噜~3 小时前
钢琴入门-基础乐理:第1讲到第3讲笔记
笔记·钢琴入门
坤坤子吖3 小时前
Linux 线程概念与控制——线程创建、退出与等待
linux·开发语言·c++·笔记·学习
weixin_307779133 小时前
C++代码实现MATLAB中的fitnlm函数功能
开发语言·c++·算法·matlab
雪落漂泊3 小时前
C++算法:双指针篇(下)
数据结构·c++·算法
qq_284274053 小时前
间歇运动机构与机械设计概论:棘轮与槽轮机构运动系数、零件失效与强度刚度准则、结构工艺性清根及标准件(含考点)
笔记·学习·平面·自动化·制造
于眠牧北4 小时前
雷电模拟器9/14搭配charles抓取自带浏览器接口9/14
经验分享·笔记·git