RV1126 部署自己训练的yolov8

部署运行你感兴趣的模型镜像

1)环境:

创建一个 python3.8的虚拟环境

采用rknn_toolkit-1.7.5-cp38-cp38-linux_x86_64.whl

1) pt -> onnx

使用RK的yolov8.

在满足 ./requirements.txt 的环境要求后,执行以下语句导出模型

# 调整 ./ultralytics/cfg/default.yaml 中 model 文件路径,默认为 yolov8n.pt,若自己训练模型,请调接至对应的路径。支持检测、分割模型。
# 如填入 yolov8n.pt 导出检测模型
# 如填入 yolov8-seg.pt 导出分割模型

export PYTHONPATH=./
python ./ultralytics/engine/exporter.py

# 执行完毕后,会生成 ONNX 模型. 假如原始模型为 yolov8n.pt,则生成 yolov8n.onnx 模型。

执行之后,就会在当前目录下生成 对应的ONNX模型。我们打开这个模型看一下,就会发现outputs输出是9个。如果不用这个方式,outputs会是一个,导致后面的无法正常使用。RK的GIT上相关的问题,都没人回答,这是一个坑,被我踩了一次。

2) ONNX->rknn

进入rknn_model_zoo/example/yolov8/python

python3 convert.py best.onnx rv1126

W rknn-toolkit version: 1.7.5
--> Config model
done
--> Loading model
W Catch exception when optimize onnx model, skip it! Exception: Unresolved value references: /model.10/Constant_1_output_0,/model.10/Constant_output_0,/model.13/Constant_1_output_0,/model.13/Constant_output_0,/model.22/Constant_1_output_0,/model.22/Constant_2_output_0,/model.22/Constant_3_output_0,/model.22/Constant_4_output_0,/model.22/Constant_5_output_0,/model.22/Constant_output_0,
/usr/local/lib/python3.8/dist-packages/rknn/api/rknn.py:160: FutureWarning: Possible nested set at position 7
  ret = self.rknn_base.load_onnx(model, inputs, input_size_list, outputs)
--> Building model
W found outlier value, this may affect quantization accuracy
const name                              abs_mean    abs_std     outlier value
Conv_/model.0/conv/Conv_226:weight      2.32        2.26        14.828      
W:tensorflow:From /usr/local/lib/python3.8/dist-packages/tensorflow/python/framework/func_graph.py:981: py_func (from tensorflow.python.ops.script_ops) is deprecated and will be removed in a future version.
Instructions for updating:
tf.py_func is deprecated in TF V2. Instead, there are two
    options available in V2.
    - tf.py_function takes a python function which manipulates tf eager
    tensors instead of numpy arrays. It's easy to convert a tf eager tensor to
    an ndarray (just call tensor.numpy()) but having access to eager tensors
    means `tf.py_function`s can use accelerators such as GPUs as well as
    being differentiable using a gradient tape.
    - tf.numpy_function maintains the semantics of the deprecated tf.py_func
    (it is not differentiable, and manipulates numpy arrays). It drops the
    stateful argument making all functions stateful.
    
W:tensorflow:From /usr/local/lib/python3.8/dist-packages/tensorflow/python/ops/resource_variable_ops.py:1659: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.
done
--> Export rknn model
done

打开生成的rknn看一下

3)进行在线预编译:

在线预编译模型需要板子接入网线或者跟电脑连接。用的是adb connect指令直接连接ip。

#执行指令
adb connect 192.168.2.17
#得到结果
already connected to 192.168.2.17:5555
#连接成功

cd到toolkit的examples->common_function_demos->export_rknn_precompile_model文件夹下,将刚刚得到的best.rknn模型拷贝进去。
执行如下指令:

python export_rknn_precompile_model.py best.rknn yolov8_best_pre.rknn rv1126

运行结束后得到yolov8_best_pre.rknn。如果不使用预编译,运行速度会非常慢。

 

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.9

PyTorch 2.9

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### RV1126平台部署YOLOv8的目标检测 #### 准备工作 为了在RV1126平台上成功部署YOLOv8模型,前期准备工作至关重要。确保拥有Luckfox-pico SDK buildroot镜像以及opencv-mobile库[^3]。由于该过程涉及多个步骤和技术要点,下面将详细介绍具体操作。 #### 设置开发环境 创建适合的Python虚拟环境对于项目稳定性和依赖管理非常重要。建议基于Miniconda来构建一个独立的工作空间,在命令行工具中执行如下指令: ```bash conda create -n yolov8_env python=3.8 conda activate yolov8_env ``` 这一步骤能够有效隔离不同项目的包版本冲突问题,同时也便于后续维护和更新[^2]。 #### 安装必要的软件包和支持库 进入已激活的`yolov8_env`环境中后,需进一步安装YOLOv8所需的各类依赖项。考虑到RV1126内置NPU加速特性,应优先考虑采用RKNN Toolkit作为编译转换工具链之一。通过pip或其他方式获取最新版PyTorch及相关视觉处理组件如OpenCV-Python等。 #### 模型优化与量化 针对嵌入式设备的特点,通常需要对原始浮点精度预训练好的YOLOv8权重文件实施INT8量化处理,从而降低推理延迟并提高能效表现。利用ONNX Intermediate Representation (IR)格式作为中间媒介可以简化这一流程,并借助官方文档指导完成相应配置调整。 #### 编写适配代码 编写一段简单的测试程序用于验证整个链条是否正常运作。这里给出一个基本框架供参考: ```python import cv2 from rknn.api import RKNN def load_model(model_path): """加载经过量化的YOLOv8模型""" rknn = RKNN() ret = rknn.load_rknn(path=model_path) if ret != 0: print('Load YOLOv8 model failed!') exit(ret) ret = rknn.init_runtime(target='rv1126') if ret != 0: print('Init runtime environment failed.') exit(ret) return rknn if __name__ == '__main__': # 加载模型 yolo_v8 = load_model('./models/yolov8_quantized.rknn') cap = cv2.VideoCapture(0) while True: _, frame = cap.read() outputs = yolo_v8.inference(inputs=[frame]) # 处理输出结果... ``` 上述脚本展示了如何初始化RKNN实例并将摄像头捕获的画面送入网络进行预测分析的过程[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值