☰
500元RK3588开发板跑YOLOv5:从训练到RKNN部署全流程
2026/10/6 16:05:35 网站建设 项目流程

五百块买一块能跑YOLOv5的开发板,这事放在两年前根本不敢想。那时候RK3588平台的板子要么上千,要么常年缺货,现在香橙派5Pro把8G版本压到五百块上下,我第一时间就买了回来。折腾了一个多月,把YOLOv5从PC机上训练、导出ONNX、转RKNN、再到RK3588端侧NPU推理整条链路跑通,中间换过系统、重装过工具链、踩了不少模型转换的坑。这篇就把完整过程拆开揉碎讲清楚,从硬件选型到训练参数,从RKNN转换到板端部署代码,每一步都带参数、命令和操作截图式的描述,保证你照着走也能把模型跑起来。适合手里有RK3588系列板子、想把YOLOv5部署上去但一直没跑通的朋友,也适合刚刚接触边缘AI、想低成本入门的新手。

1. 方案选型与硬件准备

1.1 香橙派5Pro的硬件底子

先说结论:这块板子的性价比核心就在RK3588S这颗芯片上。香橙派5Pro用的是RK3588S,可以理解为RK3588的简化版,砍掉了一部分不常用的高速接口,但最重要的计算单元全部保留。CPU是4颗Cortex-A76大核加4颗Cortex-A55小核,大核最高主频能摸到2.4GHz,GPU是Mali-G610 MP4,最关键的NPU是3核设计,总算力6TOPS。对目标检测部署来说,判断一块板子能不能跑YOLO,第一看NPU,第二看内存带宽,第三才轮得到CPU。RK3588S这颗NPU在YOLOv5s这种7.5M参数左右的模型上,INT8量化后跑640分辨率输入,实测能做到30到45帧,完全达到实时检测的水平。

我入手的这台是8GB LPDDR4x内存版本,价格在五百出头。如果你是做多路视频分析或者要顺带跑大模型,建议直接上16GB版本,价格也就贵一百多,但能做的事情完全不是一个量级。板载存储方面,香橙派5Pro提供了一个M.2 NVMe接口,强烈建议配一块固态硬盘,系统响应速度和模型加载速度都会有肉眼可见的提升。另外它还有双HDMI输出、2.5G网口、多个USB 3.0接口,MIPI-CSI和MIPI-DSI接口也都齐全,做视觉项目的时候外接摄像头或屏幕都很方便。

1.2 为什么在这个价位的板子里选它

很多人会拿来跟树莓派5、Jetson Nano这类板子对比。树莓派5的CPU性能确实不错,但完全没有NPU,跑YOLOv5s在CPU上只能到三四帧,只能算能跑;Jetson Nano有128核Maxwell GPU,理论算力有472 GFLOPS,但显存只有4GB,跑YOLOv5s明显吃力,而且价格并不比香橙派5Pro便宜,生态也相对封闭。

对比项香橙派5Pro树莓派5Jetson Nano
芯片RK3588SBCM2712Tegra X1
NPU/GPU算力6TOPS NPU无NPU472 GFLOPS GPU
内存8G/16G LPDDR4x8G/16G LPDDR4x4G LPDDR4
YOLOv5s实测30-45 FPS3-5 FPS8-15 FPS
五百元档位热销是新晋热门常年断货溢价老产品但价格稳

当然,RK3588S也有它的短板,主要是软件生态没有树莓派那么"傻瓜化",很多工具要自己装、自己配置。但它的优势恰恰在于给了你一个完整的NPU算力平台,经过一番折腾,你能学到整套算法落地的流程,这个收益是单纯的"开箱即用"给不了的。

1.3 系统烧录与基础配置

系统方面,不建议自己折腾移植系统,直接用官方编译好的Ubuntu 22.04镜像就行。网上那些"从零移植Ubuntu到RK3588"的教程,更多是为了理解内核和根文件系统的构建流程,实际部署算法时没有必要自己造轮子。

烧录很简单:去香橙派官网下载Ubuntu 22.04镜像,用balenaEtcher或者dd命令写到TF卡里。如果是用NVMe固态,可以先写到TF卡,开机后在系统里用rsetup工具把系统复制到NVMe,之后就能完全抛弃TF卡运行。

