核心内容摘要
探索未知,释放真我:揭秘“色虎网站”的无限魅力
前言本文介绍了一种轻量级的特征下采样模块 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,c
:# ch_in, ch_out, shortcut, kernels, groups, expandsuper().__init__()self.cc2//2self.cv1Conv(c1//2,self.c,3,2,
self.cv2Conv(c1//2,self.c,1,1,
defforward(self,x):xtorch.nn.functional.avg_pool2d(x,2,1,0,False,True)x1,x2x.chunk(2,
x1self.cv1(x
x2torch.nn.functional.max_pool2d(x2,3,2,
x2self.cv2(x
returntorch.cat((x1,x
,
YOLO26引入代码在根目录下的ultralytics/nn/目录新建一个sample目录然后新建一个以ADown为文件名的py文件 把代码拷贝进去。
importtorchimporttorch.nnasnndefautopad(k,pNone,d
:# kernel, padding, dilationPad to same shape outputs.ifd1:kd*(k-
1ifisinstance(k,int)else[d*(x-
1forxink]# actual kernel-sizeifpisNone:pk//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_actnn.SiLU()# default activationdef__init__(self,c1,c2,k1,s1,pNone,g1,d1,actTrue):Initialize Conv layer with given arguments including activation.super().__init__()self.convnn.Conv2d(c1,c2,k,s,autopad(k,p,d),groupsg,dilationd,biasFalse)self.bnnn.BatchNorm2d(c
self.actself.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,c
:# ch_in, ch_out, shortcut, kernels, groups, expandsuper().__init__()self.cc2//2self.cv1Conv(c1//2,self.c,3,2,
self.cv2Conv(c1//2,self.c,1,1,
defforward(self,x):xtorch.nn.functional.avg_pool2d(x,2,1,0,False,True)x1,x2x.chunk(2,
x1self.cv1(x
x2torch.nn.functional.max_pool2d(x2,3,2,
x2self.cv2(x
returntorch.cat((x1,x
,
注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.sample.ADownimportADown步骤2修改def parse_model(d, ch, verboseTrue):ADown配置yolo26-ADown.yamlultralytics/cfg/models/26/yolo26-ADown.yaml# Ultralytics AGPL-
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. modelyolo26n.yaml will call yolo
yaml with scale n# [depth, width, max_channels]n:[
50,
25,1024]# summary: 260 layers, 2,572,280 parameters, 2,572,280 gradients,
1 GFLOPss:[
50,
50,1024]# summary: 260 layers, 10,009,784 parameters, 10,009,784 gradients,
2
8 GFLOPsm:[
50,
00,512]# summary: 280 layers, 21,896,248 parameters, 21,896,248 gradients,
7
4 GFLOPsl:[
00,
00,512]# summary: 392 layers, 26,299,704 parameters, 26,299,704 gradients,
9
8 GFLOPsx:[
00,
50,512]# summary: 392 layers, 58,993,368 parameters, 58,993,368 gradients,
2