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

相关推荐
2401_892070981 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
yuzhuanhei1 天前
Visual Studio 配置C++opencv
c++·学习·visual studio
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
qq_339554821 天前
英飞凌ModusToolbox环境搭建
c语言·eclipse
不爱吃炸鸡柳1 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发1 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
STL 栈 队列
开发语言·c++
melonbo1 天前
Jetson Nano 平台YOLO目标检测优化详细设计方案
yolo·目标检测·目标跟踪
张張4081 天前
(域格)环境搭建和编译
c语言·开发语言·python·ai
2401_892070981 天前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象