在 RK3588 上运行 YOLOv5 的教程比较丰富,而对于 YOLOv8 相关的 Python 开源库则较少。对于多线程推理,一个不错的开源库是 rknn-multi-threaded。RKNN_model_zoo 中的 examples 提供了 YOLOv8 的相关 demo,但其 Python 后处理部分编写不佳,需要 PyTorch 依赖,并且后处理耗时较大,无法满足视频实时推理的需求。
我们在 rknn-multi-threaded 的基础上,对 RKNN_model_zoo 中的 YOLOv8 example 进行了整合,并使用 github Copilot 重写了后处理函数。这一改进不仅取消了对 PyTorch 的依赖,还将后处理耗时从几百毫秒降低到了几十毫秒。在 3 线程模式下,推理 YOLOv8s 模型可以达到约 45fps,而推理 YOLOv8s-seg 模型则可以达到约 25fps。
一、优化修改后的开源代码库
- yolov5: http://git.bwbot.org/publish/rknn-multi-threaded.git
- yolov8: http://git.bwbot.org/publish/rknn3588-yolov8.git
- yolov8-seg: http://git.bwbot.org/publish/rknn3588-yolov8-seg.git
二、代码运行说明
上面三个代码仓库的运行方法相同,都是通过 git clone
克隆代码后,准备好 Python 环境,然后执行 main.py
。我们以 YOLOv8 为例:
- 升级 NPU 运行库。参考 RK3588 在 Ubuntu22.04 下使用 rknn-toolkit2 的注意事项。
- 克隆源代码:
git clone http://git.bwbot.org/publish/rknn3588-yolov8.git
- 准备python运行环境:
我们在 RK3588 上使用的是 Ubuntu22.04 Desktop,默认的 Python 版本是 3.10。为了避免破坏系统环境,我们使用virtualenv
来配置需要的 Python 运行环境。
sudo apt install python3-virtualenv
#进入上面git clone下来的文件夹根目录
cd rknn3588-yolov8
#创建虚拟环境
virtualenv --system-site-packages -p /usr/bin/python3 venv
#激活虚拟环境
source venv/bin/activate
#开始在虚拟环境中安装rknn_toolkit_lite2,这里需要安装和python版本相同的whl
pip install rknn_toolkit_lite2-2.0.0b0-cp310-cp310-linux_aarch64.whl
#安装opencv
pip install -i https://mirror.baidu.com/pypi/simple opencv_contrib_python
4.环境配置完成,开始运行yolov8:
python main.py
在 main.py
文件中,您可以修改模型、线程数,还可以修改成实时推理摄像头。
# 推理视频文件
cap = cv2.VideoCapture('./720p60hz.mp4')
# 推理实时摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
三、运行结果
YOLOv8s 的运行速度大约是 YOLOv5 的 70%,YOLOv8s-seg 的运行速度大约是 YOLOv8s 的 50%。