2. YOLO11网络结构详细解析(以n版本为例)

YOLO11-n的网络结构图,如下:

网上的关于YOLO11网格结构图,要么有错误,要么细节不清晰。这是我找到最好的版本,原图见博文:YOLO11 沉浸式讲解 YOLOV11网络结构以及代码剖析-优快云博客

YOLO11网格结构的具体实现,可以在nn/task.py中parse_model函数显示的位置设置断点,调试过程中观察yaml文件被一行一行的解析。

具体解析如下:

YOLO11-backbone(n版本)

结构图

模块图

scales:

  # [depth, width, max_channels]

  n: [0.50, 0.25, 1024]

backbone:

  # [from, repeats, module, args]

  - [-1, 1, Conv, [64*0.25, 3, 2]] # 0-P1/2

  - [-1, 1, Conv, [128*0.25, 3, 2]] # 1-P2/4

  - [-1, 2*0.50, C3k2, [256*0.25, False, 0.25]]

  - [-1, 1, Conv, [256*0.25, 3, 2]] # 3-P3/8

  - [-1, 2*0.50, C3k2, [512*0.25, False, 0.25]]

  - [-1, 1, Conv, [512*0.25, 3, 2]] # 5-P4/16

  - [-1, 2*0.50, C3k2, [512*0.25, True]]

  - [-1, 1, Conv, [1024*0.25, 3, 2]] # 7-P5/32

  - [-1, 2*0.50, C3k2, [1024*0.25, True]]

  - [-1, 1, SPPF, [1024*0.25, 5]] # 9

  - [-1, 2*0.50, C2PSA, [1024*0.25]] # 10

CBS:

 

Bottleneck:

C3K:

C3K2(False):

 

C3K2(True):

 SPPF:

 

C2PSA:  

YOLO11-backbone

层号

说明

  - [-1, 1, Conv, [64*0.25, 3, 2]] # 0-P1/2

0

640→320, c1=3, c2=64*0.25=16, CBS: k=3 s=2

  - [-1, 1, Conv, [128*0.25, 3, 2]] # 1-P2/4

1

320→160, c1=16, c2=128*0.25=32, CBS: k=3 s=2

  - [-1, 2*0.5, C3k2, [256*0.25, False, 0.25]]

2

160→160, c1=32, c2=256*0.25=64, e=0.25,

C3K2(False):

    第1个CBS: cin=c1=32, cout=c2*e*2=32, k=1 s=1

    Split: 2个c=c2*e=16

    Bottleneck: n=2*0.5=1个, cin=cout=c=16, shortcut=true, 2个CBS:

        第1个CBS: cin=16, cout=16*0.5=8, k=3 s=1

        第2个CBS: cin=16*0.5=8, cout=16, k=3 s=1

    Concat: (2+n)*c=48

    第2个CBS: cin=(2+n)*c=48, cout=c2=64, k=1 s=1

  - [-1, 1, Conv, [256*0.25, 3, 2]] # 3-P3/8

3

160→80, c1=64, c2=256*0.25=64, CBS: k=3 s=2

  - [-1, 2*0.5, C3k2, [512*0.25, False, 0.25]]

4

80→80, c1=64, c2=512*0.25=128, e=0.25,

C3K2(False):

    第1个CBS: cin=c1=64, cout=c2*e*2=64, k=1 s=1

    Split: 2个c=c2*e=32

    Bottleneck: n=2*0.5=1, cin=cout=c=32, shortcut=true, 2个CBS:

        第1个CBS: cin=32, cout=32*0.5=16, k=3 s=1

        第2个CBS: cin=32*0.5=16, cout=32, k=3 s=1

    Concat: (2+n)*c=96

    第2个CBS: cin=(2+n)*c=96, cout=c2=128, k=1 s=1

  - [-1, 1, Conv, [512*0.25, 3, 2]] # 5-P4/16

5

80→40, c1=128, c2=512*0.25=128, CBS: k=3 s=2

  - [-1, 2*0.5, C3k2, [512*0.25, True]]

6

40→40, c1=128, c2=512*0.25=128, e=0.5(默认值),

