rk3588部署yolov8视频目标检测教程

1. 环境配置
1.1 训练和导出onnx环境
#使用conda创建一个python环境
conda create -n torch python=3.9#激活环境
conda activate torch#安装yolov8
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2 导出rknn环境

安装toolkit2-1.5.2

下载链接:

链接:百度网盘 请输入提取码

提取码:abcf 

下载后对应的文件为 onxx2rknn

下载后,创建一个conda环境,python使用3.6

#创建rknn环境
conda create -n toolkit python=3.6#激活环境
conda activate toolkit-152-py36#进入下载的文件夹 安装依赖库,保证每个都能安装上,如果有安装不上的,-i后面换别的源地址进行安装
pip install -r requirements_cp36-1.5.2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple#都安装完以后安装rknn_toolkit,还是进入百度云下载的文件夹
pip install rknn_toolkit2-1.5.2+b642f30c-cp36-cp36m-linux_x86_64.whl

1.3 rk3588上opencv编译

编译好的动态库我放到了百度云盘中路径为 opencv4_install,如果板子是rk3588,系统为ubuntu20.04应该是可以用起来的。如果不是的话,可能需要自己编译一下,步骤如下:

参考链接 ubuntu在arm平台下编译安装opencv(亲测可用)_opencv arm-CSDN博客

1.3.1 下载opencv源码

opencv: Release OpenCV 4.4.0 · opencv/opencv · GitHub

opencv_contrib: https://github.com/opencv/opencv_contrib/releases/tag/4.4.0

我已经放到了百度云上,在1.2节的百度云中,对应文件为opencv4.4

下载后放在到办卡上

1.3.2 开始编译

解压opencv和opencv-contrib 代码,在板卡上新建一个opencv4_install文件夹,用于安装opencv,再进入解压后的opencv4.4.0文件夹, 新建文件夹 build,进入build文件夹,打开终端执行以下命令

注意:

  • CMAKE_INSTALL_PREFIX 这个路径改成自己实际的绝对安装地址
  • OPENCV_EXTRA_MODULES_PATH 这个路径换成自己实际的解压后的contrib的绝对地址
  • 下面的OFF,ON表示库是否编译,因为用到的库不多,基本就是图像和视频相关,所以我把别的都关闭了
  • 其中BUILD_SHARED_LIBS表示是否编译为动态库,我关闭后,变成静态库,使用的时候一直报错,所以我还是使用的动态库去链接,有懂的大佬请指教一下
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/home/forlinx/opencv/opencv4_install \
-D OPENCV_EXTRA_MODULES_PATH=//home/forlinx/opencv/opencv_contrib-4.4.0/modules \
-D BUILD_opencv_python3=OFF \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-D WITH_GTK_2_X=ON \
-D BUILD_SHARED_LIBS=ON \
-D WITH_OPENGL=OFF \
-D BUILD_opencv_python3=OFF \
-D BUILD_opencv_apps=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_TESTS=0FF \
-D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_flann=OFF \
-D BUILD_opencv_stitching=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_opencv_feature2d=OFF \
-D BUILD_opencv_superres=OFF \
-D BUILD_opencv_ononfree=OFF \
-D BUILD_opencv_gpu=OFF \
-D BUILD_opencv_stereo=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_opencv_python3=OFF \
-D BUILD_IPP=OFF \
-D BUILD_TBB=OFF \
-D BUILD_opencv_java=OFF \
-D BUILD_JAVA=OFF \
-D BUILD_DOCS=0FF ..

编译的时候,会报错误,缺一些依赖库,参照下面的链接进行解决

(注意需要按照这个这里的链接下载一系列文件

fatal error: boostdesc_bgm.i: No such file or directory · Issue #1301 · opencv/opencv_contrib · GitHub

搜索 leaf918, 把pitch文件下载下来,解压后,

把patch/boostdesc下的内容拷贝到 opencv-4.4.0/.cache/xfeatures2d/boostdesc/

把patch/vgg下面的内容拷贝到opencv-4.4.0/.cache/xfeatures2d/vgg/)

注意:这里缺少的文件我已经放到了百度云

patch文件我已经放到百度云opencv4.4/patch_文件夹下,可以下载放到对应位置后,在重新执行上述指令进行编译,直到无报错为止,再执行make指令进行编译

