Yolov10在RK3588S上进行自定义目标检测

一、训练模型

项目地址:https://github.com/THU-MIG/yolov10

下载项目:

git clone https://github.com/THU-MIG/yolov10.git

按照官方文档安装环境:

conda create -n yolov10 python=3.9
conda activate yolov10
pip install -r requirements.txt
pip install -e .

准备训练数据:
新建文件zt30.yaml,写入下面文档,这里改成自己的数据集位置,标签信息按照自己的情况进行修改:

# moncake
train: E:\python-project\yolov10\ultralytics\datasets\zt30\train
val: E:\python-project\yolov10\ultralytics\datasets\zt30\valid
test: E:\python-project\yolov10\ultralytics\datasets\zt30\test
# Classes
names:
  0: ZT30

训练模型:

yolo detect train data=E:\python-project\yolov10\ultralytics\datasets\zt30.yaml model=yolov10s.pt epochs=500 imgsz=640 device=0

这里是训练500次,图像大小640,使用第一个GPU进行训练,按自己的条件进行调整。

训练完成后会在yolov10\runs\detect\train\weights目录下面产生一个best.pt的模型文件,这就是我们训练好的模型;

二、pt转onnx

将yolov10项目下的这两个文件进行修改:

20240620183308.png

添加这部分代码,其中导出的模型位置和模型图像大小按照自己的情况调整:

        print("===========  onnx =========== ")
        import torch
        self.model = self.model.fuse()
        dummy_input = torch.randn(1, 3, 640, 640)
        input_names = ["data"]
        output_names = ["reg1", "cls1", "reg2", "cls2", "reg3", "cls3"]
        torch.onnx.export(self.model, dummy_input, "E:\\python-project\\yolov10\\runs\\detect\\train\\weights\\best.onnx", verbose=False, input_names=input_names, output_names=output_names, opset_version=11)
        print("======================== convert onnx Finished! .... ")
20240620183624.png
        # 导出onnx增加
        y = []
        for i in range(self.nl):
            t1 = self.one2one_cv2[i](x[i])
            t2 = self.one2one_cv3[i](x[i])
            y.append(t1)
            y.append(t2)
        return y

编写一个python脚本test.py,模型、资源文件、GPU等信息改成自己的:

from ultralytics import YOLOv10

# 推理
model = YOLOv10('E:\\python-project\\yolov10\\runs\\detect\\train\\weights\\best.pt')

results = model(task='detect', mode='predict', source='E:\\python-project\\yolov10\\ultralytics\\datasets\\zt30\\test\\images\\Screenshot_20240611-142421.png', line_width=3, show=True, save=True, device=0)

运行脚本:

python test.py

输出会报错,但是不影响模型生成,会在yolov10\runs\detect\train\weights目录生成onnx模型文件

三、onnx转rknn

onnx转rknn需要用到rknn-toolkit2,这个工具暂时不支持windows,所以我们移步linux,我用的是虚拟机创建的ubuntu20.4的系统,建议使用conda管理环境,我这里使用conda安装了python3.8

rknn-toolkit2项目地址:https://github.com/airockchip/rknn-toolkit2/tree/master

将项目中http://rknn-toolkit2/rknn-toolkit2/packages/目录下的requirements_cp38-2.0.0b0.txtrknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl下载下来,上传到虚拟机的一个目录下

20240620185143.png

安装依赖:

pip install -r requirements_cp38-2.0.0b0.txt

安装rknn_toolkit2

pip install rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl

下载一位大佬提供写好的代码进行转化:
项目地址:https://github.com/cqu20160901/yolov10_onnx_rknn_horizon_tensorRT/tree/main
按下图所示,将onnx模型换成自己的,将onnx2rknn_demo_ZQ.py文件中的标签集和模型尺寸修改为自己的

20240620190800.png

运行脚本就会生成rknn模型

python onnx2rknn_demo_ZQ.py

四、在rk3588S上使用rknn进行目标检测

将自己的rknn模型上传到板子上,再在板子上安装rknn-toolkit-lite2,将上面的requirements_cp38-2.0.0b0.txt和同一个项目下的rknn_toolkit_lite2-2.0.0b0-cp38-cp38-linux_aarch64.whl下载下来上传到板子的某个目录下

20240620192119.png

安装依赖:

pip install -r requirements_cp38-2.0.0b0.txt

安装rknn-toolkit-lite2

pip install rknn_toolkit_lite2-2.0.0b0-cp38-cp38-linux_aarch64.whl

下载同样由上面那位大佬提供的示例代码:https://github.com/cqu20160901/yolov10_rknn_Cplusplus

将main文件下的模型路径和检测图片等路径修改成自己的


20240620192609.png

include/postprocess.h文件中的标签类目数量ClassNum修改为自己的

20240620192730.png

编译

bash build-linux_RK3588.sh

运行

cd install/rknn_yolov10_demo_open
./rknn_yolov10_demo
20240620193031.png

至此完成了识别过程,我这里对标签进行了翻译,如果没有做调整这里不是zt30,而是数字,另外如果你发现你识别出来的精度和pt模型的精度不一致,应该是检测图像尺寸问题,这个有很多种办法处理,这里不再赘述。

参考资料:
https://github.com/THU-MIG/yolov10
https://github.com/airockchip/rknn-toolkit2
https://github.com/cqu20160901/yolov10_onnx_rknn_horizon_tensorRT
https://github.com/cqu20160901/yolov10_rknn_Cplusplus

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容