ultralytics 8.2.35 add YOLOv9t/s/m models (#13504)
Co-authored-by: UltralyticsAssistant <web@ultralytics.com> Co-authored-by: Glenn Jocher <glenn.jocher@ultralytics.com>
This commit is contained in:
parent
605e7f4f52
commit
8ea945cc8e
10 changed files with 168 additions and 8 deletions
|
|
@ -1,6 +1,6 @@
|
|||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
__version__ = "8.2.34"
|
||||
__version__ = "8.2.35"
|
||||
|
||||
import os
|
||||
|
||||
|
|
|
|||
38
ultralytics/cfg/models/v9/yolov9m.yaml
Normal file
38
ultralytics/cfg/models/v9/yolov9m.yaml
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# YOLOv9t
|
||||
# 603 layers, 20216160 parameters, 77.9 GFLOPs
|
||||
|
||||
# parameters
|
||||
nc: 80 # number of classes
|
||||
|
||||
# gelan backbone
|
||||
backbone:
|
||||
- [-1, 1, Conv, [32, 3, 2]] # 0-P1/2
|
||||
- [-1, 1, Conv, [64, 3, 2]] # 1-P2/4
|
||||
- [-1, 1, RepNCSPELAN4, [128, 128, 64, 1]] # 2
|
||||
- [-1, 1, AConv, [240]] # 3-P3/8
|
||||
- [-1, 1, RepNCSPELAN4, [240, 240, 120, 1]] # 4
|
||||
- [-1, 1, AConv, [360]] # 5-P4/16
|
||||
- [-1, 1, RepNCSPELAN4, [360, 360, 180, 1]] # 6
|
||||
- [-1, 1, AConv, [480]] # 7-P5/32
|
||||
- [-1, 1, RepNCSPELAN4, [480, 480, 240, 1]] # 8
|
||||
- [-1, 1, SPPELAN, [480, 240]] # 9
|
||||
|
||||
head:
|
||||
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
||||
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
|
||||
- [-1, 1, RepNCSPELAN4, [360, 360, 180, 1]] # 12
|
||||
|
||||
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
||||
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
|
||||
- [-1, 1, RepNCSPELAN4, [240, 240, 120, 1]] # 15
|
||||
|
||||
- [-1, 1, AConv, [180]]
|
||||
- [[-1, 12], 1, Concat, [1]] # cat head P4
|
||||
- [-1, 1, RepNCSPELAN4, [360, 360, 180, 1]] # 18 (P4/16-medium)
|
||||
|
||||
- [-1, 1, AConv, [240]]
|
||||
- [[-1, 9], 1, Concat, [1]] # cat head P5
|
||||
- [-1, 1, RepNCSPELAN4, [480, 480, 240, 1]] # 21 (P5/32-large)
|
||||
|
||||
- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)
|
||||
38
ultralytics/cfg/models/v9/yolov9s.yaml
Normal file
38
ultralytics/cfg/models/v9/yolov9s.yaml
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# YOLOv9s
|
||||
# 917 layers, 7318368 parameters, 27.6 GFLOPs
|
||||
|
||||
# parameters
|
||||
nc: 80 # number of classes
|
||||
|
||||
# gelan backbone
|
||||
backbone:
|
||||
- [-1, 1, Conv, [32, 3, 2]] # 0-P1/2
|
||||
- [-1, 1, Conv, [64, 3, 2]] # 1-P2/4
|
||||
- [-1, 1, ELAN1, [64, 64, 32]] # 2
|
||||
- [-1, 1, AConv, [128]] # 3-P3/8
|
||||
- [-1, 1, RepNCSPELAN4, [128, 128, 64, 3]] # 4
|
||||
- [-1, 1, AConv, [192]] # 5-P4/16
|
||||
- [-1, 1, RepNCSPELAN4, [192, 192, 96, 3]] # 6
|
||||
- [-1, 1, AConv, [256]] # 7-P5/32
|
||||
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 3]] # 8
|
||||
- [-1, 1, SPPELAN, [256, 128]] # 9
|
||||
|
||||
head:
|
||||
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
||||
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
|
||||
- [-1, 1, RepNCSPELAN4, [192, 192, 96, 3]] # 12
|
||||
|
||||
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
||||
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
|
||||
- [-1, 1, RepNCSPELAN4, [128, 128, 64, 3]] # 15
|
||||
|
||||
- [-1, 1, AConv, [96]]
|
||||
- [[-1, 12], 1, Concat, [1]] # cat head P4
|
||||
- [-1, 1, RepNCSPELAN4, [192, 192, 96, 3]] # 18 (P4/16-medium)
|
||||
|
||||
- [-1, 1, AConv, [128]]
|
||||
- [[-1, 9], 1, Concat, [1]] # cat head P5
|
||||
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 3]] # 21 (P5/32-large)
|
||||
|
||||
- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4 P5)
|
||||
38
ultralytics/cfg/models/v9/yolov9t.yaml
Normal file
38
ultralytics/cfg/models/v9/yolov9t.yaml
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# YOLOv9t
|
||||
# 917 layers, 2128720 parameters, 8.5 GFLOPs
|
||||
|
||||
# parameters
|
||||
nc: 80 # number of classes
|
||||
|
||||
# gelan backbone
|
||||
backbone:
|
||||
- [-1, 1, Conv, [16, 3, 2]] # 0-P1/2
|
||||
- [-1, 1, Conv, [32, 3, 2]] # 1-P2/4
|
||||
- [-1, 1, ELAN1, [32, 32, 16]] # 2
|
||||
- [-1, 1, AConv, [64]] # 3-P3/8
|
||||
- [-1, 1, RepNCSPELAN4, [64, 64, 32, 3]] # 4
|
||||
- [-1, 1, AConv, [96]] # 5-P4/16
|
||||
- [-1, 1, RepNCSPELAN4, [96, 96, 48, 3]] # 6
|
||||
- [-1, 1, AConv, [128]] # 7-P5/32
|
||||
- [-1, 1, RepNCSPELAN4, [128, 128, 64, 3]] # 8
|
||||
- [-1, 1, SPPELAN, [128, 64]] # 9
|
||||
|
||||
head:
|
||||
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
||||
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
|
||||
- [-1, 1, RepNCSPELAN4, [96, 96, 48, 3]] # 12
|
||||
|
||||
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
||||
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
|
||||
- [-1, 1, RepNCSPELAN4, [64, 64, 32, 3]] # 15
|
||||
|
||||
- [-1, 1, AConv, [48]]
|
||||
- [[-1, 12], 1, Concat, [1]] # cat head P4
|
||||
- [-1, 1, RepNCSPELAN4, [96, 96, 48, 3]] # 18 (P4/16-medium)
|
||||
|
||||
- [-1, 1, AConv, [64]]
|
||||
- [[-1, 9], 1, Concat, [1]] # cat head P5
|
||||
- [-1, 1, RepNCSPELAN4, [128, 128, 64, 3]] # 21 (P5/32-large)
|
||||
|
||||
- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)
|
||||
|
|
@ -23,9 +23,11 @@ from .block import (
|
|||
C3,
|
||||
C3TR,
|
||||
DFL,
|
||||
ELAN1,
|
||||
SPP,
|
||||
SPPELAN,
|
||||
SPPF,
|
||||
AConv,
|
||||
ADown,
|
||||
BNContrastiveHead,
|
||||
Bottleneck,
|
||||
|
|
@ -133,4 +135,6 @@ __all__ = (
|
|||
"SPPELAN",
|
||||
"CBFuse",
|
||||
"CBLinear",
|
||||
"AConv",
|
||||
"ELAN1",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -32,7 +32,9 @@ __all__ = (
|
|||
"RepC3",
|
||||
"ResNetLayer",
|
||||
"RepNCSPELAN4",
|
||||
"ELAN1",
|
||||
"ADown",
|
||||
"AConv",
|
||||
"SPPELAN",
|
||||
"CBFuse",
|
||||
"CBLinear",
|
||||
|
|
@ -603,6 +605,33 @@ class RepNCSPELAN4(nn.Module):
|
|||
return self.cv4(torch.cat(y, 1))
|
||||
|
||||
|
||||
class ELAN1(RepNCSPELAN4):
|
||||
"""ELAN1 module with 4 convolutions."""
|
||||
|
||||
def __init__(self, c1, c2, c3, c4):
|
||||
"""Initializes ELAN1 layer with specified channel sizes."""
|
||||
super().__init__(c1, c2, c3, c4)
|
||||
self.c = c3 // 2
|
||||
self.cv1 = Conv(c1, c3, 1, 1)
|
||||
self.cv2 = Conv(c3 // 2, c4, 3, 1)
|
||||
self.cv3 = Conv(c4, c4, 3, 1)
|
||||
self.cv4 = Conv(c3 + (2 * c4), c2, 1, 1)
|
||||
|
||||
|
||||
class AConv(nn.Module):
|
||||
"""AConv."""
|
||||
|
||||
def __init__(self, c1, c2):
|
||||
"""Initializes AConv module with convolution layers."""
|
||||
super().__init__()
|
||||
self.cv1 = Conv(c1, c2, 3, 2, 1)
|
||||
|
||||
def forward(self, x):
|
||||
"""Forward pass through AConv layer."""
|
||||
x = torch.nn.functional.avg_pool2d(x, 2, 1, 0, False, True)
|
||||
return self.cv1(x)
|
||||
|
||||
|
||||
class ADown(nn.Module):
|
||||
"""ADown."""
|
||||
|
||||
|
|
|
|||
|
|
@ -13,10 +13,12 @@ from ultralytics.nn.modules import (
|
|||
C2,
|
||||
C3,
|
||||
C3TR,
|
||||
ELAN1,
|
||||
OBB,
|
||||
SPP,
|
||||
SPPELAN,
|
||||
SPPF,
|
||||
AConv,
|
||||
ADown,
|
||||
Bottleneck,
|
||||
BottleneckCSP,
|
||||
|
|
@ -878,7 +880,9 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
|||
C2,
|
||||
C2f,
|
||||
RepNCSPELAN4,
|
||||
ELAN1,
|
||||
ADown,
|
||||
AConv,
|
||||
SPPELAN,
|
||||
C2fAttn,
|
||||
C3,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue