有网友说看到了yolov8obb导出onnx以及转换成rknn的博客,但没有找到对应的上板子的C++代码,希望提供一个rk的C++代码,供参考学习一下。之前写完导出onnx和转换rknn后,由于目前也没有项目用,计划以后有项目用了在写部署rk的C++代码,奈何有网友私信。花了一点时间写了一下部署rk的C++代码,其实就是把测试onnx的代码改成C++。不为工作而整部署内心迷茫的我,希望早日遇到玩移植部署而温暖的你。
yolov8obb 旋转目标检测rknn的C++部署。
直接上代码和模型,欢迎参考交流 【完整代码和模型】
1、rknn模型准备
pytorch转onnx,onnx再转rknn模型这一步就不再赘述,请参考上一篇 【yolov8-obb 旋转目标检测 瑞芯微RKNN芯片部署、地平线Horizon芯片部署、TensorRT部署】 。
2、C++ 代码
模型和图片读取部分参考rknn官方提供的示例,详细代码请参本实例对应的github仓库,代码和模型 。本实例提供的完整代码也就只包含两个.c文件和一个.h 文件,主打一个简单。
3、编译运行
1)编译
cd examples/rknn_yolov8_obb_demo
bash build-linux_RK3588.sh
2)运行
cd install/rknn_yolov8obb_demo_Linux
./rknn_yolov8obb_demo
注意:修改模型、测试图像、保存图像的路径,所在文件为 src 下main.cc文件。示例使用的类别时15类,自己的数据注意修改类别,在 include 下 postprocess.h 文件。具体代码细节参考对应的代码仓库。
4、板端效果
onnx 测试效果
rk3588板子上效果
板端rknn测试效果,冒号“:”前的数子是coco的80类对应的类别,后面的浮点数是目标得分(类别:得分)。板端效果和onnx效果不完全一致是由于转rknn时精度有所丢失导致。若想让精度丢失的少,可以考虑使用更多、更丰富的量化图片。