目标检测 模型部署
参考资料:
- 模型仓库:https://github.com/airockchip/ultralytics_yolov8
- 模型源码资料包(国内用户推荐):https://dl.100ask.net/Hardware/MPU/RK3576-DshanPi-A1/utils/ultralytics_yolov8.zip
1.获取原始模型
1.进入目标检测模型仓库:
git clone https://github.com/airockchip/ultralytics_yolov8
cd ultralytics_yolov8
2.使用conda创建环境
conda create -name yolov8 python=3.9
conda activate yolov8
3.安装yolov8相关依赖
pip3 install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 ultralytics==8.3.31 onnx==1.17.0 onnxruntime==1.8.0 onnxsim==0.4.36
4.导出ONNX模型
python ultralytics/engine/exporter.py
如果无法下载模型可直接访问yolov8n.pt,下载后放在ultralytics_yolov8
目录下,再次执行。
运行效果如下:
(yolov8) baiwen@dshanpi-a1:~/ultralytics_yolov8$ python ultralytics/engine/exporter.py
Ultralytics YOLOv8.2.82 🚀 Python-3.9.23 torch-2.4.1 CPU (Cortex-A53)
YOLOv8n summary (fused): 168 layers, 3,151,904 parameters, 0 gradients, 8.7 GFLOPs
PyTorch: starting from 'yolov8n.pt' with input shape (16, 3, 640, 640) BCHW and output shape(s) ((16, 64, 80, 80), (16, 80, 80, 80), (16, 1, 80, 80), (16, 64, 40, 40), (16, 80, 40, 40), (16, 1, 40, 40), (16, 64, 20, 20), (16, 80, 20, 20), (16, 1, 20, 20)) (6.2 MB)
RKNN: starting export with torch 2.4.1...
RKNN: feed yolov8n.onnx to RKNN-Toolkit or RKNN-Toolkit2 to generate RKNN model.
Refer https://github.com/airockchip/rknn_model_zoo/tree/main/models/CV/object_detection/yolo
RKNN: export success ✅ 2.8s, saved as 'yolov8n.onnx' (12.1 MB)
Export complete (24.8s)
Results saved to /home/baiwen/ultralytics_yolov8
Predict: yolo predict task=detect model=yolov8n.onnx imgsz=640
Validate: yolo val task=detect model=yolov8n.onnx imgsz=640 data=coco.yaml
Visualize: https://netron.app
执行完成后可以在当前目录下看到ONNX模型文件yolov8n.onnx
。
(yolov8) baiwen@dshanpi-a1:~/ultralytics_yolov8$ ls
CITATION.cff docker examples mkdocs.yml README.md RKOPT_README.md tests ultralytics.egg-info yolov8n.pt
CONTRIBUTING.md docs LICENSE pyproject.toml README.zh-CN.md RKOPT_README.zh-CN.md ultralytics yolov8n.onnx
将导出的ONNX模型拷贝至yolov8模型目录。
cp yolov8n.onnx ~/Projects/rknn_model_zoo/examples/yolov8/model
2.模型转换
1.使用Conda激活rknn-toolkit2
环境
conda activate rknn-toolkit2
2.进入yolov8模型转换目录
cd ~/Projects/rknn_model_zoo/examples/yolov8/python
3.执行模型转换
python3 convert.py ../model/yolov8n.onnx rk3576
运行效果如下:
(rknn-toolkit2) baiwen@dshanpi-a1:~/Projects/rknn_model_zoo/examples/yolov8/python$ python3 convert.py ../model/yolov8n.onnx rk3576
I rknn-toolkit2 version: 2.3.2
--> Config model
done
--> Loading model
I Loading : 100%|███████████████████████████████████████████████| 126/126 [00:00<00:00, 9216.48it/s]
done
--> Building model
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 173.69it/s]
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 99.72it/s]
I OpFusing 0 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 84.03it/s]
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 74.45it/s]
I OpFusing 2 : 100%|██████████████████████████████████████████████| 100/100 [00:03<00:00, 26.99it/s]
W build: found outlier value, this may affect quantization accuracy
const name abs_mean abs_std outlier value
model.0.conv.weight 2.44 2.47 -17.494
model.22.cv3.2.1.conv.weight 0.09 0.14 -10.215
model.22.cv3.1.1.conv.weight 0.12 0.19 13.361, 13.317
model.22.cv3.0.1.conv.weight 0.18 0.20 -11.216
I GraphPreparing : 100%|█████████████████████████████████████████| 161/161 [00:00<00:00, 854.69it/s]
I Quantizating : 100%|████████████████████████████████████████████| 161/161 [00:32<00:00, 4.91it/s]
W build: The default input dtype of 'images' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '318' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of 'onnx::ReduceSum_326' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '331' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '338' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of 'onnx::ReduceSum_346' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '350' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '357' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of 'onnx::ReduceSum_365' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '369' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
I rknn building ...
I rknn building done.
done
--> Export rknn model
done
可以看到转换完成后在model目录下看到端侧的RKNN模型。
(rknn-toolkit2) baiwen@dshanpi-a1:~/Projects/rknn_model_zoo/examples/yolov8/python$ ls ../model
bus.jpg coco_80_labels_list.txt dataset.txt download_model.sh yolov8n.onnx yolov8.rknn
3.模型推理
执行推理测试代码:
python3 yolov8.py --model_path ../model/yolov8.rknn --target rk3576 --img_show
运行效果如下:
(rknn-toolkit2) baiwen@dshanpi-a1:~/Projects/rknn_model_zoo/examples/yolov8/python$ python3 yolov8.py --model_path ../model/yolov8.rknn --target rk3576
I rknn-toolkit2 version: 2.3.2
--> Init runtime environment
I target set by user is: rk3576
done
Model-../model/yolov8.rknn is rknn model, starting val
W inference: The 'data_format' is not set, and its default value is 'nhwc'!
运行后会弹出下图所示的检测结果图: