[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 可以避免边框重叠

相关推荐
William Dawson10 小时前
2026软考中级系统集成项目管理工程师备考笔记
笔记·系统集成项目管理工程师
王老师青少年编程10 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮11 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
样例过了就是过了12 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
谭欣辰13 小时前
C++ 排列组合完整指南
开发语言·c++·算法
love530love13 小时前
精简版|Claude-HUD 插件介绍 + 一键安装教程
人工智能·windows·笔记
代码中介商13 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法
想成为优秀工程师的爸爸13 小时前
第三十篇技术笔记:郭大侠学UDS - 人有生老三千疾,望闻问切良方医
网络·笔记·网络协议·tcp/ip·信息与通信
橙子也要努力变强13 小时前
信号捕捉底层机制-机理篇2
linux·服务器·c++
盐焗鹌鹑蛋14 小时前
【C++】stack和queue类
c++