摘要
旋转目标检测(OBB)在航拍遥感、工业质检等场景中具有不可替代的价值。YOLO26 作为新一代目标检测框架,以 NMS-Free 端到端架构、DFL-Free 直接回归和 MuSGD 优化器等创新,在边缘设备上实现了高效推理。本文从算法原理出发,解析 YOLO26-OBB 的核心技术,并结合土星云 S110S 边缘计算设备,介绍从模型编译到推理部署的完整落地流程。
一、为什么需要旋转目标检测?
1.1 水平框的局限性
传统目标检测使用轴对齐边界框(AABB),表示为 (x, y, w, h)。在目标方向多样时存在明显问题:航拍影像中车辆船舶任意角度停放,水平框包含大量背景;密集排列场景下框体严重重叠,NMS 容易误过滤;工业零件倾斜摆放时,水平框引入无关干扰。
1.2 旋转框的优势
定向边界框(OBB)通过增加旋转角度 θ,将框表示为五维 (cx, cy, w, h, θ),能更紧密地贴合目标轮廓。由于矩形旋转 180° 后与自身重合,θ 只需覆盖 [0, π) 即可表示所有方向。
- 更高精度:减少背景噪声,提升分类置信度准确性
- 密集场景更优:旋转框重叠度低,减少误检和漏检
- 语义更丰富:角度信息支持姿态分析和方向判断
- 适配性强:工业零件、遥感目标、倾斜文本等天然适配
二、YOLO26-OBB 核心原理
2.1 NMS-Free 端到端架构
传统 YOLO 依赖 NMS 后处理过滤冗余框,但 NMS 是串行启发式操作,延迟随目标数量波动,在边缘设备上往往成为瓶颈。YOLO26 通过重新设计预测头,采用 One-to-One 标签分配策略(每个真实框只匹配一个最佳预测),让模型学会为每个目标输出唯一确定性结果。
这一变革将推理从多阶段过滤变为直接确定性映射,实现了恒定推理延迟和更轻量的计算图。根据官方数据,相比 NMS 基线,YOLO26 在 CPU 上推理速度提升约 43%。
2.2 DFL-Free 直接回归策略
YOLOv8 至 v11 使用 DFL(分布焦点损失)建模坐标的概率分布,虽提升了定位精度,但每个坐标都需要在离散 bin 上执行 Softmax 积分。在 NPU 等整数加速器上,这些 Softmax 层极难量化,往往成为主要延迟瓶颈。
YOLO26 回归直接回归策略,完全移除 DFL 模块。为弥补精度损失,采用优化的解耦头结构,配合 STAL(小目标感知标签分配)和 ProgLoss(渐进损失平衡)等训练策略,有效缩小了"理论 FLOPs"与"实际推理速度"之间的 Export Gap。
2.3 角度损失与旋转 IoU
角度回归的核心难点是周期性问题:0° 和 180° 方向相同但数值相差 180,直接用 L1/L2 损失会导致训练不稳定。YOLO26-OBB 采用 IoU-based 损失函数,直接优化预测框与真实框的重叠程度,从根本上规避了角度周期性问题。
完整的 OBB 损失函数为:
L_OBB = λ₁·L_IoU + λ₂·L_cls
端到端输出格式: [cx, cy, w, h, conf, class_id, angle]
模型内部已去重,无需额外 NMS
此外还引入专门的 Angle Loss 解决边界不连续误差,即使对近似正方形目标也能保持几何一致性。IoU 损失与角度损失形成互补监督,确保旋转框精确回归。
2.4 MuSGD 优化器
端到端架构和 DFL-Free 设计对训练稳定性提出了更高要求。YOLO26 引入了 MuSGD 优化器,这是一种融合传统 SGD 和 Muon 正交化技术的混合优化器,灵感来源于大语言模型训练。Muon 组件对参数矩阵进行正交化处理,对端到端预测头的空间和语义推理能力的稳定训练至关重要。
三、典型应用场景
|
应用领域 |
典型场景 |
OBB 价值 |
|
航拍遥感 |
港口船舶、停车场车辆、建筑物提取、机场飞机 |
减少背景噪声、密集目标不重叠 |
|
工业质检 |
PCB 元件、机械零件、纺织品疵点、药品包装 |
任意角度零件精准定位、缺陷检测 |
|
智能安防 |
多角度车辆、行人姿态、周界入侵、航道监控 |
斜向目标精准检测、方向判断 |
|
文档分析 |
倾斜文本、表格结构、票据校正、OCR 预处理 |
文本行紧密贴合、校正精度提升 |
四、土星云 S110S 边缘部署实战
4.1 硬件平台介绍
土星云 SE110S 系列是国科环宇推出的全国产化工业级边缘计算设备,搭载自研 AI 芯片,无风扇密闭设计,支持 -20℃~60℃ 宽温运行,全系支持 FP32/FP16/INT8 混合精度推理。
|
型号 |
核心芯片 |
INT8 算力 |
内存/存储 |
适用场景 |
|
SE110S-WA32 |
BM1684X |
32 TOPS |
16GB+64GB |
多算法并发、32路视频 |
|
SE110S-WB16 |
BM1688 |
16 TOPS |
8GB+32GB |
中小型厂房、楼宇安防 |
|
SE110S-WC08 |
CV186AH |
7.2 TOPS |
8GB+32GB |
边缘末梢、轻量化检 |
4.2 部署整体流程
YOLO26-OBB 在土星云 S110S 上的部署分为三个阶段:
- 模型准备(x86 主机):导出 ONNX → TPU-MLIR 编译为 BModel
- 环境搭建(S110S 设备):安装 sophon-sail SDK、配置 Python 环境
- 推理部署(S110S 设备):加载模型 → 预处理 → TPU 推理 → 后处理
4.3 模型编译:ONNX → BModel
步骤一:导出 ONNX 模型
from ultralytics import YOLO
model = YOLO('yolo26s-obb.pt')
model.export(format='onnx', imgsz=640, batch=1, simplify=True)
# 输出:yolo26s-obb.onnx
步骤二:使用 TPU-MLIR 编译 BModel
TPU-MLIR 是 Sophon 系列 TPU 的模型编译工具链,支持 FP32、FP16、INT8 多种精度。建议在 x86 主机上使用 Docker 环境进行编译。
# 1. ONNX → MLIR
model_transform.py \
--model_name yolo26s_obb \
--model_def yolo26s-obb.onnx \
--input_shapes [[1,3,640,640]] \
--mean 0.0,0.0,0.0 \
--scale 0.0039216,0.0039216,0.0039216 \
--pixel_format rgb \
--mlir yolo26s_obb.mlir
# 2. 编译 FP16 BModel(推荐,平衡精度与速度)
model_deploy.py \
--mlir yolo26s_obb.mlir \
--quantize F16 \
--processor bm1684x \
--model yolo26s_obb_fp16_1b.bmodel
如需 INT8 量化以获得更高性能,需先准备校准数据集并生成校准表:
# 生成校准表
run_calibration.py yolo26s_obb.mlir \
--dataset ./calib_images/ --input_num 100 \
-o yolo26s_obb_cali_table
# 编译 INT8 BModel
model_deploy.py --mlir yolo26s_obb.mlir \
--quantize INT8 --calibration_table yolo26s_obb_cali_table \
--processor bm1684x --model yolo26s_obb_int8_1b.bmodel
4.4 Python 推理部署
环境依赖:
pip3 install sophon-sail opencv-python numpy
推理核心代码:
import numpy as np
import cv2
import sophon.sail as sail
class YOLO26_OBB:
def __init__(self, bmodel_path, dev_id=0):
self.engine = sail.Engine(bmodel_path, dev_id, sail.IOMode.SYSIO)
self.graph = self.engine.get_graph_names()[0]
self.input_name = self.engine.get_input_names(self.graph)[0]
self.output_name = self.engine.get_output_names(self.graph)[0]
self.conf_thresh = 0.25
def preprocess(self, image):
"""Letterbox 预处理"""
h, w = image.shape[:2]
scale = min(640/w, 640/h)
new_w, new_h = int(w*scale), int(h*scale)
resized = cv2.resize(image, (new_w, new_h))
padded = np.full((640, 640, 3), 114, dtype=np.uint8)
ph, pw = (640-new_h)//2, (640-new_w)//2
padded[ph:ph+new_h, pw:pw+new_w] = resized
# BGR→RGB, HWC→CHW, 归一化
inp = padded[:,:,::-1].transpose(2,0,1).astype(np.float32) / 255.0
return np.expand_dims(inp, 0), scale, pw, ph
def infer(self, image):
"""执行推理"""
inp, scale, pw, ph = self.preprocess(image)
output = self.engine.process(self.graph, {self.input_name: inp})
preds = output[self.output_name][0]
# NMS-Free,直接过滤低置信度
results = []
for pred in preds:
if pred[4] < self.conf_thresh:
continue
cx = (pred[0] - pw) / scale
cy = (pred[1] - ph) / scale
bw = pred[2] / scale
bh = pred[3] / scale
angle = pred[6]
results.append({
'class_id': int(pred[5]),
'conf': float(pred[4]),
'bbox': [cx, cy, bw, bh, angle]
})
return results
# 使用示例
detector = YOLO26_OBB('./models/yolo26s_obb_fp16_1b.bmodel')
image = cv2.imread('test.jpg')
results = detector.infer(image)
旋转框可视化:
def draw_rotated_box(image, cx, cy, w, h, angle, color=(0,255,0), thickness=2):
cos_a, sin_a = np.cos(angle), np.sin(angle)
corners = np.array([[-w/2,-h/2],[w/2,-h/2],[w/2,h/2],[-w/2,h/2]])
rot_mat = np.array([[cos_a, -sin_a],[sin_a, cos_a]])
pts = (corners @ rot_mat.T + [cx, cy]).astype(np.int32).reshape((-1,1,2))
cv2.polylines(image, [pts], True, color, thickness)
return image
4.5 性能测试与优化
在 SE110S-WA32(BM1684X)上的推理性能:
|
模型精度 |
推理时间 |
适用场景 |
|
FP32 |
~70 ms |
精度验证、调试验证 |
|
FP16 |
~17 ms |
平衡精度与速度(推荐) |
|
INT8 |
~11 ms |
高并发、性能优先 |
优化建议:
- 优先使用 FP16 精度:精度损失极小,速度提升约 4 倍
- BMCV 加速预处理:将 resize、颜色转换卸载到 TPU,减少 CPU 负担
- 多 batch 推理:批量处理场景提高吞吐率
- 前后处理融合:将部分预处理/后处理融入模型,利用 TPU 硬件加速
- 视频流流水线:硬件解码(VPU)+ TPU 推理 + 后处理并行
五、总结与展望
YOLO26-OBB 通过 NMS-Free 端到端架构、DFL-Free 直接回归和角度损失优化,在保持高精度的同时大幅提升了边缘设备推理效率。土星云 S110S 系列提供了从模型编译到推理部署的完整工具链,FP16 模式下单帧推理仅需约 17ms,完全满足工业实时检测需求。
未来发展方向包括:更轻量的模型架构、多任务统一框架、端到端视频旋转检测、自动模型压缩等。YOLO26-OBB 与土星云 S110S 的结合,为旋转目标检测的边缘端落地提供了高效、国产化的完整解决方案。
710

被折叠的 条评论
为什么被折叠?