sudo apt update sudo apt install rsetup -y sudo rsetup

在rsetup界面里可以设置overlay、调整内存频率、配置风扇策略。我习惯先做两件基础事:启用SSH服务,方便后面远程调试;把GPU对应的NPU相关服务确认开启。香橙派的Ubuntu镜像默认自带NPU驱动,但不同版本镜像自带的librknnrt版本不一样,这一点我后面专门讲,因为版本不匹配是部署时最常遇到的坑。

另外建议给系统换一个稳定的软件源,用国内的镜像加速能省掉很多等下载的时间。配置完重启一次,sudo apt full-upgrade跑一遍,基础环境就算就绪了。

2. YOLOv5训练:从数据集到权重文件

2.1 训练环境搭建

先明确一点:香橙派5Pro不是用来训练的。虽然有8核CPU和NPU,但NPU并不擅长反向传播,跑训练任务体验会很差。正确的做法是在自己的电脑或者云GPU上完成训练,然后把训练好的模型拿到板子上做推理。我这里用conda管理环境,Python版本用3.8,这也是YOLOv5 v7.0官方推荐的版本之一。

conda create -n yolov5 python=3.8 conda activate yolov5 git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt

如果你的电脑有NVIDIA独立显卡,需要再装匹配CUDA版本的PyTorch,用下面的命令装GPU版本:

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118

装完后输入python -c "import torch; print(torch.cuda.is_available())",如果输出True就说明GPU能用。没显卡也不慌,YOLOv5用CPU也能训练,只是速度慢很多,建议把模型换成YOLOv5n或者把输入分辨率降到320,整个训练时间能缩短到可以接受的范围。

2.2 数据集准备与标注

如果你用的是公开数据集,比如COCO、VOC,那直接下载转成YOLO格式就行。如果是自己的业务场景,一般需要自己标注。标注工具我常用labelImg,现在也比较流行X-AnyLabeling,支持自动标注辅助,能省不少时间。YOLOv5训练需要的数据格式是:一张图片对应一个同名txt文件,txt里每一行是cls x_center y_center width height,坐标值都是归一化到0到1的。

0 0.521875 0.357031 0.123438 0.182813 1 0.785156 0.517188 0.096094 0.223438

目录结构最好严格按照下面这样组织,YOLOv5读取时会自动找:

datasets/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml

data.yaml内容需要写清楚路径和类别列表:

path: /home/user/datasets train: images/train val: images/val nc: 2 names: ['person', 'car']

这里有个经验:训练集和验证集的数据分布尽量一致,尤其是光照条件、拍摄角度、目标尺度,如果训练集都是高清正脸照片,验证集却全是模糊侧脸,mAP会非常难看。

2.3 训练参数与超参设置

数据准备好了就可以开始训练,基本命令:

python train.py --data data.yaml --weights yolov5s.pt --img 640 --batch 32 --epochs 100

--weights这里强烈建议使用官方预训练权重yolov5s.pt作为起点,而不是从零开始。预训练权重已经在大规模数据集上学到了丰富的底层特征,你只需要微调顶层来适应自己的数据。在数据量不足五千张的情况下,用预训练权重训练的mAP通常比从零训练高出很多,而且收敛速度更快。

关键的训练超参数,我展开说一下:

  • batch-size:显卡显存允许下尽量取大一点,32或64都行。如果中途显存不够,把batch调小以后,学习率最好也跟着调小,否则容易震荡不收敛。
  • epoch:先跑100轮看曲线。如果val曲线在最后十几轮还在上升,就继续加。如果train的loss降得很低但val开始往上走,就是过拟合的前兆。
  • 输入分辨率imgsz:默认640效果最好,但板端推理速度会下降。如果后面目标是高帧率部署,可以从训练时就用416甚至320,模型会适应低分辨率,精度损失反而比你训练640然后推理缩到320要小。
  • 数据增强参数:在data/hyps/hyp.scratch-low.yaml里,比较重要的是hsv_h、hsv_s、hsv_v三个颜色增强参数,它们能有效提高模型对光照变化的鲁棒性。如果你的场景光线统一,可以适当调低;如果场景多变,我建议在原基础上加一点点。

