
💡💡💡DMSSP 替代 YOLO 标准卷积的核心优势:

💡💡💡本文改进:DMSSP 代替YOLO26的Conv模块,首发创新。

博主简介

AI小怪兽 | 计算机视觉布道者 | 视觉检测领域创新者
深耕计算机视觉与深度学习领域,专注于目标检测前沿技术的探索与突破。长期致力于YOLO系列算法的结构性创新、性能极限优化与工业级落地实践,旨在打通从学术研究到产业应用的最后一公里。
🚀 核心专长与技术创新
🏆 行业影响力与商业实践
💡 未来方向与使命
秉持 “让每一行代码都有温度” 的技术理念,未来将持续聚焦于实时检测、语义分割及工业缺陷检测的商业化闭环等核心方向。愿与业界同仁协同创新,共同推动技术边界,以坚实的技术能力赋能实体经济与行业变革。

论文: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优化器

结构框图如下:


1)池化次数灵活性:YOLO11 的 3 次池化是硬编码的,要修改必须改源码;YOLO26 通过n参数可灵活调整(比如设为 2 次或 4 次),无需改核心逻辑。
2)Shortcut 设计:YOLO26 新增的残差连接能缓解深层网络的梯度消失问题,提升特征复用能力,而 YOLO11 无此设计。
3)激活函数控制:YOLO26 禁用 Conv1 的激活函数,让特征在池化前保持更 “原始” 的状态,是工程上对特征提取的优化。

源码位置:ultralytics/nn/modules/block.py
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
YOLO26引入了多项关键架构创新,使其区别于前几代YOLO模型。这些增强不仅提高了训练稳定性和推理效率,还从根本上重塑了实时边缘设备的部署流程。本节将详细描述YOLO26的四项主要贡献:(i)移除分布焦点损失(DFL),(ii)引入端到端无NMS推理,(iii)新颖的损失函数策略,包括渐进损失平衡(ProgLoss)和小目标感知标签分配(STAL),以及(iv)开发用于稳定高效收敛的MuSGD优化器。我们将详细讨论每一项架构增强,并通过对比分析突显其相对于YOLOv8、YOLOv11、YOLOv12和YOLOv13等早期YOLO版本的优势。

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 NoneYOLO26从根本上重新设计了预测头,以直接产生非冗余的边界框预测,无需NMS。这种端到端设计不仅降低了推理复杂度,还消除了对手动调优阈值的依赖,从而简化了集成到生产系统的过程。对比基准测试表明,YOLO26实现了比YOLOv11和YOLOv12更快的推理速度,其中nano模型在CPU上的推理时间减少了高达43%。这使得YOLO26对于移动设备、无人机和嵌入式机器人平台特别有利,在这些平台上,毫秒级的延迟可能产生重大的操作影响。
源码位置:ultralytics/utils/nms.py
训练稳定性和小目标识别仍然是目标检测中持续存在的挑战。YOLO26通过整合两种新颖策略来解决这些问题:渐进损失平衡(ProgLoss)和小目标感知标签分配(STAL),如图(图3c)所示。
ProgLoss在训练期间动态调整不同损失分量的权重,确保模型不会过拟合于主导物体类别,同时防止在稀有或小类别上表现不佳。这种渐进式再平衡改善了泛化能力,并防止了训练后期的不稳定。另一方面,STAL明确优先为小目标分配标签,由于像素表示有限且易被遮挡,小目标尤其难以检测。ProgLoss和STAL共同为YOLO26在包含小目标或被遮挡目标的数据集(如COCO和无人机图像基准)上带来了显著的精度提升。
YOLO26的最后一项创新是引入了MuSGD优化器(图3d),它结合了随机梯度下降(SGD)的优势与最近提出的Muon优化器(一种受大型语言模型训练中使用的优化策略启发而发展的技术)。MuSGD利用SGD的鲁棒性和泛化能力,同时融入了来自Muon的自适应特性,能够在不同数据集上实现更快的收敛和更稳定的优化。
源码位置:ultralytics/optim/muon.py

