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:
Laughing 2024-06-18 00:53:19 +08:00 committed by GitHub
parent 605e7f4f52
commit 8ea945cc8e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 168 additions and 8 deletions

View file

@ -1,6 +1,6 @@
# Ultralytics YOLO 🚀, AGPL-3.0 license
__version__ = "8.2.34"
__version__ = "8.2.35"
import os

View 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)

View 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)

View 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)

View file

@ -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",
)

View file

@ -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."""

View file

@ -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,