YOLO26改进 - 下采样 轻量化突破:ADown 下采样让 YOLO26 参量减、精度升

2 阅读3分钟

前言

本文介绍了一种轻量级的特征下采样模块 ADown,它结合平均池化与最大池化策略,实现更有效的信息保留与压缩。在传统卷积网络中,特征下采样常造成信息损失,而 ADown 通过双通道并行结构优化了下采样效果,提升了模型的表达能力。在 YOLO26 中引入 ADown 替换原有的下采样模块后,网络在保持高效性的同时,显著提升了目标检测的精度与稳定性。文章详细介绍了 ADown 的核心代码实现、模块注册流程以及 YOLOv11-ADown 模型的配置和训练方法,为轻量化目标检测模型的优化提供了实用参考。

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

专栏链接: YOLO26改进专栏

@[TOC]

介绍

在这里插入图片描述

摘要

当今的深度学习研究主要聚焦于如何设计合适的目标函数,以使模型的预测结果尽可能接近真实值。同时,还需构建高效的网络架构,以充分提取输入数据中的关键信息用于预测。然而,现有方法普遍忽视了一个重要事实:在输入数据经过深层特征提取与空间变换的过程中,会不可避免地丢失大量信息。本文将深入探讨这一关键问题——数据在深度网络中的信息丢失机制,并从信息瓶颈可逆函数的角度进行分析。

为解决深度网络在多目标学习中面临的梯度退化与信息缺失问题,我们提出了**可编程梯度信息(Programmable Gradient Information, PGI)**的概念。PGI能够为目标任务保留完整的输入信息,以在目标函数计算中提供可靠的梯度,从而有效指导网络权重的更新。

在此基础上,我们设计了一种全新的轻量级网络结构——基于梯度路径规划的广义高效层聚合网络(Generalized Efficient Layer Aggregation Network, GELAN)。实验结果表明,GELAN在轻量级模型中充分验证了PGI的有效性,显著提升了模型的性能与参数利用率。

我们在 MS COCO 数据集上对所提出的 PGI 与 GELAN 进行了目标检测实验。结果显示,GELAN 仅使用常规卷积算子,即可超越基于深度卷积的多种先进方法,实现更高的参数效率。PGI 机制具有良好的通用性,可应用于从轻量级到大型模型的广泛场景,并能帮助从零训练的模型在无预训练的条件下超越使用大规模数据集预训练的最先进模型。相关结果如图 1 所示。
源代码已开源于:github.com/WongKinYiu/…

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

核心代码


class ADown(nn.Module):
    def __init__(self, c1, c2):  # ch_in, ch_out, shortcut, kernels, groups, expand
        super().__init__()
        self.c = c2 // 2
        self.cv1 = Conv(c1 // 2, self.c, 3, 2, 1)
        self.cv2 = Conv(c1 // 2, self.c, 1, 1, 0)

    def forward(self, x):
        x = torch.nn.functional.avg_pool2d(x, 2, 1, 0, False, True)
        x1,x2 = x.chunk(2, 1)
        x1 = self.cv1(x1)
        x2 = torch.nn.functional.max_pool2d(x2, 3, 2, 1)
        x2 = self.cv2(x2)
        return torch.cat((x1, x2), 1)

实验

脚本

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
 
if __name__ == '__main__':
#     修改为自己的配置文件地址
    model = YOLO('./ultralytics/cfg/models/26/yolo26-ADown.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-ADown',
                )
    
 

结果

image-20260125213550262