BM1684X 边缘盒部署 YOLOv8 核心是 “模型转换 + 一键推理脚本”,全程无需复杂编译,新手复制命令即可完成。以下是从环境准备到实时检测的完整步骤,适配算能 BM1684X 边缘计算盒子(Ubuntu 系统)。

一、部署前准备
1. 硬件与系统
- 设备:BM1684X 边缘计算盒子(已刷官方 Ubuntu 20.04 系统)
- 网络:盒子联网(用于安装依赖、下载模型)
- 工具:电脑 SSH 连接盒子(或盒子接显示器/键鼠直接操作)
2. 必备软件(一键安装)
盒子终端执行,安装 YOLOv8 依赖 + Sophon SDK 推理库:
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装基础依赖
sudo apt install python3-pip python3-dev libopencv-dev git -y
# 3. 安装 YOLOv8 官方库
pip3 install ultralytics==8.0.200 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 4. 安装 BM1684X 推理库(Sophon SAIL)
pip3 install sophon-sail -i https://pypi.tuna.tsinghua.edu.cn/simple
# 5. 验证安装(无报错即成功)
python3 -c "from ultralytics import YOLO; import sophon.sail as sail; print('环境就绪')"
二、核心步骤:YOLOv8 模型转换(ONNX → BModel)
BM1684X 不直接支持 PyTorch 模型,需先转 ONNX,再转芯片专用 BModel 格式。
1. 下载/导出 YOLOv8 ONNX 模型
# 1. 创建工作目录
mkdir -p ~/bm1684x_yolov8 && cd ~/bm1684x_yolov8
# 2. 导出 YOLOv8n 最轻量模型为 ONNX(640×640 输入)
python3 -c "
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 自动下载权重
model.export(format='onnx', imgsz=640, batch=1, simplify=True)
"
执行后生成:yolov8n.onnx
2. ONNX 转 BM1684X BModel(FP16 量化,速度更快)
# 模型转换命令(直接复制运行)
bmnet_onnx \
--model=yolov8n.onnx \
--target=BM1684X \
--shapes=[1,3,640,640] \
--opt=2 \
--quantize=FP16 \
--output=yolov8n_bm1684x_fp16.bmodel
- 等待 1–2 分钟,生成:yolov8n_bm1684x_fp16.bmodel(BM1684X 专用模型)
三、一键部署:BM1684X 实时推理脚本(新手直接用)
创建推理脚本 yolov8_bm1684x.py,全程无需改代码,直接运行:
import cv2
import sophon.sail as sail
import numpy as np
# 1. 初始化 BM1684X 引擎
engine = sail.Engine(0) # 0=设备ID
engine.load_bmodel("yolov8n_bm1684x_fp16.bmodel")
input_name = engine.get_input_names()[0]
output_names = engine.get_output_names()
# 2. 预处理(适配 YOLOv8 640×640)
def preprocess(img):
img = cv2.resize(img, (640, 640))
img = img.transpose(2, 0, 1) # HWC→CHW
img = img.astype(np.float32) / 255.0
img = np.expand_dims(img, axis=0)
return img
# 3. 后处理(解析检测框)
def postprocess(outputs):
pred = outputs[0][0]
boxes = []
scores = []
classes = []
for i in range(pred.shape[1]):
x, y, w, h, conf, cls = pred[:, i]
if conf > 0.25: # 置信度阈值
x1, y1 = int((x-w/2)*640), int((y-h/2)*640)
x2, y2 = int((x+w/2)*640), int((y+h/2)*640)
boxes.append([x1, y1, x2, y2])
scores.append(float(conf))
classes.append(int(cls))
return boxes, scores, classes
# 4. 主推理(图片/视频/摄像头)
if __name__ == "__main__":
# 测试图片(自动下载)
img = cv2.imread("bus.jpg")
if img is None:
import urllib.request
urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
img = cv2.imread("bus.jpg")
# 推理
input_tensor = preprocess(img)
engine.set_input_tensor(input_name, input_tensor)
engine.forward()
outputs = [engine.get_output_tensor(name).asnumpy() for name in output_names]
boxes, scores, classes = postprocess(outputs)
# 画框显示
for box, score, cls in zip(boxes, scores, classes):
x1, y1, x2, y2 = box
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, f"cls:{cls} {score:.2f}", (x1, y1-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
cv2.imwrite("result.jpg", img)
print("检测完成!结果保存为 result.jpg")
四、一键运行 & 效果验证
1. 执行脚本
cd ~/bm1684x_yolov8
python3 yolov8_bm1684x.py
2. 查看结果
- 终端输出:检测完成!结果保存为 result.jpg
- 目录生成 result.jpg,带目标检测框(人、车、巴士等)
- 速度:BM1684X 跑 YOLOv8n 约 30–50 FPS(实时无压力)
五、进阶:实时摄像头/视频流推理
修改脚本最后部分,替换为摄像头/视频:
# 实时摄像头(USB 摄像头)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret: break
# 推理+画框(同上)
cv2.imshow("BM1684X YOLOv8", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): break
cap.release()
# 本地视频
# cap = cv2.VideoCapture("test.mp4")
六、新手常见问题
1. bmnet_onnx 命令找不到
解决:安装完整 Sophon SDK,或用官方 Docker 环境转换模型。
2. 推理速度慢
解决:用 FP16/INT8 量化、选 yolov8n/s 轻量模型、降低分辨率。
3. 检测框不准
解决:调整置信度阈值 conf > 0.25、重新导出 ONNX 并开启 simplify=True。
七、完整部署清单
1. 环境:ultralytics + sophon-sail + OpenCV
2. 模型:yolov8n.onnx → yolov8n_bm1684x_fp16.bmodel
3. 脚本:yolov8_bm1684x.py(一键推理)
4. 验证:图片/摄像头实时检测,30+ FPS
需求留言: