Skip to content

Commit e3242a5

Browse files
authored
Merge pull request #2277 from huggingface/more_tiny_test_models
Adding some more tiny test models to train...
2 parents 305a360 + 9067be6 commit e3242a5

File tree

7 files changed

+140
-12
lines changed

7 files changed

+140
-12
lines changed

timm/models/_efficientnet_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from ._efficientnet_blocks import *
2121
from ._manipulate import named_modules
2222

23-
__all__ = ["EfficientNetBuilder", "decode_arch_def", "efficientnet_init_weights",
23+
__all__ = ["EfficientNetBuilder", "BlockArgs", "decode_arch_def", "efficientnet_init_weights",
2424
'resolve_bn_args', 'resolve_act_layer', 'round_channels', 'BN_MOMENTUM_TF_DEFAULT', 'BN_EPS_TF_DEFAULT']
2525

2626
_logger = logging.getLogger(__name__)

timm/models/byobnet.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2355,7 +2355,7 @@ def _cfgr(url='', **kwargs):
23552355
'test_byobnet.r160_in1k': _cfgr(
23562356
hf_hub_id='timm/',
23572357
first_conv='stem.conv',
2358-
input_size=(3, 160, 160), crop_pct=0.875, pool_size=(5, 5),
2358+
input_size=(3, 160, 160), crop_pct=0.95, pool_size=(5, 5),
23592359
),
23602360
})
23612361

timm/models/convnext.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,20 @@ def _cfgv2(url='', **kwargs):
951951
hf_hub_filename='open_clip_pytorch_model.bin',
952952
mean=OPENAI_CLIP_MEAN, std=OPENAI_CLIP_STD,
953953
input_size=(3, 256, 256), pool_size=(8, 8), crop_pct=1.0, num_classes=1024),
954+
955+
"test_convnext.r160_in1k": _cfg(
956+
hf_hub_id='timm/',
957+
mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5),
958+
input_size=(3, 160, 160), pool_size=(5, 5), crop_pct=0.95),
959+
"test_convnext2.r160_in1k": _cfg(
960+
hf_hub_id='timm/',
961+
mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5),
962+
input_size=(3, 160, 160), pool_size=(5, 5), crop_pct=0.95),
963+
"test_convnext3.r160_in1k": _cfg(
964+
hf_hub_id='timm/',
965+
mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5),
966+
input_size=(3, 160, 160), pool_size=(5, 5), crop_pct=0.95),
967+
954968
})
955969

956970

@@ -1146,6 +1160,29 @@ def convnextv2_huge(pretrained=False, **kwargs) -> ConvNeXt:
11461160
return model
11471161

11481162

1163+
@register_model
1164+
def test_convnext(pretrained=False, **kwargs) -> ConvNeXt:
1165+
model_args = dict(depths=[1, 2, 4, 2], dims=[24, 32, 48, 64], norm_eps=kwargs.pop('norm_eps', 1e-5), act_layer='gelu_tanh')
1166+
model = _create_convnext('test_convnext', pretrained=pretrained, **dict(model_args, **kwargs))
1167+
return model
1168+
1169+
1170+
@register_model
1171+
def test_convnext2(pretrained=False, **kwargs) -> ConvNeXt:
1172+
model_args = dict(depths=[1, 1, 1, 1], dims=[32, 64, 96, 128], norm_eps=kwargs.pop('norm_eps', 1e-5), act_layer='gelu_tanh')
1173+
model = _create_convnext('test_convnext2', pretrained=pretrained, **dict(model_args, **kwargs))
1174+
return model
1175+
1176+
1177+
@register_model
1178+
def test_convnext3(pretrained=False, **kwargs) -> ConvNeXt:
1179+
model_args = dict(
1180+
depths=[1, 1, 1, 1], dims=[32, 64, 96, 128], norm_eps=kwargs.pop('norm_eps', 1e-5), kernel_sizes=(7, 5, 5, 3), act_layer='silu')
1181+
model = _create_convnext('test_convnext3', pretrained=pretrained, **dict(model_args, **kwargs))
1182+
return model
1183+
1184+
1185+
11491186
register_model_deprecations(__name__, {
11501187
'convnext_tiny_in22ft1k': 'convnext_tiny.fb_in22k_ft_in1k',
11511188
'convnext_small_in22ft1k': 'convnext_small.fb_in22k_ft_in1k',

timm/models/efficientnet.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
from torch.utils.checkpoint import checkpoint
4545

4646
from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD, IMAGENET_INCEPTION_MEAN, IMAGENET_INCEPTION_STD
47-
from timm.layers import create_conv2d, create_classifier, get_norm_act_layer, GroupNormAct, LayerType
47+
from timm.layers import create_conv2d, create_classifier, get_norm_act_layer, LayerType, \
48+
GroupNormAct, LayerNormAct2d, EvoNorm2dS0
4849
from ._builder import build_model_with_cfg, pretrained_cfg_for_features
4950
from ._efficientnet_blocks import SqueezeExcite
5051
from ._efficientnet_builder import BlockArgs, EfficientNetBuilder, decode_arch_def, efficientnet_init_weights, \
@@ -1803,7 +1804,18 @@ def _cfg(url='', **kwargs):
18031804

18041805
"test_efficientnet.r160_in1k": _cfg(
18051806
hf_hub_id='timm/',
1806-
input_size=(3, 160, 160), pool_size=(5, 5)),
1807+
input_size=(3, 160, 160), pool_size=(5, 5), crop_pct=0.95),
1808+
"test_efficientnet_ln.r160_in1k": _cfg(
1809+
hf_hub_id='timm/',
1810+
input_size=(3, 160, 160), pool_size=(5, 5), crop_pct=0.95),
1811+
"test_efficientnet_gn.r160_in1k": _cfg(
1812+
hf_hub_id='timm/',
1813+
mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5),
1814+
input_size=(3, 160, 160), pool_size=(5, 5), crop_pct=0.95),
1815+
"test_efficientnet_evos.r160_in1k": _cfg(
1816+
hf_hub_id='timm/',
1817+
mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5),
1818+
input_size=(3, 160, 160), pool_size=(5, 5), crop_pct=0.95),
18071819
})
18081820

18091821

@@ -2792,6 +2804,27 @@ def test_efficientnet(pretrained=False, **kwargs) -> EfficientNet:
27922804
return model
27932805

27942806

2807+
@register_model
2808+
def test_efficientnet_gn(pretrained=False, **kwargs) -> EfficientNet:
2809+
model = _gen_test_efficientnet(
2810+
'test_efficientnet_gn', pretrained=pretrained, norm_layer=partial(GroupNormAct, group_size=8), **kwargs)
2811+
return model
2812+
2813+
2814+
@register_model
2815+
def test_efficientnet_ln(pretrained=False, **kwargs) -> EfficientNet:
2816+
model = _gen_test_efficientnet(
2817+
'test_efficientnet_ln', pretrained=pretrained, norm_layer=LayerNormAct2d, **kwargs)
2818+
return model
2819+
2820+
2821+
@register_model
2822+
def test_efficientnet_evos(pretrained=False, **kwargs) -> EfficientNet:
2823+
model = _gen_test_efficientnet(
2824+
'test_efficientnet_evos', pretrained=pretrained, norm_layer=partial(EvoNorm2dS0, group_size=8), **kwargs)
2825+
return model
2826+
2827+
27952828
register_model_deprecations(__name__, {
27962829
'tf_efficientnet_b0_ap': 'tf_efficientnet_b0.ap_in1k',
27972830
'tf_efficientnet_b1_ap': 'tf_efficientnet_b1.ap_in1k',

timm/models/nfnet.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,10 @@ def _dm_nfnet_cfg(
607607
nf_ecaresnet26=_nfres_cfg(depths=(2, 2, 2, 2), attn_layer='eca', attn_kwargs=dict()),
608608
nf_ecaresnet50=_nfres_cfg(depths=(3, 4, 6, 3), attn_layer='eca', attn_kwargs=dict()),
609609
nf_ecaresnet101=_nfres_cfg(depths=(3, 4, 23, 3), attn_layer='eca', attn_kwargs=dict()),
610+
611+
test_nfnet=_nfnet_cfg(
612+
depths=(1, 1, 1, 1), channels=(32, 64, 96, 128), feat_mult=1.5, group_size=8, bottle_ratio=0.25,
613+
attn_kwargs=dict(rd_ratio=0.25, rd_divisor=8), act_layer='silu'),
610614
)
611615

612616

@@ -730,6 +734,11 @@ def _dcfg(url='', **kwargs):
730734
'nf_ecaresnet26': _dcfg(url='', first_conv='stem.conv'),
731735
'nf_ecaresnet50': _dcfg(url='', first_conv='stem.conv'),
732736
'nf_ecaresnet101': _dcfg(url='', first_conv='stem.conv'),
737+
738+
'test_nfnet.r160_in1k': _dcfg(
739+
hf_hub_id='timm/',
740+
mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5),
741+
crop_pct=0.95, input_size=(3, 160, 160), pool_size=(5, 5)),
733742
})
734743

735744

@@ -1029,3 +1038,8 @@ def nf_ecaresnet101(pretrained=False, **kwargs) -> NormFreeNet:
10291038
""" Normalization-Free ECA-ResNet101
10301039
"""
10311040
return _create_normfreenet('nf_ecaresnet101', pretrained=pretrained, **kwargs)
1041+
1042+
1043+
@register_model
1044+
def test_nfnet(pretrained=False, **kwargs) -> NormFreeNet:
1045+
return _create_normfreenet('test_nfnet', pretrained=pretrained, **kwargs)

timm/models/resnet.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
import torch.nn.functional as F
1717

1818
from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD
19-
from timm.layers import DropBlock2d, DropPath, AvgPool2dSame, BlurPool2d, GroupNorm, LayerType, create_attn, \
20-
get_attn, get_act_layer, get_norm_layer, create_classifier, create_aa
19+
from timm.layers import DropBlock2d, DropPath, AvgPool2dSame, BlurPool2d, LayerType, create_attn, \
20+
get_attn, get_act_layer, get_norm_layer, create_classifier, create_aa, to_ntuple
2121
from ._builder import build_model_with_cfg
2222
from ._features import feature_take_indices
2323
from ._manipulate import checkpoint_seq
@@ -286,7 +286,7 @@ def drop_blocks(drop_prob: float = 0.):
286286

287287

