Add more small model defs for MobileNetV3/V2/LCNet
parent
b27c21b09a
commit
b9a715c86a
|
@ -79,6 +79,12 @@ default_cfgs = {
|
||||||
'semnasnet_140': _cfg(url=''),
|
'semnasnet_140': _cfg(url=''),
|
||||||
'mnasnet_small': _cfg(url=''),
|
'mnasnet_small': _cfg(url=''),
|
||||||
|
|
||||||
|
'mobilenetv2_035': _cfg(
|
||||||
|
url=''),
|
||||||
|
'mobilenetv2_050': _cfg(
|
||||||
|
url=''),
|
||||||
|
'mobilenetv2_075': _cfg(
|
||||||
|
url=''),
|
||||||
'mobilenetv2_100': _cfg(
|
'mobilenetv2_100': _cfg(
|
||||||
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_100_ra-b33bc2c4.pth'),
|
url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_100_ra-b33bc2c4.pth'),
|
||||||
'mobilenetv2_110d': _cfg(
|
'mobilenetv2_110d': _cfg(
|
||||||
|
@ -440,6 +446,7 @@ class EfficientNet(nn.Module):
|
||||||
* EfficientNet-CondConv
|
* EfficientNet-CondConv
|
||||||
* MixNet S, M, L, XL
|
* MixNet S, M, L, XL
|
||||||
* MnasNet A1, B1, and small
|
* MnasNet A1, B1, and small
|
||||||
|
* MobileNet-V2
|
||||||
* FBNet C
|
* FBNet C
|
||||||
* Single-Path NAS Pixel1
|
* Single-Path NAS Pixel1
|
||||||
|
|
||||||
|
@ -1260,6 +1267,27 @@ def mnasnet_small(pretrained=False, **kwargs):
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def mobilenetv2_035(pretrained=False, **kwargs):
|
||||||
|
""" MobileNet V2 w/ 0.35 channel multiplier """
|
||||||
|
model = _gen_mobilenet_v2('mobilenetv2_035', 0.35, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def mobilenetv2_050(pretrained=False, **kwargs):
|
||||||
|
""" MobileNet V2 w/ 0.5 channel multiplier """
|
||||||
|
model = _gen_mobilenet_v2('mobilenetv2_050', 0.5, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def mobilenetv2_075(pretrained=False, **kwargs):
|
||||||
|
""" MobileNet V2 w/ 0.75 channel multiplier """
|
||||||
|
model = _gen_mobilenet_v2('mobilenetv2_075', 0.75, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
@register_model
|
@register_model
|
||||||
def mobilenetv2_100(pretrained=False, **kwargs):
|
def mobilenetv2_100(pretrained=False, **kwargs):
|
||||||
""" MobileNet V2 w/ 1.0 channel multiplier """
|
""" MobileNet V2 w/ 1.0 channel multiplier """
|
||||||
|
|
|
@ -47,6 +47,8 @@ default_cfgs = {
|
||||||
'mobilenetv3_large_100_miil_in21k': _cfg(
|
'mobilenetv3_large_100_miil_in21k': _cfg(
|
||||||
interpolation='bilinear', mean=(0, 0, 0), std=(1, 1, 1),
|
interpolation='bilinear', mean=(0, 0, 0), std=(1, 1, 1),
|
||||||
url='https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/timm/mobilenetv3_large_100_in21k_miil.pth', num_classes=11221),
|
url='https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/timm/mobilenetv3_large_100_in21k_miil.pth', num_classes=11221),
|
||||||
|
|
||||||
|
'mobilenetv3_small_050': _cfg(url=''),
|
||||||
'mobilenetv3_small_075': _cfg(url=''),
|
'mobilenetv3_small_075': _cfg(url=''),
|
||||||
'mobilenetv3_small_100': _cfg(url=''),
|
'mobilenetv3_small_100': _cfg(url=''),
|
||||||
|
|
||||||
|
@ -76,6 +78,12 @@ default_cfgs = {
|
||||||
'fbnetv3_b': _cfg(),
|
'fbnetv3_b': _cfg(),
|
||||||
'fbnetv3_d': _cfg(),
|
'fbnetv3_d': _cfg(),
|
||||||
'fbnetv3_g': _cfg(),
|
'fbnetv3_g': _cfg(),
|
||||||
|
|
||||||
|
"lcnet_035": _cfg(),
|
||||||
|
"lcnet_050": _cfg(),
|
||||||
|
"lcnet_075": _cfg(),
|
||||||
|
"lcnet_100": _cfg(),
|
||||||
|
"lcnet_150": _cfg(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,7 +94,12 @@ class MobileNetV3(nn.Module):
|
||||||
'efficient head', where global pooling is done before the head convolution without a final batch-norm
|
'efficient head', where global pooling is done before the head convolution without a final batch-norm
|
||||||
layer before the classifier.
|
layer before the classifier.
|
||||||
|
|
||||||
Paper: https://arxiv.org/abs/1905.02244
|
Paper: `Searching for MobileNetV3` - https://arxiv.org/abs/1905.02244
|
||||||
|
|
||||||
|
Other architectures utilizing MobileNet-V3 efficient head that are supported by this impl include:
|
||||||
|
* HardCoRe-NAS - https://arxiv.org/abs/2102.11646 (defn in hardcorenas.py uses this class)
|
||||||
|
* FBNet-V3 - https://arxiv.org/abs/2006.02049
|
||||||
|
* LCNet - https://arxiv.org/abs/2109.15099
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, block_args, num_classes=1000, in_chans=3, stem_size=16, num_features=1280, head_bias=True,
|
def __init__(self, block_args, num_classes=1000, in_chans=3, stem_size=16, num_features=1280, head_bias=True,
|
||||||
|
@ -431,6 +444,44 @@ def _gen_fbnetv3(variant, channel_multiplier=1.0, pretrained=False, **kwargs):
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
def _gen_lcnet(variant, channel_multiplier=1.0, pretrained=False, **kwargs):
|
||||||
|
""" LCNet
|
||||||
|
Essentially a MobileNet-V3 crossed with a MobileNet-V1
|
||||||
|
|
||||||
|
Paper: `PP-LCNet: A Lightweight CPU Convolutional Neural Network` - https://arxiv.org/abs/2109.15099
|
||||||
|
|
||||||
|
Args:
|
||||||
|
channel_multiplier: multiplier to number of channels per layer.
|
||||||
|
"""
|
||||||
|
arch_def = [
|
||||||
|
# stage 0, 112x112 in
|
||||||
|
['dsa_r1_k3_s1_c32'],
|
||||||
|
# stage 1, 112x112 in
|
||||||
|
['dsa_r2_k3_s2_c64'],
|
||||||
|
# stage 2, 56x56 in
|
||||||
|
['dsa_r2_k3_s2_c128'],
|
||||||
|
# stage 3, 28x28 in
|
||||||
|
['dsa_r1_k3_s2_c256', 'dsa_r1_k5_s1_c256'],
|
||||||
|
# stage 4, 14x14in
|
||||||
|
['dsa_r4_k5_s1_c256'],
|
||||||
|
# stage 5, 14x14in
|
||||||
|
['dsa_r2_k5_s2_c512_se0.25'],
|
||||||
|
# 7x7
|
||||||
|
]
|
||||||
|
model_kwargs = dict(
|
||||||
|
block_args=decode_arch_def(arch_def),
|
||||||
|
stem_size=16,
|
||||||
|
round_chs_fn=partial(round_channels, multiplier=channel_multiplier),
|
||||||
|
norm_layer=partial(nn.BatchNorm2d, **resolve_bn_args(kwargs)),
|
||||||
|
act_layer=resolve_act_layer(kwargs, 'hard_swish'),
|
||||||
|
se_layer=partial(SqueezeExcite, gate_layer='hard_sigmoid', force_act_layer=nn.ReLU),
|
||||||
|
num_features=1280,
|
||||||
|
**kwargs,
|
||||||
|
)
|
||||||
|
model = _create_mnv3(variant, pretrained, **model_kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
@register_model
|
@register_model
|
||||||
def mobilenetv3_large_075(pretrained=False, **kwargs):
|
def mobilenetv3_large_075(pretrained=False, **kwargs):
|
||||||
""" MobileNet V3 """
|
""" MobileNet V3 """
|
||||||
|
@ -463,6 +514,13 @@ def mobilenetv3_large_100_miil_in21k(pretrained=False, **kwargs):
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def mobilenetv3_small_050(pretrained=False, **kwargs):
|
||||||
|
""" MobileNet V3 """
|
||||||
|
model = _gen_mobilenet_v3('mobilenetv3_small_050', 0.50, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
@register_model
|
@register_model
|
||||||
def mobilenetv3_small_075(pretrained=False, **kwargs):
|
def mobilenetv3_small_075(pretrained=False, **kwargs):
|
||||||
""" MobileNet V3 """
|
""" MobileNet V3 """
|
||||||
|
@ -560,3 +618,38 @@ def fbnetv3_g(pretrained=False, **kwargs):
|
||||||
""" FBNetV3-G """
|
""" FBNetV3-G """
|
||||||
model = _gen_fbnetv3('fbnetv3_g', pretrained=pretrained, **kwargs)
|
model = _gen_fbnetv3('fbnetv3_g', pretrained=pretrained, **kwargs)
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def lcnet_035(pretrained=False, **kwargs):
|
||||||
|
""" PP-LCNet 0.35"""
|
||||||
|
model = _gen_lcnet('lcnet_035', 0.35, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def lcnet_050(pretrained=False, **kwargs):
|
||||||
|
""" PP-LCNet 0.5"""
|
||||||
|
model = _gen_lcnet('lcnet_050', 0.5, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def lcnet_075(pretrained=False, **kwargs):
|
||||||
|
""" PP-LCNet 1.0"""
|
||||||
|
model = _gen_lcnet('lcnet_075', 0.75, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def lcnet_100(pretrained=False, **kwargs):
|
||||||
|
""" PP-LCNet 1.0"""
|
||||||
|
model = _gen_lcnet('lcnet_100', 1.0, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
@register_model
|
||||||
|
def lcnet_150(pretrained=False, **kwargs):
|
||||||
|
""" PP-LCNet 1.5"""
|
||||||
|
model = _gen_lcnet('lcnet_150', 1.5, pretrained=pretrained, **kwargs)
|
||||||
|
return model
|
||||||
|
|
Loading…
Reference in New Issue