@@ -66,7 +66,8 @@ def _make_stem(self):
66
66
bn_layer = (not self .stem_bn_end ) if i == (len (self .stem_sizes ) - 2 ) else True ,
67
67
act_fn = self .act_fn , bn_1st = self .bn_1st ))
68
68
for i in range (len (self .stem_sizes ) - 1 )]
69
- stem .append (('stem_pool' , self .stem_pool ))
69
+ if self .stem_pool is not None :
70
+ stem .append (('stem_pool' , self .stem_pool ))
70
71
if self .stem_bn_end :
71
72
stem .append (('norm' , self .norm (self .stem_sizes [- 1 ])))
72
73
return nn .Sequential (OrderedDict (stem ))
@@ -84,9 +85,10 @@ def _make_layer(self, expansion, ni, nf, blocks, stride, sa):
84
85
85
86
86
87
def _make_body (self ):
88
+ stride = 2 if self .stem_pool is None else 1 # if no pool on stem - stride = 2 for first block in body
87
89
blocks = [(f"l_{ i } " , self ._make_layer (self , self .expansion ,
88
90
ni = self .block_sizes [i ], nf = self .block_sizes [i + 1 ],
89
- blocks = l , stride = 1 if i == 0 else 2 ,
91
+ blocks = l , stride = stride if i == 0 else 2 ,
90
92
sa = self .sa if i == 0 else False ))
91
93
for i , l in enumerate (self .layers )]
92
94
return nn .Sequential (OrderedDict (blocks ))
@@ -114,7 +116,7 @@ def __init__(self, name='MC', c_in=3, c_out=1000,
114
116
zero_bn = True ,
115
117
stem_stride_on = 0 ,
116
118
stem_sizes = [32 , 32 , 64 ],
117
- stem_pool = nn .MaxPool2d (kernel_size = 3 , stride = 2 , padding = 1 ),
119
+ stem_pool = nn .MaxPool2d (kernel_size = 3 , stride = 2 , padding = 1 ), # if stem_pool is None - no pool at stem
118
120
stem_bn_end = False ,
119
121
_init_cnn = init_cnn ,
120
122
_make_stem = _make_stem ,
@@ -128,6 +130,8 @@ def __init__(self, name='MC', c_in=3, c_out=1000,
128
130
del params ['self' ]
129
131
self .__dict__ = params
130
132
self ._block_sizes = params ['block_sizes' ]
133
+ if type (self .stem_pool ) is str : # Hydra pass string value
134
+ self .stem_pool = None
131
135
if self .stem_sizes [0 ] != self .c_in :
132
136
self .stem_sizes = [self .c_in ] + self .stem_sizes
133
137
0 commit comments