
    ^j                    "   d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlmc mZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZ dd	l m!Z! dd
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddgZ6 G d dejn                        Z8 G d dejn                        Z9ddZ:ddZ;ddZ<ddZ=	 	 ddZ>	 	 ddZ?ddZ@ddZA	 	 ddZB	 ddZC	 ddZDddZE	 ddZF	 dd ZG	 dd!ZH	 dd"ZI	 dd#ZJ	 	 dd$ZKdd%ZLdd&ZMdd'ZNdd(ZOdd)ZPd d+ZQ e3i d, eQ       d- eQ       d. eQd/d01      d2 eQ       d3 eQ       d4 eQd5d01      d6 eQd7d01      d8 eQ       d9 eQd:d01      d; eQd0eed<d=>      d? eQd0eed<d=>      d@ eQd0eedAd<dB      dC eQ       dD eQdEd0dFG      dH eQ       dI eQdJd01      dK eQdLd01      i dM eQdNd01      dO eQdPd01      dQ eQdRd0dSG      dT eQdUd0dSG      dV eQdWd01      dX eQd0eedAd<dB      dY eQd0eedZdAd[d\d]      d^ eQd_d0d<d`      da eQdbd0d<d[d\dc      dd eQded0d\dfdgdc      dh eQdid0dgdjdkdc      dl eQd0dmdnddop      dq eQd0drdsd=dtu      dv eQd*dwdxdyz      d{ eQd*d|d}d~z      d eQd*dddz      d eQd*dddz      i d eQ       d eQ       d eQ       d eQd\dfdgd      d eQd\dfdgd      d eQ       d eQd0dmdnddod      d eQd*d\dfd=z      d eQd0dmdnddod      d eQdd01      d eQdd0dZd[d      d eQdd0ddjd      d eQdd01      d eQdd0ddjd      d eQ       d eQ       d eQdZd[d      i d eQdd01      d eQdZd[d      d eQddfd      d eQddjd      d eQddd      d eQdd0dZd[dee      d eQdd0ddfdee      d eQdd0ddjdee      d eQdd0dd\dd      d eQdd0dd\dd      d eQdd0d\dkdfd      d eQdd0dgdrdjd      d eQd\dkdfdë      d eQdgdrdjdë      d eQdkdddë      d eQdkdddë      d eQdd0d˫      i d eQdd0dZd[d      d eQdd0ddfd      d eQdd0ddjd      d eQdd0ddd      d eQdd0dddج      d eQdd0dwdxdy      d eQdd0d|d}d~      d eQdd0dddଘ      d eQdd0ddd㬘      d eQdd0eed      d eQdd0eedZd[d      d eQdd0eeddfd      d eQdd0eeddjd      d eQdd0eeddd      d eQdd0eedddج      d eQdd0eedwdxdy      d eQdd0eed|d}d~      i d eQdd0eeddd      d eQdd0dddج      d eQdd0d|d}d~      d eQdd0ddd      d eQdd0d˫      d  eQdd0dZd[d      d eQdd0ddfd      d eQdd0ddjd      d eQdd0ddd      d eQd	d0dddج      d
 eQdd0dwdxdy      d eQdd0d|d}d~      d eQdd0d˫      d eQdd0dZd[d      d eQdd0ddfd      d eQdd0ddjd      d eQdd0ddd      i d eQdd0dddج      d eQdd0ddd      d eQdd0dddZd[d      d eQd d0ddddjd      d! eQd"d0ee#      d$ eQd%d0ee#      d& eQd'd0eedZd[d      d( eQd)d0dddF*      d+ eQd,d0dddZd[ddF-      d. eQd/d0ddddfddF-      d0 eQd1d0ddddjddS-      d2 eQd3d0ddddd4dS-      d5 eQd6d0ddddkdjd7      d8 eQd9d0dddkddddo:	      d; eQd<d0dddkddddo:	      d= eQd>d0dddkddddo:	      d? eQd@d0ddddkdjd7      i dA eQdBd0dddkddddo:	      dC eQdDd0dddkddddo:	      dE eQdFd0dddGddkdjdH	      dI eQdJd0dddGdkddddoK
      dL eQdMd0dddGdkddddoK
      dN eQdOd0dddGdkddddoK
      dP eQdQd0dRddST      dU eQdVd0dRdZdSd      dW eQdXd0dYddd      dZ eQd0eedZdd[dAdo[      d\ eQd]d0dZdd[d      d^ eQd0eedGdZdd[d_      d` eQdad01      db eQdcd01      dd eQded01      df eQdgd01      dh eQ       i di eQdjd01      dk eQdld01      dm eQdnd01      do eQdRdSdpd0q      dr eQdsdSdtd0q      du eQdvdSdwd0q      dx eQdydzd{d0q      d| eQd}d~dd0q      d eQddA      d eQddA      d eQddA      d eQd0eedAd<d=B      d eQddA      d eQd0ddzd=      d eQd0ddzd=      d eQd0ddddzd=      d eQd0ddddzd=            ZRe4dde8fd       ZSe4dde8fd       ZTe4dde8fd       ZUe4dde8fd       ZVe4dde8fd       ZWe4dde8fd       ZXe4dde8fd       ZYe4dde8fd       ZZe4dde8fd       Z[e4dde8fd       Z\e4dde8fd       Z]e4dde8fd       Z^e4dde8fd       Z_e4dde8fd       Z`e4dde8fd       Zae4dde8fd       Zbe4dde8fd       Zce4dde8fd       Zde4dde8fd       Zee4dde8fd       Zfe4dde8fd       Zge4dde8fd       Zhe4dde8fd       Zie4dde8fd       Zje4dde8fd       Zke4dde8fd       Zle4dde8fd       Zme4dde8fd       Zne4dde8fd       Zoe4dde8fd       Zpe4dde8fd       Zqe4dde8fd       Zre4dde8fd       Zse4dde8fd       Zte4dde8fd       Zue4dde8fd       Zve4dde8fd       Zwe4dde8fd       Zxe4dde8fd       Zye4dde8fd       Zze4dde8fd       Z{e4dde8fd       Z|e4dde8fd       Z}e4dde8fd       Z~e4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fdÄ       Ze4dde8fdĄ       Ze4dde8fdń       Ze4dde8fdƄ       Ze4dde8fdǄ       Ze4dde8fdȄ       Ze4dde8fdɄ       Ze4dde8fdʄ       Ze4dde8fd˄       Ze4dde8fd̄       Ze4dde8fd̈́       Ze4dde8fd΄       Ze4dde8fdτ       Ze4dde8fdЄ       Ze4dde8fdф       Ze4dde8fd҄       Ze4dde8fdӄ       Ze4dde8fdԄ       Ze4dde8fdՄ       Ze4dde8fdք       Ze4dde8fdׄ       Ze4dde8fd؄       Ze4dde8fdل       Ze4dde8fdڄ       Ze4dde8fdۄ       Ze4dde8fd܄       Ze4dde8fd݄       Ze4dde8fdބ       Ze4dde8fd߄       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd       Ze4dde8fd        Z e5ei ddddddddddddddddd	dd
dɓdd̓ddΓddГddғddԓddٓddۓddd5d8d;d=dEdIdLdNddddd       y(!  a   The EfficientNet Family in PyTorch

An implementation of EfficienNet that covers variety of related models with efficient architectures:

* EfficientNet-V2
  - `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298

* EfficientNet (B0-B8, L2 + Tensorflow pretrained AutoAug/RandAug/AdvProp/NoisyStudent weight ports)
  - EfficientNet: Rethinking Model Scaling for CNNs - https://arxiv.org/abs/1905.11946
  - CondConv: Conditionally Parameterized Convolutions for Efficient Inference - https://arxiv.org/abs/1904.04971
  - Adversarial Examples Improve Image Recognition - https://arxiv.org/abs/1911.09665
  - Self-training with Noisy Student improves ImageNet classification - https://arxiv.org/abs/1911.04252

* MixNet (Small, Medium, and Large)
  - MixConv: Mixed Depthwise Convolutional Kernels - https://arxiv.org/abs/1907.09595

* MNasNet B1, A1 (SE), Small
  - MnasNet: Platform-Aware Neural Architecture Search for Mobile - https://arxiv.org/abs/1807.11626

* FBNet-C
  - FBNet: Hardware-Aware Efficient ConvNet Design via Differentiable NAS - https://arxiv.org/abs/1812.03443

* Single-Path NAS Pixel1
  - Single-Path NAS: Designing Hardware-Efficient ConvNets - https://arxiv.org/abs/1904.02877

* TinyNet
    - Model Rubik's Cube: Twisting Resolution, Depth and Width for TinyNets - https://arxiv.org/abs/2010.14819
    - Definitions & weights borrowed from https://github.com/huawei-noah/CV-Backbones/tree/master/tinynet_pytorch

* And likely more...

The majority of the above models (EfficientNet*, MixNet, MnasNet) and original weights were made available
by Mingxing Tan, Quoc Le, and other members of their Google Brain team. Thanks for consistently releasing
the models and weights open source!

Hacked together by / Copyright 2019, Ross Wightman
    )partial)CallableDictListOptionalTupleUnionN)IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)create_conv2dcreate_classifierget_norm_act_layer	LayerTypeGroupNormActLayerNormAct2dEvoNorm2dS0   )build_model_with_cfgpretrained_cfg_for_features)SqueezeExcite)	BlockArgsEfficientNetBuilderdecode_arch_defefficientnet_init_weightsround_channelsresolve_bn_argsresolve_act_layerBN_EPS_TF_DEFAULT)FeatureInfoFeatureHooksfeature_take_indices)checkpoint_seq
checkpoint)generate_default_cfgsregister_modelregister_model_deprecationsEfficientNetEfficientNetFeaturesc            %       t    e Zd ZdZdddddddddddded	d	d
ddfdededededededededede	e
   de	e
   de	e
   de	e
   dededededdf$ fdZdej                  fdZej$                  j&                  d4dedeeeeef   f   fd        Zej$                  j&                  d5d!eddfd"       Zej$                  j&                  dej2                  fd#       Zd6dededdfd$Z	 	 	 	 	 	 d7d%ej8                  d&e	eeee   f      d'ed(ed)ed*ed+edeeej8                     eej8                  eej8                     f   f   fd,Z	 	 	 	 d8d&eeee   f   d-ed.ed+edee   f
d/Zd%ej8                  dej8                  fd0Z d4d%ej8                  d1edej8                  fd2Z!d%ej8                  dej8                  fd3Z" xZ#S )9r)   a  EfficientNet model architecture.

    A flexible and performant PyTorch implementation of efficient network architectures, including:
      * EfficientNet-V2 Small, Medium, Large, XL & B0-B3
      * EfficientNet B0-B8, L2
      * EfficientNet-EdgeTPU
      * EfficientNet-CondConv
      * MixNet S, M, L, XL
      * MnasNet A1, B1, and small
      * MobileNet-V2
      * FBNet C
      * Single-Path NAS Pixel1
      * TinyNet

    References:
      - EfficientNet: https://arxiv.org/abs/1905.11946
      - EfficientNetV2: https://arxiv.org/abs/2104.00298
      - MixNet: https://arxiv.org/abs/1907.09595
      - MnasNet: https://arxiv.org/abs/1807.11626
                F N        avg
block_argsnum_classesnum_featuresin_chans	stem_sizestem_kernel_sizefix_stemoutput_stridepad_type	act_layer
norm_layeraa_layerse_layerround_chs_fn	drop_ratedrop_path_rateglobal_poolreturnc                    t         |           ||d}|
xs t        j                  }
|xs t        j                  }t        ||
      }|xs t        }|| _        || _        || _	        d| _
        |s ||      }t        |||fd|	d|| _         ||fddi|| _        t        d||	||
||||d|}t        j                   |||       | _        |j"                  | _        | j$                  D cg c]  }|d   	 c}| _        |j(                  }|d	kD  r4t        ||d
fd|	i|| _         ||fddi|| _        |x| _        | _        n@t        j2                         | _        t        j2                         | _        |x| _        | _        t5        | j.                  | j                  fd|i|\  | _        | _        t;        |        yc c}w )a  Initialize EfficientNet model.

        Args:
            block_args: Arguments for building blocks.
            num_classes: Number of classifier classes.
            num_features: Number of features for penultimate layer.
            in_chans: Number of input channels.
            stem_size: Number of output channels in stem.
            stem_kernel_size: Kernel size for stem convolution.
            fix_stem: If True, don't scale stem channels.
            output_stride: Output stride of network.
            pad_type: Padding type.
            act_layer: Activation layer class.
            norm_layer: Normalization layer class.
            aa_layer: Anti-aliasing layer class.
            se_layer: Squeeze-and-excitation layer class.
            round_chs_fn: Channel rounding function.
            drop_rate: Dropout rate for classifier.
            drop_path_rate: Drop path rate for stochastic depth.
            global_pool: Global pooling type.
        devicedtypeF   stridepaddinginplaceT)r:   r;   r@   r<   r=   r>   r?   rB   stager   r   rL   	pool_typeN )super__init__nnReLUBatchNorm2dr   r   r4   r6   rA   grad_checkpointingr   	conv_stembn1r   
Sequentialblocksfeaturesfeature_info
stage_endsin_chs	conv_headbn2r5   head_hidden_sizeIdentityr   rC   
classifierr   )selfr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rG   rH   ddnorm_act_layerbuilderfhead_chs	__class__s                            c/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/efficientnet.pyrR   zEfficientNet.__init__Q   s   V 	/(	12>>
+J	B,}& ""' $Y/I&x<LoUV`holno!)@T@R@ & 

'%!)

 

 mmWY
%CD#,,/3/@/@A!1W:A>> !*8\1]h]Z\]DN%lGDGBGDH8DDD 5[[]DN{{}DH8@@D 5,=-
 "-
 	-
)$/ 	"$') Bs   0Gc                 d   | j                   | j                  g}|j                  | j                         |j                  | j                  | j
                  | j                  g       |j                  t        j                  | j                        | j                  g       t        j                  | S )z3Convert model to sequential for feature extraction.)rW   rX   extendrZ   r_   r`   rC   rS   DropoutrA   rc   rY   )rd   layerss     rk   as_sequentialzEfficientNet.as_sequential   sv    ..$((+dkk"t~~txx1A1ABCrzz$..14??CD}}f%%    coarsec                 ,    t        d|rdnddfdg      S )zCreate regex patterns for parameter groups.

        Args:
            coarse: Use coarse (stage-level) grouping.

        Returns:
            Dictionary mapping group names to regex patterns.
        z^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+)N)zconv_head|bn2)i )stemrZ   )dict)rd   rr   s     rk   group_matcherzEfficientNet.group_matcher   s*     "&,"2JDQ,
 	
rq   enablec                     || _         yzEnable or disable gradient checkpointing.

        Args:
            enable: Whether to enable gradient checkpointing.
        NrV   rd   rw   s     rk   set_grad_checkpointingz#EfficientNet.set_grad_checkpointing        #)rq   c                     | j                   S )zGet the classifier module.)rc   )rd   s    rk   get_classifierzEfficientNet.get_classifier   s     rq   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y)zReset the classifier head.

        Args:
            num_classes: Number of classes for new classifier.
            global_pool: Global pooling type.
        )rO   N)r4   r   r5   rC   rc   )rd   r4   rC   s      rk   reset_classifierzEfficientNet.reset_classifier   s4     ',=t//;-H)$/rq   xindicesnorm
stop_early
output_fmtintermediates_onlyextra_blocksc                 F   |dv sJ d       g }|r&t        t        | j                        dz   |      \  }	}
nMt        t        | j                        |      \  }	}
|	D cg c]  }| j                  |    }	}| j                  |
   }
d}| j	                  |      }| j                  |      }||	v r|j                  |       t        j                  j                         s|s| j                  }n| j                  d|
 }t        |d      D ]Z  \  }}| j                  r+t        j                  j                         st        ||      }n ||      }||	v sJ|j                  |       \ |r|S || j                  d   k(  r"| j                  |      }| j                  |      }||fS c c}w )a  Forward features that returns intermediates.

        Args:
            x: Input image tensor.
            indices: Take last n blocks if int, all if None, select matching indices if sequence.
            norm: Apply norm layer to compatible intermediates.
            stop_early: Stop iterating over blocks when last desired intermediate hit.
            output_fmt: Shape of intermediate feature outputs.
            intermediates_only: Only return intermediate features.
            extra_blocks: Include outputs of all blocks and head conv in output, does not align with feature_info.

        Returns:
            List of intermediate features or tuple of (final features, intermediates).
        )NCHWzOutput shape must be NCHW.r   r   N)start)r#   lenrZ   r]   rW   rX   appendtorchjitis_scripting	enumeraterV   r$   r_   r`   )rd   r   r   r   r   r   r   r   intermediatestake_indices	max_indexifeat_idxrZ   blks                  rk   forward_intermediatesz"EfficientNet.forward_intermediates   s   0 Y&D(DD&&:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L)8DE1DOOA.ELE	2INN1HHQK|#  #99!!#:[[F[[),F&vQ7 	(MHc&&uyy/E/E/G"3*F<'$$Q'	(   tr**q!AA-9 Fs   F
prune_norm
prune_headc                    |r&t        t        | j                        dz   |      \  }}n1t        t        | j                        |      \  }}| j                  |   }| j                  d| | _        |s|t        | j                        k  r2t	        j
                         | _        t	        j
                         | _        |r| j                  dd       |S )a  Prune layers not required for specified intermediates.

        Args:
            indices: Indices of intermediate layers to keep.
            prune_norm: Whether to prune normalization layers.
            prune_head: Whether to prune the classifier head.
            extra_blocks: Include all blocks in indexing.

        Returns:
            List of indices that were kept.
        r   Nr   r0   )	r#   r   rZ   r]   rS   rb   r_   r`   r   )rd   r   r   r   r   r   r   s          rk   prune_intermediate_layersz&EfficientNet.prune_intermediate_layers   s    $ &:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L)	2Ikk*9-S%55[[]DN{{}DH!!!R(rq   c                 6   | j                  |      }| j                  |      }| j                  r7t        j                  j                         st        | j                  |d      }n| j                  |      }| j                  |      }| j                  |      }|S )z/Forward pass through feature extraction layers.T)flatten)