make -j8#执行完后无报错 进行安装
sudo make install

编译成功后会生成以下文件

编译成功后,打开系统文件

#打开系统文件
vi /etc/profile#在最下面添加如下内容
export LD_LIBRARY_PATH=/opencv4_install/lib:$LD_LIBRARY_PATH
export Opencv_DIR=/opencv4_install#上述路径要按照自己的绝对路径来写
#保存后重启板子
2. 训练部分
#下载yolov8官方代码
git clone https://github.com/ultralytics/ultralytics.git#切换分支
cd ultralytics
git checkout a05edfbc27d74e6dce9d0f169036282042aadb97

2.1 训练脚本
#在ultralytics根目录下新建一个train.py文件
from ultralytics import YOLO
model = YOLO(ultrallytics/cfg/models/v8/yolov8n.yaml).load('yolov8n.pt')
model.train(data='ultralytics/cfg/datasets/VisDrone.yaml',batch=48,epochs=800,imgsz=640,save_period=1,device=0)
  • 我使用的是最轻量化的v8n模型, 所以第一行代码中使用的 yolov8n.yaml,训练时,工程会自动匹配yolov8n的模型,并使用yolov8n.pt作为预训练模型
  • 因为我使用的自定义数据集,我是基于VisDrone数据加上了自己的数据制作的训练集,所以加载的是改造后的VisDrone.yaml文件 数据的转换这里不仔细写了,以后空了我再补充在这里,但是需要注意的是,我是二分类,所以需要修改两处地方,否则训练出来的模型是不正确的

2.2 修改配置

修改1:

代码路径: /ultralytics/cfg/models/v8/yolov8.yaml 第5行修改为自己训练集需要检测目标的类别数量

修改2:

/ultralytics/cfg/datasets/VisDrone.yaml中训练集、测试集、验证集的数据路径以及类别的label

这里修改为自己对应数据的路径和类别,否则跑出来是错误的。

3. pt转onnx
  • 将第二部分修改后的训练代码(修改后的两个配置文件版本),复制一份出来,然后将文件名字改为 ultralytics-export
  • 下载百度云里面的git修改项,路径为 pt2onnx/enpei.modify.patch,将该文件拷贝到 ultralytics-expot文件夹内

#进入ultralytics-export文件,进行代码修改
cd ultraytics-export#应用patch文件进行代码修改
git apply enpei.modify.patch

执行完后如图所示

  • 此时代码已经修改完成,并且在文件下多了一个export_onnx.py文件, 再在ultralytics-export下新建一个文件夹叫 weights,将第2步中的训练好的最优模型best.pt 文件拷贝到weights文件夹下,

  • 打开export_onnx.py文件,如果使用的别的版本v8模型,需要修改对应的模型配置文件

  • 然后打开终端,执行下面的命令进行导出
#激活导出onnx环境
conda activate torch#进入ultralytics-export文件夹
cd ultralytics-export#开始转换
python export_onnx.py

执行完会在终端显示 done! 并且在weights文件夹下生成对应onnx文件,就表示转换成功

4. onnx转rknn

导出工具在百度云下载的文件夹中,路径为onnx2rknn/convert_rknn, 下载后把导出的yolov8.dict.onnx拷贝到该文件夹下

#激活第一步中rknn环境
conda activate toolkit-152-py36#进入转换工具准备转换
cd convert_rknnpython convert_rknn.py

终端就开始量化转换,如图所示:

看到该界面就表示转换完成,可以在convert_rknn文件夹下看到多出来一个 yolov8.int.rknn模型和一个 test_rknn_results.jpg的推理结果,如果test_rknn_results.jpg的推理结果大致没啥问题,那么表示rknn转换无误了。

5. rk3588部署

c++推理代码放到百度云盘地址 rk3588_cplus中的,我把zip和没压缩的都上传上去了,避免下载有问题。此时我把第1.3部分中编译的opencv动态库放到了3rdparty里面的,所以需要修改一下CMakeLists.txt文件就基本可以跑起来了

  • 修改CMakeLists.txt文件第37行代码,把opencv的路径修改为自己板卡上的绝对路径

但是我感觉这句话是多余的,因为在第1.3.2步骤中,已经把动态库的地址写到了系统文件里

  • 修改代码,文件/yolov8_cplus/src/postprocess.cpp中第 59 行代码,修改为自己需要检测类别的数量

  • 修改 标签文件coco_80_labels_list.txt, 将内容修改为自己需要检测的类别