C3K2(True):

    第1个CBS: cin=c1=128, cout=c2*e*2=128, k=1 s=1

    Split: 2个c=c2*e=64

    C3K: n=2*0.5=1, cin=cout=c=64, shortcut=true

        CBS-1: cin=c=64, cout=c*e=32, k=1 s=1

        CBS-2: cin=c=64, cout=c*e=32, k=1 s=1

        2个Bottleneck: cin=c*e=32, cout= c*e=32, shortcut=true

            第1个CBS: cin= c*e=32, cout= c*e =32, k=3 s=1

            第2个CBS: cin= c*e =32, cout= c*e=32, k=3 s=1

        Concat: c*e + c*e=64

        CBS-3: cin= c*e + c*e=64, cout=c=64, k=1 s=1

    Concat: (2+n)*c=192

    第2个CBS: cin=(2+n)*c=192, cout=c2=128, k=1 s=1

  - [-1, 1, Conv, [1024*0.25, 3, 2]] # 7-P5/32

7

40→20, c1=128, c2=1024*0.25=256, CBS: k=3 s=2

  - [-1, 2*0.5, C3k2, [1024*0.25, True]]

8

20→20, c1=256, c2=1024*0.25=256, e=0.5(默认值),

C3K2(True):

    第1个CBS: cin=c1=256, cout=c2*e*2=256, k=1 s=1

    Split: 2个c=c2*e=128

    C3K: n=2*0.5=1, cin=cout=c=128, shortcut=true

        CBS-1: cin=c=128, cout=c*e=64, k=1 s=1

        CBS-2: cin=c=128, cout=c*e=64, k=1 s=1

        2个Bottleneck: cin=c*e=64, cout= c*e=64, shortcut=true

            第1个CBS: cin= c*e=64, cout= c*e =64, k=3 s=1

            第2个CBS: cin= c*e =64, cout= c*e=64, k=3 s=1

        Concat: c*e + c*e=128

        CBS-3: cin= c*e + c*e=128, cout=c=128, k=1 s=1

    Concat: (2+n)*c=384

    第2个CBS: cin=(2+n)*c=384, cout=c2=256, k=1 s=1

  - [-1, 1, SPPF, [1024*0.25, 5]] # 9

9

20→20, c1=256, c2=1024*0.25=256, k=5,

SPPF:

  第1个CBS: cin=c1=256, cout=c1/2=128, k=1 s=1

  MaxPool2d: k=5, s=1, p=2

  Concat: (c1/2)*4=512

  第2个CBS: cin=(c1/2)*4=512, cout=c2=256, k=1 s=1

  - [-1, 2*0.5, C2PSA, [1024*0.25]] # 10

10

20→20, c1=256, c2=1024*0.25=256,

C2PSA:

    第1个CBS: cin=c1=256, cout=256, k=1 s=1

    Split: 2个c=c1*0.5=128

    PSABlock: n=2*0.5=1,

        Attention: cin=c=128, cout=128, shortcut=true

        FNN: cin=c=128, cout=128, shortcut=true

            第1个CBS: cin=128, cout=256, k=1 s=1

            第2个CBS: cin=256, cout=128, k=1 s=1

    Concat: 128+128=256

    第2个CBS: cin =256, cout=256, k=1 s=1

YOLO11-head

结构图

head:

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]

  - [[-1, 6], 1, Concat, [1]] # cat backbone P4

  - [-1, 2*0.5, C3k2, [512*0.25, False]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]

  - [[-1, 4], 1, Concat, [1]] # cat backbone P3

  - [-1, 2*0.5, C3k2, [256*0.25, False]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256*0.25, 3, 2]]

  - [[-1, 13], 1, Concat, [1]] # cat head P4

  - [-1, 2*0.5, C3k2, [512*0.25, False]] # 19 (P4/16-medium)

  - [-1, 1, Conv, [512*0.25, 3, 2]]

  - [[-1, 10], 1, Concat, [1]] # cat head P5

  - [-1, 2*0.5, C3k2, [1024*0.25, True]] # 22 (P5/32-large)

YOLO11-head

层号

说明

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]

11

20→40, c1=256, c2=256

Upsample(scale_factor=2.0, mode='nearest')

  - [[-1, 6], 1, Concat, [1]] # cat backbone P4