rW   rX   rV   r   r   r   r$   rZ   r_   r`   rd   r   s     rk   forward_featureszEfficientNet.forward_features?  st    NN1HHQK""599+A+A+Ct{{At<AAANN1HHQKrq   
pre_logitsc                     | j                  |      }| j                  dkD  r,t        j                  || j                  | j                        }|r|S | j                  |      S )zForward pass through classifier head.

        Args:
            x: Feature tensor.
            pre_logits: Return features before final classifier.

        Returns:
            Output tensor.
        r1   )ptraining)rC   rA   Fdropoutr   rc   )rd   r   r   s      rk   forward_headzEfficientNet.forward_headK  sP     Q>>B		!t~~FAq6DOOA$66rq   c                 J    | j                  |      }| j                  |      }|S )zForward pass.)r   r   r   s     rk   forwardzEfficientNet.forwardZ  s'    !!!$a rq   FT)r2   )NFFr   FF)r   FTF)$__name__
__module____qualname____doc__r   r   intboolstrr   r   r   floatrR   rS   rY   rp   r   r   ignorer   r	   r   rv   r|   Moduler   r   Tensorr   r   r   r   r   r   __classcell__rj   s   @rk   r)   r)   ;   s5   0  $ $$%"!#-1.2,0,0%3!$&$)^(!^( ^( 	^(
 ^( ^( "^( ^( ^( ^(  	*^( !+^( y)^( y)^( #^(  !^(" "#^($ %^(* 
+^(@&r}} & YY
D 
T#uS$Y?O:O5P 
 
" YY)T )T ) ) YY		  	HC 	Hc 	Hd 	H 8<$$',!&: ||:  eCcN34:  	: 
 :  :  !%:  :  
tELL!5tELL7I)I#JJ	K: | ./$#!&3S	>*  	
  
c>
%,, 
5<< 
7ell 7 7 7 %,, rq   c            !           e Zd ZdZdddddddddddded	d	ddfd
edeedf   dedededede	dedede
e   de
e   de
e   de
e   dededef  fdZej                   j"                  d de	ddfd       Zdeej(                     fdZ xZS )!r*   z EfficientNet Feature Extractor

    A work-in-progress feature extraction module for EfficientNet, to use as a backbone for segmentation
    and object detection models.
    )r   r   rI   r.      
bottleneckr.   r/   Fr0   Nr1   r3   out_indices.feature_locationr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   c                    t         |           ||d}|
xs t        j                  }
|xs t        j                  }t        ||
      }|xs t        }|| _        || _        d| _	        |s ||      }t        |||fd|	d|| _         ||fddi|| _        t        d||	||
|||||d	|}t        j                   |||       | _        t!        |j"                  |      | _        | j$                  j'                         D ci c]  }|d   |d	    c}| _        t+        |        d | _        |d
k7  r<| j$                  j'                  d      }t/        || j1                               | _        y y c c}w )NrF   FrI   rJ   rM   T)	r:   r;   r@   r<   r=   r>   r?   rB   r   rN   indexr   )module	hook_type)keysrP   )rQ   rR   rS   rT   rU   r   r   r6   rA   rV   r   rW   rX   r   rY   rZ   r!   r[   r\   	get_dicts_stage_out_idxr   feature_hooksr"   named_modules)rd   r3   r   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rG   rH   re   rf   rg   rh   hooksrj   s                           rk   rR   zEfficientNetFeatures.__init__h  s   * 	/(	12>>
+J	B,} ""' $Y/I&x<LoUV`holno!)@T@R@ & 
'%!)-
 
 mmWY
