Skip to content

Commit 02f9d4b

Browse files
committed
Add weights for resnet51q model, add 61q def.
1 parent f615474 commit 02f9d4b

File tree

1 file changed

+155
-116
lines changed

1 file changed

+155
-116
lines changed

timm/models/byobnet.py

Lines changed: 155 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,16 @@ def _cfg(url='', **kwargs):
8888
first_conv=('stem.conv_kxk.conv', 'stem.conv_1x1.conv')),
8989

9090
# experimental configs
91-
'resnet52qs': _cfg(first_conv='stem.conv1.conv'),
92-
'geresnet50t': _cfg(first_conv='stem.conv1.conv'),
93-
'gcresnet50t': _cfg(first_conv='stem.conv1.conv'),
91+
'resnet51q': _cfg(
92+
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/resnet51q_ra2-d47dcc76.pth',
93+
first_conv='stem.conv1.conv', input_size=(3, 256, 256), pool_size=(8, 8),
94+
test_input_size=(3, 288, 288), crop_pct=1.0),
95+
'resnet61q': _cfg(
96+
first_conv='stem.conv1.conv', input_size=(3, 256, 256), pool_size=(8, 8), interpolation='bicubic'),
97+
'geresnet50t': _cfg(
98+
first_conv='stem.conv1.conv', input_size=(3, 256, 256), pool_size=(8, 8), interpolation='bicubic'),
99+
'gcresnet50t': _cfg(
100+
first_conv='stem.conv1.conv', input_size=(3, 256, 256), pool_size=(8, 8), interpolation='bicubic'),
94101
}
95102

96103

@@ -241,17 +248,33 @@ def interleave_blocks(
241248
),
242249