12

40→40, c1=128+256, c2=384

  - [-1, 2*0.5, C3k2, [512*0.25, False]] # 13

13

40→40, c1=384, c2=512*0.25=128, e=0.5(默认值),

C3K2(False):

    第1个CBS: cin=c1=384, cout=c2*e*2=128, k=1 s=1

    Split: 2个c=c2*e=64

    Bottleneck: n=2*0.5=1个, cin=cout=c=64, shortcut=true, 2个CBS:

        第1个CBS: cin=64, cout=64*0.5=32, k=3 s=1

        第2个CBS: cin=64*0.5=32, cout=64, k=3 s=1

    Concat: (2+n)*c=192

    第2个CBS: cin=(2+n)*c=192, cout=c2=128, k=1 s=1

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]

14

40→80, c1=128, c2=128

Upsample(scale_factor=2.0, mode='nearest')

  - [[-1, 4], 1, Concat, [1]] # cat backbone P3

15

80→80, c1=128+128, c2=256

  - [-1, 2*0.5, C3k2, [256*0.25, False]] # 16 (P3/8-small)

16

80→80, c1=256, c2=256*0.25=64, e=0.5(默认值),

C3K2(False):

    第1个CBS: cin=c1=256, cout=c2*e*2=64, k=1 s=1

    Split: 2个c=c2*e=32

    Bottleneck: n=2*0.5=1个, cin=cout=c=32, shortcut=true, 2个CBS:

        第1个CBS: cin=32, cout=32*0.5=16, k=3 s=1

        第2个CBS: cin=32*0.5=16, cout=32, k=3 s=1

    Concat: (2+n)*c=96

    第2个CBS: cin=(2+n)*c=96, cout=c2=64, k=1 s=1

  - [-1, 1, Conv, [256*0.25, 3, 2]]

17

80→40, c1=64, c2=256*0.25=64, CBS: k=3 s=2

  - [[-1, 13], 1, Concat, [1]] # cat head P4

18

40→40, c1=128+64, c2=192

  - [-1, 2*0.5, C3k2, [512*0.25, False]] # 19 (P4/16-medium)

19

40→40, c1=192, c2=512*0.25=128, e=0.5(默认值),

C3K2(False):

    第1个CBS: cin=c1=192, cout=c2*e*2=128, k=1 s=1

    Split: 2个c=c2*e=64

    Bottleneck: n=2*0.5=1个, cin=cout=c=64, shortcut=true, 2个CBS:

        第1个CBS: cin=64, cout=64*0.5=32, k=3 s=1

        第2个CBS: cin=64*0.5=32, cout=64, k=3 s=1

    Concat: (2+n)*c=192

    第2个CBS: cin=(2+n)*c=192, cout=c2=128, k=1 s=1

  - [-1, 1, Conv, [512*0.25, 3, 2]]

20

40→20, c1=128, c2=512*0.25=128, CBS: k=3 s=2

  - [[-1, 10], 1, Concat, [1]] # cat head P5

21

20→20, c1=128+256, c2=384

  - [-1, 2*0.5, C3k2, [1024*0.25, True]] # 22 (P5/32-large)

22

20→20, c1=384, c2=1024*0.25=256, e=0.5(默认值),

C3K2(True):

    第1个CBS: cin=c1=384, cout=c2*e*2=256, k=1 s=1

    Split: 2个c=c2*e=128

    C3K: n=2*0.5=1, cin=cout=c=128, shortcut=true

        CBS-1: cin=c=128, cout=c*e=64, k=1 s=1

        CBS-2: cin=c=128, cout=c*e=64, k=1 s=1

        2个Bottleneck: cin=c*e=64, cout= c*e=64, shortcut=true

            第1个CBS: cin= c*e=64, cout= c*e =64, k=3 s=1

            第2个CBS: cin= c*e =64, cout= c*e=64, k=3 s=1

        Concat: c*e + c*e=128

        CBS-3: cin= c*e + c*e=128, cout=c=128, k=1 s=1

    Concat: (2+n)*c=384

    第2个CBS: cin=(2+n)*c=384, cout=c2=256, k=1 s=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值