💡💡💡原始YOLO网络的问题点:
方向信息丢失:YOLO的neck通过上采样(nn.Upsample)和拼接(Concat)融合多尺度特征,但高层特征(语义强)方向模糊,低层特征(细节强)方向精确。简单拼接导致两种方向信号直接叠加,产生冲突,使融合特征的方向语义混乱。
旋转目标检测性能差:由于缺乏方向对齐,YOLO对遥感图像中任意朝向的飞机、船舶等旋转目标的角度回归不准确,容易产生预测偏差,尤其在目标密集或小尺度场景下。
🔍 🔍 🔍 FAAFusion的解决方案:
消除方向不一致:FAAFusion先利用频域估计低层特征的主方向,再旋转高层特征使其与低层方向对齐,然后融合。确保跨尺度特征方向一致,避免冲突。
提升旋转检测精度:对齐后的多尺度特征为检测头提供更准确的方向线索,显著改善角度回归和定位精度。
保持轻量高效:仅增加少量频域计算,不破坏YOLO的实时性。
💡💡💡本文改进:FAAFusion引入YOLO neck ,代替nn.Upsample和Concat
🔍 🔍 🔍在NEU-DET数据集下验证:原始mAP50原始为 0.722提升至 0.734 ,P 原始为 0.745 提升至 0.749, R 原始为 0.643 提升至0.665 , mAP50-95原始为0.407提升至 0.41
博主简介
AI小怪兽 | 计算机视觉布道者 | 视觉检测领域创新者
深耕计算机视觉与深度学习领域,专注于视觉检测前沿技术的探索与突破。长期致力于YOLO系列算法的结构性创新、性能极限优化与工业级落地实践,旨在打通从学术研究到产业应用的最后一公里。
1.YOLO26原理介绍
论文:https://arxiv.org/pdf/2509.25164
摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。除架构外,本研究将YOLO26定位为多任务框架,支持目标检测、实例分割、姿态/关键点估计、定向检测及分类。我们在NVIDIA Jetson Nano与Orin等边缘设备上呈现了YOLO26的性能基准测试,并将其结果与YOLOv8、YOLOv11、YOLOv12、YOLOv13及基于Transformer的检测器进行比较。本文进一步探讨了其实时部署路径、灵活的导出选项(ONNX、TensorRT、CoreML、TFLite)以及INT8/FP16量化技术。文章重点展示了YOLO26在机器人、制造业及物联网等领域的实际应用案例,以证明其跨行业适应性。最后,讨论了关于部署效率及更广泛影响的见解,并展望了YOLO26及YOLO系列的未来发展方向。
关键词:YOLO26;边缘人工智能;多任务目标检测;无NMS推理;小目标识别;YOLO(You Only Look Once);目标检测;MuSGD优化器
Detection (COCO)
结构框图如下:
1.1 YOLO11 vs YOLO26结构差异性
1.1.1 SPPF 核心差异对比
1)池化次数灵活性:YOLO11 的 3 次池化是硬编码的,要修改必须改源码;YOLO26 通过n参数可灵活调整(比如设为 2 次或 4 次),无需改核心逻辑。
2)Shortcut 设计:YOLO26 新增的残差连接能缓解深层网络的梯度消失问题,提升特征复用能力,而 YOLO11 无此设计。
3)激活函数控制:YOLO26 禁用 Conv1 的激活函数,让特征在池化前保持更 “原始” 的状态,是工程上对特征提取的优化。
源码位置:ultralytics/nn/modules/block.py
1.1.2 C3k2 核心差异对比
1)注意力机制的新增:YOLO26 的 C3k2 首次引入PSABlock(金字塔注意力模块),通过attn参数控制是否启用,这是两者最核心的功能差异 —— 启用后模块会先通过 Bottleneck 提取基础特征,再通过 PSABlock 增强关键区域的特征权重,提升小目标 / 复杂场景的检测效果。
2)分支逻辑的扩展:YOLO11 的分支仅受c3k控制,而 YOLO26 的分支逻辑优先级为attn > c3k,即只要attn=True,会优先启用注意力模块,忽略c3k的配置。
重复模块m (n次迭代): ┌─────────────────────────────────────────────────────────┐ │ │ │ 如果 attn=True: │ │ Sequential( │ │ Bottleneck(self.c, self.c), │ ←─ 先特征提取 │ PSABlock(self.c, attn_ratio=0.5, num_heads=...) │ ←─ 后注意力增强 │ ) │ │ │ │ 否则如果 c3k=True: │ │ C3k(self.c, self.c, 2) │ ←─ 同YOLOv11 │ │ │ 否则: │ │ Bottleneck(self.c, self.c) │ ←─ 同YOLOv11 │ │ └─────────────────────────────────────────────────────────┘
YOLO26 C3k2代码:
源码位置:ultralytics/nn/modules/block.py
1.2 YOLO26核心创新点
YOLO26引入了多项关键架构创新,使其区别于前几代YOLO模型。这些增强不仅提高了训练稳定性和推理效率,还从根本上重塑了实时边缘设备的部署流程。本节将详细描述YOLO26的四项主要贡献:(i)移除分布焦点损失(DFL),(ii)引入端到端无NMS推理,(iii)新颖的损失函数策略,包括渐进损失平衡(ProgLoss)和小目标感知标签分配(STAL),以及(iv)开发用于稳定高效收敛的MuSGD优化器。我们将详细讨论每一项架构增强,并通过对比分析突显其相对于YOLOv8、YOLOv11、YOLOv12和YOLOv13等早期YOLO版本的优势。
1.2.1 创新点1:移除分布焦点损失(DFL)
YOLO26最重要的架构简化之一是移除了分布焦点损失(DFL)模块(图3a),该模块曾存在于YOLOv8和YOLOv11等早期YOLO版本中。DFL最初旨在通过预测边界框坐标的概率分布来改进边界框回归,从而实现更精确的目标定位。虽然该策略在早期模型中展示了精度提升,但也带来了不小的计算开销和导出困难。在实践中,DFL在推理和模型导出期间需要专门处理,这使针对ONNX、CoreML、TensorRT或TFLite等硬件加速器的部署流程变得复杂。
源码位置:ultralytics/utils/loss.py
通过reg_max 设置为1,移除了分布焦点损失(DFL)
class BboxLoss(nn.Module): """Criterion class for computing training losses for bounding boxes.""" def __init__(self, reg_max: int = 16): """Initialize the BboxLoss module with regularization maximum and DFL settings.""" super().__init__() self.dfl_loss = DFLoss(reg_max) if reg_max > 1 else None
1.2.2 创新点2:端到端无NMS推理
YOLO26从根本上重新设计了预测头,以直接产生非冗余的边界框预测,无需NMS。这种端到端设计不仅降低了推理复杂度,还消除了对手动调优阈值的依赖,从而简化了集成到生产系统的过程。对比基准测试表明,YOLO26实现了比YOLOv11和YOLOv12更快的推理速度,其中nano模型在CPU上的推理时间减少了高达43%。这使得YOLO26对于移动设备、无人机和嵌入式机器人平台特别有利,在这些平台上,毫秒级的延迟可能产生重大的操作影响。
源码位置:ultralytics/utils/nms.py
1.2.3 创新点3:ProgLoss和STAL:增强训练稳定性和小目标检测
训练稳定性和小目标识别仍然是目标检测中持续存在的挑战。YOLO26通过整合两种新颖策略来解决这些问题:渐进损失平衡(ProgLoss)和小目标感知标签分配(STAL),如图(图3c)所示。
ProgLoss在训练期间动态调整不同损失分量的权重,确保模型不会过拟合于主导物体类别,同时防止在稀有或小类别上表现不佳。这种渐进式再平衡改善了泛化能力,并防止了训练后期的不稳定。另一方面,STAL明确优先为小目标分配标签,由于像素表示有限且易被遮挡,小目标尤其难以检测。ProgLoss和STAL共同为YOLO26在包含小目标或被遮挡目标的数据集(如COCO和无人机图像基准)上带来了显著的精度提升。
1.2.4 创新点4:用于稳定收敛的MuSGD优化器
YOLO26的最后一项创新是引入了MuSGD优化器(图3d),它结合了随机梯度下降(SGD)的优势与最近提出的Muon优化器(一种受大型语言模型训练中使用的优化策略启发而发展的技术)。MuSGD利用SGD的鲁棒性和泛化能力,同时融入了来自Muon的自适应特性,能够在不同数据集上实现更快的收敛和更稳定的优化。
源码位置:ultralytics/optim/muon.py
2.如何训练YOLO26模型
2.1 如何训练NEU-DET数据集
2.1.1 数据集介绍
直接搬运YOLO11的就能使用
2.1.2 超参数修改
位置如下default.yaml
2.2 训练可视化
训练方式:
import warnings warnings.filterwarnings('ignore') from ultralytics import YOLO if __name__ == '__main__': model = YOLO('ultralytics/cfg/models/26/yolo26n.yaml') #model.load('yolo26n.pt') # loading pretrain weights model.train(data='data/NEU-DET.yaml', cache=False, imgsz=640, epochs=300, batch=16, close_mosaic=10, workers=2, device='0', #optimizer='SGD', # using SGD,auto project='runs/train', name='exp', )
训练结果可视化结果
YOLO26n summary (fused): 122 layers, 2,376,006 parameters, 0 gradients, 5.2 GFLOPs Class Images Instances Box(P R mAP50 mAP50-95): 100% ━━━━━━━━━━━━ 16/16 3.0it/s 5.4s all 486 1069 0.745 0.643 0.722 0.407 crazing 69 149 0.615 0.215 0.367 0.139 inclusion 87 222 0.784 0.725 0.796 0.396 patches 92 243 0.834 0.848 0.918 0.605 pitted_surface 93 130 0.823 0.716 0.788 0.499 rolled-in_scale 81 171 0.643 0.538 0.615 0.29 scratches 90 154 0.77 0.818 0.85 0.51
预测结果:
3 引入 FAAFusion频域对齐融合模块
3.1 原理介绍
论文:Fourier Angle Alignment for Oriented Object Detection in Remote Sensing
摘要:在遥感旋转目标检测中,主流方法存在两个瓶颈:检测器颈部的方向不一致性和检测头的任务冲突。利用傅里叶旋转等变性,我们引入了傅里叶角度对齐,该方法通过频谱分析角度信息,并将主方向对齐到特定方向。随后,我们提出了两个即插即用模块:FAAFusion 和 FAA Head。FAAFusion 作用于检测器颈部,将高层特征的主方向对齐到低层特征后进行融合。FAA Head 作为一个新的检测头,将 RoI 特征预对齐到规范角度,并在分类和回归之前将其与原始特征相加。在 DOTA-v1.0、DOTA-v1.5 和 HRSC2016 上的实验表明,我们的方法能显著提升先前工作的性能。特别地,在单尺度训练和测试下,我们的方法在 DOTA-v1.0 数据集上达到了 78.72% mAP 的新最先进结果,在 DOTA-v1.5 数据集上达到了 72.28% mAP,验证了我们的方法在遥感目标检测中的有效性。
方法
在本节中,我们首先介绍我们的公式和动机。接着,我们将详细描述我们的傅里叶角度对齐方法。然后,我们将介绍 FAA 在检测器不同位置的应用,即 FAAFusion 和 FAAHead,这将在 3.3 和 3.4 节中详细说明。
3.2 yolo26-FAAFusion结构框图
源码详见:
https://blog.csdn.net/m0_63774211/article/details/160215787?spm=1001.2014.3001.5501
3.3 训练结果可视化结果
原始mAP50原始为 0.722提升至 0.734 ,P 原始为 0.745 提升至 0.749, R 原始为 0.643 提升至0.665 , mAP50-95原始为0.407提升至 0.41
YOLO26-FAAFusion summary (fused): 128 layers, 2,395,720 parameters, 0 gradients, 5.2 GFLOPs Class Images Instances Box(P R mAP50 mAP50-95): 100% ━━━━━━━━━━━━ 16/16 1.0s/it 16.0s all 486 1069 0.749 0.665 0.734 0.41 crazing 69 149 0.559 0.255 0.395 0.151 inclusion 87 222 0.768 0.76 0.805 0.418 patches 92 243 0.864 0.877 0.928 0.57 pitted_surface 93 130 0.849 0.738 0.807 0.515 rolled-in_scale 81 171 0.642 0.503 0.598 0.277 scratches 90 154 0.812 0.857 0.874 0.529