243250
# WARN: experimental, may vanish/change
244-
resnet52q=ByoModelCfg(
251+
resnet51q=ByoModelCfg(
245252
blocks=(
246253
ByoBlockCfg(type='bottle', d=2, c=256, s=1, gs=32, br=0.25),
247254
ByoBlockCfg(type='bottle', d=4, c=512, s=2, gs=32, br=0.25),
248255
ByoBlockCfg(type='bottle', d=6, c=1536, s=2, gs=32, br=0.25),
249256
ByoBlockCfg(type='bottle', d=4, c=1536, s=2, gs=1, br=1.0),
250257
),
251258
stem_chs=128,
259+
stem_type='quad2',
260+
stem_pool=None,
261+
num_features=2048,
262+
act_layer='silu',
263+
),
264+
265+
resnet61q=ByoModelCfg(
266+
blocks=(
267+
ByoBlockCfg(type='edge', d=1, c=256, s=1, gs=0, br=1.0, block_kwargs=dict()),
268+
ByoBlockCfg(type='bottle', d=4, c=512, s=2, gs=32, br=0.25),
269+
ByoBlockCfg(type='bottle', d=6, c=1536, s=2, gs=32, br=0.25),
270+
ByoBlockCfg(type='bottle', d=4, c=1536, s=2, gs=1, br=1.0),
271+
),
272+
stem_chs=128,
252273
stem_type='quad',
274+
stem_pool=None,
253275
num_features=2048,
254276
act_layer='silu',
277+
block_kwargs=dict(extra_conv=True),
255278
),
256279

257280
# WARN: experimental, may vanish/change
@@ -287,6 +310,122 @@ def interleave_blocks(
287310
)
288311

289312

313+
@register_model
314+
def gernet_l(pretrained=False, **kwargs):
315+
""" GEResNet-Large (GENet-Large from official impl)
316+
`Neural Architecture Design for GPU-Efficient Networks` - https://arxiv.org/abs/2006.14090
317+
"""
318+
return _create_byobnet('gernet_l', pretrained=pretrained, **kwargs)
319+
320+
321+
@register_model
322+
def gernet_m(pretrained=False, **kwargs):
323+
""" GEResNet-Medium (GENet-Normal from official impl)
324+
`Neural Architecture Design for GPU-Efficient Networks` - https://arxiv.org/abs/2006.14090
325+
"""
326+
return _create_byobnet('gernet_m', pretrained=pretrained, **kwargs)
327+
328+
329+
@register_model
330+
def gernet_s(pretrained=False, **kwargs):
331+
""" EResNet-Small (GENet-Small from official impl)
332+
`Neural Architecture Design for GPU-Efficient Networks` - https://arxiv.org/abs/2006.14090
333+
"""
334+
return _create_byobnet('gernet_s', pretrained=pretrained, **kwargs)
335+
336+
337+
@register_model
338+
def repvgg_a2(pretrained=False, **kwargs):
339+
""" RepVGG-A2
340+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
341+
"""
342+
return _create_byobnet('repvgg_a2', pretrained=pretrained, **kwargs)
343+
344+
345+
@register_model
346+
def repvgg_b0(pretrained=False, **kwargs):
347+
""" RepVGG-B0
348+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
349+
"""
350+
return _create_byobnet('repvgg_b0', pretrained=pretrained, **kwargs)
351+
352+
353+
@register_model
354+
def repvgg_b1(pretrained=False, **kwargs):
355+
""" RepVGG-B1
356+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
357+
"""
358+
return _create_byobnet('repvgg_b1', pretrained=pretrained, **kwargs)
359+
360+
361+
@register_model
362+
def repvgg_b1g4(pretrained=False, **kwargs):
363+
""" RepVGG-B1g4
364+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
365+
"""
366+
return _create_byobnet('repvgg_b1g4', pretrained=pretrained, **kwargs)
367+
368+
369+
@register_model
370+
def repvgg_b2(pretrained=False, **kwargs):
371+
""" RepVGG-B2
372+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
373+
"""
374+
return _create_byobnet('repvgg_b2', pretrained=pretrained, **kwargs)
375+
376+
377+
@register_model
378+
def repvgg_b2g4(pretrained=False, **kwargs):
379+
""" RepVGG-B2g4
380+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
381+
"""
382+
return _create_byobnet('repvgg_b2g4', pretrained=pretrained, **kwargs)
383+
384+
385+
@register_model
386+
def repvgg_b3(pretrained=False, **kwargs):
387+
""" RepVGG-B3
388+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
389+
"""
390+
return _create_byobnet('repvgg_b3', pretrained=pretrained, **kwargs)
391+
392+
393+
@register_model
394+
def repvgg_b3g4(pretrained=False, **kwargs):
395+
""" RepVGG-B3g4
396+
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
397+
"""
398+
return _create_byobnet('repvgg_b3g4', pretrained=pretrained, **kwargs)
399+
400+
401+
@register_model
402+
def resnet51q(pretrained=False, **kwargs):
403+
"""
404+
"""
405+
return _create_byobnet('resnet51q', pretrained=pretrained, **kwargs)
406+
407+
408+
@register_model
409+
def resnet61q(pretrained=False, **kwargs):
410+
"""
411+
"""
412+
return _create_byobnet('resnet61q', pretrained=pretrained, **kwargs)
413+
414+
415+
@register_model
416+
def geresnet50t(pretrained=False, **kwargs):
417+
"""
418+
"""
419+
return _create_byobnet('geresnet50t', pretrained=pretrained, **kwargs)
420+
421+
422+
@register_model
423+
def gcresnet50t(pretrained=False, **kwargs):
424+
"""
425+
"""
426+
return _create_byobnet('gcresnet50t', pretrained=pretrained, **kwargs)
427+
428+
290429
def expand_blocks_cfg(stage_blocks_cfg: Union[ByoBlockCfg, Sequence[ByoBlockCfg]]) -> List[ByoBlockCfg]:
291430
if not isinstance(stage_blocks_cfg, Sequence):
292431
stage_blocks_cfg = (stage_blocks_cfg,)
@@ -391,8 +530,8 @@ class BottleneckBlock(nn.Module):
391530
"""
392531

393532
def __init__(self, in_chs, out_chs, kernel_size=3, stride=1, dilation=(1, 1), bottle_ratio=1., group_size=None,
394-
downsample='avg', attn_last=False, linear_out=False, layers: LayerFn = None, drop_block=None,
395-
drop_path_rate=0.):
533+
downsample='avg', attn_last=False, linear_out=False, extra_conv=False, layers: LayerFn = None,
534+
drop_block=None, drop_path_rate=0.):
396535
super(BottleneckBlock, self).__init__()
397536
layers = layers or LayerFn()
398537
mid_chs = make_divisible(out_chs * bottle_ratio)
@@ -409,6 +548,14 @@ def __init__(self, in_chs, out_chs, kernel_size=3, stride=1, dilation=(1, 1), bo
409548
self.conv2_kxk = layers.conv_norm_act(
410549
mid_chs, mid_chs, kernel_size, stride=stride, dilation=dilation[0],
411550
groups=groups, drop_block=drop_block)
551+
self.conv2_kxk = layers.conv_norm_act(
552+
mid_chs, mid_chs, kernel_size, stride=stride, dilation=dilation[0],
553+
groups=groups, drop_block=drop_block)
554+
if extra_conv:
555+
self.conv2b_kxk = layers.conv_norm_act(
556+
mid_chs, mid_chs, kernel_size, dilation=dilation[1], groups=groups, drop_block=drop_block)
557+
else:
558+
self.conv2b_kxk = nn.Identity()
412559
self.attn = nn.Identity() if attn_last or layers.attn is None else layers.attn(mid_chs)
413560
self.conv3_1x1 = layers.conv_norm_act(mid_chs, out_chs, 1, apply_act=False)
414561
self.attn_last = nn.Identity() if not attn_last or layers.attn is None else layers.attn(out_chs)
@@ -427,6 +574,7 @@ def forward(self, x):
427574

428575
x = self.conv1_1x1(x)
429576
x = self.conv2_kxk(x)
577+
x = self.conv2b_kxk(x)
430578
x = self.attn(x)
431579
x = self.conv3_1x1(x)
432580
x = self.attn_last(x)
@@ -714,7 +862,7 @@ def __init__(self, in_chs, out_chs, kernel_size=3, stride=4, pool='maxpool',
714862

715863
def create_byob_stem(in_chs, out_chs, stem_type='', pool_type='', feat_prefix='stem', layers: LayerFn = None):
716864
layers = layers or LayerFn()
717-
assert stem_type in ('', 'quad', 'tiered', 'deep', 'rep', '7x7', '3x3')
865+
assert stem_type in ('', 'quad', 'quad2', 'tiered', 'deep', 'rep', '7x7', '3x3')
718866
if 'quad' in stem_type:
719867
# based on NFNet stem, stack of 4 3x3 convs
720868
num_act = 2 if 'quad2' in stem_type else None
@@ -955,112 +1103,3 @@ def _create_byobnet(variant, pretrained=False, **kwargs):
9551103
model_cfg=model_cfgs[variant],
9561104
feature_cfg=dict(flatten_sequential=True),
9571105
**kwargs)
958-
959-
960-
@register_model
961-
def gernet_l(pretrained=False, **kwargs):
962-
""" GEResNet-Large (GENet-Large from official impl)
963-
`Neural Architecture Design for GPU-Efficient Networks` - https://arxiv.org/abs/2006.14090
964-
"""
965-
return _create_byobnet('gernet_l', pretrained=pretrained, **kwargs)
966-
967-
968-
@register_model
969-
def gernet_m(pretrained=False, **kwargs):
970-
""" GEResNet-Medium (GENet-Normal from official impl)
971-
`Neural Architecture Design for GPU-Efficient Networks` - https://arxiv.org/abs/2006.14090
972-
"""
973-
return _create_byobnet('gernet_m', pretrained=pretrained, **kwargs)
974-
975-
976-
@register_model
977-
def gernet_s(pretrained=False, **kwargs):
978-
""" EResNet-Small (GENet-Small from official impl)
979-
`Neural Architecture Design for GPU-Efficient Networks` - https://arxiv.org/abs/2006.14090
980-
"""
981-
return _create_byobnet('gernet_s', pretrained=pretrained, **kwargs)
982-
983-
984-
@register_model
985-
def repvgg_a2(pretrained=False, **kwargs):
986-
""" RepVGG-A2
987-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
988-
"""
989-
return _create_byobnet('repvgg_a2', pretrained=pretrained, **kwargs)
990-
991-
992-
@register_model
993-
def repvgg_b0(pretrained=False, **kwargs):
994-
""" RepVGG-B0
995-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
996-
"""
997-
return _create_byobnet('repvgg_b0', pretrained=pretrained, **kwargs)
998-
999-
1000-
@register_model
1001-
def repvgg_b1(pretrained=False, **kwargs):
1002-
""" RepVGG-B1
1003-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
1004-
"""
1005-
return _create_byobnet('repvgg_b1', pretrained=pretrained, **kwargs)
1006-
1007-
1008-
@register_model
1009-
def repvgg_b1g4(pretrained=False, **kwargs):
1010-
""" RepVGG-B1g4
1011-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
1012-
"""
1013-
return _create_byobnet('repvgg_b1g4', pretrained=pretrained, **kwargs)
1014-
1015-
1016-
@register_model
1017-
def repvgg_b2(pretrained=False, **kwargs):
1018-
""" RepVGG-B2
1019-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
1020-
"""
1021-
return _create_byobnet('repvgg_b2', pretrained=pretrained, **kwargs)
1022-
1023-
1024-
@register_model
1025-
def repvgg_b2g4(pretrained=False, **kwargs):
1026-
""" RepVGG-B2g4
1027-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
1028-
"""
1029-
return _create_byobnet('repvgg_b2g4', pretrained=pretrained, **kwargs)
1030-
1031-
1032-
@register_model
1033-
def repvgg_b3(pretrained=False, **kwargs):
1034-
""" RepVGG-B3
1035-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
1036-
"""
1037-
return _create_byobnet('repvgg_b3', pretrained=pretrained, **kwargs)
1038-
1039-
1040-
@register_model
1041-
def repvgg_b3g4(pretrained=False, **kwargs):
1042-
""" RepVGG-B3g4
1043-
`Making VGG-style ConvNets Great Again` - https://arxiv.org/abs/2101.03697
1044-
"""
1045-
return _create_byobnet('repvgg_b3g4', pretrained=pretrained, **kwargs)
1046-
1047-
1048-
@register_model
1049-
def resnet52q(pretrained=False, **kwargs):
1050-
"""
1051-
"""
1052-
return _create_byobnet('geresnet50t', pretrained=pretrained, **kwargs)
1053-
1054-
1055-
@register_model
1056-
def geresnet50t(pretrained=False, **kwargs):
1057-
"""
1058-
"""
1059-
return _create_byobnet('geresnet50t', pretrained=pretrained, **kwargs)
1060-
1061-
1062-
@register_model
1063-
def gcresnet50t(pretrained=False, **kwargs):
1064-
"""
1065-
"""
1066-
return _create_byobnet('gcresnet50t', pretrained=pretrained, **kwargs)

0 commit comments

Comments
 (0)