#开始编译
mkdir build && cd build#这里容易报opencv相关的错误,尝试自己解决一下,我编译动态库应该是可以用的
cmake ..#编译
make -j8

若一切顺利的话,这里在build文件下可以生成三个可执行文件,如图所示

分别为yolov8_img 用于检测图像,yolov8_video 用于检测视频,yolov8_thread_pool用于线程池检测视频

#测试
./yolov8_img [模型地址] [图像地址]./yolob8_video [模型地址] [视频地址] [写1或者不写,写1表示将结果存下来,默认不存结果]./yolov8_thread_pool [模型地址] [视频地址] [线程数]

着急下班写的比较粗糙,可能中间过程还有点问题,五一后我再补充 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/830757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 LlamaIndex 和 Llama 2-Chat 构建知识驱动的对话应用程序

文章目录 使用 LlamaIndex 和 Llama 2-Chat 构建知识驱动的对话应用程序Llama 2-70B-聊天LlamaIndex 解决方案概述先决条件使用 SageMaker JumpStart 部署 GPT-J 嵌入模型使用 SageMaker Python SDK 进行部署在 SageMaker Studio 中使用 SageMaker JumpStart 进行部署使用 Sage…

如何查看我的Docker 容器和 `app.py` 脚本有足够的权限来读取 `config.json` 文件

要检查 Docker 容器和 app.py 脚本是否具有读取 config.json 文件的足够权限,你可以按照以下步骤操作: 检查宿主机上的文件权限: 在宿主机上,使用 ls -l 命令查看 config.json 文件的权限。 ls -l /path/to/config.json确保该文件…

聊聊Mysql的两阶段提交

从图中可看出,事务的提交过程有两个阶段,就是将 redo log 的写入拆成了两个步骤:prepare 和 commit,中间再穿插写入bin log,具体如下: prepare 阶段:将 事务的修改写入到 redo log,同…

Java | Leetcode Java题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; class Solution {public int uniquePaths(int m, int n) {long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return (int) ans;} }

设计模式-01 设计模式单例模式

设计模式-01 设计模式单例模式 目录 设计模式-01 设计模式单例模式 1定义 2.内涵 3.使用示例 4.具体代码使用实践 5.注意事项 6.最佳实践 7.总结 1 定义 单例模式是一种设计模式&#xff0c;它确保一个类只能被实例化一次。它通过在类内部创建类的唯一实例并提供一个全…

Mysql从入门到精通——Mysql知识点总结(基础篇)

参考视频 黑马程序员 MySQL数据库入门到精通i 题单推荐 入门 进阶 SQL语句类型 DDL:数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段)DML:数据操作语言&#xff0c;对数据库表中的数据进行增删改DQL:数据查询语言,用来查询数据库中表的…

SpringCloud 学习笔记 —— 六、Ribbon:负载均衡(基于客户端)

SpringCloud 学习笔记 —— 一、背景-CSDN博客 SpringCloud 学习笔记 —— 二、微服务与微服务架构-CSDN博客 SpringCloud 学习笔记 —— 三、SpringCloud 入门概述-CSDN博客 SpringCloud 学习笔记 —— 四、SpringCloud Rest 学习环境搭建&#xff1a;服务提供者-CSDN博客 …

一站式AI创作平台:融合GPT会话、GPTs应用、Midjourney视觉艺术与Suno AI音乐合成模块

一、系统简介 星河易创AI系统基于ChatGPT的核心技术打造&#xff0c;集成了自然语言问答和艺术创作功能。该系统兼容Midjourney绘画技术&#xff0c;并支持官方GPT模型。它提供了多样化的应用&#xff0c;包括GPTs的多场景应用、实时GPT语音对话能力、GPT-4模型的先进特性&…

全网最全的springboot配置文件速成

文章目录 一.配置文件格式前言1.1 application.properties配置文件1.2 application.yml配置文件1.3 application.yaml配置文件1.4 在配合文件中如果没有提示1.5 三种配合文件的优先级 二. yml格式2.1 优点2.2 YAML 文件扩展名2.3 语法规则2.4 配置 三. 配置文件数据读取3.1 环境…

