RK3562/3588系列之6—yolov5模型的部署
- 1.yolov5模型训练
- 2.训练好的模型转成onnx格式
- 3.模型从onnx格式转RKNN
- 3.1 onnx2rknn.py
- 3.2 onnx2rknn.py
- 3.3 直接使用rknn.api
- 3.4 rknn_model_zoo中的转换代码
- 3.5 LubanCat-RK系列板卡官方资料
- 4.RK NPU c++推理
- 4.1交叉编译
- 4.2 开发板执行编译好的二进制文件
- 参考文献
yolov5是使用非常广泛的深度学习模型之一。同时,RK官方资料中也有非常多的资料。
本博客结合这些资料,进行yolov5在RK3588开发板部署的实践介绍。
整体过程包括:
- 模型的训练;
- 训练好的模型(如.pt)导成onnx格式;
- onnx模型转为RKNN格式;
- NPU读取模型进行推理。
代码执行建议通过terminal命令行进行。
1.yolov5模型训练
注意要使用 RK官方github yolov5 。虽然它也是基于https://github.com/ultralytics/yolov5 ,但也有一些变化。
README中有简单介绍:
直接使用https://github.com/ultralytics/yolov5 代码进行训练,导出的模型不能直接应用于RK,或者效果不好。
训练过程调用train.py
,主要需要适应性修改的参数是前三个:
def parse_opt(known=False):parser = argparse.ArgumentParser()parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path'),parser.add_argument('--cfg', type=str, default='yolov5s.yaml', help='model.yaml path')parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
首轮训练可通过设置cfg
来构建模型;后面再进行训练的时候可以通过设置weights
,直接读取权重及构建模型。
通过修改'data/XXX.yaml'
,设置自己的数据集参数:
path: ../datasets/coco128 # dataset root dir
train: images/train2017 # train images (relative to 'path') 128 images
val: images/train2017 # val images (relative to 'path') 128 images
test: # test images (optional)# Classes
names:0: person1: bicycle2: car3: motorcycle...
通过terminal 命令行,进行模型模型。
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5n.yaml --batch-size 128yolov5s 64yolov5m 40yolov5l 24yolov5x 16
2.训练好的模型转成onnx格式
使用以下命令行生成yolov5s.pt
。
$ python export.py --rknpu --weight weights/yolov5s.pt export: data=data/coco_DMP303_WBC.yaml, weights=['weights/yolov5s.pt'], imgsz=[640, 640],
batch_size=1