glenn-jocher commited on
Commit
1b97392
1 Parent(s): a88cdd2
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, BottleneckCSPF, BottleneckLight]:
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 in [BottleneckCSP, BottleneckCSPF]:
147
- args += [n]
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='yolov5s.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
 
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
-