1.简介
RKNN官方没有提供YOLOv5模型的验证工具,而YOLOv5自带的验证工具只能验证pytorch、ONNX等常见格式的模型性能,无法运行rknn格式。考虑到YOLOv5模型转换为rknn会有一定的精度损失,但是需要具体数值才能进行评估,所以需要一个可以运行rknn格式的YOLOv5验证工具。
参考目标检测 YOLOv5 - Rockchip rknn模型的测试 包括精度,召回率,mAP等详细信息,这篇文章中的验证工具是基于YOLOv5和RKNN开发环境的旧版本来开发的(YOLOv5 V6.2和rknn-toolkit v1.7.1),无法运行基于YOLOv5 v7.0和rknn-toolkit2 v1.6.0开发的RKNN模型,所以参考这个验证工具里面的RKNN模型的使用方式,和RKNN官方的Python Demo,实现了YOLOv5 V7.0版本的rknn验证工具。
GitHub源码地址:https://github.com/shiyinghan/yolov5_7.0_val_rknn
2.使用方法
2.1 配置RKNN开发环境
参考RKNN-Toolkit2 里面v1.6.0的Quick Start 文档 的第三章“准备开发环境”,安装 RKNN-Toolkit2环境和板端 RKNPU2环境(不确定rknn-toolkit2的其他版本的环境好不好使,工具参考的是rknn-toolkit2的v1.6.0的Python Demo)。
Quick Start 文档 :01_Rockchip_RKNPU_Quick_Start_RKNN_SDK_V1.6.0_CN.pdf
2.2 配置YOLOv5 V7.0的运行环境
下载YOLOv5的v7.0版本并解压,然后下载yolov5_7.0_val_rknn解压并覆盖YOLOv5原版V7.0的文件夹。最后安装YOLOv5 V7.0需要的python依赖库,这里需要注意上一步配置RKNN开发环境的时候,可能安装一下老版本的python依赖库,直接使用YOLOv5 V7.0的requirements.txt安装依赖库可能出现错误,需要手动指定依赖库的版本。
2.3 设置data文件夹下面的yaml配置文件
为了区分原版的val.py,本验证工具使用的时候,需要指定task为test,所以配置文件也需要指定test目录的路径,如下:
2.4 连接开发板(必须)
本验证工具不支持模拟器运行,需要连接实机进行测试,否则会提示以下错误:
命令行里面target参数也需要配置为对应的参数,这里使用的是RK3568开发板,所以target设置为’RK3568’。
2.5 运行验证工具
命令行如下:
python val_rknn.py --data coco128_rknn.yaml --batch-size 1 --task 'test' --weights ./yolov5s-int8.rknn --target 'RK3568' --anchors ./anchors_yolov5.txt
3.运行效果
yolov5s量化版本rknn模型:
yolov5s非量化版本rknn模型:
yolov5s原版pt模型:
4.结论
类型 | 精度 | 召回率 | mAP50 | mAP50-95 |
---|---|---|---|---|
pt模型 | 0.719 | 0.625 | 0.714 | 0.475 |
RKNN量化版 | 0.688 | 0.655 | 0.699 | 0.455 |
RKNN非量化版 | 0.69 | 0.631 | 0.695 | 0.45 |
可以看出,对比pt原版模型,转换好的rknn的量化和非量化版本的模型精度和mAP都有一些下降。使用rknn模型的项目中,pt原版模型的性能参数只能作为一个参考,需要实际算出rknn模型的性能参数才行。