diff --git a/README.md b/README.md index c71c721..5501c66 100644 --- a/README.md +++ b/README.md @@ -183,11 +183,11 @@ ______________________________________________________________________ ### 技术交流 -|FightingCV公众号(论文分享)|YOLOAir目标检测交流群( 答案: yoloair )| +|FightingCV公众号|YOLOAir目标检测交流群( 答案: yoloair )| :-------------------------:|:-------------------------: | -- FightingCV公众号每天分享最新论文和科技前沿动态 +- FightingCV每天分享前沿论文动态(公众号回复加群, 添加小助手, 加入微信交流群) - YOLOAir目标检测交流群 ______________________________________________________________________ @@ -234,23 +234,23 @@ $ python wbf.py ______________________________________________________________________ ### Performance -| Model | size
(pixels) | mAPval
0.5:0.95 | mAPval
0.5 | Speed
CPU b1
(ms) | Speed
V100 b1
(ms) | Speed
V100 b32
(ms) | params
(M) | FLOPs
@640 (B) | -|------------------------------------------------------------------------------------------------------|-----------------------|-------------------------|--------------------|------------------------------|-------------------------------|--------------------------------|--------------------|------------------------| -| YOLOv5n | 640 | 28.0 | 45.7 | **45** | **6.3** | **0.6** | **1.9** | **4.5** | -| YOLOv5s | 640 | 37.4 | 56.8 | 98 | 6.4 | 0.9 | 7.2 | 16.5 | -| YOLOv5m | 640 | 45.4 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 | -| YOLOv5l | 640 | 49.0 | 67.3 | 430 | 10.1 | 2.7 | 46.5 | 109.1 | -| YOLOv5x | 640 | 50.7 | 68.9 | 766 | 12.1 | 4.8 | 86.7 | 205.7 | +| Model | size
(pixels) | mAPval
0.5:0.95 | mAPval
0.5 | Speed
CPU b1
(ms) | Speed
V100 b1
(ms) | Speed
V100 b32
(ms) | params
(M) | FLOPs
@640 (B) | Weights +|------------------------------------------------------------------------------------------------------|-----------------------|-------------------------|--------------------|------------------------------|-------------------------------|--------------------------------|--------------------|------------------------|------------------------| +| YOLOv5n | 640 | 28.0 | 45.7 | **45** | **6.3** | **0.6** | **1.9** | **4.5** | [YOLOv5n](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5n.pt) +| YOLOv5s | 640 | 37.4 | 56.8 | 98 | 6.4 | 0.9 | 7.2 | 16.5 | [YOLOv5s](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt) +| YOLOv5m | 640 | 45.4 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 | [YOLOv5m](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5m.pt) +| YOLOv5l | 640 | 49.0 | 67.3 | 430 | 10.1 | 2.7 | 46.5 | 109.1 | [YOLOv5l](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5l.pt) +| YOLOv5x | 640 | 50.7 | 68.9 | 766 | 12.1 | 4.8 | 86.7 | 205.7 | [YOLOv5x](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5x.pt) | | | | | | | | | | -| YOLOv5n6 | 1280 | 36.0 | 54.4 | 153 | 8.1 | 2.1 | 3.2 | 4.6 | -| YOLOv5s6 | 1280 | 44.8 | 63.7 | 385 | 8.2 | 3.6 | 12.6 | 16.8 | -| YOLOv5m6 | 1280 | 51.3 | 69.3 | 887 | 11.1 | 6.8 | 35.7 | 50.0 | -| YOLOv5l6 | 1280 | 53.7 | 71.3 | 1784 | 15.8 | 10.5 | 76.8 | 111.4 | -| YOLOv5x6
+ TTA | 1280
1536 | 55.0
**55.8** | 72.7
**72.7** | 3136
- | 26.2
- | 19.4
- | 140.7
- | 209.8
- | +| YOLOv5n6 | 1280 | 36.0 | 54.4 | 153 | 8.1 | 2.1 | 3.2 | 4.6 |[YOLOv5n6](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5n6.pt) +| YOLOv5s6 | 1280 | 44.8 | 63.7 | 385 | 8.2 | 3.6 | 12.6 | 16.8 |[YOLOv5s6](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s6.pt) +| YOLOv5m6 | 1280 | 51.3 | 69.3 | 887 | 11.1 | 6.8 | 35.7 | 50.0 |[YOLOv5m6](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5m6.pt) +| YOLOv5l6 | 1280 | 53.7 | 71.3 | 1784 | 15.8 | 10.5 | 76.8 | 111.4 |[YOLOv5l6](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5l6.pt) +| YOLOv5x6
+ TTA | 1280
1536 | 55.0
**55.8** | 72.7
**72.7** | 3136
- | 26.2
- | 19.4
- | 140.7
- | 209.8
- |[YOLOv5x6](https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5x6.pt)
Expand -* The original version was created based on YOLOv5 +* The original version was created based on YOLOv5(6.1)
diff --git a/configs/attention/yolov5_SOCA.yaml b/configs/attention/yolov5_SOCA.yaml index 1d0343f..f9e8928 100644 --- a/configs/attention/yolov5_SOCA.yaml +++ b/configs/attention/yolov5_SOCA.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -43,7 +43,7 @@ head: [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, SOCA, [512]], + [-1, 1, SOCA, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5_ShuffleAttention.yaml b/configs/attention/yolov5_ShuffleAttention.yaml index 75f6e7c..8f84377 100644 --- a/configs/attention/yolov5_ShuffleAttention.yaml +++ b/configs/attention/yolov5_ShuffleAttention.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -43,7 +43,7 @@ head: [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, ShuffleAttention, [512]], + [-1, 1, ShuffleAttention, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_CA.yaml b/configs/attention/yolov5s_CA.yaml index aaf7c14..c8951f1 100644 --- a/configs/attention/yolov5s_CA.yaml +++ b/configs/attention/yolov5s_CA.yaml @@ -1,55 +1,49 @@ -# parameters -nc: 20 # number of classes +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license + +# Parameters +nc: 80 # number of classes depth_multiple: 0.33 # model depth multiple width_multiple: 0.50 # layer channel multiple - -# anchors anchors: - #- [5,6, 7,9, 12,10] # P2/4 - [10,13, 16,30, 33,23] # P3/8 - [30,61, 62,45, 59,119] # P4/16 - [116,90, 156,198, 373,326] # P5/32 -# YOLOv5 backbone +# YOLOv5 v6.0 backbone backbone: - # [from, number, module, args] # [c=channels,module,kernlsize,strides] - [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [c=3,64*0.5=32,3] - [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 - [-1, 3, C3, [128]], #2 - [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 - [-1, 6, C3, [256]], #4 - [-1, 3, CA, [256]] , #5 - [-1, 1, Conv, [512, 3, 2]], # 6-P4/16 - [-1, 9, C3, [512]], #7 - [-1, 3, CA, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 - [-1, 3, C3, [1024]], # 10 - [-1, 3, CA, [1024]], #11 - [-1, 1, SPPF, [1024, 5]], #12 + # [from, number, module, args] + [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 ] -# YOLOv5 head +# YOLOv5 v6.0 head head: - [[-1, 1, Conv, [512, 1, 1]], #13 + [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [[-1, 8], 1, Concat, [1]], # cat backbone P4 - [-1, 3, C3, [512, False]], # 16 + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [[-1, 5], 1, Concat, [1]], # cat backbone P3 - [-1, 3, C3, [256, False]], # 20 (P3/8-small) - + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) - [-1, 1, Conv, [256, 3, 2]], - [[-1, 17], 1, Concat, [1]], # cat head P4 - [-1, 3, C3, [512, False]], # 23 (P4/16-medium) [256, 256, 1, False] - #[-1, 3, CBAM, [512]], #26 - + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) - [-1, 1, Conv, [512, 3, 2]], #24 #[256, 256, 3, 2] - [[-1, 13], 1, Concat, [1]], # cat head P5 - [-1, 3, C3, [1024, False]], # 26 (P5/32-large) [512, 512, 1, False] + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + [-1, 1, CA, [1024]], - [[20, 23, 26], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_CrissCrossAttention.yaml b/configs/attention/yolov5s_CrissCrossAttention.yaml index 947854f..95f042d 100644 --- a/configs/attention/yolov5s_CrissCrossAttention.yaml +++ b/configs/attention/yolov5s_CrissCrossAttention.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -39,12 +39,11 @@ head: [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) - # [-1, 1, SKAttention, [256]], [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, CrissCrossAttention, [512]], + [-1, 1, CrissCrossAttention, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_GAMAttention.yaml b/configs/attention/yolov5s_GAMAttention.yaml index e8104ff..ff78cd6 100644 --- a/configs/attention/yolov5s_GAMAttention.yaml +++ b/configs/attention/yolov5s_GAMAttention.yaml @@ -1,3 +1,5 @@ +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license + # parameters nc: 10 # number of classes depth_multiple: 0.33 # model depth multiple @@ -22,7 +24,7 @@ backbone: [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 3, C3, [1024]], - [-1, 1, GAMAttention, [512,512]], #9 + [-1, 1, GAMAttention, [1024,1024]], #9 [-1, 1, SPPF, [1024,5]], #10 ] diff --git a/configs/attention/yolov5s_NAMAttention.yaml b/configs/attention/yolov5s_NAMAttention.yaml index 8de96ba..6b70356 100644 --- a/configs/attention/yolov5s_NAMAttention.yaml +++ b/configs/attention/yolov5s_NAMAttention.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -39,12 +39,11 @@ head: [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) - # [-1, 1, SKAttention, [256]], [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, NAMAttention, [512]], + [-1, 1, NAMAttention, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_S2Attention.yaml b/configs/attention/yolov5s_S2Attention.yaml index bdb514c..7c0db08 100644 --- a/configs/attention/yolov5s_S2Attention.yaml +++ b/configs/attention/yolov5s_S2Attention.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -43,7 +43,7 @@ head: [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, S2Attention, [512]], + [-1, 1, S2Attention, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_SEAttention.yaml b/configs/attention/yolov5s_SEAttention.yaml index e12832e..f86561d 100644 --- a/configs/attention/yolov5s_SEAttention.yaml +++ b/configs/attention/yolov5s_SEAttention.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -43,7 +43,7 @@ head: [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, SEAttention, [512]], + [-1, 1, SEAttention, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_SKAttention.yaml b/configs/attention/yolov5s_SKAttention.yaml index 339ae75..be088c3 100644 --- a/configs/attention/yolov5s_SKAttention.yaml +++ b/configs/attention/yolov5s_SKAttention.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -39,12 +39,11 @@ head: [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) - # [-1, 1, SKAttention, [256]], [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, SKAttention, [512]], + [-1, 1, SKAttention, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_SimAM.yaml b/configs/attention/yolov5s_SimAM.yaml index 11731cd..6b7f412 100644 --- a/configs/attention/yolov5s_SimAM.yaml +++ b/configs/attention/yolov5s_SimAM.yaml @@ -1,4 +1,4 @@ -# YOLOv5 🚀 by Ultralytics, GPL-3.0 license +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license # Parameters nc: 80 # number of classes @@ -39,12 +39,11 @@ head: [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) - # [-1, 1, SKAttention, [256]], [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) - [-1, 1, SimAM, [512]], + [-1, 1, SimAM, [1024]], [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/attention/yolov5s_acmix.yaml b/configs/attention/yolov5s_acmix.yaml index 2a88339..5484cf0 100644 --- a/configs/attention/yolov5s_acmix.yaml +++ b/configs/attention/yolov5s_acmix.yaml @@ -1,3 +1,5 @@ +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license + # parameters nc: 10 # number of classes depth_multiple: 0.33 # model depth multiple @@ -22,7 +24,7 @@ backbone: [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 3, C3, [1024]], - [-1, 1, ACmix, [512, 512]], #9 + [-1, 1, ACmix, [1024, 1024]], #9 [-1, 1, SPPF, [1024,5]], #10 ] diff --git a/configs/attention/yolov5s_cbam.yaml b/configs/attention/yolov5s_cbam.yaml index a8eb9b2..8ab71df 100644 --- a/configs/attention/yolov5s_cbam.yaml +++ b/configs/attention/yolov5s_cbam.yaml @@ -1,56 +1,49 @@ -# parameters -nc: 10 # number of classes +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license + +# Parameters +nc: 80 # number of classes depth_multiple: 0.33 # model depth multiple width_multiple: 0.50 # layer channel multiple - -# anchors anchors: - #- [5,6, 7,9, 12,10] # P2/4 - [10,13, 16,30, 33,23] # P3/8 - [30,61, 62,45, 59,119] # P4/16 - [116,90, 156,198, 373,326] # P5/32 -# YOLOv5 backbone +# YOLOv5 v6.0 backbone backbone: - # [from, number, module, args] # [c=channels,module,kernlsize,strides] - [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [c=3,64*0.5=32,3] - [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 - [-1, 3, C3, [128]], - [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 - [-1, 6, C3, [256]], - [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 - [-1, 9, C3, [512]], + # [from, number, module, args] + [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 - [-1, 3, C3, [1024]], - [-1, 1, CBAM, [1024]], #9 - [-1, 1, SPPF, [1024,5]], #10 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 ] -# YOLOv5 head +# YOLOv5 v6.0 head head: - [[-1, 1, Conv, [512, 1, 1]], + [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 - [-1, 3, C3, [512, False]], # 14 + [-1, 3, C3, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]], # cat backbone P3 - [-1, 3, C3, [256, False]], # 18 (P3/8-small) - [-1, 1, CBAM, [256]], #19 - + [-1, 3, C3, [256, False]], # 17 (P3/8-small) [-1, 1, Conv, [256, 3, 2]], - [[-1, 15], 1, Concat, [1]], # cat head P4 - [-1, 3, C3, [512, False]], # 22 (P4/16-medium) [256, 256, 1, False] - [-1, 1, CBAM, [512]], - + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) - [-1, 1, Conv, [512, 3, 2]], #[256, 256, 3, 2] - [[-1, 11], 1, Concat, [1]], # cat head P5 - [-1, 3, C3, [1024, False]], # 25 (P5/32-large) [512, 512, 1, False] - [-1, 1, CBAM, [1024]], - + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + [-1, 1, CBAM, [1024]], - [[19, 23, 27], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + [[17, 20, 24], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ] diff --git a/configs/yolov5_exp/yolov5s_elanfpn.yaml b/configs/yolov5_exp/yolov5s_elanfpn.yaml new file mode 100644 index 0000000..0b51b61 --- /dev/null +++ b/configs/yolov5_exp/yolov5s_elanfpn.yaml @@ -0,0 +1,114 @@ +# YOLOv5 🚀 by YOLOAir, GPL-3.0 license + +# parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# yolov7-tiny backbone +backbone: + # [from, number, module, args] c2, k=1, s=1, p=None, g=1, act=True + [[-1, 1, Conv, [32, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 0-P1/2 + + [-1, 1, Conv, [64, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 1-P2/4 + + [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 7 + + [-1, 1, MP, []], # 8-P3/8 + [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 14 + + [-1, 1, MP, []], # 15-P4/16 + [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 21 + + [-1, 1, MP, []], # 22-P5/32 + [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [512, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 28 + ] + +# yolov7-tiny head +head: + [[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, SP, [5]], + [-2, 1, SP, [9]], + [-3, 1, SP, [13]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -7], 1, Concat, [1]], + [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 37 + + [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [21, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P4 + [[-1, -2], 1, Concat, [1]], + + [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 47 + + [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [14, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P3 + [[-1, -2], 1, Concat, [1]], + + [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 57 + + [-1, 1, Conv, [128, 3, 2, None, 1, nn.LeakyReLU(0.1)]], + [[-1, 47], 1, Concat, [1]], + + [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 65 + + [-1, 1, Conv, [256, 3, 2, None, 1, nn.LeakyReLU(0.1)]], + [[-1, 37], 1, Concat, [1]], + + [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [[-1, -2, -3, -4], 1, Concat, [1]], + [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 73 + + [57, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [65, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + [73, 1, Conv, [512, 3, 1, None, 1, nn.LeakyReLU(0.1)]], + + [[74,75,76], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/yolo.py b/models/yolo.py index 3d9a80d..7d1d292 100644 --- a/models/yolo.py +++ b/models/yolo.py @@ -357,7 +357,7 @@ def parse_model(d, ch): # model_dict, input_channels(3) args.insert(2, n) # number of repeats n = 1 # add module research - elif m in [CARAFE, SPPCSPC, RepConv, BoT3, CA, CBAM, Involution, Stem, ResCSPC, ResCSPB, \ + elif m in [CARAFE, SPPCSPC, RepConv, BoT3, CA, CBAM, NAMAttention, GAMAttention, ACmix, Involution, Stem, ResCSPC, ResCSPB, \ ResXCSPB, ResXCSPC, BottleneckCSPB, BottleneckCSPC, ASPP, BasicRFB, SPPCSPC_group, HorBlock, CNeB,C3GC ,C3C2, nn.ConvTranspose2d]: c1, c2 = ch[f], args[0] @@ -395,6 +395,11 @@ def parse_model(d, ch): # model_dict, input_channels(3) n = 1 elif m in [ReOrg, DWT]: c2 = ch[f] * 4 + elif m in [S2Attention, CrissCrossAttention, SOCA, ShuffleAttention, SEAttention, SimAM, SKAttention]: + c1, c2 = ch[f], args[0] + if c2 != no: # if not output + c2 = make_divisible(c2 * gw, 8) + args = [c1, *args[1:]] elif m is nn.BatchNorm2d: args = [ch[f]] elif m is Concat: