@@ -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+
290429def 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
715863def 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