%CD'(8(8+F?C?P?P?Z?Z?\]!qz1W:5]!$' "|+%%//5L/ME!-eT5G5G5I!JD , ^s   E.rw   rD   c                     || _         yry   rz   r{   s     rk   r|   z+EfficientNetFeatures.set_grad_checkpointing  r}   rq   c                 @   | j                  |      }| j                  |      }| j                  g }d| j                  v r|j	                  |       t        | j                        D ]g  \  }}| j                  r+t        j                  j                         st        ||      }n ||      }|dz   | j                  v sW|j	                  |       i |S | j                  |       | j                  j                  |j                        }t        |j                               S )Nr   r   )rW   rX   r   r   r   r   rZ   rV   r   r   r   r%   
get_outputrG   listvalues)rd   r   r[   r   bouts         rk   r   zEfficientNetFeatures.forward  s    NN1HHQK%HD'''"!$++. '1**5993I3I3K"1a(A!Aq5D///OOA&' OKKN$$//9C

%%rq   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   r   r   r   r|   r   r   r   r   r   s   @rk   r*   r*   a  sO    ,;$0$%"!#-1.2,0,0%3!$&'<K!<K sCx<K "	<K
 <K <K "<K <K <K <K  	*<K !+<K y)<K y)<K #<K  !<K" "#<K| YY)T )T ) )&D. &rq   c                    d}t         }d }|j                  dd      rd|v sd|v rd}n
d}t        }d}|j                  d	d
      }t        || |f|dk(  |xr |dk7  |d|}|dk(  r!t	        |j
                        x|_        |_        |S )Nr0   features_onlyFfeature_cfgfeature_clscfg)r4   r5   	head_convrC   clspretrained_strictT)r   r   kwargs_filter)r)   popr*   r   r   pretrained_cfgdefault_cfg)variant
pretrainedkwargsfeatures_mode	model_clsr   r   models           rk   _create_effnetr     s    MIMzz/5)F"mv&=!MWM,I!M

#6=  $u,+F0F# E 3NuOcOc3ddu0Lrq         ?c                     dgdgdgdgdgdgdgg}t        dt        |      dt        t        |	      |j	                  d
d      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )zCreates a mnasnet-a1 model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet
    Paper: https://arxiv.org/pdf/1807.11626.pdf.

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    ds_r1_k3_s1_e1_c16_noskipir_r2_k3_s2_e6_c24zir_r3_k5_s2_e3_c40_se0.25ir_r4_k3_s2_e6_c80zir_r2_k3_s1_e6_c112_se0.25zir_r3_k5_s2_e6_c160_se0.25ir_r1_k3_s1_e6_c320r/   
multiplierr=   Nr3   r7   r@   r=   rP   	ru   r   r   r   r   rS   rU   r   r   r   channel_multiplierr   r   arch_defmodel_kwargsr   s          rk   _gen_mnasnet_a1r     s     
%%		$%		%&	%&	H   "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7J?,?ELrq   c                     dgdgdgdgdgdgdgg}t        dt        |      dt        t        |	      |j	                  d
d      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )Creates a mnasnet-b1 model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet
    Paper: https://arxiv.org/pdf/1807.11626.pdf.

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    ds_r1_k3_s1_c16_noskipir_r3_k3_s2_e3_c24ir_r3_k5_s2_e3_c40ir_r3_k5_s2_e6_c80ir_r2_k3_s1_e6_c96ir_r4_k5_s2_e6_c192ir_r1_k3_s1_e6_c320_noskipr/   r   r=   Nr   rP   r   r   s          rk   _gen_mnasnet_b1r     s     
""						%&H   "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7J?,?ELrq   c                     dgdgdgdgdgdgdgg}t        dt        |      dt        t        |	      |j	                  d
d      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )r   ds_r1_k3_s1_c8ir_r1_k3_s2_e3_c16ir_r2_k3_s2_e6_c16zir_r4_k5_s2_e6_c32_se0.25zir_r3_k3_s1_e6_c32_se0.25zir_r3_k5_s2_e6_c88_se0.25ir_r1_k3_s1_e6_c144   r   r=   Nr   rP   r   r   s          rk   _gen_mnasnet_smallr  '  s     
			$%	$%	$%	H  "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7J?,?ELrq   c                 L   dgdgdgdgdgg}t        t        |      }	|r|rdnt        d |	d            nd}
t        dt	        ||||	      |
d
||	|j                  dd      xs# t        t        j                  fi t        |      t        |d      d|}t        | |fi |}|S )z
    Ref impl: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_v2.py
    Paper: https://arxiv.org/abs/1801.04381
    dsa_r1_k3_s1_c64dsa_r2_k3_s2_c128dsa_r2_k3_s2_c256dsa_r6_k3_s2_c512dsa_r2_k3_s2_c1024r   i   r   depth_multiplierfix_first_last
group_sizer/   r=   Nrelu6r3   r5   r7   r9   r@   r=   r<   rP   )r   r   maxru   r   r   rS   rU   r   r   r   )r   r   r
  r  fix_stem_headr   r   r   r   r@   head_featuresr   r   s                rk   _gen_mobilenet_v1r  D  s     
				H >6HILR[]TD,t:L0MabM "-(!	
 #!::lD1gWR^^5g_eOf5g#FG4 L 7J?,?ELrq   c                 H   dgdgdgdgdgdgdgg}t        t        |      }t        dt        ||||	      |rd
nt	        d
 |d
            d|||j                  dd      xs# t        t        j                  fi t        |      t        |d      d|}	t        | |fi |	}
|
S )z Generate MobileNet-V2 network
    Ref impl: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_v2.py
    Paper: https://arxiv.org/abs/1801.04381
    ds_r1_k3_s1_c16r   ir_r3_k3_s2_e6_c32ir_r4_k3_s2_e6_c64ir_r3_k3_s1_e6_c96ir_r3_k3_s2_e6_c160r   r   r	  r-   r/   r=   Nr  r  rP   )r   r   ru   r   r  r   rS   rU   r   r   r   )r   r   r
  r  r  r   r   r   r@   r   r   s              rk   _gen_mobilenet_v2r  h  s     
						H >6HIL "-(!	
 +TD,t:L0M!::lD1gWR^^5g_eOf5g#FG4 L 7J?,?ELrq   c                    dgddgg dg dddgdgd	gg}t        dt        |      d
dt        t        |      |j	                  dd      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )ai   FBNet-C

        Paper: https://arxiv.org/abs/1812.03443
        Ref Impl: https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/maskrcnn_benchmark/modeling/backbone/fbnet_modeldef.py

        NOTE: the impl above does not relate to the 'C' variant here, that was derived from paper,
        it was used to confirm some building block details
    ir_r1_k3_s1_e1_c16ir_r1_k3_s2_e6_c24ir_r2_k3_s1_e1_c24)ir_r1_k5_s2_e6_c32ir_r1_k5_s1_e3_c32ir_r1_k5_s1_e6_c32ir_r1_k3_s1_e6_c32)ir_r1_k5_s2_e6_c64ir_r1_k5_s1_e3_c64ir_r2_k5_s1_e6_c64ir_r3_k5_s1_e6_c112ir_r1_k5_s1_e3_c112ir_r4_k5_s2_e6_c184ir_r1_k3_s1_e6_c352   i  r   r=   N)r3   r7   r5   r@   r=   rP   r   r   s          rk   _gen_fbnetcr*    s     
	34`J	 56		H  "8,^8JK::lD1gWR^^5g_eOf5g L 7J?,?ELrq   c                     dgdgddgddgddgd	gd
gg}t        dt        |      dt        t        |      |j	                  dd      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )zCreates the Single-Path NAS model from search targeted for Pixel1 phone.

    Paper: https://arxiv.org/abs/1904.02877

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    r   r   ir_r1_k5_s2_e6_c40ir_r3_k3_s1_e3_c40ir_r1_k5_s2_e6_c80ir_r3_k3_s1_e3_c80ir_r1_k5_s1_e6_c96ir_r3_k5_s1_e3_c96r   r   r/   r   r=   Nr   rP   r   r   s          rk   _gen_spnasnetr2    s     
""		34	34	34		%&H   "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7J?,?ELrq   c                 *   dgdgdgdgdgdgdgg}t        t        ||      }t        dt        |||	       |d
      d|t	        |d      |j                  dd      xs# t        t        j                  fi t        |      d|}	t        | |fi |	}
|
S )ax  Creates an EfficientNet model.

    Ref impl: https://github.com/tensorflow/tpu/blob/master/models/official/efficientnet/efficientnet_model.py
    Paper: https://arxiv.org/abs/1905.11946

    EfficientNet params
    name: (channel_multiplier, depth_multiplier, resolution, dropout_rate)
    'efficientnet-b0': (1.0, 1.0, 224, 0.2),
    'efficientnet-b1': (1.0, 1.1, 240, 0.2),
    'efficientnet-b2': (1.1, 1.2, 260, 0.3),
    'efficientnet-b3': (1.2, 1.4, 300, 0.3),
    'efficientnet-b4': (1.4, 1.8, 380, 0.4),
    'efficientnet-b5': (1.6, 2.2, 456, 0.4),
    'efficientnet-b6': (1.8, 2.6, 528, 0.5),
    'efficientnet-b7': (2.0, 3.1, 600, 0.5),
    'efficientnet-b8': (2.2, 3.6, 672, 0.5),
    'efficientnet-l2': (4.3, 5.3, 800, 0.5),

    Args:
      channel_multiplier: multiplier to number of channels per layer
      depth_multiplier: multiplier to number of repeats per stage

    ds_r1_k3_s1_e1_c16_se0.25ir_r2_k3_s2_e6_c24_se0.25ir_r2_k5_s2_e6_c40_se0.25ir_r3_k3_s2_e6_c80_se0.25ir_r3_k5_s1_e6_c112_se0.25ir_r4_k5_s2_e6_c192_se0.25ir_r1_k3_s1_e6_c320_se0.25r   divisorr  r-   r/   swishr=   Nr3   r5   r7   r@   r<   r=   rP   
r   r   ru   r   r   r   rS   rU   r   r   )r   r   r
  channel_divisorr  r   r   r   r@   r   r   s              rk   _gen_efficientnetrB    s    8 
%%	$%	$%	$%	%&	%&	%&H >6HRabL "8-=*U!$'!#FG4::lD1gWR^^5g_eOf5g L 7J?,?ELrq   c                 $   dgdgdgdgdgdgg}t        t        |      }t        dt        |||       |d	      d
||j	                  dd      xs# t        t
        j                  fi t        |      t        |d      d|}t        | |fi |}	|	S )z Creates an EfficientNet-EdgeTPU model

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/edgetpu
    er_r1_k3_s1_e4_c24_fc24_noskiper_r2_k3_s2_e8_c32er_r4_k3_s2_e8_c48ir_r5_k5_s2_e8_c96ir_r4_k5_s1_e8_c144ir_r2_k5_s2_e8_c192r   r=  r-   r/   r=   Nrelur3   r5   r7   r@   r=   r<   rP   
r   r   ru   r   r   rS   rU   r   r   r   
r   r   r
  r  r   r   r   r@   r   r   s
             rk   _gen_efficientnet_edgerN     s     
**						H >6HIL "8-=*U!$'!::lD1gWR^^5g_eOf5g#FF3 L 7J?,?ELrq   c                 (   dgdgdgdgdgdgdgg}t        t        |      }t        dt        |||	       |d
      d||j	                  dd      xs# t        t
        j                  fi t        |      t        |d      d|}t        | |fi |}	|	S )zCreates an EfficientNet-CondConv model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv
    r4  r5  r6  r7  zir_r3_k5_s1_e6_c112_se0.25_cc4zir_r4_k5_s2_e6_c192_se0.25_cc4zir_r1_k3_s1_e6_c320_se0.25_cc4r   )experts_multiplierr-   r/   r=   Nr>  rK  rP   rL  )
r   r   r
  rP  r   r   r   r@   r   r   s
             rk   _gen_efficientnet_condconvrQ     s     
%%	$%	$%	$%	)*	)*	)*H >6HIL "8-=Rde!$'!::lD1gWR^^5g_eOf5g#FG4 L 7J?,?ELrq   c                    dgdgdgdgdgdgdgg}t        dt        ||d	      d
ddt        t        |      t	        |d      |j                  dd      xs# t        t        j                  fi t        |      d|}t        | |fi |}|S )a  Creates an EfficientNet-Lite model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/lite
    Paper: https://arxiv.org/abs/1905.11946

    EfficientNet params
    name: (channel_multiplier, depth_multiplier, resolution, dropout_rate)
      'efficientnet-lite0': (1.0, 1.0, 224, 0.2),
      'efficientnet-lite1': (1.0, 1.1, 240, 0.2),
      'efficientnet-lite2': (1.1, 1.2, 260, 0.3),
      'efficientnet-lite3': (1.2, 1.4, 280, 0.3),
      'efficientnet-lite4': (1.4, 1.8, 300, 0.3),

    Args:
      channel_multiplier: multiplier to number of channels per layer
      depth_multiplier: multiplier to number of repeats per stage
    ds_r1_k3_s1_e1_c16r   ir_r2_k5_s2_e6_c40ir_r3_k3_s2_e6_c80r%  r   r   T)r  r-   r/   r   r  r=   Nr3   r5   r7   r9   r@   r<   r=   rP   )
ru   r   r   r   r   r   rS   rU   r   r   r   r   r
  r   r   r   r   r   s           rk   _gen_efficientnet_literX  @  s    & 
						H  	"8-=dS^8JK#FG4::lD1gWR^^5g_eOf5g	 	L 7J?,?ELrq   c                 &   dgdgdgdgdgdgg}t        t        |d      }t        dt        |||	       |d
      d||j	                  dd      xs# t        t
        j                  fi t        |      t        |d      d|}t        | |fi |}	|	S )z Creates an EfficientNet-V2 base model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    cn_r1_k3_s1_e1_c16_skiper_r2_k3_s2_e4_c32er_r2_k3_s2_e4_c48zir_r3_k3_s2_e4_c96_se0.25zir_r5_k3_s1_e6_c112_se0.25zir_r8_k3_s2_e6_c192_se0.25r1   r   round_limitr=  r-   r/   r=   NsilurK  rP   rL  rM  s
             rk   _gen_efficientnetv2_baser`  i  s     
##			$%	%&	%&H >6HVXYL "8-=*U!$'!::lD1gWR^^5g_eOf5g#FF3 L 7J?,?ELrq   c                 H   dgdgdgdgdgdgg}d}|rdg|d	<   d
g|d<   d}t        t        |      }	t        dt        |||       |	|      d|	|j	                  dd      xs# t        t
        j                  fi t        |      t        |d      d|}
t        | |fi |
}|S )a[   Creates an EfficientNet-V2 Small model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298

    NOTE: `rw` flag sets up 'small' variant to behave like my initial v2 small model,
        before ref the impl was released.
    cn_r2_k3_s1_e1_c24_skiper_r4_k3_s2_e4_c48er_r4_k3_s2_e4_c64zir_r6_k3_s2_e4_c128_se0.25zir_r9_k3_s1_e6_c160_se0.25zir_r15_k3_s2_e6_c256_se0.25r-   er_r2_k3_s1_e1_c24r   zir_r15_k3_s2_e6_c272_se0.25r   i   r   r=     r=   Nr_  rK  rP   rL  )r   r   r
  r  rwr   r   r   r5   r@   r   r   s               rk   _gen_efficientnetv2_srh    s     
##			%&	%&	&'H L	+,56>6HIL "8-=*U!,/!::lD1gWR^^5g_eOf5g#FF3 L 7J?,?ELrq   c                    dgdgdgdgdgdgdgg}t        dt        |||      d	d
t        t        |      |j	                  dd      xs# t        t
        j                  fi t        |      t        |d      d|}t        | |fi |}|S )z Creates an EfficientNet-V2 Medium model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    cn_r3_k3_s1_e1_c24_skiper_r5_k3_s2_e4_c48er_r5_k3_s2_e4_c80zir_r7_k3_s2_e4_c160_se0.25zir_r14_k3_s1_e6_c176_se0.25zir_r18_k3_s2_e6_c304_se0.25zir_r5_k3_s1_e6_c512_se0.25r=  r-   rf  r   r=   Nr_  rK  rP   
ru   r   r   r   r   rS   rU   r   r   r   	r   r   r
  r  r   r   r   r   r   s	            rk   _gen_efficientnetv2_mro    s     
##			%&	&'	&'	%&H  "8-=*U^8JK::lD1gWR^^5g_eOf5g#FF3 L 7J?,?ELrq   c                    dgdgdgdgdgdgdgg}t        dt        |||      d	d
t        t        |      |j	                  dd      xs# t        t
        j                  fi t        |      t        |d      d|}t        | |fi |}|S )z Creates an EfficientNet-V2 Large model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    cn_r4_k3_s1_e1_c32_skiper_r7_k3_s2_e4_c64er_r7_k3_s2_e4_c96zir_r10_k3_s2_e4_c192_se0.25zir_r19_k3_s1_e6_c224_se0.25zir_r25_k3_s2_e6_c384_se0.25zir_r7_k3_s1_e6_c640_se0.25r=  r-   r/   r   r=   Nr_  rK  rP   rm  rn  s	            rk   _gen_efficientnetv2_lrt         
##			&'	&'	&'	%&H  "8-=*U^8JK::lD1gWR^^5g_eOf5g#FF3 L 7J?,?ELrq   c                    dgdgdgdgdgdgdgg}t        dt        |||      d	d
t        t        |      |j	                  dd      xs# t        t
        j                  fi t        |      t        |d      d|}t        | |fi |}|S )z Creates an EfficientNet-V2 Xtra-Large model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    rq  er_r8_k3_s2_e4_c64er_r8_k3_s2_e4_c96zir_r16_k3_s2_e4_c192_se0.25zir_r24_k3_s1_e6_c256_se0.25zir_r32_k3_s2_e6_c512_se0.25zir_r8_k3_s1_e6_c640_se0.25r=  r-   r/   r   r=   Nr_  rK  rP   rm  rn  s	            rk   _gen_efficientnetv2_xlry    ru  rq   c                 X   	 |dk(  rdgdgdgdgdgdgdgg}ndgd	gd
gdgdgdgdgg}t        t        ||      }	t        dt        |||       |	d      d|	t	        |d      |j                  dd      xs# t        t        j                  fi t        |      d|}
t        | |fi |
}|S )a  Creates an EfficientNet model.

    Ref impl: https://github.com/tensorflow/tpu/blob/master/models/official/efficientnet/efficientnet_model.py
    Paper: https://arxiv.org/abs/1905.11946

    EfficientNet params
    name: (channel_multiplier, depth_multiplier, resolution, dropout_rate)
    'efficientnet-x-b0': (1.0, 1.0, 224, 0.2),
    'efficientnet-x-b1': (1.0, 1.1, 240, 0.2),
    'efficientnet-x-b2': (1.1, 1.2, 260, 0.3),
    'efficientnet-x-b3': (1.2, 1.4, 300, 0.3),
    'efficientnet-x-b4': (1.4, 1.8, 380, 0.4),
    'efficientnet-x-b5': (1.6, 2.2, 456, 0.4),
    'efficientnet-x-b6': (1.8, 2.6, 528, 0.5),
    'efficientnet-x-b7': (2.0, 3.1, 600, 0.5),
    'efficientnet-x-b8': (2.2, 3.6, 672, 0.5),
    'efficientnet-l2': (4.3, 5.3, 800, 0.5),

    Args:
      channel_multiplier: multiplier to number of channels per layer
      depth_multiplier: multiplier to number of repeats per stage

    r   zds_r1_k3_s1_e1_c16_se0.25_d1zer_r2_k3_s2_e6_c24_se0.25_nrezer_r2_k5_s2_e6_c40_se0.25_nrer7  r8  r9  r:  zer_r2_k3_s2_e4_c24_se0.25_nrezer_r2_k5_s2_e4_c40_se0.25_nrezir_r3_k3_s2_e4_c80_se0.25r;  r=  r-   r/   r_  r=   Nr?  rP   r@  )r   r   r
  rA  r  versionr   r   r   r@   r   r   s               rk   _gen_efficientnet_xr|    s   6, !|+,,-,-())*)*)*
 ,,,-,-())*)*)*
 >6HRabL "8-=*U!$'!#FF3::lD1gWR^^5g_eOf5g L 7J?,?ELrq   c                    dgddgddgddgdd	gd
dgg}t        dt        |      ddt        t        |      |j	                  dd      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )zCreates a MixNet Small model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet
    Paper: https://arxiv.org/abs/1907.09595
    rS  zir_r1_k3_a1.1_p1.1_s2_e6_c24zir_r1_k3_a1.1_p1.1_s1_e3_c24z ir_r1_k3.5.7_s2_e6_c40_se0.5_nsw(ir_r3_k3.5_a1.1_p1.1_s1_e6_c40_se0.5_nswz&ir_r1_k3.5.7_p1.1_s2_e6_c80_se0.25_nswz$ir_r2_k3.5_p1.1_s1_e6_c80_se0.25_nswz+ir_r1_k3.5.7_a1.1_p1.1_s1_e6_c120_se0.5_nswz-ir_r2_k3.5.7.9_a1.1_p1.1_s1_e3_c120_se0.5_nswz&ir_r1_k3.5.7.9.11_s2_e6_c200_se0.5_nswz(ir_r2_k3.5.7.9_p1.1_s1_e6_c200_se0.5_nsw   r)  r   r=   Nr3   r5   r7   r@   r=   rP   r   r   s          rk   _gen_mixnet_sr  b  s     
	')GH	+-WX	13YZ	68gh	13]^H  "8,^8JK::lD1gWR^^5g_eOf5g L 7J?,?ELrq   c                    dgddgddgddgdd	gd
dgg}t        dt        ||d      ddt        t        |      |j	                  dd      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )zCreates a MixNet Medium-Large model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet
    Paper: https://arxiv.org/abs/1907.09595
    ds_r1_k3_s1_e1_c24z ir_r1_k3.5.7_a1.1_p1.1_s2_e6_c32zir_r1_k3_a1.1_p1.1_s1_e3_c32z"ir_r1_k3.5.7.9_s2_e6_c40_se0.5_nswr~  z!ir_r1_k3.5.7_s2_e6_c80_se0.25_nswz-ir_r3_k3.5.7.9_a1.1_p1.1_s1_e6_c80_se0.25_nswzir_r1_k3_s1_e6_c120_se0.5_nswz-ir_r3_k3.5.7.9_a1.1_p1.1_s1_e3_c120_se0.5_nswz#ir_r1_k3.5.7.9_s2_e6_c200_se0.5_nswz(ir_r3_k3.5.7.9_p1.1_s1_e6_c200_se0.5_nswrounddepth_truncr  rf  r   r=   Nr  rP   r   rW  s           rk   _gen_mixnet_mr    s     
	+-KL	-/YZ	,.]^	(*YZ	.0Z[H  "8-=7S^8JK::lD1gWR^^5g_eOf5g L 7J?,?ELrq   c                 F   dgdgdgdgdgdgdgg}t        dt        ||d	      t        d
t        d
|dd            ddt	        t        |      t        |d      |j                  dd      xs# t	        t        j                  fi t        |      d|}t        | |fi |}|S )zCreates a TinyNet model.
    r4  r5  r6  r7  r8  r9  r:  r  r  r-   r  Nr/   Tr   r>  r=   rV  rP   )ru   r   r  r   r   r   r   rS   rU   r   r   )r   model_widthr
  r   r   r   r   r   s           rk   _gen_tinynetr    s     
%%(C'D	$%(C'D	%&)E(F	%&	H  	"8-=7S~dKDIJ^D#FG4::lD1gWR^^5g_eOf5g	 	L 7J?,?ELrq   c                    d| v rgd}d}d}d}t        |d      }	dt        t           dt        fd}
d	| v r	d
}d}g d}n%d| v rg d}nd| v rg d}d}nd| v rd}d}g d}d}nJ  |
||      }n'd
}d}d}t        |d      }	dgddgddgddgddgdd gd!gg}t        d&t	        ||      |||t        t        |"      |j                  d#d$      xs# t        t        j                  fi t        |      |	d%|}t        | |fi |}|S )'z
    Based on definitions in: https://github.com/tensorflow/models/tree/d2427a562f401c9af118e47af2f030a0a5599f55/official/projects/edgetpu/vision
    
edgetpu_v2@      r-   rJ  chsr  c           
          d| d    gd| d    d| d| d    gd| d    d| d| d    d| d    d| d| d    gd| d	    d
| d	    gd| d    d
| d    gd| d    d
| d    gd| d    ggS )Ncn_r1_k1_s1_cr   er_r1_k3_s2_e8_cr   er_r1_k3_s1_e4_gs_crI   er_r1_k3_s1_e4_cr.   ir_r3_k3_s1_e4_cir_r1_k3_s1_e8_cr   ir_r1_k3_s2_e8_cr     rP   )r  r  s     rk   	_arch_defz)_gen_mobilenet_edgetpu.<locals>._arch_def  s    !Q)*#CF8,0A*RPSTUPVx.XY 's1vh/'
|2c!fX>&s1vh/'
|2c!fX>	 $CF8,0@Q.IJ#CF8,0@Q.IJ#CF8,0@Q.IJ#CF8,-' rq   edgetpu_v2_xsr/   r.   )r)  r/   0   `            edgetpu_v2_s)rf  r  r     r  r     edgetpu_v2_m)r/   r  P   r  r     @  i@  edgetpu_v2_l   r  )r/   r  r  r  r  r    i  cn_r1_k1_s1_c16er_r1_k3_s2_e8_c32er_r3_k3_s1_e4_c32er_r1_k3_s2_e8_c48er_r3_k3_s1_e4_c48ir_r1_k3_s2_e8_c96ir_r3_k3_s1_e4_c96ir_r1_k3_s1_e8_c96_noskipir_r1_k5_s2_e8_c160ir_r3_k5_s1_e4_c160ir_r1_k3_s1_e8_c192r   r=   N)r3   r5   r7   r8   r@   r=   r<   rP   )r   r   r   ru   r   r   r   r   rS   rU   r   r   )r   r   r
  r   r   r7   r8   r  r5   r<   r  channelsr   r   r   s                  rk   _gen_mobilenet_edgetpur    s    w	
%ff5		49 	# 	. g%I 6Hw&7Hw&7HLw& J7HL5Xz2 	%ff5	 !#78!#78!#78(*>?"$9:"#
"  	"8-=>!)^8JK::lD1gWR^^5g_eOf5g	 	L 7J?,?ELrq   c                    dgdgdgdgdgg}t        t        |d      }t        dt        ||       |d      d	||j	                  d
d      xs# t        t
        j                  fi t        |      t        |d      d|}t        | |fi |}|S )z* Minimal test EfficientNet generator.
    rZ  er_r1_k3_s2_e4_c24er_r1_k3_s2_e4_c32zir_r1_k3_s2_e4_c48_se0.25zir_r1_k3_s2_e4_c64_se0.25r1   r]  r  rf  r=   Nr_  rK  rP   rL  )	r   r   r
  r   r   r   r@   r   r   s	            rk   _gen_test_efficientnetr    s     
##			$%	$%H >6HVXYL "8-=>!#&!::lD1gWR^^5g_eOf5g#FF3 L 7J?,?ELrq   r0   c                 2    | dddddt         t        dddd	|S )
Nr,   r.      r  r  r  g      ?bicubicrW   rc   z
apache-2.0)urlr4   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convrc   license)r
   r   )r  r   s     rk   _cfgr  ,  s3    4}SYI%.B!
 $* rq   zmnasnet_050.untrainedzmnasnet_075.untrainedzmnasnet_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_b1-74cb7081.pthztimm/)r  	hf_hub_idzmnasnet_140.untrainedzsemnasnet_050.untrainedzsemnasnet_075.rmsp_in1kzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/semnasnet_075-18710866.pthzsemnasnet_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_a1-d9418771.pthzsemnasnet_140.untrainedzmnasnet_small.lamb_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_small_lamb-aff75073.pthz#mobilenetv1_100.ra4_e3600_r224_in1k)r.   r  r  gffffff?)r  r  r  test_input_sizetest_crop_pctz$mobilenetv1_100h.ra4_e3600_r224_in1kz#mobilenetv1_125.ra4_e3600_r224_in1k?)r  r  r  r  r  r  zmobilenetv2_035.untrainedzmobilenetv2_050.lamb_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_050-3d30d450.pthr  )r  r  r  zmobilenetv2_075.untrainedzmobilenetv2_100.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_100_ra-b33bc2c4.pthzmobilenetv2_110d.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_110d_ra-77090ade.pthzmobilenetv2_120d.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_120d_ra-5987e2ed.pthzmobilenetv2_140.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_140_ra-21a4e913.pthzfbnetc_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetc_100-c345b898.pthbilinearzspnasnet_100.rmsp_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/spnasnet_100-048bc3f4.pthzefficientnet_b0.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b0_ra-3dd342df.pthz#efficientnet_b0.ra4_e3600_r224_in1kz#efficientnet_b1.ra4_e3600_r240_in1k)r.   r  r  )r  r  )r.      r  )r  r  r  r  r  r  r  r  zefficientnet_b1.ft_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b1-533bc792.pth)r  r  r  r  zefficientnet_b2.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b2_ra-bcdf34b7.pth)r  r  r  r  r  r  zefficientnet_b3.ra2_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b3_ra2-cf984f9c.pth)	   r  )r.   r  r  zefficientnet_b4.ra2_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b4_ra2_320-7eb33cd5.pth)
   r  )r.   r  r  z efficientnet_b5.sw_in12k_ft_in1k)r.     r  )   r  squash)r  r  r  r  	crop_modezefficientnet_b5.sw_in12k)r.     r  )   r  i-.  )r  r  r  r  r4   zefficientnet_b6.untrained)r.     r  )   r  g/$?)r  r  r  r  zefficientnet_b7.untrained)r.   X  r  )   r  g|?5^?zefficientnet_b8.untrained)r.     r  )   r  gI+?zefficientnet_l2.untrained)r.      r  )   r  gn?zefficientnet_b0_gn.untrainedzefficientnet_b0_g8_gn.untrainedz"efficientnet_b0_g16_evos.untrainedzefficientnet_b3_gn.untrained)r  r  r  r  zefficientnet_b3_g8_gn.untrainedzefficientnet_blur_b0.untrainedz#efficientnet_h_b5.sw_r448_e450_in1k)r.   @  r  )r  r  r  r  r  r  zefficientnet_x_b3.untrainedz#efficientnet_x_b5.sw_r448_e450_in1kzefficientnet_es.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_es_ra-f111e99c.pthzefficientnet_em.ra2_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_em_ra2-66250f76.pthgMbX9?)r  r  r  r  r  zefficientnet_el.ra_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_el-3b455510.pth)r.   ,  r  g!rh?zefficientnet_es_pruned.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_es_pruned75-1b7248cf.pthzefficientnet_el_pruned.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_el_pruned70-ef2a2ccf.pthzefficientnet_cc_b0_4e.untrainedzefficientnet_cc_b0_8e.untrainedzefficientnet_cc_b1_8e.untrained)r  r  r  zefficientnet_lite0.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_lite0_ra-37913777.pthzefficientnet_lite1.untrainedzefficientnet_lite2.untrained)r.     r  g{Gz?zefficientnet_lite3.untrainedzefficientnet_lite4.untrained)r.   |  r  )   r  g/$?zefficientnet_b1_pruned.in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb1_pruned-bea43a3a.pth)r  r  r  r  r  r  r  zefficientnet_b2_pruned.in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb2_pruned-08c1b27c.pthzefficientnet_b3_pruned.in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb3_pruned-59ecf72d.pthzefficientnetv2_rw_t.ra2_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnetv2_t_agc-3620981a.pthr  r  )r  r  r  r  r  r  zgc_efficientnetv2_rw_t.agc_in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/gc_efficientnetv2_rw_t_agc-927a0bde.pthzefficientnetv2_rw_s.ra2_in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_v2s_ra2_288-a6477665.pthzefficientnetv2_rw_m.agc_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnetv2_rw_m_agc-3d90cb1e.pthzefficientnetv2_s.untrained)r  r  r  r  zefficientnetv2_m.untrainedzefficientnetv2_l.untrained)r.     r  zefficientnetv2_xl.untrained)r.      r  ztf_efficientnet_b0.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_ns-c0e6a31c.pth)r  r  r  ztf_efficientnet_b1.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_ns-99dd0c41.pthztf_efficientnet_b2.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_ns-00306e48.pthztf_efficientnet_b3.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_ns-9d44bf68.pthztf_efficientnet_b4.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_ns-d6313a46.pthztf_efficientnet_b5.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ns-6f26d0cf.pth)r.     r  )   r  gS?ztf_efficientnet_b6.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_ns-51548356.pthztf_efficientnet_b7.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ns-1dbc32de.pthz"tf_efficientnet_l2.ns_jft_in1k_475zwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_l2_ns_475-bebbd00a.pth)r.     r  gʡE?ztf_efficientnet_l2.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_l2_ns-df73bb44.pthgQ?ztf_efficientnet_b0.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_ap-f262efe1.pth)r  r  r  r  r  ztf_efficientnet_b1.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_ap-44ef0a3d.pth)r  r  r  r  r  r  r  ztf_efficientnet_b2.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_ap-2f8e7636.pthztf_efficientnet_b3.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_ap-aad25bdd.pthztf_efficientnet_b4.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_ap-dedb23e6.pthztf_efficientnet_b5.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ap-9e82fae8.pthztf_efficientnet_b6.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_ap-4ffb161f.pthztf_efficientnet_b7.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ap-ddb28fec.pthztf_efficientnet_b8.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b8_ap-00e169fa.pthztf_efficientnet_b5.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ra-9a3e5369.pthztf_efficientnet_b7.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ra-6c08e654.pthztf_efficientnet_b8.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b8_ra-572d5dd9.pthztf_efficientnet_b0.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_aa-827b6e33.pthztf_efficientnet_b1.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_aa-ea7a6ee0.pthztf_efficientnet_b2.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_aa-60c94f97.pthztf_efficientnet_b3.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_aa-84b4657e.pthztf_efficientnet_b4.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_aa-818f208c.pthztf_efficientnet_b5.aa_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_aa-99018a74.pthztf_efficientnet_b6.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_aa-80ba17e4.pthztf_efficientnet_b7.aa_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_aa-076e3472.pthztf_efficientnet_b0.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0-0af12548.pthztf_efficientnet_b1.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1-5c1377c4.pthztf_efficientnet_b2.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2-e393ef04.pthztf_efficientnet_b3.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3-e3bd6955.pthztf_efficientnet_b4.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4-74ee3bed.pthztf_efficientnet_b5.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5-c6949ce9.pthztf_efficientnet_es.in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_es-ca1afbfe.pth)      ?r  r  ztf_efficientnet_em.in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_em-e78cfe58.pthztf_efficientnet_el.in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_el-5143854e.pthztf_efficientnet_cc_b0_4e.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b0_4e-4362b6b2.pth)r  r  r  r  ztf_efficientnet_cc_b0_8e.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b0_8e-66184a25.pthztf_efficientnet_cc_b1_8e.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b1_8e-f7c79ae1.pthztf_efficientnet_lite0.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite0-0aa007d2.pth)r  r  r  r  r  ztf_efficientnet_lite1.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite1-bde8b488.pth)r  r  r  r  r  r  r  r  ztf_efficientnet_lite2.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite2-dcccb7df.pthztf_efficientnet_lite3.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite3-b733e338.pthztf_efficientnet_lite4.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite4-741542c3.pthgq=
ףp?z!tf_efficientnetv2_s.in21k_ft_in1kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s_21ft1k-d7dafa41.pth)r  r  r  r  r  r  r  r  z!tf_efficientnetv2_m.in21k_ft_in1kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m_21ft1k-bf41664a.pth)	r  r  r  r  r  r  r  r  r  z!tf_efficientnetv2_l.in21k_ft_in1kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l_21ft1k-60127a9d.pthz"tf_efficientnetv2_xl.in21k_ft_in1kzhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21ft1k-06c35c48.pthztf_efficientnetv2_s.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s-eb54923e.pthztf_efficientnetv2_m.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m-cc09e0cd.pthztf_efficientnetv2_l.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l-d664b728.pthztf_efficientnetv2_s.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s_21k-6337ad01.pthiSU  )	r  r  r  r  r4   r  r  r  r  ztf_efficientnetv2_m.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m_21k-361418a2.pth)
r  r  r  r  r4   r  r  r  r  r  ztf_efficientnetv2_l.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l_21k-91a19ec9.pthztf_efficientnetv2_xl.in21kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21k-fd7e8abf.pthztf_efficientnetv2_b0.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b0-c7cc451f.pth)r.   r  r  )r  r  )r  r  r  r  r  ztf_efficientnetv2_b1.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b1-be6e41b0.pthztf_efficientnetv2_b2.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b2-847de54e.pth)r.      r  z"tf_efficientnetv2_b3.in21k_ft_in1k)r  r  r  r  r  r  r  r  ztf_efficientnetv2_b3.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b3-57773f13.pthztf_efficientnetv2_b3.in21k)r  r  r  r4   r  r  r  r  zmixnet_s.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_s-a907afbc.pthzmixnet_m.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_m-4647fc68.pthzmixnet_l.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_l-5a9a2ed8.pthzmixnet_xl.ra_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_xl_ra-aac3c00c.pthzmixnet_xxl.untrainedztf_mixnet_s.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_s-89d3354b.pthztf_mixnet_m.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_m-0f4d8805.pthztf_mixnet_l.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_l-6c92e0c8.pthztinynet_a.in1kzRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_a.pth)r  r  r  r  ztinynet_b.in1k)r.      r  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_b.pthztinynet_c.in1k)r.      r  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_c.pthztinynet_d.in1k)r.      r  )r  r  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_d.pthztinynet_e.in1k)r.   j   r  )r   r   zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_e.pthzmobilenet_edgetpu_100.untrained)r  r  z!mobilenet_edgetpu_v2_xs.untrainedz mobilenet_edgetpu_v2_s.untrainedz*mobilenet_edgetpu_v2_m.ra4_e3600_r224_in1kz mobilenet_edgetpu_v2_l.untrainedztest_efficientnet.r160_in1k)r.   r  r  )r  r  r  r  ztest_efficientnet_ln.r160_in1kztest_efficientnet_gn.r160_in1k)r  r  r  r  r  r  z test_efficientnet_evos.r160_in1krD   c                      t        dd| i|}|S )z& MNASNet B1, depth multiplier of 0.5. r   )mnasnet_050r  r   r   r   r   s      rk   r  r         P:PPELrq   c                      t        dd| i|}|S )z' MNASNet B1, depth multiplier of 0.75. r   )mnasnet_075      ?r  r  s      rk   r  r    s     QJQ&QELrq   c                      t        dd| i|}|S )z& MNASNet B1, depth multiplier of 1.0. r   )mnasnet_100r   r  r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z& MNASNet B1,  depth multiplier of 1.4 r   )mnasnet_140ffffff?r  r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z- MNASNet A1 (w/ SE), depth multiplier of 0.5 r   )semnasnet_050r  r   r  s      rk   r  r         RZR6RELrq   c                      t        dd| i|}|S )z0 MNASNet A1 (w/ SE),  depth multiplier of 0.75. r   )semnasnet_075r  r   r  s      rk   r  r    s     SjSFSELrq   c                      t        dd| i|}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.0. r   )semnasnet_100r   r   r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.4. r   )semnasnet_140r  r   r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z* MNASNet Small,  depth multiplier of 1.0. r   )mnasnet_smallr   )r  r  s      rk   r	  r	    s     U
UfUELrq   c                      t        dd| i|}|S ) MobileNet V1 r   )mobilenetv1_100r   r  r  s      rk   r  r         VVvVELrq   c                 "    t        dd| d|}|S )r  T)r   r   )mobilenetv1_100hr   r  r  s      rk   r  r    s     gR\g`fgELrq   c                      t        dd| i|}|S )r  r   )mobilenetv1_125g      ?r  r  s      rk   r  r         W*WPVWELrq   c                      t        dd| i|}|S )z) MobileNet V2 w/ 0.35 channel multiplier r   )mobilenetv2_035gffffff?r  r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z( MobileNet V2 w/ 0.5 channel multiplier r   )mobilenetv2_050r  r  r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z) MobileNet V2 w/ 0.75 channel multiplier r   )mobilenetv2_075r  r  r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z( MobileNet V2 w/ 1.0 channel multiplier r   )mobilenetv2_100r   r  r  s      rk   r  r    r  rq   c                      t        dd| i|}|S )z( MobileNet V2 w/ 1.4 channel multiplier r   )mobilenetv2_140r  r  r  s      rk   r  r    r  rq   c                 &    t        	 ddd| d|}|S )z3 MobileNet V2 w/ 1.1 channel, 1.2 depth multipliers333333?Tr
  r  r   )mobilenetv2_110d皙?r  r  s      rk   r"  r"    .     l25TV`ldjlELrq   c                 &    t        	 ddd| d|}|S )z4 MobileNet V2 w/ 1.2 channel, 1.4 depth multipliers r  Tr!  )mobilenetv2_120dr   r  r  s      rk   r&  r&    r$  rq   c                 P    | r|j                  dt               t        dd| i|}|S )z	 FBNet-C bn_epsr   )
fbnetc_100r   )
setdefaultr    r*  r  s      rk   r)  r)  	  s/     ($56KjKFKELrq   c                      t        dd| i|}|S )z Single-Path NAS Pixel1r   )spnasnet_100r   )r2  r  s      rk   r,  r,    s     O*OOELrq   c                 &    t        	 ddd| d|}|S )z EfficientNet-B0 r   r   r
  r   )efficientnet_b0rB  r  s      rk   r/  r/    .     j.1CT^jbhjELrq   c                 &    t        	 ddd| d|}|S )z EfficientNet-B1 r   r#  r.  )efficientnet_b1r0  r  s      rk   r3  r3  #  r1  rq   c                 &    t        	 ddd| d|}|S )z EfficientNet-B2 r#  r   r.  )efficientnet_b2r0  r  s      rk   r5  r5  ,  r1  rq   c                 &    t        	 ddd| d|}|S ) EfficientNet-B3 r   r  r.  )efficientnet_b3r0  r  s      rk   r8  r8  5  r1  rq   c                 &    t        	 ddd| d|}|S )z EfficientNet-B4 r  ?r.  )efficientnet_b4r0  r  s      rk   r;  r;  >  r1  rq   c                 &    t        	 ddd| d|}|S ) EfficientNet-B5 皙?皙@r.  )efficientnet_b5r0  r  s      rk   r@  r@  G  r1  rq   c                 &    t        	 ddd| d|}|S )z EfficientNet-B6 r:  @r.  )efficientnet_b6r0  r  s      rk   rC  rC  P  r1  rq   c                 &    t        	 ddd| d|}|S )z EfficientNet-B7        @@r.  )efficientnet_b7r0  r  s      rk   rG  rG  Y  r1  rq   c                 &    t        	 ddd| d|}|S )z EfficientNet-B8 r?  @r.  )efficientnet_b8r0  r  s      rk   rJ  rJ  b  r1  rq   c                 &    t        	 ddd| d|}|S )z EfficientNet-L2.333333@333333@r.  )efficientnet_l2r0  r  s      rk   rN  rN  k  r1  rq   c                 B    t        	 dt        t        d      | d|}|S )z EfficientNet-B0 + GroupNormr  r=  )r=   r   )efficientnet_b0_gnrB  r   r   r  s      rk   rP  rP  u  s3     o)0!)LYcogmoELrq   c                 D    t        	 ddt        t        d      | d|}|S )z* EfficientNet-B0 w/ group conv + GroupNormr  r=  )r  r=   r   )efficientnet_b0_g8_gnrQ  r  s      rk   rS  rS  }  s5     ),-',[\:])!')E Lrq   c                 &    t        	 ddd| d|}|S )z+ EfficientNet-B0 w/ group 16 conv + EvoNormr)  )r  rA  r   )efficientnet_b0_g16_evosr0  r  s      rk   rU  rU    s-     ")/12)!')E Lrq   c           
      H    t        	 ddddt        t        d      | d|}|S )z EfficientNet-B3 w/ GroupNorm r   r  r)  r=  )r   r
  rA  r=   r   )efficientnet_b3_gnrQ  r  s      rk   rW  rW    s<     Z14s\^<B7JZRXZE Lrq   c                 J    t        	 dddddt        t        d      | d|}|S )z% EfficientNet-B3 w/ grouped conv + BNr   r  r  r)  r=  )r   r
  r  rA  r=   r   )efficientnet_b3_g8_gnrQ  r  s      rk   rY  rY    s?     Z47#Z[mo<B7JZRXZE Lrq   c                 (    t        	 ddd| dd|}|S )z EfficientNet-B0 w/ BlurPool r   blurpc)r   r
  r   r>   )efficientnet_blur_b0r0  r  s      rk   r\  r\    s0     36Yc#E Lrq   c                 &    t        	 ddd| d|}|S )z EfficientNet-Edge Small. r   r.  )efficientnet_esrN  r  s      rk   r^  r^    .     #j.1CT^jbhjELrq   c                 &    t        	 ddd| d|}|S )zw EfficientNet-Edge Small Pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0r   r.  )efficientnet_es_prunedr_  r  s      rk   rb  rb    .     # q583[eqioqELrq   c                 &    t        	 ddd| d|}|S )z EfficientNet-Edge-Medium. r   r#  r.  )efficientnet_emr_  r  s      rk   re  re    r`  rq   c                 &    t        	 ddd| d|}|S )z EfficientNet-Edge-Large. r   r  r.  )efficientnet_elr_  r  s      rk   rg  rg    r`  rq   c                 &    t        	 ddd| d|}|S )zw EfficientNet-Edge-Large pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0r   r  r.  )efficientnet_el_prunedr_  r  s      rk   ri  ri    rc  rq   c                 &    t        	 ddd| d|}|S )' EfficientNet-CondConv-B0 w/ 8 Experts r   r.  )efficientnet_cc_b0_4erQ  r  s      rk   rl  rl    s.     'p47#ZdphnpELrq   c                 (    t        	 dddd| d|}|S )rk  r   rI   r   r
  rP  r   )efficientnet_cc_b0_8erm  r  s      rk   rp  rp    0     ')47#bc)!')E Lrq   c                 (    t        	 dddd| d|}|S )z' EfficientNet-CondConv-B1 w/ 8 Experts r   r#  rI   ro  )efficientnet_cc_b1_8erm  r  s      rk   rs  rs    rq  rq   c                 &    t        	 ddd| d|}|S ) EfficientNet-Lite0 r   r.  )efficientnet_lite0rX  r  s      rk   rv  rv    .     #m14sWamekmELrq   c                 &    t        	 ddd| d|}|S ) EfficientNet-Lite1 r   r#  r.  )efficientnet_lite1rw  r  s      rk   r{  r{    rx  rq   c                 &    t        	 ddd| d|}|S ) EfficientNet-Lite2 r#  r   r.  )efficientnet_lite2rw  r  s      rk   r~  r~  	  rx  rq   c                 &    t        	 ddd| d|}|S ) EfficientNet-Lite3 r   r  r.  )efficientnet_lite3rw  r  s      rk   r  r  	  rx  rq   c                 &    t        	 ddd| d|}|S ) EfficientNet-Lite4 r  r:  r.  )efficientnet_lite4rw  r  s      rk   r  r  	  rx  rq   c                 |    |j                  dt               |j                  dd       d}t        |fddd| d|}|S )	zc EfficientNet-B1 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf  r(  r;   sameefficientnet_b1_prunedr   r#  Tr   r
  prunedr   r*  r    rB  )r   r   r   r   s       rk   r  r  	  sV     h 12
j&)&Gm$'#dWamekmELrq   c                 x    |j                  dt               |j                  dd       t        	 dddd| d|}|S )	zb EfficientNet-B2 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r(  r;   r  r#  r   Tr  )efficientnet_b2_prunedr  r  s      rk   r  r  (	  Q     h 12
j&) )583W[)!')E Lrq   c                 x    |j                  dt               |j                  dd       t        	 dddd| d|}|S )	zb EfficientNet-B3 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r(  r;   r  r   r  Tr  )efficientnet_b3_prunedr  r  s      rk   r  r  3	  r  rq   c                 (    t        	 dddd| d|}|S )z; EfficientNet-V2 Tiny (Custom variant, tiny not in paper). 皙?r  Fr   r
  rg  r   )efficientnetv2_rw_trh  r  s      rk   r  r  >	  s1     "x25PUblxpvxELrq   c           	      *    t        	 ddddd| d|}|S )zR EfficientNet-V2 Tiny w/ Global Context Attn (Custom variant, tiny not in paper). r  r  Fgc)r   r
  rg  r?   r   )gc_efficientnetv2_rw_tr  r  s      rk   r  r  F	  s4     " B5834JB:@BE Lrq   c                 "    t        dd| d|}|S )z EfficientNet-V2 Small (RW variant).
    NOTE: This is my initial (pre official code release) w/ some differences.
    See efficientnetv2_s and tf_efficientnetv2_s for versions that match the official w/ PyTorch vs TF padding
    T)rg  r   )efficientnetv2_rw_sr  r  s      rk   r  r  O	  s     "bDZb[abELrq   c                 (    t        	 dddd| d|}|S )z* EfficientNet-V2 Medium (RW variant).
    r   )r   r   r   r   r>  r>  Tr  )efficientnetv2_rw_mr  r  s      rk   r  r  Y	  s1     ")25H_dh)!')E Lrq   c                      t        dd| i|}|S )z EfficientNet-V2 Small. r   )efficientnetv2_sr  r  s      rk   r  r  c	       "VVvVELrq   c                      t        dd| i|}|S )z EfficientNet-V2 Medium. r   )efficientnetv2_m)ro  r  s      rk   r  r  j	  r  rq   c                      t        dd| i|}|S )z EfficientNet-V2 Large. r   )efficientnetv2_l)rt  r  s      rk   r  r  q	  r  rq   c                      t        dd| i|}|S )z EfficientNet-V2 Xtra-Large. r   )efficientnetv2_xl)ry  r  s      rk   r  r  x	  s     #X:XQWXELrq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z1 EfficientNet-B0. Tensorflow compatible variant  r(  r;   r  r   r.  )tf_efficientnet_b0r  r  s      rk   r  r  	  O     h 12
j&)m14sWamekmELrq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z1 EfficientNet-B1. Tensorflow compatible variant  r(  r;   r  r   r#  r.  )tf_efficientnet_b1r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z1 EfficientNet-B2. Tensorflow compatible variant  r(  r;   r  r#  r   r.  )tf_efficientnet_b2r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z0 EfficientNet-B3. Tensorflow compatible variant r(  r;   r  r   r  r.  )tf_efficientnet_b3r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z0 EfficientNet-B4. Tensorflow compatible variant r(  r;   r  r  r:  r.  )tf_efficientnet_b4r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z0 EfficientNet-B5. Tensorflow compatible variant r(  r;   r  r>  r?  r.  )tf_efficientnet_b5r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z0 EfficientNet-B6. Tensorflow compatible variant r(  r;   r  r:  rB  r.  )tf_efficientnet_b6r  r  s      rk   r  r  	  O     h 12
j&)m14sWamekmELrq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z0 EfficientNet-B7. Tensorflow compatible variant r(  r;   r  rE  rF  r.  )tf_efficientnet_b7r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z0 EfficientNet-B8. Tensorflow compatible variant r(  r;   r  r?  rI  r.  )tf_efficientnet_b8r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z= EfficientNet-L2 NoisyStudent. Tensorflow compatible variant r(  r;   r  rL  rM  r.  )tf_efficientnet_l2r  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z9 EfficientNet-Edge Small. Tensorflow compatible variant  r(  r;   r  r   r.  )tf_efficientnet_esr*  r    rN  r  s      rk   r  r  	  O     h 12
j&)"m14sWamekmELrq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z: EfficientNet-Edge-Medium. Tensorflow compatible variant  r(  r;   r  r   r#  r.  )tf_efficientnet_emr  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z9 EfficientNet-Edge-Large. Tensorflow compatible variant  r(  r;   r  r   r  r.  )tf_efficientnet_elr  r  s      rk   r  r  	  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )zF EfficientNet-CondConv-B0 w/ 4 Experts. Tensorflow compatible variant r(  r;   r  r   r.  )tf_efficientnet_cc_b0_4er*  r    rQ  r  s      rk   r  r  
  sO     h 12
j&)&"s7:S]gskqsELrq   c                 x    |j                  dt               |j                  dd       t        	 dddd| d|}|S )zF EfficientNet-CondConv-B0 w/ 8 Experts. Tensorflow compatible variant r(  r;   r  r   rI   ro  )tf_efficientnet_cc_b0_8er  r  s      rk   r  r  
  Q     h 12
j&)&")7:Sef)!')E Lrq   c                 x    |j                  dt               |j                  dd       t        	 dddd| d|}|S )	zF EfficientNet-CondConv-B1 w/ 8 Experts. Tensorflow compatible variant r(  r;   r  r   r#  rI   ro  )tf_efficientnet_cc_b1_8er  r  s      rk   r  r  
  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )ru  r(  r;   r  r   r.  )tf_efficientnet_lite0r*  r    rX  r  s      rk   r  r  (
  O     h 12
j&)"p47#ZdphnpELrq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )rz  r(  r;   r  r   r#  r.  )tf_efficientnet_lite1r  r  s      rk   r  r  3
  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )r}  r(  r;   r  r#  r   r.  )tf_efficientnet_lite2r  r  s      rk   r  r  >
  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )r  r(  r;   r  r   r  r.  )tf_efficientnet_lite3r  r  s      rk   r  r  I
  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )r  r(  r;   r  r  r:  r.  )tf_efficientnet_lite4r  r  s      rk   r  r  T
  r  rq   c                 p    |j                  dt               |j                  dd       t        dd| i|}|S )z7 EfficientNet-V2 Small. Tensorflow compatible variant  r(  r;   r  r   )tf_efficientnetv2_s)r*  r    rh  r  s      rk   r  r  _
  =     h 12
j&)!YJYRXYELrq   c                 p    |j                  dt               |j                  dd       t        dd| i|}|S )z8 EfficientNet-V2 Medium. Tensorflow compatible variant  r(  r;   r  r   )tf_efficientnetv2_m)r*  r    ro  r  s      rk   r  r  h
  r  rq   c                 p    |j                  dt               |j                  dd       t        dd| i|}|S )z7 EfficientNet-V2 Large. Tensorflow compatible variant  r(  r;   r  r   )tf_efficientnetv2_l)r*  r    rt  r  s      rk   r  r  q
  r  rq   c                 p    |j                  dt               |j                  dd       t        dd| i|}|S )z? EfficientNet-V2 Xtra-Large. Tensorflow compatible variant
    r(  r;   r  r   )tf_efficientnetv2_xl)r*  r    ry  r  s      rk   r  r  z
  s=     h 12
j&)"[j[TZ[ELrq   c                 p    |j                  dt               |j                  dd       t        dd| i|}|S )z4 EfficientNet-V2-B0. Tensorflow compatible variant  r(  r;   r  r   )tf_efficientnetv2_b0r*  r    r`  r  s      rk   r  r  
  s=     h 12
j&)$]
]V\]ELrq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z4 EfficientNet-V2-B1. Tensorflow compatible variant  r(  r;   r  r   r#  r.  )tf_efficientnetv2_b1r  r  s      rk   r  r  
  O     h 12
j&)$o36YcogmoELrq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z4 EfficientNet-V2-B2. Tensorflow compatible variant  r(  r;   r  r#  r   r.  )tf_efficientnetv2_b2r  r  s      rk   r  r  
  r  rq   c                 v    |j                  dt               |j                  dd       t        	 ddd| d|}|S )z3 EfficientNet-V2-B3. Tensorflow compatible variant r(  r;   r  r   r  r.  )tf_efficientnetv2_b3r  r  s      rk   r  r  
  r  rq   c                 &    t        	 ddd| d|}|S )r7  r   r  r.  )efficientnet_x_b3r|  r  s      rk   r  r  
  s.      l03cV`ldjlELrq   c                 &    t        	 ddd| d|}|S )r=  r>  r?  r.  )efficientnet_x_b5r  r  s      rk   r  r  
  s.      l03cV`ldjlELrq   c                 (    t        	 dddd| d|}|S )r=  gQ?r?  rI   )r   r
  r{  r   )efficientnet_h_b5r  r  s      rk   r  r  
  s1      x04sTUblxpvxELrq   c                 $    t        	 dd| d|}|S )z"Creates a MixNet Small model.
    r   r   r   )mixnet_s)r  r  s      rk   r  r  
  +     M'*zMEKMELrq   c                 $    t        	 dd| d|}|S )z#Creates a MixNet Medium model.
    r   r  )mixnet_mr  r  s      rk   r  r  
  r  rq   c                 $    t        	 dd| d|}|S )z"Creates a MixNet Large model.
    ?r  )mixnet_lr  r  s      rk   r  r  
  r  rq   c                 &    t        	 ddd| d|}|S )zgCreates a MixNet Extra-Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    r>  r   r.  )	mixnet_xlr  r  s      rk   r  r  
  s-    
 d(+cjd\bdELrq   c                 &    t        	 ddd| d|}|S )znCreates a MixNet Double Extra Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    g333333@r  r.  )
mixnet_xxlr  r  s      rk   r  r  
  s-    
 e),sze]ceELrq   c                 t    |j                  dt               |j                  dd       t        	 dd| d|}|S )z@Creates a MixNet Small model. Tensorflow compatible variant
    r(  r;   r  r   r  )tf_mixnet_s)r*  r    r  r  s      rk   r   r   
  L     h 12
j&)P*-*PHNPELrq   c                 t    |j                  dt               |j                  dd       t        	 dd| d|}|S )zACreates a MixNet Medium model. Tensorflow compatible variant
    r(  r;   r  r   r  )tf_mixnet_mr*  r    r  r  s      rk   r  r  
  r  rq   c                 t    |j                  dt               |j                  dd       t        	 dd| d|}|S )z@Creates a MixNet Large model. Tensorflow compatible variant
    r(  r;   r  r  r  )tf_mixnet_lr  r  s      rk   r  r  	  r  rq   c                      t        dd| i|}|S )N)	tinynet_ar   r   r   r  r  s      rk   r  r    s    P:PPELrq   c                      t        dd| i|}|S )N)	tinynet_br  r#  r   r	  r  s      rk   r  r        QJQ&QELrq   c                      t        dd| i|}|S )N)	tinynet_cHzG?g333333?r   r	  r  s      rk   r  r     s    RZR6RELrq   c                      t        dd| i|}|S )N)	tinynet_dr  g=
ףp=?r   r	  r  s      rk   r  r  &  s    SjSFSELrq   c                      t        dd| i|}|S )N)	tinynet_egRQ?g333333?r   r	  r  s      rk   r  r  ,  r  rq   c                      t        dd| i|}|S )z MobileNet-EdgeTPU-v1 100. r   )mobilenet_edgetpu_100r  r  s      rk   r  r  2  s     #\z\U[\ELrq   c                      t        dd| i|}|S )z# MobileNet-EdgeTPU-v2 Extra Small. r   )mobilenet_edgetpu_v2_xsr  r  s      rk   r  r  9  s     #^^W]^ELrq   c                      t        dd| i|}|S )z MobileNet-EdgeTPU-v2 Small. r   )mobilenet_edgetpu_v2_sr  r  s      rk   r  r  @       #]
]V\]ELrq   c                      t        dd| i|}|S )z MobileNet-EdgeTPU-v2 Medium. r   )mobilenet_edgetpu_v2_mr  r  s      rk   r  r  G  r  rq   c                      t        dd| i|}|S )z MobileNet-EdgeTPU-v2 Large. r   )mobilenet_edgetpu_v2_lr  r  s      rk   r  r  N  r  rq   c                      t        dd| i|}|S )Nr   )test_efficientnet)r  r  s      rk   r!  r!  U  s    "X:XQWXELrq   c                 b    t        	 d| |j                  dt        t        d            d|}|S )Nr=   r  r=  r   r=   )test_efficientnet_gn)r  r   r   r   r  s      rk   r$  r$  [  s?     #::lGLQ,OP 	E Lrq   c                 L    t        	 d| |j                  dt              d|}|S )Nr=   r#  )test_efficientnet_ln)r  r   r   r  s      rk   r&  r&  g  s6    "::lN; 	E Lrq   c                 b    t        	 d| |j                  dt        t        d            d|}|S )Nr=   r  r=  r#  )test_efficientnet_evos)r  r   r   r   r  s      rk   r(  r(  r  s=    " ::lGKA,NO 	E Lrq   tf_efficientnet_b0_aptf_efficientnet_b1_aptf_efficientnet_b2_aptf_efficientnet_b3_aptf_efficientnet_b4_aptf_efficientnet_b5_aptf_efficientnet_b6_aptf_efficientnet_b7_aptf_efficientnet_b8_aptf_efficientnet_b0_nstf_efficientnet_b1_nstf_efficientnet_b2_nstf_efficientnet_b3_nstf_efficientnet_b4_nstf_efficientnet_b5_nstf_efficientnet_b6_nstf_efficientnet_b7_nsr5  r8  r  r  )tf_efficientnet_l2_ns_475tf_efficientnet_l2_nstf_efficientnetv2_s_in21ft1ktf_efficientnetv2_m_in21ft1ktf_efficientnetv2_l_in21ft1ktf_efficientnetv2_xl_in21ft1ktf_efficientnetv2_s_in21ktf_efficientnetv2_m_in21ktf_efficientnetv2_l_in21ktf_efficientnetv2_xl_in21kefficientnet_b2aefficientnet_b3a
mnasnet_a1
mnasnet_b1r   )r   F)r   r   NFFF)r   r   NFF)r   r   r  NF)r   r   NF)r   r   r   F)r   r   F)r   r   r  Nr   F)r0   )r   	functoolsr   typingr   r   r   r   r   r	   r   torch.nnrS   torch.nn.functional
functionalr   	timm.datar
   r   r   r   timm.layersr   r   r   r   r   r   r   _builderr   r   _efficientnet_blocksr   _efficientnet_builderr   r   r   r   r   r   r   r    	_featuresr!   r"   r#   _manipulater$   r%   	_registryr&   r'   r(   __all__r   r)   r*   r   r   r   r  r  r  r*  r2  rB  rN  rQ  rX  r`  rh  ro  rt  ry  r|  r  r  r  r  r  r  default_cfgsr  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r"  r&  r)  r,  r/  r3  r5  r8  r;  r@  rC  rG  rJ  rN  rP  rS  rU  rW  rY  r\  r^  rb  re  rg  ri  rl  rp  rs  rv  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r&  r(  r   rP   rq   rk   <module>rW     s"  $J  ? ?     r r. . . G /J J J F F 3 Y Y1
2c299 cL	`&299 `&F6!H!H< ;>JO!J ;>9>"J< H PQ$)/f \aB af@&T \a> fk%R \aB \aB \aB PQ/4PfBB.Vr0 % I	&TVI	&TVI	& TvI	& TVI	& tvI	& ty I	& tv I	& tvI	&  t~ !I	&( *4$*@%T,)I	&2 +D$*@%T-3I	&< *4$*@m3,=I	&H  II	&J  {"KI	&T  UI	&V t~ WI	&\ !]I	&b !cI	&h t~ iI	&p Dv "qI	&x dx "yI	&D t~ EI	&J *4$*@m3,HKI	&R *4$*@ 3&%S	,:SI	&\ t{%S :]I	&d t~ FMad feI	&l  FMad!fmI	&t  D Hmcf!huI	&| ' Hsh)X}I	&B  HtQV!XCI	&H  =Hu"NII	&L  =Hu"NMI	&P  =Hu"NQI	&T  =Hu"NUI	&\ #DF]I	&^ &tv_I	&` )$&aI	&b #D FM\_%acI	&f &t FM\_(agI	&j %dfkI	&l *4 HsM,;mI	&t "4=FT$KuI	&x *4 HsM,;yI	&B t~ CI	&H  FU!DII	&P t{ Hu FQI	&Z "4 E$[I	&` "4 E Hu$FaI	&j &tvkI	&l &tvmI	&n &t}PVaf'goI	&r !$ B#sI	&x #D FU%DyI	&| #D FU%D}I	&@ #D Hu%FAI	&D #D Hu%FEI	&J "4{ F4:P	$RKI	&T "4{ F4:P	$RUI	&^ "4{ H4:P	$R_I	&j #D A -6\_%akI	&r &t G -6\_(asI	&z #D E -6\_%a{I	&B #D D -8^a%cCI	&L !$ -6\_#aMI	&P !$ -8^a#cQI	&T !$ -8^a#cUI	&X "4 -8^a$cYI	&^ %d B '"_I	&f %d B FU'DgI	&n %d B FU'DoI	&v %d B Hu'FwI	&~ %d B Hu'FI	&F %d B Hu'FGI	&N %d B Hu'FOI	&V %d B Hu'FWI	&^ )$ F Hu+F_I	&f %d B Ht'EgI	&p !$ B$*@]#\qI	&x !$ B$*@ FU	#DyI	&B !$ B$*@ FU	#DCI	&L !$ B$*@ Hu	#FMI	&V !$ B$*@ Hu	#FWI	&` !$ B$*@ Hu	#FaI	&j !$ B$*@ Hu	#FkI	&t !$ B$*@ Hu	#FuI	&~ !$ B$*@ Hu	#FI	&J	 !$ B Hu#FK	I	&R	 !$ B Hu#FS	I	&Z	 !$ B Hu#F[	I	&d	 !$ B #"e	I	&l	 !$ B FU#Dm	I	&t	 !$ B FU#Du	I	&|	 !$ B Hu#F}	I	&D
 !$ B Hu#FE
I	&L
 !$ D Hu#FM
I	&T
 !$ B Hu#FU
I	&\
 !$ D Hu#F]
I	&f
 t A  "g
I	&n
 t A FU Do
I	&v
 t A FU Dw
I	&~
 t A Hu F
I	&F t A Hu FGI	&N t A Hu FOI	&X t~/ 	 $YI	&b t~/ FU	 DcI	&l t~/ Hu	 FmI	&x $T E$*@&ByI	&@ $T E$*@&BAI	&H $T E$*@ FU	&DII	&T !$ B/	#UI	&` !$ B/ FU#aI	&n !$ B/ FU#oI	&| !$ B/ HuT^	#`}I	&F !$ B/ HuT^	#`GI	&R ( M/ -8^a	*cSI	&\ ( M/ -8^amu	*w]I	&f ( M/ -8^amu	*wgI	&p )$ P/ -8^amu	+wqI	&|  F/ -8^a	!c}I	&F  F/ -8^amu	!wGI	&P  F/ -8^amu	!wQI	&\   J/u -8^a	"c]I	&f   J/u -8^amu	"wgI	&p   J/u -8^amu	"wqI	&z !$ M/u -8^amu	#w{I	&F   G -6"SGI	&N   G -6\a"cOI	&V   G -6\a"cWI	&^ )$$*@ -6\_ks+u_I	&f   G -6\a"cgI	&n !$$*@e -6\a#coI	&x tyI	&~ tI	&D tEI	&J xKI	&P DFQI	&T wUI	&Z w[I	&` waI	&h d F`iI	&p d F`qI	&x d F`yI	&@ d F`AI	&H d F`II	&R &t 3(0SI	&X ( 3*0YI	&^ ' 3)0_I	&d 1$$*@m43eI	&n ' 3)0oI	&v "4 FT$CwI	&| %d FT'C}I	&B %d/ FT'CCI	&J '/ FT)CKI	& I	X |   |   |   |                  <   L   <   <   <   <   <   <   L   L   l      <   <   <   <   <   <   <   <   <   <   l      L   l         <   ,   <   <   ,            l   l   l   l   l   ,   ,   ,   |   ,   |   |   L   L   L   \   l   l   l   l   l   l   l   l   l   l   l   l   l   L   L   L                  |   |   |                  \   \   \   L   L   L   \   l   |   |   |   \  
 \  
 \  
 \  
 \  
    <   ,   ,   ,   \  
       ,   H  '9 '9 ' 9 ' 9	 '
 9 ' 9 ' 9 ' 9 ' 9 ' = ' = ' = ' = ' = ' = '  =! '" =# '$ "F=$G$G$G%I!<!<!<">))!? '  rq   