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的训练过程以及推理过程,希望大家多多支持。

相关推荐
动物园猫2 小时前
可回收垃圾目标检测数据集:5类别、13,000张图像 | 目标检测
人工智能·目标检测·计算机视觉
向哆哆3 小时前
高质量人体检测与行人识别数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·目标检测·分类
阿拉斯攀登4 小时前
售货柜实战:IPC 拉流 → 抽帧 → YOLO 识别完整流水线
yolo·ffmpeg·音视频·webrtc·视频编解码
懂AI的老郑7 小时前
面对小众场景的目标检测联合智能体零样本检测可行性分析
人工智能·yolo·架构
断眉的派大星1 天前
YOLO实例分割详细解析
人工智能·yolo·计算机视觉
YOLO数据集集合1 天前
无人机松材线虫病树监测:早期与晚期感染阶段目标检测数据集全解析10125期
人工智能·目标检测·无人机
Java小白笔记1 天前
Codex 桌面应用设置功能完全指南
人工智能·opencv·目标检测·机器学习·计算机视觉·数据挖掘·语音识别
2601_951659991 天前
4.19华为OD机试真题 新系统 - WIFI设备网络规划 (JavaPyCC++JsGo)
深度学习·yolo·计算机视觉·yolo11·yolo26
2601_951659991 天前
4.19华为OD机试真题 新系统 - 8位LED控制器 (JavaPyCC++JsGo)
深度学习·yolo·计算机视觉·yolo11·yolo26