YOLOv8OBB 旋转目标检测在 RK3588 上的 C++ 部署
RK3588 作为一款高性能的 AIoT 芯片,其强大的 NPU 算力为复杂模型部署提供了硬件基础。但在实际部署过程中,从模型转换、环境配置到代码优化,每个环节都可能遇到意想不到的问题。
1. 技术选型与环境准备
在开始部署之前,明确技术栈和硬件环境是确保项目顺利推进的基础。选择的是 YOLOv8OBB 模型,这是 Ultralytics 团队针对旋转目标检测推出的专用版本,相比传统的水平框检测,它能更精准地定位旋转物体,特别适合遥感图像、文档检测等场景。
RK3588 平台的选择基于其强大的算力配置:四核 A76+ 四核 A55 的 CPU 架构,6TOPS 的 NPU 算力,以及丰富的接口资源。这套硬件组合足以应对 YOLOv8OBB 的实时推理需求,同时为后续的多模型部署留足了余量。
环境准备阶段,选择了 Ubuntu 20.04 作为基础系统,主要考虑到其与 RKNN Toolkit2 的良好兼容性。以下是基础环境配置的关键步骤:
# 安装系统依赖
sudo apt-get update
sudo apt-get install -y python3.6 python3.6-dev python3-pip
sudo apt-get install -y cmake g++ make libopencv-dev
# 创建 Python 虚拟环境
python3.6 -m venv rknn_env
source rknn_env/bin/activate
# 安装 RKNN Toolkit2
pip install rknn_toolkit2-1.5.0-cp36-cp36m-linux_x86_64.whl
注意:RKNN Toolkit2 的版本需要与固件版本匹配,否则可能导致模型转换或推理异常。建议从官方渠道获取最新的适配版本。
在环境配置过程中,遇到了 Python 版本兼容性问题。RKNN Toolkit2 目前对 Python 3.6 支持最为稳定,而较新的 Python 版本可能存在依赖冲突。为了避免后续的麻烦,严格按照官方推荐的版本进行配置。
2. 模型转换与优化策略
模型转换是部署过程中最关键也最易出错的环节。YOLOv8OBB 的模型转换需要经过 PyTorch→ONNX→RKNN 两个阶段,每个阶段都有其特定的优化策略。
首先从 PyTorch 模型导出 ONNX 格式。这里需要特别注意旋转框的表示方式,YOLOv8OBB 使用五点式表示法(cx, cy, w, h, angle),而传统的检测模型使用四点式。这种差异需要在导出时正确处理:
# 示例导出代码关键部分
model = YOLO('yolov8obb.pt')
success = model.export(format='onnx', imgsz=640, opset=12, simplify=True, nms=True)
导出 ONNX 后,接下来是转换为 RKNN 格式。这个阶段的核心是量化优化,合理的量化策略能显著提升推理速度同时保持精度:
from rknn.api import RKNN
rknn = RKNN()
ret = rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, ]], target_platform=)
ret = rknn.load_onnx(model=)
ret != :
()
exit(ret)
ret = rknn.build()

