YOLOV8-seg部署在RK3568/RK3588上面
分为三步骤
- 自己训练好的pt模型转为onnx模型
- onnx模型转为rknn模型
- 将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
- 上一步完成后,会在根目录中生成一个install文件夹,这个文件夹的构成如下:
install/<TARGET_PLATFORM>_linux_<ARCH>/rknn_yolov8_seg_demo
- 修改model下的coco.txt文件,修改为自己训练集检测的目标类别
- 注意这里要找到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_
- 最后一步,推理一张图片验证 进入到rknn_yolov8_seg_demo目录下,运行以下代码,成功以后会生成一个out.png
export LD_LIBRARY_PATH=./lib
./rknn_yolov8_seg_demo model/yolov8_seg.rknn model/你的图片名字.jpg