赞
踩
若该文为原创文章,转载请注明原文出处。
参考rknn_model_zoo部署YOLOv8 实例分割.
1、测试训练环境:AutoDL.
2、平台:rk3568
4、环境:buildroot
5、虚拟机:正点原子提供的ubuntu 20
个人电脑没有GPU,在AutoDL租了服务器,配置如下:将在上面测试并训练。
- PyTorch 1.8.1
- Python 3.8(ubuntu18.04)
- Cuda 11.1
创建虚拟环境
conda create -n yolov8 python=3.8
激活
conda activate yolov8
安装方式有二种:
1、使用命令安装
pip install ultralytics -i https://mirror.baidu.com/pypi/simple
2、源码安装
- git clone https://github.com/ultralytics/ultralytics
- cd ultralytics
- # 安装
- pip install -e .
安装后,看下版本。
yolo version
使用官方的预训练模型yolov8s-seg.pt简单测试下图像分割测试,然后推理。
先下载模型:
https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8s-seg.pt
下载后,拷贝到ultralytics目录下。
yolo segment predict model=./yolov8s-seg.pt source='https://ultralytics.com/images/bus.jpg'
执行命令后进行推理。
结果保存在runs/segment/predict下。
由于只是测试,直接使用官网提供的coco128数据集,也可以自行制定数据集训练。
yolo segment train data=coco128-seg.yaml model=yolov8s-seg.pt epochs=300 imgsz=640
yolo segment val model=runs/segment/train/best.pt
- git clone https://github.com/airockchip/ultralytics_yolov8.git
-
- cd ultralytics_yolov8
导出模型,执行下面命令:
先执行
export PYTHONPATH=./
在执行转换,转换前需要先安装onnx
pip install onnx
导出模型:
python ./ultralytics/engine/exporter.py
导出正常,可以使用netron查看模型。
rknn模型是通过 toolkit2 转换的。环境搭建自行搭建。
参考简单的转换例程onnx2rknn.py
- import os
- import sys
- import numpy as np
- from rknn.api import RKNN
-
- DATASET_PATH = '../dataset/coco_subset_20.txt'
- DEFAULT_QUANT = True
-
- def parse_arg():
- if len(sys.argv) < 3:
- print("Usage: python3 {} [onnx_model_path] [platform] [dtype(optional)] [output_rknn_path(optional)]".format(sys.argv[0]));
- print(" platform choose from [rk3562,rk3566,rk3568,rk3588]")
- print(" dtype choose from [i8, fp]")
- print("Example: python onnx2rknn.py ./yolov8n.onnx rk3588")
- exit(1)
-
- model_path = sys.argv[1]
- platform = sys.argv[2]
-
- do_quant = DEFAULT_QUANT
- if len(sys.argv) > 3:
- model_type = sys.argv[3]
- if model_type not in ['i8', 'fp']:
- print("ERROR: Invalid model type: {}".format(model_type))
- exit(1)
- elif model_type == 'i8':
- do_quant = True
- else:
- do_quant = False
-
- if len(sys.argv) > 4:
- output_path = sys.argv[4]
- else:
- output_path = "./model/yolov8_seg_"+platform+".rknn"
-
- return model_path, platform, do_quant, output_path
-
- if __name__ == '__main__':
- model_path, platform, do_quant, output_path = parse_arg()
-
- # Create RKNN object
- rknn = RKNN(verbose=False)
-
- # Pre-process config
- print('--> Config model')
- rknn.config(mean_values=[[0, 0, 0]], std_values=[
- [255, 255, 255]], target_platform=platform)
- print('done')
-
- # Load model
- print('--> Loading model')
- ret = rknn.load_onnx(model=model_path)
- #ret = rknn.load_pytorch(model=model_path, input_size_list=[[1, 3, 640, 640]])
- if ret != 0:
- print('Load model failed!')
- exit(ret)
- print('done')
-
- # Build model
- print('--> Building model')
- ret = rknn.build(do_quantization=do_quant, dataset=DATASET_PATH)
- if ret != 0:
- print('Build model failed!')
- exit(ret)
- print('done')
-
- # Export rknn model
- print('--> Export rknn model')
- ret = rknn.export_rknn(output_path)
- if ret != 0:
- print('Export rknn model failed!')
- exit(ret)
- print('done')
-
- # 精度分析,,输出目录./snapshot
- #print('--> Accuracy analysis')
- #ret = rknn.accuracy_analysis(inputs=['./subset/000000052891.jpg'])
- #if ret != 0:
- # print('Accuracy analysis failed!')
- # exit(ret)
- #print('done')
-
- # Release
- rknn.release()
执行
python onnx2rknn.py best.onnx rk3568 i8
不使用上面代码,也可以使用rknn_model_zoo里的convert.py转换,参考RK3568笔记七:yolov5-seg实例分割测试验证_yolov5seg rknn-CSDN博客
python convert.py ../model/yolov5s-seg.onnx rk3568 i8
部署前面文章有提及,自行参考。
如有侵权,或需要完整代码,请及时联系博主。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。