YOLOV8-seg部署在RK3568/RK3588上面

YOLOV8-seg部署在RK3568/RK3588上面

分为三步骤

  1. 自己训练好的pt模型转为onnx模型
  2. onnx模型转为rknn模型
  3. 将rknn模型部署在板子上,进行demo测试

一、自己训练好的pt模型转为onnx模型

瑞芯微官方给的YOLOV8仓库,必须在该仓库下将pt转为onnx。

在笔记本激活yolov8虚拟环境

二、 onnx模型转为rknn模型

去github上面下载瑞芯微官方给的环境配置代码,代码库1点击这里跳转,整个包都下载

下载好以后进入文件夹下的 目录,注意自己的电脑版本和python版本,在下面找到对应的arm64_requirements_cp38.txt 文件,进行安装

pip install -r arm64_requirements_cp38.txt

安装好re环境之后再安装whl文件

pip install packages/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl

还需要下载一个瑞芯微的模型库,用来转rknn模型,代码库2 下载完整的库

进入这个分支下面 我们的任务是分割:

推荐阅读该目录下的readme文档,里面写的很详细

1.进入rknn_model_zoo/examples/yolov8_seg/model/下面修改coco_80_labels_list.txt文件里面的类别为自己训练集的类别
2.进入python文件夹目录下,有一个convert.py文件,里面有一行代码,接下来需要去修改这个txt文件

DATASET_PATH = '../../../datasets/COCO/coco_subset_20.txt'

3.找到这个txt文件,换成自己数据集的图片名称,subset里面换成自己的图片,下面是目录
datasets/COCO/coco_subset_20.txt
4. 转rknn 用python文件夹里面的convert代码,
python convert.py ../model/yolov8s-seg.onnx rk3568

这里的rk3568 根据自己需要 可以改成rk3588。运行完成后会在model目录下生成rknn文件。

三、板卡c++部署

1.返回到rknn_model_zoo的根目录中,运行以下代码,进行C++代码的编译

./build-linux.sh -t rk3588 -a aarch64 -d yolov8_seg
  1. 上一步完成后,会在根目录中生成一个install文件夹,这个文件夹的构成如下:
install/<TARGET_PLATFORM>_linux_<ARCH>/rknn_yolov8_seg_demo
  1. 修改model下的coco.txt文件,修改为自己训练集检测的目标类别
  2. 注意这里要找到cpp文件中的头文件,改一下类别数量的参数,不然后面会报错,路径如下
examples/yolov8_seg/cpp/postprocess.h

下面标注了,需要修改的地方(置信度也可以根据自己需要修改)

#ifndef _RKNN_YOLOV8_SEG_DEMO_POSTPROCESS_H_
#define _RKNN_YOLOV8_SEG_DEMO_POSTPROCESS_H_

#include <stdint.h>
#include <vector>
#include "rknn_api.h"
#include "common.h"
#include "image_utils.h"

#define OBJ_NAME_MAX_SIZE 64
#define OBJ_NUMB_MAX_SIZE 128
#define OBJ_CLASS_NUM 80  #改这里!!!!!!!!!!!!!!!!!!!!!
#define NMS_THRESH 0.45
#define BOX_THRESH 0.25
#define PROP_BOX_SIZE (5 + OBJ_CLASS_NUM)

#define PROTO_CHANNEL 32
#define PROTO_HEIGHT 160
#define PROTO_WEIGHT 160

#define N_CLASS_COLORS 20

// class rknn_app_context_t;

typedef struct
{
    image_rect_t box;
    float prop;
    int cls_id;
} object_detect_result;

typedef struct
{
    uint8_t *seg_mask;
} object_segment_result;

typedef struct
{
    int id;
    int count;
    object_detect_result results[OBJ_NUMB_MAX_SIZE];
    object_segment_result results_seg[OBJ_NUMB_MAX_SIZE];
} object_detect_result_list;

int init_post_process();
void deinit_post_process();
char *coco_cls_to_name(int cls_id);
int post_process(rknn_app_context_t *app_ctx, rknn_output *outputs, letterbox_t *letter_box, float conf_threshold, float nms_threshold, object_detect_result_list *od_results);
int clamp(float val, int min, int max);

#endif //_RKNN_YOLOV8_SEG_DEMO_POSTPROCESS_H_
  1. 最后一步,推理一张图片验证 进入到rknn_yolov8_seg_demo目录下,运行以下代码,成功以后会生成一个out.png
export LD_LIBRARY_PATH=./lib
./rknn_yolov8_seg_demo model/yolov8_seg.rknn model/你的图片名字.jpg
【资源说明】 YOLOv8部署瑞芯微RK3588板端c++源码(含使用说明).zipYOLOv8部署瑞芯微RK3588板端c++源码(含使用说明).zip ## 编译和运行 1)编译 ``` cd examples/rknn_yolov8_demo_open bash build-linux_RK3588.sh ``` 2)运行 ``` cd install/rknn_yolov8_demo_Linux ./rknn_yolov8_demo ``` 注意:修改模型、测试图像、保存图像的路径,修改文件为src下的main.cc ``` 测试效果 冒号“:”前的数子是coco的80类对应的类别,后面的浮点数是目标得分。(类别:得分) ![images](test_result.jpg) (注:图片来源coco128) 说明:推理测试预处理没有考虑等比率缩放,激活函数 SiLU 用 Relu 进行了替换。由于使用的是coco128的128张图片数据进行训练的,且迭代的次数不多,效果并不是很好,仅供测试流程用。换其他图片测试检测不到属于正常现象,最好选择coco128中的图像进行测试。 把板端模型推理和后处理时耗也附上,供参考,使用的芯片rk3588。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值