news 2026/4/23 12:46:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO26改进 - 下采样 | 轻量化突破:ADown 下采样让 YOLO26 参量减、精度升

前言

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

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

专栏链接: YOLO26改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
  • 核心代码
  • YOLO26引入代码
  • 注册
    • 步骤1:
    • 步骤2
  • 配置yolo26-ADown.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

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

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

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

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

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

核心代码

classADown(nn.Module):def__init__(self,c1,c2):# ch_in, ch_out, shortcut, kernels, groups, expandsuper().__init__()self.c=c2//2self.cv1=Conv(c1//2,self.c,3,2,1)self.cv2=Conv(c1//2,self.c,1,1,0)defforward(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)returntorch.cat((x1,x2),1)

YOLO26引入代码

在根目录下的ultralytics/nn/目录,新建一个sample目录,然后新建一个以ADown为文件名的py文件, 把代码拷贝进去。

importtorchimporttorch.nnasnndefautopad(k,p=None,d=1):# kernel, padding, dilation"""Pad to 'same' shape outputs."""ifd>1:k=d*(k-1)+1ifisinstance(k,int)else[d*(x-1)+1forxink]# actual kernel-sizeifpisNone:p=k//2ifisinstance(k,int)else[x//2forxink]# auto-padreturnpclassConv(nn.Module):"""Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)."""default_act=nn.SiLU()# default activationdef__init__(self,c1,c2,k=1,s=1,p=None,g=1,d=1,act=True):"""Initialize Conv layer with given arguments including activation."""super().__init__()self.conv=nn.Conv2d(c1,c2,k,s,autopad(k,p,d),groups=g,dilation=d,bias=False)self.bn=nn.BatchNorm2d(c2)self.act=self.default_actifactisTrueelseactifisinstance(act,nn.Module)elsenn.Identity()defforward(self,x):"""Apply convolution, batch normalization and activation to input tensor."""returnself.act(self.bn(self.conv(x)))defforward_fuse(self,x):"""Perform transposed convolution of 2D data."""returnself.act(self.conv(x))classADown(nn.Module):def__init__(self,c1,c2):# ch_in, ch_out, shortcut, kernels, groups, expandsuper().__init__()self.c=c2//2self.cv1=Conv(c1//2,self.c,3,2,1)self.cv2=Conv(c1//2,self.c,1,1,0)defforward(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)returntorch.cat((x1,x2),1)

注册

ultralytics/nn/tasks.py中进行如下操作:

步骤1:

fromultralytics.nn.sample.ADownimportADown

步骤2

修改def parse_model(d, ch, verbose=True):

ADown

配置yolo26-ADown.yaml

ultralytics/cfg/models/26/yolo26-ADown.yaml

# 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# Parametersnc:80# number of classesend2end:True# whether to use end-to-end modereg_max:1# DFL binsscales:# 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 GFLOPss:[0.50,0.50,1024]# summary: 260 layers, 10,009,784 parameters, 10,009,784 gradients, 22.8 GFLOPsm:[0.50,1.00,512]# summary: 280 layers, 21,896,248 parameters, 21,896,248 gradients, 75.4 GFLOPsl:[1.00,1.00,512]# summary: 392 layers, 26,299,704 parameters, 26,299,704 gradients, 93.8 GFLOPsx:[1.00,1.50,512]# summary: 392 layers, 58,993,368 parameters, 58,993,368 gradients, 209.5 GFLOPs# YOLO26n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,ADown,[128]]# 1-P2/4-[-1,2,C3k2,[256,False,0.25]]-[-1,1,ADown,[256]]# 3-P3/8-[-1,2,C3k2,[512,False,0.25]]-[-1,1,ADown,[512]]# 5-P4/16-[-1,2,C3k2,[512,True]]-[-1,1,ADown,[1024]]# 7-P5/32-[-1,2,C3k2,[1024,True]]-[-1,1,SPPF,[1024,5,3,True]]# 9-[-1,2,C2PSA,[1024]]# 10# YOLO26n headhead:-[-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,Conv,[256,3,2]]-[[-1,13],1,Concat,[1]]# cat head P4-[-1,2,C3k2,[512,True]]# 19 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-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)

实验

脚本

importwarnings warnings.filterwarnings('ignore')fromultralyticsimportYOLOif__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',)

结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 11:49:05

使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 43--添加allure测试报告显示信息和其他封装方法

测试学习记录,仅供参考! 添加allure测试报告显示信息 增加测试报告首页环境信息和修改 allure 测试报告显示图标; 一、增加测试报告首页环境信息 1、在项目根目录下创建一个名称为 environment.xml 的配置文件,输入相关的环境配置…

作者头像 李华
网站建设 2026/4/21 22:21:56

亲测好用自考必看TOP8AI论文软件测评

亲测好用自考必看TOP8AI论文软件测评 2026年自考论文写作工具测评:为何值得一看 随着人工智能技术的不断进步,越来越多的自考生开始借助AI论文软件提升写作效率。然而,面对市场上五花八门的产品,如何选择真正适合自己的工具成为一…

作者头像 李华
网站建设 2026/4/9 20:46:21

SpringBoot中多配置文件和外部配置文件加载顺序

一、项目基础信息1. 项目结构基于 Maven 构建的 Spring Boot 项目&#xff0c;核心依赖包含 web、validation、devtools 等&#xff1a;JDK 版本&#xff1a;17Spring Boot 版本&#xff1a;3.2.02. 核心 POM 配置xml<project xmlns"http://maven.apache.org/POM/4.0.0…

作者头像 李华
网站建设 2026/4/23 11:26:07

大数据领域数据中台的安全审计与合规

大数据领域数据中台的安全审计与合规 关键词:大数据、数据中台、安全审计、合规、数据安全 摘要:本文聚焦于大数据领域数据中台的安全审计与合规问题。随着大数据技术的迅猛发展,数据中台成为企业整合和管理数据的重要平台。然而,其安全与合规性面临诸多挑战。文章首先介绍…

作者头像 李华
网站建设 2026/4/21 7:54:42

多头注意力中的张量重塑

view PyTorch 的view() 是张量「重塑&#xff08;Reshape&#xff09;」函数&#xff0c;用于改变张量的维度形状但不改变数据本身 在多头注意力中&#xff0c;view()的核心作用是将总隐藏维度拆分为「注意力头数 单头维度」&#xff0c;实现多头并行计算 核心规则 tensor.vie…

作者头像 李华
网站建设 2026/4/21 16:41:00

告别if-else噩梦:流程编排技术

作为一个优秀的程序员&#xff0c;要守住职业的底线。能简单快速的完成的一件事&#xff0c;就一定要用简单的方案快速完成。不可过度的设计&#xff0c;始终保持系统的简洁&#xff01; 曾几何时&#xff0c;我对于流程编排这件事 嗤之以鼻&#xff0c;为什么呢&#xff1f;我…

作者头像 李华