YOLO26改进 – 特征融合 融合Hyper-YOLO混合聚合网络MANet(Mixed Aggregation Network)通过多路径设计实现高效特征学习与模型适应性提升



前言

本文介绍了新型目标检测方法 Hyper - YOLO 及其在 YOLO26中的结合。传统 YOLO 模型颈部设计有局限,为此提出超图计算驱动的语义收集与扩散框架(HGCSCS),将视觉特征图转化到语义空间并构建高阶信息传播机制。Hyper - YOLO 在主干网络引入混合聚合网络(MANet),结合多种卷积模块增强特征提取能力;在颈部网络设计基于超图的跨层级与跨位置表示网络(HyperC2Net)支持高阶交互。

文章目录: YOLO26改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

专栏链接: YOLO26改进专栏

介绍

image-20250104122034548

摘要

Hyper-YOLO 作为目标检测领域的革新性方法,巧妙引入超图计算理念,成功突破了传统YOLO模型在捕捉视觉特征复杂关联方面的桎梏。尽管经典YOLO架构在目标检测领域取得了卓越成就,但其颈部(neck)设计在跨层级特征整合与高阶特征关系挖掘方面仍存在明显瓶颈。针对这一核心痛点,我们精心构建了超图计算驱动的语义收集与扩散框架(HGCSCS),该框架创新性地将视觉特征图映射至语义空间,并通过精密的超图结构构建高阶信息流动通路,从而使模型能够同时获取深层语义与结构信息,实现了对传统特征学习范式的超越。

Hyper-YOLO的卓越性能源于两大核心创新:一方面,在主干网络中融入混合聚合网络(MANet),极大增强了模型的特征提取能力;另一方面,在颈部网络中巧妙设计了基于超图的跨层级与跨位置表示网络(HyperC2Net)。特别值得一提的是,HyperC2Net横跨五种尺度,彻底摆脱了传统网格结构的束缚,支持层级间与位置间的复杂高阶交互,为特征融合提供了前所未有的灵活性与表达能力。

这些精心设计的组件协同运作,使Hyper-YOLO在各种规模配置下均展现出超越现有技术的卓越性能。在COCO数据集的严格评测中,Hyper-YOLO-N较先进的YOLOv8-N和YOLOv9-T分别实现了惊人的12% APval9% APval性能提升,彰显了其作为当前先进架构的非凡实力。

完整源代码已在GitHub开放共享,以促进学术交流与技术创新。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

Mixed Aggregation Network(MANet)是Hyper-YOLO模型中的一个关键组件,旨在增强特征提取能力。其技术原理主要体现在以下几个方面:

  1. 多种卷积模块的结合:MANet结合了三种典型的卷积变体:
    • 1 × 1旁路卷积:用于通道级特征的重新校准,能够有效调整特征图的通道数,从而增强特征的表达能力。
    • 深度可分离卷积(DSConv):这种卷积方式通过将标准卷积分解为深度卷积和逐点卷积,能够在保持计算效率的同时,提升空间特征的处理能力。
    • C2f模块:用于增强特征层次的整合,能够更好地捕捉不同层次之间的特征关系。
  2. 信息流的丰富性:通过将这三种卷积模块结合,MANet能够在训练过程中产生更丰富的梯度流。这种多样化的信息流有助于在每个关键阶段(共五个阶段)中加深语义特征的表达。
  3. 特征融合与压缩:MANet在处理完不同类型的特征后,通过连接操作(concatenation)将这些特征融合,并使用1 × 1卷积进行压缩,最终生成输出特征。这种融合方式确保了不同特征之间的信息能够有效整合,从而提升模型的整体性能。
  4. 增强的特征提取能力:通过上述机制,MANet显著提高了基础网络的特征提取能力,使得Hyper-YOLO在处理各种规模的物体时表现出色。

image-20250104122303557

核心代码

 class MANet(nn.Module):

    def __init__(self, c1, c2, n=1, shortcut=False, p=1, kernel_size=3, g=1, e=0.5):
        super().__init__()
        self.c = int(c2 * e)
        self.cv_first = Conv(c1, 2 * self.c, 1, 1)
        self.cv_final = Conv((4 + n) * self.c, c2, 1)
        self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=((3, 3), (3, 3)), e=1.0) for _ in range(n))
        self.cv_block_1 = Conv(2 * self.c, self.c, 1, 1)
        dim_hid = int(p * 2 * self.c)
        self.cv_block_2 = nn.Sequential(Conv(2 * self.c, dim_hid, 1, 1), GroupConv(dim_hid, dim_hid, kernel_size, 1),
                                      Conv(dim_hid, self.c, 1, 1))

    def forward(self, x):
        y = self.cv_first(x)
        y0 = self.cv_block_1(y)
        y1 = self.cv_block_2(y)
        y2, y3 = y.chunk(2, 1)
        y = list((y0, y1, y2, y3))
        y.extend(m(y[-1]) for m in self.m)

        return self.cv_final(torch.cat(y, 1))

实验

脚本

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
#     修改为自己的配置文件地址
    model = YOLO('./ultralytics/cfg/models/26/yolo26-MANet.yaml')
#     修改为自己的数据集地址
    model.train(data='./ultralytics/cfg/datasets/coco8.yaml',
                cache=False,
                imgsz=640,
                epochs=10,
                single_cls=False,  # 是否是单类别检测
                batch=8,
                close_mosaic=10,
                workers=0,
                optimizer='MuSGD',  
                # optimizer='SGD',
                amp=False,
                project='runs/train',
                name='yolo26-MANet',
                )

结果

image-20260125185741494

THE END