论文:https://ieeexplore.ieee.org/document/11305181
摘要:红外小目标检测是从红外图像中识别微小目标的关键任务。尽管现有的CNN-Transformer混合方法取得了优异的分割性能,但仍面临一些挑战。首先,自注意力机制对细微局部变化不敏感且计算成本高;其次,在特征融合过程中,这些方法未能充分挖掘浅层特征中的关键信息。因此,在目标和背景高度相似的场景中,它们难以高效准确地区分目标与背景。为解决这些问题,本文提出了CSAFNet,以增强目标与背景的可区分性。具体而言,我们引入了并行自感知注意力,利用物理先验捕获全局上下文,并结合小波变换强化局部细节,实现局部与全局特征的高效融合。考虑到浅层特征对精确定位和精细分割的重要性,我们在特征融合中设计了跨语义自适应滤波模块,深入挖掘浅层特征的关键信息,增强目标表示的相对显著性。此外,我们提出了动态多尺度空间金字塔模块以提高边缘精度和分割准确性。在两个最广泛使用的ISTD数据集NUAA-SIRST和IRSTD-1K上的大量实验表明,CSAFNet优于其他最先进的方法。
索引术语——自适应滤波,特征融合,红外小目标检测,跳跃连接。
A. 整体架构
本文旨在设计一个简洁高效的CNN模型,能够高效建模局部和全局上下文信息,并通过引入动态特征融合策略显著增强目标特征与背景的区分度。如图1所示,CSAFNet是一个改进的U-Net架构。具体而言,PSAA替换了编码器和解码器中的标准卷积操作,以高效提取目标特征。DMSSP模块用于增强边缘特征,通过多尺度信息更精细地建模目标与背景之间的差异。CAFM模块采用动态特征选择机制,自适应地突出目标特征并滤除噪声。总体而言,输入的红外图像首先由stem处理,然后通过编码器和DMSSP模块进行特征提取和边缘特征增强。CAFM模块融合相应的浅层和深层特征,并将重要的目标信息传递到深层编码器。最后,由逐点卷积组成的预测头生成与输入尺寸相同的单通道输出图。

D. 动态多尺度空间金字塔(DMSSP)

DMSSP模块能够增强边缘精度,使模型能够更精细地表示目标和背景信息,从而提高小目标分割的准确性。如图5所示,该模块包含三个并行分支。第一分支采用膨胀卷积来有效捕获目标边缘并增强目标与背景之间空间结构差异的建模。具体而言,输入特征 X ∈ R^{H×W×C} 按通道比例2:1:1分割为三部分 F_{0.5}a、F{0.25}b 和 F{0.25}c。各部分分别由膨胀率为6、12和18的膨胀卷积处理。提取的多尺度特征随后进行批归一化、ReLU激活、沿通道维度拼接,并通过1×1卷积以获得最终特征图 f_m ∈ R^{H×W×C}。过程如下:

其中Split(·)表示通道分割操作,BN(·)表示批归一化,δ(·)是ReLU,DConv{r=r0}^{3}(·)表示膨胀率为r0的3×3膨胀卷积。
接下来,第二分支使用全局池化操作聚合全局语义,从而获得全局特征 f_g ∈ R^{H×W×C}。此过程定义为:

其中GAP(·)表示全局平均池化,UpB(·)表示双线性插值上采样。
此外,我们设计了一个无超参数空间注意力分支来自适应地细化相关像素区域。此设计的灵感来自HFAM模块,其空间分支计算每个像素的均值,并使用方差来衡量其与背景的偏差。然而,由于红外目标信号微弱且存在局部亮干扰,沿通道维度计算均值往往会掩盖小目标的关键响应。为解决此问题,我们在每个通道内独立计算均值,确保特定通道中小目标的响应得以保留和增强。具体而言,我们首先计算输入的均值和方差,其形状为 R^{1×1×C}。\bar{v}{{c}} 表示第c个通道上的均值,S{{c}} 表示第c个通道上的方差,X_{{c;i,j}} 表示第c个通道上的元素。计算公式如下:

每个像素的中心偏差使用 v'{{c;i,j}} = ( X_{{c;i,j}} - \bar{v}{{c}} )² 计算。类似地,\bar{M}{{c}} 和 \underline{m}{{c}} 分别表示第c个通道中的最大值和最小值。矩阵 Q' ∈ R^{H×W×C} 随后计算如下:

其中 ε 是一个小常数以避免除以零,q_{{c;i,j}} 表示 Q' 在第c个通道上的值。最后,应用sigmoid激活以获得空间权重矩阵 Q ∈ R^{H×W×C},然后将其与输入特征相乘以产生 f_s ∈ R^{H×W×C}。过程如下:

最后,f_m、f_g 和 f_s 相加并通过一个卷积层以产生DMSSP输出 Y ∈ R^{H/2×W/2×384}。过程如下:

其中 Conv_{s=2}^{3}(·) 表示步长为2的3×3卷积层。
######################################## IEEE Transactions on Geoscience and Remote Sensing DMSSP by AI Little monster start ########################################
import torch
import torch.nn as nn
import torch.nn.functional as F
from ultralytics.nn.modules.conv import Conv
class SpatialAttention(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
x_ = x.clone()
mean_values = torch.mean(x_, dim=(2, 3), keepdim=True)
max_values, _ = torch.max(x_, dim=2, keepdim=True)
max_values, _ = torch.max(max_values, dim=3, keepdim=True)
min_values, _ = torch.min(x_, dim=2, keepdim=True)
min_values, _ = torch.min(min_values, dim=3, keepdim=True)
var = torch.var(x_, dim=(-2, -1), keepdim=True)
u_ij = (x_ - mean_values) ** 2
q_ij = (u_ij / (max_values - min_values + 1e-8)) * var
q = torch.sigmoid(q_ij)
return q * x
def convrelubn(in_channel, out_channel, kernel_size, dirate):
return nn.Sequential(
nn.Conv2d(
in_channels=in_channel,
out_channels=out_channel,
kernel_size=kernel_size,
stride=1,
padding=dirate,
dilation=dirate,
),
nn.BatchNorm2d(out_channel),
nn.ReLU(inplace=True),
)
######################################## IEEE Transactions on Geoscience and Remote Sensing DMSSP by AI Little monster end ########################################
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# Ultralytics YOLO26 object detection model with P3/8 - P5/32 outputs
# Model docs: https://docs.ultralytics.com/models/yolo26
# Task docs: https://docs.ultralytics.com/tasks/detect
# Parameters
nc: 80 # number of classes
end2end: True # whether to use end-to-end mode
reg_max: 1 # DFL bins
scales: # model compound scaling constants, i.e. 'model=yolo26n.yaml' will call yolo26.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.50, 0.25, 1024] # summary: 260 layers, 2,572,280 parameters, 2,572,280 gradients, 6.1 GFLOPs
s: [0.50, 0.50, 1024] # summary: 260 layers, 10,009,784 parameters, 10,009,784 gradients, 22.8 GFLOPs
m: [0.50, 1.00, 512] # summary: 280 layers, 21,896,248 parameters, 21,896,248 gradients, 75.4 GFLOPs
l: [1.00, 1.00, 512] # summary: 392 layers, 26,299,704 parameters, 26,299,704 gradients, 93.8 GFLOPs
x: [1.00, 1.50, 512] # summary: 392 layers, 58,993,368 parameters, 58,993,368 gradients, 209.5 GFLOPs
# YOLO26n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]]
- [-1, 1, DMSSP, [256]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]]
- [-1, 1, DMSSP, [512]] # 5-P4/16
- [-1, 2, C3k2, [512, True]]
- [-1, 1, DMSSP, [1024]] # 7-P5/32
- [-1, 2, C3k2, [1024, True]]
- [-1, 1, SPPF, [1024, 5, 3, True]] # 9
- [-1, 2, C2PSA, [1024]] # 10
# YOLO26n head
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, C3k2, [512, True]] # 13
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 2, C3k2, [256, True]] # 16 (P3/8-small)
- [-1, 1, DMSSP, [256]]
- [[-1, 13], 1, Concat, [1]] # cat head P4
- [-1, 2, C3k2, [512, True]] # 19 (P4/16-medium)
- [-1, 1, DMSSP, [512]]
- [[-1, 10], 1, Concat, [1]] # cat head P5
- [-1, 1, C3k2, [1024, True, 0.5, True]] # 22 (P5/32-large)
- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。