设好之后,跑训练命令,用--freeze 10可以冻结前10层,加快训练速度并减少过拟合,特别是数据量不大的场景可以试试。

python train.py --data data.yaml --weights yolov5s.pt --img 640 --batch 32 --epochs 100 --freeze 10

训练过程中可以用TensorBoard监控loss走向,YOLOv5默认会在runs/train/exp下生成results.png,包含box_loss、obj_loss、cls_loss、mAP等曲线,一眼就能看出训练状态是否正常。

2.4 训练结果评估与导出ONNX

训练完成后,在runs/train/exp/weights目录下会有两个文件:best.pt和last.pt。best.pt是验证集上mAP最高的权重,后面所有操作都用它。先用val.py验证一下最终指标:

python val.py --data data.yaml --weights runs/train/exp/weights/best.pt --img 640

输出会显示各类别的precision、recall、mAP50、mAP50-95。只要mAP50在0.9以上,说明模型已经学到比较有效的特征;如果只有0.5以下,先别急着部署,回头检查数据集和训练参数更实际。

接下来导出ONNX格式,这是转RKNN的前置步骤:

python export.py --weights runs/train/exp/weights/best.pt --include onnx --opset 12 --imgsz 640

这里opset选12是当前RKNN-Toolkit2兼容性最好的版本,不要贸然用更高的opset,后面转到RKNN时容易碰到"算子不支持"的错误。导出成功后会在同目录生成best.onnx。可以再用Netron打开看看网络结构,确认输出节点是不是形如[1, 25200, 85](85 = 4个位置 + 1个置信度 + 80个类别,如果你自定义类别数就相应变化)。认清输出结构,后面写后处理代码需要用到。

3. 模型转换:从ONNX到RKNN

3.1 RKNN-Toolkit2环境搭建

RKNN是瑞芯微NPU的专属模型格式,PyTorch的.pt文件或者ONNX文件都不能直接上板跑,必须先通过RKNN-Toolkit2转换成.rknn文件。这个转换动作一般在PC上完成,因为RKNN-Toolkit2完整版支持x86架构,在板子上只能装调用NPU的Lite版本。

先拉rknn-toolkit2的代码仓库:

git clone https://github.com/airockchip/rknn-toolkit2 cd rknn-toolkit2 pip install packages/rknn_toolkit2-1.6.0-cp38-cp38-linux_x86_64.whl

版本选择上我用的1.6.0,对应的runtime是1.6.0,整体比较稳定。装完之后验证一下:

python -c "from rknn.api import RKNN; print('rknn toolkit ok')"

没报错就说明环境OK。需要提醒的是,rknn-toolkit2对numpy版本比较敏感,装完之后不要去升级numpy,否则容易遇到ABI不兼容的报错。

3.2 转换脚本与关键参数

写一个标准的转换脚本,核心流程是config、load、build、export四步:

from rknn.api import RKNN rknn = RKNN() rknn.config( mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588' ) rknn.load_onnx(model='best.onnx') rknn.build(do_quantization=True, dataset='dataset.txt') rknn.export_rknn('yolov5s.rknn') rknn.release()

代码很简单,但参数背后的含义很容易踩坑。mean_values和std_values是NPU做输入归一化用的,YOLOv5官方的预处理是直接把0到255的RGB像素除到0到1,所以mean填[[0,0,0]],std填[[255,255,255]]。如果训练时做了其他归一化,这里必须和训练时保持一致,很多人在PC上测试精度很高,转换到板子上精度崩溃,九成就是这里填错了。

dataset.txt是量化校准图片列表,每行一个图片路径,图片不需要太多,几十到一百张就够,但一定要从训练数据里随机挑,不要全用同一类场景。量化校准的本质是让NPU统计真实输入的数值分布,从而确定INT8量化参数,如果校准图片和实际推理的图片分布差异太大,量化后精度损耗会明显放大。

执行转换后,终端会打印每一层的量化信息,最后看到Convert done.就表示成功了。生成的.rknn文件就是最终要拷到板子上的产物。

3.3 INT8量化的取舍

RK3588的NPU支持INT8、INT16和FP16三种精度。FP16转换最简单,精度损失几乎为零,但推理速度只有INT8的一半甚至更低。INT8速度快,但模型的权重和激活值都要量化成8位整数,精度会有一定程度的下降。

量化对YOLOv5来说通常是比较友好的。我在自己的数据集上测过,mAP50从0.965降到0.944,只掉了两个多点,完全在可接受范围内,但推理速度整整快了一倍。如果业务对精度极其敏感,建议先转一个FP16的版本做备用,到时候根据实际效果决定用哪个。

如果你发现掉点超过预期,有几个优化思路:

  • 增加dataset.txt里的校准图片数量,并尽量贴近真实场景。
  • 把转换时的batch_size参数调小,有时能减小量化误差。
  • 在模型导出ONNX时去掉检测头的部分,把两三个输出分支拆开分别转换,这种方式复杂些,但某些场景下能减少量化干扰。
  • 最后实在不行,就把对精度影响大的层保留为FP16,其他层用INT8混精度推理,RKNN在部分版本支持这种配置。

这部分如果展开会是一篇文章的长度,现阶段先掌握整体流程,遇到问题再逐个排查。

4. 香橙派5Pro端侧推理

4.1 板端运行时环境

把前面生成的yolov5s.rknn文件传上板子,可以用scp:

scp yolov5s.rknn user@板子的IP:/home/orangepi/

板端推理不装完整的RKNN-Toolkit2,只需要runtime版本的librknnrt.so。最简单的方式是从rknn-toolkit2仓库里的runtime目录拷贝,或者直接pip安装rknn-toolkit-lite:

pip install rknn_toolkit_lite2

装完后,把runtime/Linux/rknn_server对应版本的库加上,或者直接确认系统里存在/usr/lib/librknnrt.so。如果用了官方Ubuntu镜像,内核里NPU驱动一般已经内置,无需重新编译。

还要装一个OpenCV和一个numpy。OpenCV官方apt源里的版本就够用:

sudo apt install python3-opencv python3-numpy

这里建议把Python运行时版本和转换时保持一致。你是用PC上的Python3.8转的模型,板子系统的Python3.10也能正常加载,但不同Python大版本下的numpy行为略有差异,运行时如果出现类型转换问题,优先排查是不是numpy版本过新导致的。

4.2 推理与后处理代码

直接给一份可运行的Python推理代码,加载模型、前处理、推理、后处理都写进去了:

import cv2 import numpy as np from rknnlite.api import RKNNLite CLASSES = ['person', 'car'] # 改成自己数据集的类别 CONF_THRES = 0.25 NMS_THRES = 0.45 INPUT_SIZE = 640 def letterbox(img, new_shape=(INPUT_SIZE, INPUT_SIZE), color=(114, 114, 114)): shape = img.shape[:2] r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) new_unpad = (int(round(shape[1] * r)), int(round(shape[0] * r))) dw = (new_shape[1] - new_unpad[0]) / 2 dh = (new_shape[0] - new_unpad[1]) / 2 if r != 1: img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR) top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) return img, r, (dw, dh) def xywh2xyxy(x): y = np.copy(x) y[..., 0] = x[..., 0] - x[..., 2] / 2 y[..., 1] = x[..., 1] - x[..., 3] / 2 y[..., 2] = x[..., 0] + x[..., 2] / 2 y[..., 3] = x[..., 1] + x[..., 3] / 2 return y def postprocess(outputs, ratio, pad): pred = outputs[0][0] obj_conf = pred[:, 4] pred = pred[obj_conf > CONF_THRES] if len(pred) == 0: return [] cls_conf = pred[:, 5:].max(axis=1) cls_ids = pred[:, 5:].argmax(axis=1) box = xywh2xyxy(pred[:, :4]) boxes = box scores = obj_conf[obj_conf > CONF_THRES] * cls_conf keep = cv2.dnn.NMSBoxes(boxes.tolist(), scores.tolist(), CONF_THRES, NMS_THRES) result = [] for idx in keep: if isinstance(idx, (list, tuple)): idx = idx[0] x1, y1 = (boxes[idx][0] - pad[0]) / ratio, (boxes[idx][1] - pad[1]) / ratio x2, y2 = (boxes[idx][2] - pad[0]) / ratio, (boxes[idx][3] - pad[1]) / ratio result.append((int(cls_ids[idx]), float(scores[idx]), int(x1), int(y1), int(x2), int(y2))) return result rknn = RKNNLite() rknn.load_rknn('yolov5s.rknn') rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2) img = cv2.imread('test.jpg') input_img, ratio, pad = letterbox(img) input_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB) outputs = rknn.inference(inputs=[input_img], data_format='nhwc') dets = postprocess(outputs, ratio, pad) for cls_id, score, x1, y1, x2, y2 in dets: cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img, f'{CLASSES[cls_id]} {score:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) cv2.imwrite('result.jpg', img)

代码里我用了RKNNLite接口,init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2)表示三个NPU核心一起用。data_format='nhwc'的意思是输入维度直接按高度、宽度、通道的顺序给,不用手动转成NCHW,能省一次内存拷贝。

