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

相关推荐
hhzz10 小时前
【OpenCV 入门到精通 02】环境安装与第一个程序:5 分钟跑通 Hello OpenCV
人工智能·opencv·yolo·计算机视觉·开源
栀椩10 小时前
CODrone 无人机航拍车辆检测
pytorch·python·yolo
向哆哆11 小时前
鸡行为目标检测数据集:3类别 | 目标检测
人工智能·目标检测·计算机视觉
长江后浪博客1 天前
YOLO目标检测模型调参入门:从训练参数到检测效果优化
yolo·目标检测·机器学习·yolov8·模型调参
策案案案1 天前
YOLO: 将AI Agents嵌入到IntelliJ IDEA
java·大数据·人工智能·笔记·yolo·microsoft·intellij-idea
公爵爱学习1 天前
无人机视觉识别前序-Linux-YOLO安装
python·yolo·计算机视觉·conda·无人机
长江后浪博客1 天前
Python + YOLOv8 疲劳驾驶 AI 视觉检测入门:从模型训练到 ONNX 实时摄像头检测完整实战
人工智能·python·yolo·疲劳驾驶检测·onnx·yolov8
JarmanYuo1 天前
YOLO 涨点研究(九):多模态融合检测篇——RGB-红外融合的网络结构与论文全解析
yolo
AI棒棒牛1 天前
YOLO26最新创新改进系列:融合 MVIGGraphFusionBlock,构建互视信息图注意力 Neck,嘎嘎创新!
人工智能·计算机视觉·yolo26
leoZ2311 天前
第 7 篇:进阶——校验、联动、列表页
开发语言·前端·javascript·vue.js·人工智能·目标检测·ecmascript