Commit
·
1b97392
1
Parent(s):
a88cdd2
updates
Browse files- models/common.py +0 -18
- models/yolo.py +4 -4
- models/yolov5s_csp.yaml +0 -46
- models/yolov5s_csp1.yaml +0 -46
- models/yolov5s_csp2.yaml +0 -46
models/common.py
CHANGED
@@ -65,24 +65,6 @@ class BottleneckCSP(nn.Module):
|
|
65 |
return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1))))
|
66 |
|
67 |
|
68 |
-
class BottleneckCSPF(nn.Module):
|
69 |
-
def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion
|
70 |
-
super(BottleneckCSPF, self).__init__()
|
71 |
-
c_ = int(c2 * e) # hidden channels
|
72 |
-
self.cv1 = Conv(c1, c_, 1, 1)
|
73 |
-
self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False)
|
74 |
-
self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False)
|
75 |
-
self.cv4 = Conv(c2, c2, 1, 1)
|
76 |
-
self.bn = nn.BatchNorm2d(2 * c_) # applied to cat(cv2, cv3)
|
77 |
-
self.act = nn.LeakyReLU(0.1, inplace=True)
|
78 |
-
self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)])
|
79 |
-
|
80 |
-
def forward(self, x):
|
81 |
-
y1 = self.cv3(self.m(self.cv1(x)))
|
82 |
-
y2 = self.cv2(x)
|
83 |
-
return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1))))
|
84 |
-
|
85 |
-
|
86 |
class Narrow(nn.Module):
|
87 |
def __init__(self, c1, c2, shortcut=True, g=1): # ch_in, ch_out, shortcut, groups
|
88 |
super(Narrow, self).__init__()
|
|
|
65 |
return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1))))
|
66 |
|
67 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
class Narrow(nn.Module):
|
69 |
def __init__(self, c1, c2, shortcut=True, g=1): # ch_in, ch_out, shortcut, groups
|
70 |
super(Narrow, self).__init__()
|
models/yolo.py
CHANGED
@@ -122,7 +122,7 @@ def parse_model(md, ch): # model_dict, input_channels(3)
|
|
122 |
pass
|
123 |
|
124 |
n = max(round(n * gd), 1) if n > 1 else n # depth gain
|
125 |
-
if m in [nn.Conv2d, Conv, Bottleneck, SPP, DWConv, MixConv2d, Focus, ConvPlus, BottleneckCSP,
|
126 |
c1, c2 = ch[f], args[0]
|
127 |
|
128 |
# Normal
|
@@ -143,8 +143,8 @@ def parse_model(md, ch): # model_dict, input_channels(3)
|
|
143 |
# c2 = make_divisible(c2, 8) if c2 != no else c2
|
144 |
|
145 |
args = [c1, c2, *args[1:]]
|
146 |
-
if m
|
147 |
-
args
|
148 |
n = 1
|
149 |
elif m is nn.BatchNorm2d:
|
150 |
args = [ch[f]]
|
@@ -170,7 +170,7 @@ def parse_model(md, ch): # model_dict, input_channels(3)
|
|
170 |
|
171 |
if __name__ == '__main__':
|
172 |
parser = argparse.ArgumentParser()
|
173 |
-
parser.add_argument('--cfg', type=str, default='
|
174 |
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
|
175 |
opt = parser.parse_args()
|
176 |
opt.cfg = glob.glob('./**/' + opt.cfg, recursive=True)[0] # find file
|
|
|
122 |
pass
|
123 |
|
124 |
n = max(round(n * gd), 1) if n > 1 else n # depth gain
|
125 |
+
if m in [nn.Conv2d, Conv, Bottleneck, SPP, DWConv, MixConv2d, Focus, ConvPlus, BottleneckCSP, BottleneckLight]:
|
126 |
c1, c2 = ch[f], args[0]
|
127 |
|
128 |
# Normal
|
|
|
143 |
# c2 = make_divisible(c2, 8) if c2 != no else c2
|
144 |
|
145 |
args = [c1, c2, *args[1:]]
|
146 |
+
if m is BottleneckCSP:
|
147 |
+
args.insert(2, n)
|
148 |
n = 1
|
149 |
elif m is nn.BatchNorm2d:
|
150 |
args = [ch[f]]
|
|
|
170 |
|
171 |
if __name__ == '__main__':
|
172 |
parser = argparse.ArgumentParser()
|
173 |
+
parser.add_argument('--cfg', type=str, default='yolov5s_csp.yaml', help='model.yaml')
|
174 |
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
|
175 |
opt = parser.parse_args()
|
176 |
opt.cfg = glob.glob('./**/' + opt.cfg, recursive=True)[0] # find file
|
models/yolov5s_csp.yaml
DELETED
@@ -1,46 +0,0 @@
|
|
1 |
-
# parameters
|
2 |
-
nc: 80 # number of classes
|
3 |
-
depth_multiple: 0.33 # model depth multiple
|
4 |
-
width_multiple: 0.50 # layer channel multiple
|
5 |
-
|
6 |
-
# anchors
|
7 |
-
anchors:
|
8 |
-
- [10,13, 16,30, 33,23] # P3/8
|
9 |
-
- [30,61, 62,45, 59,119] # P4/16
|
10 |
-
- [116,90, 156,198, 373,326] # P5/32
|
11 |
-
|
12 |
-
# yolov5 backbone
|
13 |
-
backbone:
|
14 |
-
# [from, number, module, args]
|
15 |
-
[[-1, 1, Focus, [64, 3]], # 1-P1/2
|
16 |
-
[-1, 1, Conv, [128, 3, 2]], # 2-P2/4
|
17 |
-
[-1, 3, BottleneckCSP, [128]],
|
18 |
-
[-1, 1, Conv, [256, 3, 2]], # 4-P3/8
|
19 |
-
[-1, 9, BottleneckCSP, [256]],
|
20 |
-
[-1, 1, Conv, [512, 3, 2]], # 6-P4/16
|
21 |
-
[-1, 9, BottleneckCSP, [512]],
|
22 |
-
[-1, 1, Conv, [1024, 3, 2]], # 8-P5/32
|
23 |
-
[-1, 1, SPP, [1024, [5, 9, 13]]],
|
24 |
-
[-1, 3, BottleneckCSP, [1024]], # 10
|
25 |
-
]
|
26 |
-
|
27 |
-
# yolov5 head
|
28 |
-
head:
|
29 |
-
[[-1, 3, Bottleneck, [1024, False]], # 11
|
30 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 12 (P5/32-large)
|
31 |
-
|
32 |
-
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
|
33 |
-
[[-1, 6], 1, Concat, [1]], # cat backbone P4
|
34 |
-
[-1, 1, Conv, [512, 1, 1]],
|
35 |
-
[-1, 3, Bottleneck, [512, False]],
|
36 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 17 (P4/16-medium)
|
37 |
-
|
38 |
-
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
|
39 |
-
[[-1, 4], 1, Concat, [1]], # cat backbone P3
|
40 |
-
[-1, 1, Conv, [256, 1, 1]],
|
41 |
-
[-1, 3, Bottleneck, [256, False]],
|
42 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 22 (P3/8-small)
|
43 |
-
|
44 |
-
[[], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
|
45 |
-
]
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
models/yolov5s_csp1.yaml
DELETED
@@ -1,46 +0,0 @@
|
|
1 |
-
# parameters
|
2 |
-
nc: 80 # number of classes
|
3 |
-
depth_multiple: 0.33 # model depth multiple
|
4 |
-
width_multiple: 0.50 # layer channel multiple
|
5 |
-
|
6 |
-
# anchors
|
7 |
-
anchors:
|
8 |
-
- [10,13, 16,30, 33,23] # P3/8
|
9 |
-
- [30,61, 62,45, 59,119] # P4/16
|
10 |
-
- [116,90, 156,198, 373,326] # P5/32
|
11 |
-
|
12 |
-
# yolov5 backbone
|
13 |
-
backbone:
|
14 |
-
# [from, number, module, args]
|
15 |
-
[[-1, 1, Focus, [64, 3]], # 1-P1/2
|
16 |
-
[-1, 1, Conv, [128, 3, 2]], # 2-P2/4
|
17 |
-
[-1, 3, BottleneckCSP, [128]],
|
18 |
-
[-1, 1, Conv, [256, 3, 2]], # 4-P3/8
|
19 |
-
[-1, 9, BottleneckCSP, [256]],
|
20 |
-
[-1, 1, Conv, [512, 3, 2]], # 6-P4/16
|
21 |
-
[-1, 9, BottleneckCSP, [512]],
|
22 |
-
[-1, 1, Conv, [1024, 3, 2]], # 8-P5/32
|
23 |
-
[-1, 1, SPP, [1024, [5, 9, 13]]],
|
24 |
-
[-1, 6, BottleneckCSP, [1024]], # 10
|
25 |
-
]
|
26 |
-
|
27 |
-
# yolov5 head
|
28 |
-
head:
|
29 |
-
[[-1, 3, Bottleneck, [1024, False]], # 11
|
30 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 12 (P5/32-large)
|
31 |
-
|
32 |
-
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
|
33 |
-
[[-1, 6], 1, Concat, [1]], # cat backbone P4
|
34 |
-
[-1, 1, Conv, [512, 1, 1]],
|
35 |
-
[-1, 3, Bottleneck, [512, False]],
|
36 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 17 (P4/16-medium)
|
37 |
-
|
38 |
-
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
|
39 |
-
[[-1, 4], 1, Concat, [1]], # cat backbone P3
|
40 |
-
[-1, 1, Conv, [256, 1, 1]],
|
41 |
-
[-1, 3, Bottleneck, [256, False]],
|
42 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 22 (P3/8-small)
|
43 |
-
|
44 |
-
[[], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
|
45 |
-
]
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
models/yolov5s_csp2.yaml
DELETED
@@ -1,46 +0,0 @@
|
|
1 |
-
# parameters
|
2 |
-
nc: 80 # number of classes
|
3 |
-
depth_multiple: 0.33 # model depth multiple
|
4 |
-
width_multiple: 0.50 # layer channel multiple
|
5 |
-
|
6 |
-
# anchors
|
7 |
-
anchors:
|
8 |
-
- [10,13, 16,30, 33,23] # P3/8
|
9 |
-
- [30,61, 62,45, 59,119] # P4/16
|
10 |
-
- [116,90, 156,198, 373,326] # P5/32
|
11 |
-
|
12 |
-
# yolov5 backbone
|
13 |
-
backbone:
|
14 |
-
# [from, number, module, args]
|
15 |
-
[[-1, 1, Focus, [64, 3]], # 1-P1/2
|
16 |
-
[-1, 1, Conv, [128, 3, 2]], # 2-P2/4
|
17 |
-
[-1, 3, BottleneckCSP, [128]],
|
18 |
-
[-1, 1, Conv, [256, 3, 2]], # 4-P3/8
|
19 |
-
[-1, 9, BottleneckCSP, [256]],
|
20 |
-
[-1, 1, Conv, [512, 3, 2]], # 6-P4/16
|
21 |
-
[-1, 9, BottleneckCSP, [512]],
|
22 |
-
[-1, 1, Conv, [1024, 3, 2]], # 8-P5/32
|
23 |
-
[-1, 1, SPP, [1024, [5, 9, 13]]],
|
24 |
-
[-1, 6, BottleneckCSP, [1024]], # 10
|
25 |
-
]
|
26 |
-
|
27 |
-
# yolov5 head
|
28 |
-
head:
|
29 |
-
[[-1, 3, BottleneckCSPF, [1024]], # 11
|
30 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 12 (P5/32-large)
|
31 |
-
|
32 |
-
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
|
33 |
-
[[-1, 6], 1, Concat, [1]], # cat backbone P4
|
34 |
-
[-1, 1, Conv, [512, 1, 1]],
|
35 |
-
[-1, 3, BottleneckCSPF, [512]],
|
36 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 17 (P4/16-medium)
|
37 |
-
|
38 |
-
[-2, 1, nn.Upsample, [None, 2, 'nearest']],
|
39 |
-
[[-1, 4], 1, Concat, [1]], # cat backbone P3
|
40 |
-
[-1, 1, Conv, [256, 1, 1]],
|
41 |
-
[-1, 3, BottleneckCSPF, [256]],
|
42 |
-
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 22 (P3/8-small)
|
43 |
-
|
44 |
-
[[], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
|
45 |
-
]
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|