3TOPS 级边缘盒子,RK3588 类 NPU,Linux,从环境准备→训练 / 微调→模型转换→NPU 部署→摄像头实时推理,全程命令可复制。

一、硬件与环境准备(盒子端)
硬件:3TOPS 算力盒(如 RK3588,NPU≈3–6TOPS),Ubuntu 20.04/22.04,≥4GB 内存,eMMC/SSD ≥32GB。
1.1 基础依赖
sudo apt update && sudo apt install -y python3 python3-pip python3-venv git cmake gcc g++
1.2 创建虚拟环境
python3 -m venv yolov8-env
source yolov8-env/bin/activate
pip install --upgrade pip
1.3 安装 Ultralytics(YOLOv8)
pip install ultralytics opencv-python numpy
验证:
yolo --version
二、模型获取与训练 / 微调(PC 或盒子)
2.1 直接用预训练模型(推荐新手)
# 下载并测试
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # nano 轻量版,适合3TOPS
model.predict("bus.jpg", save=True, show=True)
2.2 自定义数据集(YOLO 格式)
目录结构:
my_data/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
my_data.yaml
path: ./my_data
train: images/train
val: images/val
nc: 3
names: ["person", "car", "dog"]
2.3 训练(轻量配置,适合边缘)
from ultralytics import YOLO
model = YOLO("yolov8n.yaml") # 从头训,或用 yolov8n.pt 微调
model.train(
data="my_data.yaml",
epochs=50,
imgsz=640,
batch=8,
device="cpu" # 盒子无GPU时用CPU,或NPU加速
)
训练完成得到 runs/detect/train/weights/best.pt。
三、模型转换(.pt → ONNX → RKNN/INT8)
3.1 导出 ONNX
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
model.export(format="onnx", imgsz=640, opset=12, simplify=True)
# 输出 best.onnx
3.2 RK3588 NPU 量化转换(INT8,关键提速)
使用 rknn-toolkit2(PC 端转换):
# 安装(PC Ubuntu)
pip install rknn-toolkit2
转换脚本 convert2rknn.py:
from rknn.api import RKNN
rknn = RKNN(verbose=True)
rknn.config(mean_values=[[0,0,0]], std_values=[[255,255,255]], quant_level=3)
rknn.load_onnx(model="best.onnx")
rknn.build(do_quantization=True, dataset="./calib.txt") # 校准集
rknn.export_rknn("yolov8n_3tops.rknn")
rknn.release()
得到 yolov8n_3tops.rknn(约 6MB,NPU 专用)。
四、盒子端 NPU 部署推理(RK3588)
4.1 上传模型到盒子
scp yolov8n_3tops.rknn user@box-ip:/home/user/
4.2 安装盒子端 RKNN 依赖
# RK3588 Ubuntu 示例
sudo apt install -y librockchip-rknn2
pip install rknn-toolkit2
4.3 图片推理(Python)
import cv2
import numpy as np
from rknn.api import RKNN
rknn = RKNN()
rknn.load_rknn("yolov8n_3tops.rknn")
rknn.init_runtime(target="rk3588")
img = cv2.imread("bus.jpg")
img = cv2.resize(img, (640,640))
img = img.astype(np.float32) / 255.0
img = np.expand_dims(img, axis=0)
outputs = rknn.infer(inputs=[img])
# 后处理 + 画框(省略,可用 ultralytics 后处理)
rknn.release()
五、摄像头实时检测(RTSP/USB)
5.1 USB 摄像头
import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # 或用 rknn 版本
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret: break
results = model(frame)
cv2.imshow("YOLOv8-3TOPS", results[0].plot())
if cv2.waitKey(1) & 0xFF == ord('q'): break
cap.release()
cv2.destroyAllWindows()
5.2 RTSP 摄像头
cap = cv2.VideoCapture("rtsp://user:pass@camera-ip:554/stream")
六、性能参考(3TOPS 盒子)
YOLOv8n + RK3588 INT8:25–35 FPS@640×640
YOLOv8s + RK3588 INT8:15–20 FPS
功耗:5–8W,适合 7×24 小时边缘部署
七、常见坑
1. NPU 推理慢:必须做 INT8 量化,用 .rknn 而非 ONNX。
2. 内存不足:用 yolov8n,batch=1–8,关闭不必要服务。
3. 模型不生效:检查 imgsz=640 一致,校准集与任务匹配。
需求留言: