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

#onnx安装
pip install onnx  -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2 导出onnx和rknn环境(电脑端执行)

安装toolkit2-1.5.2

下载链接:

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

提取码:abcf 

下载后对应的文件为 onxx2rknn

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

#创建rknn环境
conda create -n yolov8-export python=3.6

#激活环境
conda activate yolov8-export

#进入下载的文件夹 安装依赖库,保证每个都能安装上,如果有安装不上的,-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_rknn

python 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 行代码,修改为自己需要检测类别的数量

  • 修改 标签文
  • 进入文件src/task/yolov8_custom.cpp修改g_classes的类别为自己模型对应的类别

#开始编译
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 [模型地址] [视频地址] [线程数]

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

  • 28
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
【资源介绍】 基于RK3588部署yolov5s模型源码(实时摄像头检测)+部署说明文档.zip 该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测) - 所需: - 安装了Ubuntu20系统的RK3588 - 安装了Ubuntu18的电脑或者虚拟机 <details> <summary>一、yolov5 PT模型获取</summary> [Anaconda教程](https://blog.csdn.net/qq_25033587/article/details/89377259)\ [YOLOv5教程](https://zhuanlan.zhihu.com/p/501798155)\ 经过上面两个教程之后,你应该获取了自己的`best.pt`文件 </details> <details> <summary>二、PT模型转onnx模型</summary> - 将`models/yolo.py`文件中的`class`类下的`forward`函数由: ```python def forward(self, x): z = [] # inference output for i in range(self.nl): x[i] = self.m[i](x[i]) # conv bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() if not self.training: # inference if self.dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]: self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i) if isinstance(self, Segment): # (boxes + masks) xy, wh, conf, mask = x[i].split((2, 2, self.nc + 1, self.no - self.nc - 5), 4) xy = (xy.sigmoid() * 2 + self.grid[i]) * self.stride[i] # xy wh = (wh.sigmoid() * 2) ** 2 * self.anchor_grid[i] # wh y = torch.cat((xy, wh, conf.sigmoid(), mask), 4) else: # Detect (boxes only) xy, wh, conf = x[i].sigmoid().split((2, 2, self.nc + 1), 4) xy = (xy * 2 + self.grid[i]) * self.stride[i] # xy wh = (wh * 2) ** 2 * self.anchor_grid[i] # wh y = torch.cat((xy, wh, conf), 4) z.append(y.view(bs, self.na * nx * ny, self.no)) return x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x) ``` 改为: ```python def forward(self, x): z = [] # inference
【资源说明】 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、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值