288288
def make_blocks(
289-
block_fn: Union[BasicBlock, Bottleneck],
289+
block_fns: Tuple[Union[BasicBlock, Bottleneck]],
290290
channels: Tuple[int, ...],
291291
block_repeats: Tuple[int, ...],
292292
inplanes: int,
@@ -304,7 +304,7 @@ def make_blocks(
304304
net_block_idx = 0
305305
net_stride = 4
306306
dilation = prev_dilation = 1
307-
for stage_idx, (planes, num_blocks, db) in enumerate(zip(channels, block_repeats, drop_blocks(drop_block_rate))):
307+
for stage_idx, (block_fn, planes, num_blocks, db) in enumerate(zip(block_fns, channels, block_repeats, drop_blocks(drop_block_rate))):
308308
stage_name = f'layer{stage_idx + 1}' # never liked this name, but weight compat requires it
309309
stride = 1 if stage_idx == 0 else 2
310310
if net_stride >= output_stride:
@@ -490,8 +490,9 @@ def __init__(
490490
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
491491

492492
# Feature Blocks
493+
block_fns = to_ntuple(len(channels))(block)
493494
stage_modules, stage_feature_info = make_blocks(
494-
block,
495+
block_fns,
495496
channels,
496497
layers,
497498
inplanes,
@@ -513,7 +514,7 @@ def __init__(
513514
self.feature_info.extend(stage_feature_info)
514515

515516
# Head (Pooling and Classifier)
516-
self.num_features = self.head_hidden_size = channels[-1] * block.expansion
517+
self.num_features = self.head_hidden_size = channels[-1] * block_fns[-1].expansion
517518
self.global_pool, self.fc = create_classifier(self.num_features, self.num_classes, pool_type=global_pool)
518519

519520
self.init_weights(zero_init_last=zero_init_last)
@@ -1301,6 +1302,11 @@ def _gcfg(url='', **kwargs):
13011302
hf_hub_id='timm/',
13021303
url='https://github.com/rwightman/pytorch-pretrained-gluonresnet/releases/download/v0.1/gluon_senet154-70a1a3c0.pth',
13031304
first_conv='conv1.0'),
1305+
1306+
'test_resnet.r160_in1k': _cfg(
1307+
hf_hub_id='timm/',
1308+
mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), crop_pct=0.95,
1309+
input_size=(3, 160, 160), pool_size=(5, 5), first_conv='conv1.0'),
13041310
})
13051311

13061312

@@ -2040,6 +2046,16 @@ def resnetrs420(pretrained: bool = False, **kwargs) -> ResNet:
20402046
return _create_resnet('resnetrs420', pretrained, **dict(model_args, **kwargs))
20412047

20422048

2049+
@register_model
2050+
def test_resnet(pretrained: bool = False, **kwargs) -> ResNet:
2051+
"""Constructs a tiny ResNet test model.
2052+
"""
2053+
model_args = dict(
2054+
block=[BasicBlock, BasicBlock, Bottleneck, BasicBlock], layers=(1, 1, 1, 1),
2055+
stem_width=16, stem_type='deep', avg_down=True, channels=(32, 48, 48, 96))
2056+
return _create_resnet('test_resnet', pretrained, **dict(model_args, **kwargs))
2057+
2058+
20432059
register_model_deprecations(__name__, {
20442060
'tv_resnet34': 'resnet34.tv_in1k',
20452061
'tv_resnet50': 'resnet50.tv_in1k',

timm/models/vision_transformer.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2014,7 +2014,13 @@ def _cfg(url: str = '', **kwargs) -> Dict[str, Any]:
20142014

20152015
'test_vit.r160_in1k': _cfg(
20162016
hf_hub_id='timm/',
2017-
input_size=(3, 160, 160), crop_pct=0.875),
2017+
input_size=(3, 160, 160), crop_pct=0.95),
2018+
'test_vit2.r160_in1k': _cfg(
2019+
hf_hub_id='timm/',
2020+
input_size=(3, 160, 160), crop_pct=0.95),
2021+
'test_vit3.r160_in1k': _cfg(
2022+
#hf_hub_id='timm/',
2023+
input_size=(3, 160, 160), crop_pct=0.95),
20182024
}
20192025

20202026
_quick_gelu_cfgs = [
@@ -3211,11 +3217,33 @@ def vit_so150m_patch16_reg4_gap_256(pretrained: bool = False, **kwargs) -> Visio
32113217
def test_vit(pretrained: bool = False, **kwargs) -> VisionTransformer:
32123218
""" ViT Test
32133219
"""
3214-
model_args = dict(patch_size=16, embed_dim=64, depth=6, num_heads=2, mlp_ratio=3)
3220+
model_args = dict(patch_size=16, embed_dim=64, depth=6, num_heads=2, mlp_ratio=3, dynamic_img_size=True)
32153221
model = _create_vision_transformer('test_vit', pretrained=pretrained, **dict(model_args, **kwargs))
32163222
return model
32173223

32183224

3225+
@register_model
3226+
def test_vit2(pretrained: bool = False, **kwargs) -> VisionTransformer:
3227+
""" ViT Test
3228+
"""
3229+
model_args = dict(
3230+
patch_size=16, embed_dim=64, depth=8, num_heads=2, mlp_ratio=3,
3231+
class_token=False, reg_tokens=1, global_pool='avg', init_values=1e-5, dynamic_img_size=True)
3232+
model = _create_vision_transformer('test_vit2', pretrained=pretrained, **dict(model_args, **kwargs))
3233+
return model
3234+
3235+
3236+
@register_model
3237+
def test_vit3(pretrained: bool = False, **kwargs) -> VisionTransformer:
3238+
""" ViT Test
3239+
"""
3240+
model_args = dict(
3241+
patch_size=16, embed_dim=96, depth=10, num_heads=3, mlp_ratio=2,
3242+
class_token=False, reg_tokens=1, global_pool='map', init_values=1e-5)
3243+
model = _create_vision_transformer('test_vit3', pretrained=pretrained, **dict(model_args, **kwargs))
3244+
return model
3245+
3246+
32193247
register_model_deprecations(__name__, {
32203248
'vit_tiny_patch16_224_in21k': 'vit_tiny_patch16_224.augreg_in21k',
32213249
'vit_small_patch32_224_in21k': 'vit_small_patch32_224.augreg_in21k',

0 commit comments

Comments
 (0)