后处理的逻辑和官方YOLOv5基本一致,先按置信度过滤,再做NMS。注意letterbox的等比缩放和填充操作一定要和训练时的预处理保持一致,否则边框位置会整体偏移,而且模型输入分布的变化会让量化模型更容易误检。

4.3 摄像头实时检测Demo

图片检测跑通以后,实时摄像头检测就是水到渠成的事。用OpenCV读USB摄像头是多数人最方便的方式:

cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) while True: ret, frame = cap.read() if not ret: break input_img, ratio, pad = letterbox(frame) input_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB) outputs = rknn.inference(inputs=[input_img], data_format='nhwc') dets = postprocess(outputs, ratio, pad) for cls_id, score, x1, y1, x2, y2 in dets: cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(frame, f'{CLASSES[cls_id]} {score:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) cv2.imshow('yolov5-rk3588', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()

如果使用MIPI-CSI摄像头,香橙派5Pro的MIPI接口配合官方镜像里的摄像头驱动方案,可以用v4l2或rkmpp相关接口读取。调试MIPI摄像头时经常会遇到显示画面颜色偏紫或者绿的问题,优先检查摄像头的sensor型号和驱动overlay是否匹配。

实时检测的瓶颈往往不在NPU推理本身,而是在图像的采集、缩放格式转换和显示这几步。在Python里做RGB转BGR、resize都会占用CPU时间。想提高整体吞吐,可以用多线程把采集、推理、显示三个环节并行起来,或者直接降采集分辨率。举个例子,640分辨率推理只需要几十毫秒,但如果采集是4096x2160,每次缩放都可能把帧率拖低很多。

4.4 性能实测与优化方向

我在自己这台香橙派5Pro 8G上,用YOLOv5s INT8 640输入,三个NPU核心全开,推理延迟大概在28到35毫秒,换算过来就是30到45帧。换成YOLOv5n,延迟能压到15毫秒以下,跑实时检测非常轻松。这个数据和我查到的社区测试基本一致,不同固件版本会有浮动,但整体量级就是这样。

想让性能更上一层楼,可以从几个方向入手:

  • 如果对精度要求不高,推理输入分辨率从640降到416或320,帧率能翻倍。
  • 后处理用numpy向量化操作,不要用纯Python循环逐条过滤。
  • 一次推理多张图时,用rknn.inference(inputs=[img1, img2, ...])做batch推理,对1280分辨率的多路场景很有帮助。
  • 需要极低延迟的时候,可以上C API,用librknnrt写C++推理代码,省掉Python解释开销。C API用起来确实麻烦一些,但做工业级应用时这是绕不开的路径。
  • 板卡供电也要注意。别用劣质USB电源,我在调试过程中遇到过一次间歇性掉帧,最后发现是供电不足导致NPU降频,换了一个5V/3A的电源就稳定了。

5. 常见问题与避坑指南

5.1 模型转换报错怎么办

RKNN转换过程中最常见的报错是算子不支持。YOLOv5的ONNX模型虽然结构不复杂,但某些opset版本或特殊算子会让RKNN-Toolkit2解析失败。遇到这种情况,先确认导出ONNX时opset是不是12,再确认有没有用torch.onnx.simplify做化简。很多时候用python -m onnxsim best.onnx best_sim.onnx简化一遍,算子类型会变得标准,转换就能通过。

另外一个典型问题是rknn.load_onnx后build阶段报维度错误。这种情况多半是动态shape导致的。YOLOv5导出的ONNX默认是固定shape,如果导出时没有固定imgsz,输入维度会是[1, 3, -1, -1],RKNN解析不了动态维度。导出命令里必须带上--imgsz 640这种明确尺寸。

报错信息常见原因解决办法
Unknown layer / not supportONNX封装后算子太杂用onnxsim化简,或检查opset版本
load_onnx fail模型输入含动态维度重新固定imgsz导出
mean/std shape mismatch通道顺序理解错误确认是RGB还是BGR,对应调整参数
build fail at quant layer校准图读取失败检查dataset.txt路径,换成绝对路径

5.2 板端运行报错排查

板端部署最常见的报错是找不到librknnrt.so。如果你看到ImportError: librockchip_mpp.so.1: cannot open shared object file或类似提示,多半是系统的runtime库路径没配置好。可以手动把librknnrt.so所在目录加入LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH

如果用rknn.load_rknn之后init_runtime报eRKNNGraphError,优先怀疑板端runtime版本和PC端转换版本不一致。比如PC端是1.6.0生成的.rknn,板端装的是老版本1.4.0,就一定会出现这种问题。解决办法是升级板端runtime到与PC端一致的版本。

还有一类问题是NPU驱动没有加载。在板子上执行:

sudo dmesg | grep rknpu

如果没有任何输出,说明NPU驱动没起来,需要确认内核里rockchip-npu模块是否加载。官方Ubuntu镜像一般没问题,但如果你自己编译过内核,这个坑很容易踩到。

5.3 精度下降排查

模型在PC上精度很高,转成RKNN后明显变差,这是最多人问的问题。排查顺序我建议分三走:

第一,先看前处理是否一致。如果PC测试用的是BGR输入,RKNN转换时却按RGB配置了mean和std,图像通道被交换,精度必然崩。反过来也一样。

第二,看letterbox的填充值。YOLOv5官方用的是114,不要把填充色改成0或者255,量化模型对边界填充值非常敏感,评测的时候可能差别不大,但实际部署中经常造成远距离目标漏检。

第三,看量化校准图片。前面强调过,校准图要和真实推理数据同分布。如果你用纯室内灯光的数据做校准,拿到室外强光场景去推理,INT8模型精度可能直接掉十几个点。解决方法是校准图集里混入多种场景,或者干脆换成FP16模型对比测试,一起判断是否量化引起的。

5.4 这块板子还能怎么玩

整个流程跑通以后,香橙派5Pro其实还可以做很多事情。RK3588S的6TOPS NPU在500元这个价位基本没有对手,它不只是能跑YOLOv5,YOLOv8、YOLO系列各种变体都有对应的RKNN转换方案,rknn_model_zoo官方仓库里已经提供了一批现成例程,拿自己的数据重新训练后按同样的路径转换就行。

另外很多人在折腾AI大模型的本地部署,香橙派5Pro的16GB版本完全可以跑Qwen2.5、Llama 3.2这类7B模型的INT4量化版本。虽然速度没法跟带独立显卡的台式机比,但作为私有本地服务,不需要联网就能运行,这对一些敏感场景是很有吸引力的。板子有NVMe接口,跑模型的时候性能瓶颈主要在内存带宽,但体验一把本地大模型是完全没问题的。这也是我前面说为什么不差那一百块就上16GB版本的原因。

树莓派上能做的那些GPIO控制、家庭服务器、NAS方案,香橙派5Pro基本也能做。换句话说,这张板子等于一个带NPU的小电脑,打通目标检测部署流程之后,边缘AI的方向就彻底打开了。

整套流程跑通之后,给我最大的感受是:RK3588的边缘AI部署链路已经非常成熟,香橙派5Pro把价格压到500元档位,确实是把入门的门槛拉了下来。最后再分享一个很实在的建议:如果你之前没接触过RKNN,拿到板子第一天别急着转自己的模型,先花半小时把rknn_model_zoo里的yolov5例程原样跑通一遍,让板子能出画面、能画出框。先有完整的成功体验,再换成自己的数据集和模型,出问题的时候排查范围会小很多。这方法我后来教过好几个朋友,全都说省了不少熬夜时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询