Sarcasm detection论文解析 |用于微博讽刺检测的上下文增强卷积神经网络

论文地址 论文地址&#xff1a;Context-augmented convolutional neural networks for twitter sarcasm detection - ScienceDirect 论文首页 笔记大纲 用于微博讽刺检测的上下文增强卷积神经网络 &#x1f4c5;出版年份:2018 &#x1f4d6;出版期刊:Neurocomputing &#x1f…

工业互联网通讯协议—欧姆龙(Fins tcp)

一、场景 近期公司要对欧姆龙CP系列设备的数据采集&#xff0c;于是就研究了下欧姆龙的Fins Tcp协议。 二、Fins Tcp 组成字节说明固定头446494E53 FINS对应的ASCII码的十六进制长度4后面剩余指令的长度命令4 握手固定为&#xff1a;00000000 读写固定为&#xff1a;0000000…

Fast Bilateral Filteringfor the Display of High-Dynamic-Range Images

1 Title Fast Bilateral Filtering for the Display of High-Dynamic-Range Images(Fredo Durand and Julie Dorsey)【SIGGRAPH 02】 2 Conclusion This paper presents a new technique for the display of high-dynamic-range images, which reduces the contrast while pre…

(详细整理!!!!)Tensorflow与Keras、Python版本对应关系!!!

小伙伴们大家好&#xff0c;不知道大家有没有被tensorflow框架困扰过 今天我就给大家整理一下tensorflow和keras、python版本的对应关系 大家这些都可以在官网找到&#xff0c;下面我把官网的连接给大家放在这里&#xff1a;在 Windows 环境中从源代码构建 | TensorFlow (g…

学习 Rust 第 23 天:闭包

Rust 闭包提供了简洁、富有表现力的匿名函数来捕获周围的变量。它们简化了代码&#xff0c;提供了存储、参数传递和函数重构方面的灵活性。它们与泛型的交互增强了灵活性&#xff0c;而捕获模式则促进了有效的所有权和可变性管理。从本质上讲&#xff0c;闭包是 Rust 的基础&am…

Docker部署RabbitMQ与简单使用

官网地址&#xff1a; Messaging that just works — RabbitMQ 我的Docker博客:Docker-CSDN博客 1.结构 其中包含几个概念&#xff1a; **publisher**&#xff1a;生产者&#xff0c;也就是发送消息的一方 **consumer**&#xff1a;消费者&#xff0c;也就是消费消息的一方 …

K8S 哲学 - deployment -- kubectl【create 、 rollout 、edit、scale、set】

kubectl create kubectl rollout kubectl edit kubectl set kubectl scale 1、创建与配置文件解析 2、deploy 滚动更新 &#xff1a;template 里面的内容改变触发滚动更新 编辑该 deploy 的 配置文件 &#xff0c;加入一个 label 不会触发滚动更新 改变 nginx镜…

Flutter笔记:Widgets Easier组件库(2)阴影盒子

Flutter笔记 Widgets Easier组件库&#xff08;2&#xff09;&#xff1a;阴影盒子 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…

Baidu Comate:“AI +”让软件研发更高效更安全

4月27日&#xff0c;百度副总裁陈洋出席由全国工商联主办的第64届德胜门大讲堂&#xff0c;并发表了《深化大模型技术创新与应用落地&#xff0c;护航大模型产业平稳健康发展》主题演讲。陈洋表示&#xff0c;“人工智能”成为催生新质生产力的重要引擎&#xff0c;对于企业而言…

Sentinel 控制台学习

引言 上篇文章已经讲过 SpringCloud Sentinel集成到微服务项目中&#xff0c;接下来我们继续学习怎么使用sentinel控制台对微服务进行限流&#xff0c;熔断&#xff0c;降级等一系列操作。 控制台 接下来我们单独讲解每一个菜单按钮 实时监控 实时监控&#xff1a; 可以看到…

帮助 Python 用户构建 CLI 界面:直观易写、简单高效 | 开源日报 No.240

tiangolo/typer Stars: 13.7k License: MIT typer 是一个构建出色命令行界面&#xff08;CLI&#xff09;的库&#xff0c;基于 Python 类型提示。它旨在让开发者轻松创建用户喜欢使用的 CLI 应用程序。其主要功能和核心优势包括&#xff1a; 直观易写&#xff1a;强大编辑器…