From f4ff462bc576b36fb18e1f74e0f7af39a635a0d8 Mon Sep 17 00:00:00 2001 From: haotian <2421912570@qq.com> Date: Mon, 1 Sep 2025 16:07:53 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9E=8B=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E8=84=9A=E6=9C=AC\n2.=E6=B7=BB=E5=8A=A0moniter.sh?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E7=B3=BB=E7=BB=9F=E8=B5=84=E6=BA=90=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- moniter.sh | 7 +++++ transfer/001pt转onnx.py | 16 +++++++++++ transfer/002onnx转rknn.py | 58 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100755 moniter.sh create mode 100644 transfer/001pt转onnx.py create mode 100644 transfer/002onnx转rknn.py diff --git a/moniter.sh b/moniter.sh new file mode 100755 index 0000000..d0a13f9 --- /dev/null +++ b/moniter.sh @@ -0,0 +1,7 @@ +#!/bin/bash +while true; do + clear + echo "CPU 使用率: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')%" + echo "内存使用率: $(free -m | awk 'NR==2{printf "%.2f%%\n", $3 * 100/$2 }')" + sleep 1 +done \ No newline at end of file diff --git a/transfer/001pt转onnx.py b/transfer/001pt转onnx.py new file mode 100644 index 0000000..bfd42e3 --- /dev/null +++ b/transfer/001pt转onnx.py @@ -0,0 +1,16 @@ +from ultralytics import YOLO +import torch +# 加载模型时禁用数据验证 +model = YOLO("/home/admin-root/haotian/康达瑞贝斯机器狗/YoloV8Obj/dataset_20250819/train2/weights/best.pt", task="detect") +# 手动设置模型为推理模式 +model.model.eval() +# 导出 ONNX +dummy_input = torch.randn(1, 3, 640, 640) +torch.onnx.export( + model.model, # 使用 model.model 访问底层 PyTorch 模型 + dummy_input, + "yolov8_20250820.onnx", + input_names=["input"], + output_names=["output"], + opset_version=11, +) diff --git a/transfer/002onnx转rknn.py b/transfer/002onnx转rknn.py new file mode 100644 index 0000000..01bcb58 --- /dev/null +++ b/transfer/002onnx转rknn.py @@ -0,0 +1,58 @@ +from rknn.api import RKNN +import cv2 +import numpy as np + + +# 初始化 RKNN +rknn = RKNN() + +# 配置参数(关键!) +rknn.config( + target_platform="rk3588", # 根据实际芯片型号修改 + mean_values=[[0, 0, 0]], # YOLOv8 输入为 0-255,无需归一化 + std_values=[[255, 255, 255]], # 输入数据除以 255(即 0-1 范围) + # quant_img_RGB2BGR=True, + optimization_level=3, # 最高优化级别 +) + +# 加载 ONNX +ret = rknn.load_onnx(model="/home/orangepi/Desktop/kangda_robotic_dog/yolov8_20250820.onnx") +assert ret == 0, "加载 ONNX 失败!" + +# 转换模型 +ret = rknn.build( + do_quantization=False, # 启用量化 + # dataset="dataset.txt", # 校准数据路径 +) +assert ret == 0, "转换 RKNN 失败!" + +# 导出 RKNN +ret = rknn.export_rknn("/home/orangepi/Desktop/kangda_robotic_dog/yolov8_20250820.rknn") +assert ret == 0, "导出 RKNN 失败!" + + +# Set inputs +img = cv2.imread('/home/orangepi/Desktop/kangda_robotic_dog/微信图片_20250827165826.jpg') +img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) +img.resize((3, 640, 640)) +img = np.expand_dims(img, 0) + +# Init runtime environment +print('--> Init runtime environment') +ret = rknn.init_runtime() +if ret != 0: + print('Init runtime environment failed!') + exit(ret) +print('done') + +# Inference +print('--> Running model') +outputs = rknn.inference(inputs=[img], data_format=['nchw']) +np.save('./tflite_mobilenet_v1_0.npy', outputs[0]) +print(len(outputs)) +print('done') + +rknn.release() + + +