YOLO26目标检测网络结构

1.网络结构

这里就以nano模型的网络结构为例来说明一下YOLO26的基本结构,其他版本的模型和之前一样除了深度和宽度不一样外,其他都是一样的。

YOLO26还是继续沿袭YOLO的经典架构,Backbone-neck-head,这次改变最大的部分就是Head层,Backbone层可能就更新了两个模块C3K2和C2PSA,下面主要是围绕和YOLOv8的区别来介绍YOLO26的网络结构。

1.Backbone

1.C3K2

从yolo26.yaml中就可以看到C3K2有三种不同的设计,分别就是

  • -1, 2, C3k2, \[256, **False**, 0.25\]

  • -1, 2, C3k2, \[512, **True**\]

  • -1, 1, C3k2, \[1024, **True** , 0.5, **True**\]

其中第二个参数是指C3K是否为True,第四个参数是指Attn是否为True,下面就来看看这三个的区别,直接看例子就能看懂了

先看第一种C3K2,以Backbone第一个C3K2模块为例,-1, 2, C3k2, \[256, **False** , 0.25],即C3K=False,Attn=False的情况:

这种其实就退化成YOLOv8中的C2F模块,其中n通过yolo26.yaml中的Depth来控制,应该是-1, 2, C3k2, \[256, **False** , 0.25]中的2和Depth相乘得到,即2Depth=20.5=1,所以Bottleneck模块的个数是1,其他关于这个介绍可以直接去看YOLOv8中关于C2F模块的介绍。

另外补充一点,C3K2中第一个CBS模块的卷积核个数,也就是输出通道数2 *int*(c2 e)=2*64* 0.25=32,e是-1, 2, C3k2, \[256, **False**, 0.25]的0.25,而c2是输出通道数,需要通过yolo26.yaml中的Width来算,即0.25*256=64,这也是第二个CBS的输出通道数。

第二种情况的C3K2,以Backbone第三个C3K2模块为例,-1, 2, C3k2, \[512, **True** ],即C3K=False,Attn=False的情况:

这种明显复杂了很多,其实细看也就是Bottleneck改变了,至于为什么要这么设计我也不知道笑哭笑哭

我个人觉得关于网络结构这块大家知道个大概就好了,不用太关注网络是如何设计的,主要关注网络是如何解码如何进行训练的就好了。

第三种情况的C3K2,以Neck层的最后一个C3K2模块为例,-1, 1, C3k2, \[1024, **True** , 0.5, **True** ] ,即C3K=True,Attn=True的情况:

这种情况细看也是原本C2f中的Bottleneck模块改变了,可以看到在原本的Bottlneck模块后面加了一个PSABlock模块,然后将这两个作为完整的BottleNeck,PSABlock模块下一节会介绍。

2.C2PSA

这个模块放在SPPF后面,主要是对高维度的低分辨率特征图进行Self Attention,没错就是那个Transformer,先看下C2PSA的整体结构,是不是和前面的C3K2很像,其实不管是C3K2还是C2PSA模块都是YOLOv8中C2f的变体,区别就在于BottleNeck的设计,这里是直接插入了一个PSABlock,包含了Attention模块和FFN模块,其实这个就是Transformer中的结构。

如果对Transformer不是很熟悉,可以去看看我的这两篇博客

Vision Transformer网络结构-CSDN博客

如何理解Transformer的自注意力机制-CSDN博客

接下来就看看PSABlock模块了,分别是Attention的残差结构,再加上FFN的残差结构,看了前面两篇博客,应该也能看懂这个图了。

这里把20x20尺度这个特征图看成是400个token,每个token包含128维特征,并且拆分成了两个头,然后Position Encoder使用一个Conv+BN ,是对v.reshape(B, C, H, W)后的特征图进行卷积的,具体可以看代码E:\code\ultralytics-main\ultralytics\nn\modules\block.py,Line1271,Attention()类.

2.Head

可以看到26的Head层有两层输出,一个是one2one输出的boxes和scores,一个是one2many输出的boxes和scores,如下图所示,需要注意两点就好了,这些都是为了无NMS做的准备。

1.one2one分支只会根本更新head层,而不会更新backbone和neck层 2.one2many分支的head和one2one分支的head结构一模一样,可以理解为不共享权重的head

还有一个需要注意的就是,现在的Boxes层只有4个维度,和YOLOv8的64个维度有区别,说明26不再需要DFL解码来计算预测框的宽高和位置了。

具体head里面的具体卷积参数如下所示(以80x80尺度为例),Scores分支中第一个DWCBS的输出通道数和输入特征图的通道数保持一致,即64,并且DWCBS的groups和通道数相等,这是卷积最轻量化的方式了。

这里粗略介绍了YOLO26的网络结构,后面再更新下YOLO26的训练过程以及推理过程,希望大家多多支持。

相关推荐
ʜᴇɴʀʏ4 小时前
TIP 2025 | DIL-SSOD:密集信息增强与关系一致性正则化的半监督目标检测
人工智能·目标检测·目标跟踪
学技术的大胜嗷6 小时前
PatchCore:论文和工程代码细节详细解读
目标检测·计算机视觉·视觉检测
leoZ23118 小时前
Vue3 还原一个企业级后台-08-API注册管理
目标检测·机器学习·分类·状态模式·迁移学习·集成学习·figma
江畔柳前堤1 天前
AgentScope 设计与原理全解:从消息原语到分布式智能体工程底座
大数据·人工智能·分布式·目标检测·机器学习·语言模型·架构
jay神1 天前
深度学习为什么需要反向传播
人工智能·深度学习·yolo·目标检测·cnn·毕业设计
动物园猫2 天前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉
嘶哈哈哈2 天前
使用 Labelme 标注遥感目标检测数据集:从类别表、矩形框到 group_id 完整流程
人工智能·目标检测·目标跟踪
YOLO数据集集合2 天前
一站式AI数据自动化标注与训练平台:零门槛玩转YOLO全系列模型
人工智能·深度学习·yolo·ai·自动化·数据集·标注软件
探物 AI2 天前
yolo目标检测中的激活函数对比
人工智能·yolo·目标检测
动物园猫3 天前
猪行为目标检测数据集:9类别、3,700张图像 | 目标检测
人工智能·目标检测·计算机视觉