
    RЦi                    ~!   S r SSKJr  SSKJrJrJrJrJrJ	r	  SSK
r
SSKJr  SSKJs  Jr  SSKJrJrJrJr  SSKJrJrJrJrJrJrJr  SSKJrJr  SS	K J!r!  SS
K"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*  SSK+J,r,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3J4r4J5r5  SS/r6 " S S\Rn                  5      r8 " S S\Rn                  5      r9GSS jr:GSS jr;GSS jr<GSS jr=  GSS jr>  GSS jr?GSS jr@GSS jrA  GSS jrB GSS jrC GSS jrDGSS jrE GSS jrF GSS  jrG GSS! jrH GSS" jrI GSS# jrJ  GSS$ jrKGSS% jrLGSS& jrMGSS' jrNGSS( jrOGSS) jrPGS S+ jrQ\3" 0 S,\Q" 5       _S-\Q" 5       _S.\Q" S/S0S19_S2\Q" 5       _S3\Q" 5       _S4\Q" S5S0S19_S6\Q" S7S0S19_S8\Q" 5       _S9\Q" S:S0S19_S;\Q" S0\\S<S=S>9_S?\Q" S0\\S<S=S>9_S@\Q" S0\\SAS<SSB9_SC\Q" 5       _SD\Q" SES0SFSG9_SH\Q" 5       _SI\Q" SJS0S19_SK\Q" SLS0S19_0 SM\Q" SNS0S19_SO\Q" SPS0S19_SQ\Q" SRS0SSSG9_ST\Q" SUS0SSSG9_SV\Q" SWS0S19_SX\Q" S0\\SAS<SSB9_SY\Q" S0\\SZSAS[S\SS]9_S^\Q" S_S0S<SS`9_Sa\Q" SbS0S<S[S\SSc9_Sd\Q" SeS0S\SfSgSSc9_Sh\Q" SiS0SgSjSkSSc9_Sl\Q" S0SmSnSSoSp9_Sq\Q" S0SrSsS=StSu9_Sv\Q" S*SwSxSySz9_S{\Q" S*S|S}S~Sz9_S\Q" S*SSSSz9_S\Q" S*SSSSz9_E0 S\Q" 5       _S\Q" 5       _S\Q" 5       _S\Q" S\SfSgSS9_S\Q" S\SfSgSS9_S\Q" 5       _S\Q" S0SmSnSSoSS9_S\Q" S*S\SfS=Sz9_S\Q" S0SmSnSSoSS9_S\Q" SS0S19_S\Q" SS0SZS[SS9_S\Q" SS0SSjSS9_S\Q" SS0S19_S\Q" SS0SSjSS9_S\Q" 5       _S\Q" 5       _S\Q" SZS[SS9_E0 S\Q" SS0S19_S\Q" SZS[SS9_S\Q" SSfSS9_S\Q" SSjSS9_S\Q" SSSS9_S\Q" SS0SZS[S\\S9_S\Q" SS0SSfS\\S9_S\Q" SS0SSjS\\S9_S\Q" SS0SS\SSS9_S\Q" SS0SS\SSS9_S\Q" SS0S\SkSfSS9_S\Q" SS0SgSrSjSS9_S\Q" S\SkSfSS9_S\Q" SgSrSjSS9_S\Q" SkSSSS9_S\Q" SkSSSS9_S\Q" SS0SS9_E0 S\Q" SS0SZS[SS9_S\Q" SS0SSfSS9_S\Q" SS0SSjSS9_S\Q" SS0SSSS9_S\Q" SS0SSSS9_S\Q" SS0SwSxSyS9_S\Q" SS0S|S}S~S9_S\Q" SS0SSSS9_S\Q" SS0SSSS9_S\Q" SS0\\SS9_S\Q" SS0\\SZS[SS9_S\Q" SS0\\SSfSS9_S\Q" SS0\\SSjSS9_S\Q" SS0\\SSSS9_S\Q" SS0\\SSSS9_S\Q" SS0\\SwSxSyS9_S\Q" SS0\\S|S}S~S9_E0 S\Q" SS0\\SSSS9_S\Q" SS0SSSS9_S\Q" SS0S|S}S~S9_S\Q" SS0SSSS9_S\Q" SS0SS9_GS \Q" GSS0SZS[SS9_GS\Q" GSS0SSfSS9_GS\Q" GSS0SSjSS9_GS\Q" GSS0SSSS9_GS\Q" GS	S0SSSS9_GS
\Q" GSS0SwSxSyS9_GS\Q" GSS0S|S}S~S9_GS\Q" GSS0SS9_GS\Q" GSS0SZS[SS9_GS\Q" GSS0SSfSS9_GS\Q" GSS0SSjSS9_GS\Q" GSS0SSSS9_E0 GS\Q" GSS0SSSS9_GS\Q" GSS0GSGSSS9_GS\Q" GSS0GSGSSZS[SS9_GS\Q" GS S0GSGSSSjSS9_GS!\Q" GS"S0\\GS#9_GS$\Q" GS%S0\\GS#9_GS&\Q" GS'S0\\SZS[SS9_GS(\Q" GS)S0GSGSSFGS*9_GS+\Q" GS,S0GSGSSZS[SSFGS-9_GS.\Q" GS/S0GSGSSSfSSFGS-9_GS0\Q" GS1S0GSGSSSjSSSGS-9_GS2\Q" GS3S0GSGSSSGS4SSGS-9_GS5\Q" GS6S0GSGSSSkSjSGS79_GS8\Q" GS9S0GSGSSkSSSSoGS:9	_GS;\Q" GS<S0GSGSSkSSSSoGS:9	_GS=\Q" GS>S0GSGSSkSSSSoGS:9	_GS?\Q" GS@S0GSGSSSkSjSGS79_E0 GSA\Q" GSBS0GSGSSkSSSSoGS:9	_GSC\Q" GSDS0GSGSSkSSSSoGS:9	_GSE\Q" GSFS0GSGSGSGSSkSjSGSH9	_GSI\Q" GSJS0GSGSGSGSkSSSSoGSK9
_GSL\Q" GSMS0GSGSGSGSkSSSSoGSK9
_GSN\Q" GSOS0GSGSGSGSkSSSSoGSK9
_GSP\Q" GSQS0GSRSGSSGST9_GSU\Q" GSVS0GSRSZGSSSS9_GSW\Q" GSXS0GSYSSSS9_GSZ\Q" S0\\SZSS[SASoGS[9_GS\\Q" GS]S0SZSS[SS9_GS^\Q" S0\\GSGSZSS[SGS_9_GS`\Q" GSaS0S19_GSb\Q" GScS0S19_GSd\Q" GSeS0S19_GSf\Q" GSgS0S19_GSh\Q" 5       _E0 GSi\Q" GSjS0S19_GSk\Q" GSlS0S19_GSm\Q" GSnS0S19_GSo\Q" GSRGSSGSpS0GSq9_GSr\Q" GSsGSSGStS0GSq9_GSu\Q" GSvGSSGSwS0GSq9_GSx\Q" GSyGSzGS{S0GSq9_GS|\Q" GS}GS~GSS0GSq9_GS\Q" SSAGS9_GS\Q" SSAGS9_GS\Q" SSAGS9_GS\Q" S0\\SAS<S=SB9_GS\Q" SSAGS9_GS\Q" S0GSGSzS=GS9_GS\Q" S0GSGSzS=GS9_GS\Q" S0GSGSGSGSzS=GS9_GS\Q" S0GSGSGSGSzS=GS9_E5      rR\4GSGS\84GS jj5       rS\4GSGS\84GS jj5       rT\4GSGS\84GS jj5       rU\4GSGS\84GS jj5       rV\4GSGS\84GS jj5       rW\4GSGS\84GS jj5       rX\4GSGS\84GS jj5       rY\4GSGS\84GS jj5       rZ\4GSGS\84GS jj5       r[\4GSGS\84GS jj5       r\\4GSGS\84GS jj5       r]\4GSGS\84GS jj5       r^\4GSGS\84GS jj5       r_\4GSGS\84GS jj5       r`\4GSGS\84GS jj5       ra\4GSGS\84GS jj5       rb\4GSGS\84GS jj5       rc\4GSGS\84GS jj5       rd\4GSGS\84GS jj5       re\4GSGS\84GS jj5       rf\4GSGS\84GS jj5       rg\4GSGS\84GS jj5       rh\4GSGS\84GS jj5       ri\4GSGS\84GS jj5       rj\4GSGS\84GS jj5       rk\4GSGS\84GS jj5       rl\4GSGS\84GS jj5       rm\4GSGS\84GS jj5       rn\4GSGS\84GS jj5       ro\4GSGS\84GS jj5       rp\4GSGS\84GS jj5       rq\4GSGS\84GS jj5       rr\4GSGS\84GS jj5       rs\4GSGS\84GS jj5       rt\4GSGS\84GS jj5       ru\4GSGS\84GS jj5       rv\4GSGS\84GS jj5       rw\4GSGS\84GS jj5       rx\4GSGS\84GS jj5       ry\4GSGS\84GS jj5       rz\4GSGS\84GS jj5       r{\4GSGS\84GS jj5       r|\4GSGS\84GS jj5       r}\4GSGS\84GS jj5       r~\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS jj5       r\4GSGS\84GS  jj5       r\5" \0 GSS_GSS_GSS_GSS_GSS_GSS_GSS_GSS_GS	S_GS
S_GSS_GSS_GSS_GSS_GSS_GSS_GSS_SSGS5GS8GS;GS=GSEGSIGSLGSNGSGSGSGSGS.E5        g(!  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            %         ^  \ rS rSrSrSSSSSSSSS	S	S	S	\S
S
SS	S	4S\S\S\S\S\S\S\S\S\	S\
\   S\
\   S\
\   S\
\   S\S\S\S\	SS	4$U 4S jjjrS\R                   4S jr\R&                  R(                  S6S \S\\	\\	\4   4   4S! jj5       r\R&                  R(                  S7S"\SS	4S# jj5       r\R&                  R(                  S\R4                  4S$ j5       rS8S\S\	SS	4S% jjr      S9S&\R:                  S'\
\\\\   4      S(\S)\S*\	S+\S,\S\\\R:                     \\R:                  \\R:                     4   4   4S- jjr    S:S'\\\\   4   S.\S/\S,\S\\   4
S0 jjr S&\R:                  S\R:                  4S1 jr!S6S&\R:                  S2\S\R:                  4S3 jjr"S&\R:                  S\R:                  4S4 jr#S5r$U =r%$ );r)   ;   aN  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U ]  5         UUS.nU
=(       d    [        R                  n
U=(       d    [        R                  n[        X5      nU=(       d    [        nX l        X@l        Xl	        SU l
        U(       d  U" U5      n[        XEU4SU	S.UD6U l        U" U4SS0UD6U l        [        SUU	UU
UUUUS.UD6n[        R                  " U" XQ5      6 U l        UR"                  U l        U R$                   Vs/ s H  nUS   PM
     snU l        UR(                  nUS	:  a4  [        UUS
4SU	0UD6U l        U" U4SS0UD6U l        U=U l        U l        OB[        R2                  " 5       U l        [        R2                  " 5       U l        U=U l        U l        [5        U R.                  U R                  4SU0UD6u  U l        U l        [;        U 5        gs  snf )a2  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<   rA   r=   r>   r?   r@   rC   stager   r   rM   	pool_typeN )super__init__nnReLUBatchNorm2dr   r   r5   r7   rB   grad_checkpointingr   	conv_stembn1r   
Sequentialblocksfeaturesfeature_info
stage_endsin_chs	conv_headbn2r6   head_hidden_sizeIdentityr   rD   
classifierr   )selfr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rH   rI   ddnorm_act_layerbuilderfhead_chs	__class__s                            W/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/efficientnet.pyrS   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   ?Gc                 h   U R                   U R                  /nUR                  U R                  5        UR                  U R                  U R
                  U R                  /5        UR                  [        R                  " U R                  5      U R                  /5        [        R                  " U6 $ )z3Convert model to sequential for feature extraction.)rX   rY   extendr[   r`   ra   rD   rT   DropoutrB   rd   rZ   )re   layerss     rl   as_sequentialEfficientNet.as_sequential   sv    ..$((+dkk"t~~txx1A1ABCrzz$..14??CD}}f%%    coarsec                 0    [        SU(       a  SOSS4S/S9$ )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 )stemr[   )dict)re   ru   s     rl   group_matcherEfficientNet.group_matcher   s*     "&,"2JDQ,
 	
rt   enablec                     Xl         gzgEnable or disable gradient checkpointing.

Args:
    enable: Whether to enable gradient checkpointing.
NrW   re   r{   s     rl   set_grad_checkpointing#EfficientNet.set_grad_checkpointing   
     #)rt   c                     U R                   $ )zGet the classifier module.)rd   )re   s    rl   get_classifierEfficientNet.get_classifier   s     rt   c                 h    Xl         [        U R                  U R                   US9u  U l        U l        g)zReset the classifier head.

Args:
    num_classes: Number of classes for new classifier.
    global_pool: Global pooling type.
)rP   N)r5   r   r6   rD   rd   )re   r5   rD   s      rl   reset_classifierEfficientNet.reset_classifier   s2     ',=t//;-H)$/rt   xindicesnorm
stop_early
output_fmtintermediates_onlyextra_blocksc                    US;   d   S5       e/ nU(       a%  [        [        U R                  5      S-   U5      u  pON[        [        U R                  5      U5      u  pU	 Vs/ s H  oR                  U   PM     n	nU R                  U
   n
SnU R	                  U5      nU R                  U5      nX;   a  UR                  U5        [        R                  R                  5       (       d  U(       d  U R                  nOU R                  SU
 n[        USS9 He  u  pU R                  (       a/  [        R                  R                  5       (       d  [        X5      nOU" U5      nX;   d  MT  UR                  U5        Mg     U(       a  U$ XR                  S   :X  a"  U R                  U5      nU R                  U5      nX4$ s  snf )af  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#   lenr[   r^   rX   rY   appendtorchjitis_scripting	enumeraterW   r$   r`   ra   )re   r   r   r   r   r   r   r   intermediatestake_indices	max_indexifeat_idxr[   blks                  rl   forward_intermediates"EfficientNet.forward_intermediates   s}   0 Y&D(DD&&:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L8DE1OOA.LE	2INN1HHQK#  #99!!##:[[F[[),F&vQ7MH&&uyy/E/E/G/G"3*F'$$Q' 8   r**q!AA9 Fs   !F=
prune_norm
prune_headc                    U(       a%  [        [        U R                  5      S-   U5      u  pVO0[        [        U R                  5      U5      u  pVU R                  U   nU R                  SU U l        U(       d  U[        U R                  5      :  a4  [        R
                  " 5       U l        [        R
                  " 5       U l        U(       a  U R                  SS5        U$ )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   r1   )	r#   r   r[   r^   rT   rc   r`   ra   r   )re   r   r   r   r   r   r   s          rl   prune_intermediate_layers&EfficientNet.prune_intermediate_layers   s    $ &:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L	2Ikk*9-S%55[[]DN{{}DH!!!R(rt   c                 D   U R                  U5      nU R                  U5      nU R                  (       a9  [        R                  R                  5       (       d  [        U R                  USS9nOU R                  U5      nU R                  U5      nU R                  U5      nU$ )z/Forward pass through feature extraction layers.T)flatten)
rX   rY   rW   r   r   r   r$   r[   r`   ra   re   r   s     rl   forward_featuresEfficientNet.forward_features?  sw    NN1HHQK""599+A+A+C+Ct{{At<AAANN1HHQKrt   
pre_logitsc                     U R                  U5      nU R                  S:  a)  [        R                  " XR                  U R                  S9nU(       a  U$ U R                  U5      $ )zForward pass through classifier head.

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

Returns:
    Output tensor.
r2   )ptraining)rD   rB   Fdropoutr   rd   )re   r   r   s      rl   forward_headEfficientNet.forward_headK  sN     Q>>B		!~~FAq6DOOA$66rt   c                 J    U R                  U5      nU R                  U5      nU$ )zForward pass.)r   r   r   s     rl   forwardEfficientNet.forwardZ  s'    !!!$a rt   )r[   rY   ra   rd   r`   rX   rB   r]   rD   rW   rb   r7   r5   r6   r^   FT)r3   )NFFr   FF)r   FTF)&__name__
__module____qualname____firstlineno____doc__r   r   intboolstrr   r   r   floatrS   rT   rZ   rr   r   r   ignorer   r	   r   ry   r   Moduler   r   Tensorr   r   r   r   r   r   __static_attributes____classcell__rk   s   @rl   r)   r)   ;   s@   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 %,,  rt   c            !       (  ^  \ rS rSrSrSSSSSSSSS	S	S	S	\S
S
S	S	4S\S\\S4   S\	S\S\S\S\
S\S\	S\\   S\\   S\\   S\\   S\S\S\4 U 4S jjjr\R"                  R$                  S"S\
SS	4S jj5       rS\\R*                     4S  jrS!rU =r$ )#r*   ia  zEfficientNet Feature Extractor

A work-in-progress feature extraction module for EfficientNet, to use as a backbone for segmentation
and object detection models.
)r   r   rJ   r/      
bottleneckr/   r0   Fr1   Nr2   r4   out_indices.feature_locationr7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   c                   > [         TU ]  5         UUS.nU
=(       d    [        R                  n
U=(       d    [        R                  n[        X5      nU=(       d    [        nX@l        Xl        SU l	        U(       d  U" U5      n[        XEU4SU	S.UD6U l        U" U4SS0UD6U l        [        SUU	UU
UUUUUS.	UD6n[        R                  " U" XQ5      6 U l        [!        UR"                  U5      U l        U R$                  R'                  5        Vs0 s H  nUS   US	   _M     snU l        [+        U 5        S U l        US
:w  a9  U R$                  R'                  SS9n[/        UU R1                  5       5      U l        g g s  snf )NrG   FrJ   rK   rN   T)	r;   r<   rA   r=   r>   r?   r@   rC   r   rO   indexr   )module	hook_type)keysrQ   )rR   rS   rT   rU   rV   r   r   r7   rB   rW   r   rX   rY   r   rZ   r[   r!   r\   r]   	get_dicts_stage_out_idxr   feature_hooksr"   named_modules)re   r4   r   r   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rH   rI   rf   rg   rh   ri   hooksrk   s                           rl   rS   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?r{   rE   c                     Xl         gr}   r~   r   s     rl   r   +EfficientNetFeatures.set_grad_checkpointing  r   rt   c                 `   U R                  U5      nU R                  U5      nU R                  c  / nSU R                  ;   a  UR	                  U5        [        U R                  5       Hs  u  p4U R                  (       a/  [        R                  R                  5       (       d  [        XA5      nOU" U5      nUS-   U R                  ;   d  Mb  UR	                  U5        Mu     U$ U R                  U5        U R                  R                  UR                  5      n[        UR                  5       5      $ )Nr   r   )rX   rY   r   r   r   r   r[   rW   r   r   r   r%   
get_outputrH   listvalues)re   r   r\   r   bouts         rl   r   EfficientNetFeatures.forward  s    NN1HHQK%HD'''"!$++.**5993I3I3K3K"1(A!Aq5D///OOA& / OKKN$$//9C

%%rt   )	r   r[   rY   rX   rB   r   r]   rW   r7   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   r   r   r   r   r   s   @rl   r*   r*   a  sZ    ,;$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 <K| YY)T )T ) )&D. & &rt   c                 .   Sn[         nS nUR                  SS5      (       a  SU;   d  SU;   a  SnO
Sn[        nSnUR                  S	S
5      n[        UU U4US:H  U=(       a    US:g  US.UD6nUS:X  a!  [	        UR
                  5      =Ul        Ul        U$ )Nr1   features_onlyFfeature_cfgfeature_clscfg)r5   r6   	head_convrD   clspretrained_strictT)r   r   kwargs_filter)r)   popr*   r   r   pretrained_cfgdefault_cfg)variant
pretrainedkwargsfeatures_mode	model_clsr   r   models           rl   _create_effnetr     s    MIMzz/5))F"mv&=!MWM,I!M

#6=  $u,+F0F# E 3NuOcOc3ddu0Lrt         ?c                     S/S/S/S/S/S/S//n[        S[        U5      S[        [        US	9UR	                  S
S5      =(       d#    [        [
        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )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_c320r0   
multiplierr>   Nr4   r8   rA   r>   rQ   	rx   r   r   r   r   rT   rV   r   r   r   channel_multiplierr   r   arch_defmodel_kwargsr   s          rl   _gen_mnasnet_a1r    s     
%%		$%		%&	%&	H   "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7?,?ELrt   c                     S/S/S/S/S/S/S//n[        S[        U5      S[        [        US	9UR	                  S
S5      =(       d#    [        [
        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )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_noskipr0   r   r>   Nr   rQ   r   r   s          rl   _gen_mnasnet_b1r    s     
""						%&H   "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7?,?ELrt   c                     S/S/S/S/S/S/S//n[        S[        U5      S[        [        US	9UR	                  S
S5      =(       d#    [        [
        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )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   rQ   r   r   s          rl   _gen_mnasnet_smallr  '  s     
			$%	$%	$%	H  "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7?,?ELrt   c                 \   S/S/S/S/S//n[        [        US9n	U(       a  U(       a  SO[        SU	" S5      5      OSn
[        S[	        UUUUS	9U
S
UU	UR                  SS5      =(       d#    [        [        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6nU$ )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_sizer0   r>   Nrelu6r4   r6   r8   r:   rA   r>   r=   rQ   )r   r   maxrx   r   r   rT   rV   r   r   r   )r   r   r  r  fix_stem_headr   r   r   r   rA   head_featuresr  r   s                rl   _gen_mobilenet_v1r#  D  s     
				H >6HILR[]TD,t:L0MabM "-(!	
 #!::lD1gWR^^5g_eOf5g#FG4 L 7?,?ELrt   c                 N   S/S/S/S/S/S/S//n[        [        US9n[        S[        UUUUS	9U(       a  S
O[	        S
U" S
5      5      SUUUR                  SS5      =(       d#    [        [        R                  40 [        U5      D6[        US5      S.UD6n	[        X40 U	D6n
U
$ )zGenerate 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.   r0   r>   Nr  r  rQ   )r   r   rx   r   r   r   rT   rV   r   r   r   )r   r   r  r  r!  r   r   r   rA   r  r   s              rl   _gen_mobilenet_v2r*  h  s     
						H >6HIL "-(!	
 +TD,t:L0M!::lD1gWR^^5g_eOf5g#FG4 L 7?,?ELrt   c                    S/SS// SQ/ SQSS/S/S	//n[        S[        U5      S
S[        [        US9UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )aD  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)r4   r8   r6   rA   r>   rQ   r   r   s          rl   _gen_fbnetcr;    s     
	34`J	 56		H  "8,^8JK::lD1gWR^^5g_eOf5g L 7?,?ELrt   c                    S/S/SS/SS/SS/S	/S
//n[        S[        U5      S[        [        US9UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )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  r0   r   r>   Nr   rQ   r   r   s          rl   _gen_spnasnetrC    s     
""		34	34	34		%&H   "8,^8JK::lD1gWR^^5g_eOf5g	
 L 7?,?ELrt   c                 "   S/S/S/S/S/S/S//n[        [        XS9n[        S[        XrUS	9U" S
5      SU[	        US5      UR                  SS5      =(       d#    [        [        R                  40 [        U5      D6S.UD6n	[        X40 U	D6n
U
$ )a0  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.   r0   swishr>   Nr4   r6   r8   rA   r=   r>   rQ   
r   r   rx   r   r   r   rT   rV   r   r   )r   r   r  channel_divisorr  r   r   r   rA   r  r   s              rl   _gen_efficientnetrS    s    8 
%%	$%	$%	$%	%&	%&	%&H >6HbL "8*U!$'!#FG4::lD1gWR^^5g_eOf5g L 7?,?ELrt   c                    S/S/S/S/S/S//n[        [        US9n[        S[        XbUS9U" S	5      S
UUR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6n	U	$ )zCreates 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   rN  r.   r0   r>   Nrelur4   r6   r8   rA   r>   r=   rQ   
r   r   rx   r   r   rT   rV   r   r   r   
r   r   r  r  r   r   r   rA   r  r   s
             rl   _gen_efficientnet_edger_     s     
**						H >6HIL "8*U!$'!::lD1gWR^^5g_eOf5g#FF3 L 7?,?ELrt   c                 "   S/S/S/S/S/S/S//n[        [        US9n[        S[        XbUS	9U" S
5      SUUR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6n	U	$ )zCreates an EfficientNet-CondConv model.

Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv
rE  rF  rG  rH  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.   r0   r>   NrO  r\  rQ   r]  )
r   r   r  ra  r   r   r   rA   r  r   s
             rl   _gen_efficientnet_condconvrb     s     
%%	$%	$%	$%	)*	)*	)*H >6HIL "8Rde!$'!::lD1gWR^^5g_eOf5g#FG4 L 7?,?ELrt   c                    S/S/S/S/S/S/S//n[        S[        XRSS	9S
SS[        [        US9[	        US5      UR                  SS5      =(       d#    [        [        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )ao  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_c80r6  r
  r   T)r  r.   r0   r   r  r>   Nr4   r6   r8   r:   rA   r=   r>   rQ   )
rx   r   r   r   r   r   rT   rV   r   r   r   r   r  r   r   r   r  r   s           rl   _gen_efficientnet_literi  @  s    & 
						H  	"8dS^8JK#FG4::lD1gWR^^5g_eOf5g	 	L 7?,?ELrt   c                     S/S/S/S/S/S//n[        [        USS9n[        S[        XbUS	9U" S
5      SUUR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6n	U	$ )zCreates 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.25r2   r   round_limitrN  r.   r0   r>   Nsilur\  rQ   r]  r^  s
             rl   _gen_efficientnetv2_baserq  i  s     
##			$%	%&	%&H >6HVXYL "8*U!$'!::lD1gWR^^5g_eOf5g#FF3 L 7?,?ELrt   c                 L   S/S/S/S/S/S//nSnU(       a  S/US	'   S
/US'   Sn[        [        US9n	[        S[        XrUS9U	" U5      SU	UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n
[        X40 U
D6nU$ )aF  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   rN     r>   Nrp  r\  rQ   r]  )r   r   r  r  rwr   r   r   r6   rA   r  r   s               rl   _gen_efficientnetv2_sry    s     
##			%&	%&	&'H L	+,56>6HIL "8*U!,/!::lD1gWR^^5g_eOf5g#FF3 L 7?,?ELrt   c                    S/S/S/S/S/S/S//n[        S[        XbUS9S	S
[        [        US9UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6nU$ )zCreates 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.25rN  r.   rw  r   r>   Nrp  r\  rQ   
rx   r   r   r   r   rT   rV   r   r   r   	r   r   r  r  r   r   r   r  r   s	            rl   _gen_efficientnetv2_mr    s     
##			%&	&'	&'	%&H  "8*U^8JK::lD1gWR^^5g_eOf5g#FF3 L 7?,?ELrt   c                    S/S/S/S/S/S/S//n[        S[        XbUS9S	S
[        [        US9UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6nU$ )zCreates 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.25rN  r.   r0   r   r>   Nrp  r\  rQ   r~  r  s	            rl   _gen_efficientnetv2_lr         
##			&'	&'	&'	%&H  "8*U^8JK::lD1gWR^^5g_eOf5g#FF3 L 7?,?ELrt   c                    S/S/S/S/S/S/S//n[        S[        XbUS9S	S
[        [        US9UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6nU$ )zCreates 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
r  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.25rN  r.   r0   r   r>   Nrp  r\  rQ   r~  r  s	            rl   _gen_efficientnetv2_xlr    r  rt   c                 R    US:X  a  S/S/S/S/S/S/S//nOS/S	/S
/S/S/S/S//n[        [        XS9n	[        S[        XUS9U	" S5      SU	[	        US5      UR                  SS5      =(       d#    [        [        R                  40 [        U5      D6S.UD6n
[        X40 U
D6nU$ )aB  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_nrerH  rI  rJ  rK  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.25rL  rN  r.   r0   rp  r>   NrP  rQ   rQ  )r   r   r  rR  r  versionr   r   r   rA   r  r   s               rl   _gen_efficientnet_xr    s    6, !|+,,-,-())*)*)*
 ,,,-,-())*)*)*
 >6HbL "8*U!$'!#FF3::lD1gWR^^5g_eOf5g L 7?,?ELrt   c                    S/SS/SS/SS/SS	/S
S//n[        S[        U5      SS[        [        US9UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )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
rd  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r4   r6   r8   rA   r>   rQ   r   r   s          rl   _gen_mixnet_sr  b  s     
	')GH	+-WX	13YZ	68gh	13]^H  "8,^8JK::lD1gWR^^5g_eOf5g L 7?,?ELrt   c                    S/SS/SS/SS/SS	/S
S//n[        S[        XRSS9SS[        [        US9UR	                  SS5      =(       d#    [        [
        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )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  rw  r   r>   Nr  rQ   r   rh  s           rl   _gen_mixnet_mr    s     
	+-KL	-/YZ	,.]^	(*YZ	.0Z[H  "87S^8JK::lD1gWR^^5g_eOf5g L 7?,?ELrt   c                 @   S/S/S/S/S/S/S//n[        S[        XRSS	9[        S
[        S
USS5      5      SS[	        [        US9[        US5      UR                  SS5      =(       d#    [	        [        R                  40 [        U5      D6S.UD6n[        X40 UD6nU$ )zCreates a TinyNet model.
    rE  rF  rG  rH  rI  rJ  rK  r  r  r.   r  Nr0   Tr   rO  r>   rg  rQ   )rx   r   r   r   r   r   r   rT   rV   r   r   )r   model_widthr  r   r   r   r  r   s           rl   _gen_tinynetr    s     
%%(C'D	$%(C'D	%&)E(F	%&	H  	"87S~dKDIJ^D#FG4::lD1gWR^^5g_eOf5g	 	L 7?,?ELrt   c                    SU ;   ao  SnSnSnSn[        US5      n	S[        [           S[        4S jn
S	U ;   a	  S
nSn/ SQnO+SU ;   a  / SQnO SU ;   a  / SQnSnOSU ;   a  SnSn/ SQnSnO eU
" X5      nO'S
nSnSn[        US5      n	S/SS/SS/SS/SS/SS /S!//n[        S&[	        X5      UUU[        [        US"9UR                  S#S$5      =(       d#    [        [        R                  40 [        U5      D6U	S%.UD6n[        X40 UD6nU$ )'z
Based on definitions in: https://github.com/tensorflow/models/tree/d2427a562f401c9af118e47af2f030a0a5599f55/official/projects/edgetpu/vision

edgetpu_v2@      r.   r[  chsr  c           
          SU S    3/SU S    3SU SU S    3/SU S    3SU SU S    3SU S    3SU SU S    3/SU S	    3S
U S	    3/SU S    3S
U S    3/SU S    3S
U S    3/SU S    3//$ )Ncn_r1_k1_s1_cr   er_r1_k3_s2_e8_cr   er_r1_k3_s1_e4_gs_crJ   er_r1_k3_s1_e4_cr/   ir_r3_k3_s1_e4_cir_r1_k3_s1_e8_cr   ir_r1_k3_s2_e8_cr     rQ   )r  r  s     rl   	_arch_def)_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,-' rt   edgetpu_v2_xsr0   r/   )r:  r0   0   `            edgetpu_v2_s)rw  r  r     r  r     edgetpu_v2_m)r0   r  P   r  r     @  i@  edgetpu_v2_l   r  )r0   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)r4   r6   r8   r9   rA   r>   r=   rQ   )r   r   r   rx   r   r   r   r   rT   rV   r   r   )r   r   r  r   r   r8   r9   r  r6   r=   r  channelsr   r  r   s                  rl   _gen_mobilenet_edgetpur    s    w	
%ff5		49 	# 	. g%I 6Hw&7Hw&7HLw& J7HL5X2 	%ff5	 !#78!#78!#78(*>?"$9:"#
"  	"8>!)^8JK::lD1gWR^^5g_eOf5g	 	L 7?,?ELrt   c                    S/S/S/S/S//n[        [        USS9n[        S[        XR5      U" S5      S	UUR	                  S
S5      =(       d#    [        [
        R                  40 [        U5      D6[        US5      S.UD6n[        X40 UD6nU$ )z)Minimal test EfficientNet generator.
    rk  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.25r2   rn  r  rw  r>   Nrp  r\  rQ   r]  )	r   r   r  r   r   r   rA   r  r   s	            rl   _gen_test_efficientnetr    s     
##			$%	$%H >6HVXYL "8>!#&!::lD1gWR^^5g_eOf5g#FF3 L 7?,?ELrt   r1   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr-   r/      r  r  r  g      ?bicubicrX   rd   z
apache-2.0)urlr5   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convrd   license)r
   r   )r  r   s     rl   _cfgr  ,  s3    4}SYI%.B!
 $* rt   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  r5   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  r5   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  r5   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  r5   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_in1krE   c                      [        SSU 0UD6nU$ )z%MNASNet B1, depth multiplier of 0.5. r   )mnasnet_050r  r  r   r   r   s      rl   r  r         P:PPELrt   c                      [        SSU 0UD6nU$ )z&MNASNet B1, depth multiplier of 0.75. r   )mnasnet_075      ?r  r  s      rl   r	  r	    s     QJQ&QELrt   c                      [        SSU 0UD6nU$ )z%MNASNet B1, depth multiplier of 1.0. r   )mnasnet_100r   r  r  s      rl   r  r    r  rt   c                      [        SSU 0UD6nU$ )z%MNASNet B1,  depth multiplier of 1.4 r   )mnasnet_140ffffff?r  r  s      rl   r  r    r  rt   c                      [        SSU 0UD6nU$ )z,MNASNet A1 (w/ SE), depth multiplier of 0.5 r   )semnasnet_050r  r  r  s      rl   r  r         RZR6RELrt   c                      [        SSU 0UD6nU$ )z/MNASNet A1 (w/ SE),  depth multiplier of 0.75. r   )semnasnet_075r
  r  r  s      rl   r  r    s     SjSFSELrt   c                      [        SSU 0UD6nU$ )z-MNASNet A1 (w/ SE), depth multiplier of 1.0. r   )semnasnet_100r   r  r  s      rl   r  r    r  rt   c                      [        SSU 0UD6nU$ )z-MNASNet A1 (w/ SE), depth multiplier of 1.4. r   )semnasnet_140r  r  r  s      rl   r  r    r  rt   c                      [        SSU 0UD6nU$ )z)MNASNet Small,  depth multiplier of 1.0. r   )mnasnet_smallr   )r  r  s      rl   r  r    s     U
UfUELrt   c                      [        SSU 0UD6nU$ )MobileNet V1 r   )mobilenetv1_100r   r#  r  s      rl   r  r         VVvVELrt   c                 "    [        SSU S.UD6nU$ )r  T)r   r   )mobilenetv1_100hr   r  r  s      rl   r"  r"    s     gR\g`fgELrt   c                      [        SSU 0UD6nU$ )r  r   )mobilenetv1_125g      ?r  r  s      rl   r$  r$         W*WPVWELrt   c                      [        SSU 0UD6nU$ )z(MobileNet V2 w/ 0.35 channel multiplier r   )mobilenetv2_035gffffff?r*  r  s      rl   r'  r'    r%  rt   c                      [        SSU 0UD6nU$ )z'MobileNet V2 w/ 0.5 channel multiplier r   )mobilenetv2_050r  r(  r  s      rl   r*  r*    r   rt   c                      [        SSU 0UD6nU$ )z(MobileNet V2 w/ 0.75 channel multiplier r   )mobilenetv2_075r
  r(  r  s      rl   r,  r,    r%  rt   c                      [        SSU 0UD6nU$ )z'MobileNet V2 w/ 1.0 channel multiplier r   )mobilenetv2_100r   r(  r  s      rl   r.  r.    r   rt   c                      [        SSU 0UD6nU$ )z'MobileNet V2 w/ 1.4 channel multiplier r   )mobilenetv2_140r  r(  r  s      rl   r0  r0    r   rt   c                 &    [         SSSU S.UD6nU$ )z2MobileNet V2 w/ 1.1 channel, 1.2 depth multipliers333333?Tr  r!  r   )mobilenetv2_110d皙?r(  r  s      rl   r4  r4    .     l25TV`ldjlELrt   c                 &    [         SSSU S.UD6nU$ )z3MobileNet V2 w/ 1.2 channel, 1.4 depth multipliers r  Tr3  )mobilenetv2_120dr2  r(  r  s      rl   r8  r8    r6  rt   c                 Z    U (       a  UR                  S[        5        [        SSU 0UD6nU$ )zFBNet-C bn_epsr   )
fbnetc_100r   )
setdefaultr    r;  r  s      rl   r;  r;  	  s/     ($56KjKFKELrt   c                      [        SSU 0UD6nU$ )zSingle-Path NAS Pixel1r   )spnasnet_100r   )rC  r  s      rl   r>  r>    s     O*OOELrt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-B0 r   r   r  r   )efficientnet_b0rS  r  s      rl   rA  rA    .     j.1CT^jbhjELrt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-B1 r   r5  r@  )efficientnet_b1rB  r  s      rl   rE  rE  #  rC  rt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-B2 r5  r2  r@  )efficientnet_b2rB  r  s      rl   rG  rG  ,  rC  rt   c                 &    [         SSSU S.UD6nU$ )EfficientNet-B3 r2  r  r@  )efficientnet_b3rB  r  s      rl   rJ  rJ  5  rC  rt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-B4 r  ?r@  )efficientnet_b4rB  r  s      rl   rM  rM  >  rC  rt   c                 &    [         SSSU S.UD6nU$ )EfficientNet-B5 皙?皙@r@  )efficientnet_b5rB  r  s      rl   rR  rR  G  rC  rt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-B6 rL  @r@  )efficientnet_b6rB  r  s      rl   rU  rU  P  rC  rt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-B7        @@r@  )efficientnet_b7rB  r  s      rl   rY  rY  Y  rC  rt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-B8 rQ  @r@  )efficientnet_b8rB  r  s      rl   r\  r\  b  rC  rt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-L2.333333@333333@r@  )efficientnet_l2rB  r  s      rl   r`  r`  k  rC  rt   c                 <    [         S[        [        SS9U S.UD6nU$ )zEfficientNet-B0 + GroupNormr  rN  )r>   r   )efficientnet_b0_gnrS  r   r   r  s      rl   rb  rb  u  s3     o)0!)LYcogmoELrt   c           	      >    [         SS[        [        SS9U S.UD6nU$ )z)EfficientNet-B0 w/ group conv + GroupNormr  rN  )r  r>   r   )efficientnet_b0_g8_gnrc  r  s      rl   re  re  }  s5     ),-',[\:])!')E Lrt   c                 &    [         SSSU S.UD6nU$ )z*EfficientNet-B0 w/ group 16 conv + EvoNormr:  )r  rR  r   )efficientnet_b0_g16_evosrB  r  s      rl   rg  rg    s-     ")/12)!')E Lrt   c                 B    [         SSSS[        [        SS9U S.UD6nU$ )zEfficientNet-B3 w/ GroupNorm r2  r  r:  rN  )r   r  rR  r>   r   )efficientnet_b3_gnrc  r  s      rl   ri  ri    s<     Z14s\^<B7JZRXZE Lrt   c                 D    [         SSSSS[        [        SS9U S.UD6nU$ )z$EfficientNet-B3 w/ grouped conv + BNr2  r  r  r:  rN  )r   r  r  rR  r>   r   )efficientnet_b3_g8_gnrc  r  s      rl   rk  rk    s?     Z47#Z[mo<B7JZRXZE Lrt   c                 (    [         SSSU SS.UD6nU$ )zEfficientNet-B0 w/ BlurPool r   blurpc)r   r  r   r?   )efficientnet_blur_b0rB  r  s      rl   rn  rn    s0     36Yc#E Lrt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-Edge Small. r   r@  )efficientnet_esr_  r  s      rl   rp  rp    .     #j.1CT^jbhjELrt   c                 &    [         SSSU S.UD6nU$ )zvEfficientNet-Edge Small Pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0r   r@  )efficientnet_es_prunedrq  r  s      rl   rt  rt    .     # q583[eqioqELrt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-Edge-Medium. r   r5  r@  )efficientnet_emrq  r  s      rl   rw  rw    rr  rt   c                 &    [         SSSU S.UD6nU$ )zEfficientNet-Edge-Large. r2  r  r@  )efficientnet_elrq  r  s      rl   ry  ry    rr  rt   c                 &    [         SSSU S.UD6nU$ )zvEfficientNet-Edge-Large pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0r2  r  r@  )efficientnet_el_prunedrq  r  s      rl   r{  r{    ru  rt   c                 &    [         SSSU S.UD6nU$ )&EfficientNet-CondConv-B0 w/ 8 Experts r   r@  )efficientnet_cc_b0_4erb  r  s      rl   r~  r~    s.     'p47#ZdphnpELrt   c                 (    [         SSSSU S.UD6nU$ )r}  r   rJ   r   r  ra  r   )efficientnet_cc_b0_8er  r  s      rl   r  r    0     ')47#bc)!')E Lrt   c                 (    [         SSSSU S.UD6nU$ )z&EfficientNet-CondConv-B1 w/ 8 Experts r   r5  rJ   r  )efficientnet_cc_b1_8er  r  s      rl   r  r    r  rt   c                 &    [         SSSU S.UD6nU$ )EfficientNet-Lite0 r   r@  )efficientnet_lite0ri  r  s      rl   r  r    .     #m14sWamekmELrt   c                 &    [         SSSU S.UD6nU$ )EfficientNet-Lite1 r   r5  r@  )efficientnet_lite1r  r  s      rl   r  r    r  rt   c                 &    [         SSSU S.UD6nU$ )EfficientNet-Lite2 r5  r2  r@  )efficientnet_lite2r  r  s      rl   r  r  	  r  rt   c                 &    [         SSSU S.UD6nU$ )EfficientNet-Lite3 r2  r  r@  )efficientnet_lite3r  r  s      rl   r  r  	  r  rt   c                 &    [         SSSU S.UD6nU$ )EfficientNet-Lite4 r  rL  r@  )efficientnet_lite4r  r  s      rl   r  r  	  r  rt   c                 |    UR                  S[        5        UR                  SS5        Sn[        U4SSSU S.UD6nU$ )	zbEfficientNet-B1 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf  r:  r<   sameefficientnet_b1_prunedr   r5  Tr   r  prunedr   r<  r    rS  )r   r   r   r   s       rl   r  r  	  sV     h 12
j&)&Gm$'#dWamekmELrt   c                 x    UR                  S[        5        UR                  SS5        [         SSSSU S.UD6nU$ )	zaEfficientNet-B2 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r:  r<   r  r5  r2  Tr  )efficientnet_b2_prunedr  r  s      rl   r  r  (	  Q     h 12
j&) )583W[)!')E Lrt   c                 x    UR                  S[        5        UR                  SS5        [         SSSSU S.UD6nU$ )	zaEfficientNet-B3 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r:  r<   r  r2  r  Tr  )efficientnet_b3_prunedr  r  s      rl   r  r  3	  r  rt   c                 (    [         SSSSU S.UD6nU$ )z:EfficientNet-V2 Tiny (Custom variant, tiny not in paper). 皙?r  Fr   r  rx  r   )efficientnetv2_rw_try  r  s      rl   r  r  >	  s1     "x25PUblxpvxELrt   c           	      *    [         SSSSSU S.UD6nU$ )zQEfficientNet-V2 Tiny w/ Global Context Attn (Custom variant, tiny not in paper). r  r  Fgc)r   r  rx  r@   r   )gc_efficientnetv2_rw_tr  r  s      rl   r  r  F	  s4     " B5834JB:@BE Lrt   c                 "    [        SSU S.UD6nU$ )zEfficientNet-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)rx  r   )efficientnetv2_rw_sr  r  s      rl   r  r  O	  s     "bDZb[abELrt   c                 (    [         SSSSU S.UD6nU$ )z)EfficientNet-V2 Medium (RW variant).
    r2  )r2  r2  r2  r2  rP  rP  Tr  )efficientnetv2_rw_mr  r  s      rl   r  r  Y	  s1     ")25H_dh)!')E Lrt   c                      [        SSU 0UD6nU$ )zEfficientNet-V2 Small. r   )efficientnetv2_sr  r  s      rl   r  r  c	       "VVvVELrt   c                      [        SSU 0UD6nU$ )zEfficientNet-V2 Medium. r   )efficientnetv2_m)r  r  s      rl   r  r  j	  r  rt   c                      [        SSU 0UD6nU$ )zEfficientNet-V2 Large. r   )efficientnetv2_l)r  r  s      rl   r  r  q	  r  rt   c                      [        SSU 0UD6nU$ )zEfficientNet-V2 Xtra-Large. r   )efficientnetv2_xl)r  r  s      rl   r  r  x	  s     #X:XQWXELrt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z0EfficientNet-B0. Tensorflow compatible variant  r:  r<   r  r   r@  )tf_efficientnet_b0r  r  s      rl   r  r  	  O     h 12
j&)m14sWamekmELrt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z0EfficientNet-B1. Tensorflow compatible variant  r:  r<   r  r   r5  r@  )tf_efficientnet_b1r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z0EfficientNet-B2. Tensorflow compatible variant  r:  r<   r  r5  r2  r@  )tf_efficientnet_b2r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z/EfficientNet-B3. Tensorflow compatible variant r:  r<   r  r2  r  r@  )tf_efficientnet_b3r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z/EfficientNet-B4. Tensorflow compatible variant r:  r<   r  r  rL  r@  )tf_efficientnet_b4r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z/EfficientNet-B5. Tensorflow compatible variant r:  r<   r  rP  rQ  r@  )tf_efficientnet_b5r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z/EfficientNet-B6. Tensorflow compatible variant r:  r<   r  rL  rT  r@  )tf_efficientnet_b6r  r  s      rl   r  r  	  O     h 12
j&)m14sWamekmELrt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z/EfficientNet-B7. Tensorflow compatible variant r:  r<   r  rW  rX  r@  )tf_efficientnet_b7r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z/EfficientNet-B8. Tensorflow compatible variant r:  r<   r  rQ  r[  r@  )tf_efficientnet_b8r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z<EfficientNet-L2 NoisyStudent. Tensorflow compatible variant r:  r<   r  r^  r_  r@  )tf_efficientnet_l2r  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z8EfficientNet-Edge Small. Tensorflow compatible variant  r:  r<   r  r   r@  )tf_efficientnet_esr<  r    r_  r  s      rl   r  r  	  O     h 12
j&)"m14sWamekmELrt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z9EfficientNet-Edge-Medium. Tensorflow compatible variant  r:  r<   r  r   r5  r@  )tf_efficientnet_emr  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z8EfficientNet-Edge-Large. Tensorflow compatible variant  r:  r<   r  r2  r  r@  )tf_efficientnet_elr  r  s      rl   r  r  	  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )zEEfficientNet-CondConv-B0 w/ 4 Experts. Tensorflow compatible variant r:  r<   r  r   r@  )tf_efficientnet_cc_b0_4er<  r    rb  r  s      rl   r  r  
  sO     h 12
j&)&"s7:S]gskqsELrt   c                 x    UR                  S[        5        UR                  SS5        [         SSSSU S.UD6nU$ )zEEfficientNet-CondConv-B0 w/ 8 Experts. Tensorflow compatible variant r:  r<   r  r   rJ   r  )tf_efficientnet_cc_b0_8er  r  s      rl   r  r  
  Q     h 12
j&)&")7:Sef)!')E Lrt   c                 x    UR                  S[        5        UR                  SS5        [         SSSSU S.UD6nU$ )	zEEfficientNet-CondConv-B1 w/ 8 Experts. Tensorflow compatible variant r:  r<   r  r   r5  rJ   r  )tf_efficientnet_cc_b1_8er  r  s      rl   r  r  
  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )r  r:  r<   r  r   r@  )tf_efficientnet_lite0r<  r    ri  r  s      rl   r  r  (
  O     h 12
j&)"p47#ZdphnpELrt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )r  r:  r<   r  r   r5  r@  )tf_efficientnet_lite1r  r  s      rl   r  r  3
  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )r  r:  r<   r  r5  r2  r@  )tf_efficientnet_lite2r  r  s      rl   r  r  >
  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )r  r:  r<   r  r2  r  r@  )tf_efficientnet_lite3r  r  s      rl   r  r  I
  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )r  r:  r<   r  r  rL  r@  )tf_efficientnet_lite4r  r  s      rl   r  r  T
  r  rt   c                 p    UR                  S[        5        UR                  SS5        [        SSU 0UD6nU$ )z6EfficientNet-V2 Small. Tensorflow compatible variant  r:  r<   r  r   )tf_efficientnetv2_s)r<  r    ry  r  s      rl   r  r  _
  =     h 12
j&)!YJYRXYELrt   c                 p    UR                  S[        5        UR                  SS5        [        SSU 0UD6nU$ )z7EfficientNet-V2 Medium. Tensorflow compatible variant  r:  r<   r  r   )tf_efficientnetv2_m)r<  r    r  r  s      rl   r  r  h
  r  rt   c                 p    UR                  S[        5        UR                  SS5        [        SSU 0UD6nU$ )z6EfficientNet-V2 Large. Tensorflow compatible variant  r:  r<   r  r   )tf_efficientnetv2_l)r<  r    r  r  s      rl   r  r  q
  r  rt   c                 p    UR                  S[        5        UR                  SS5        [        SSU 0UD6nU$ )z>EfficientNet-V2 Xtra-Large. Tensorflow compatible variant
    r:  r<   r  r   )tf_efficientnetv2_xl)r<  r    r  r  s      rl   r  r  z
  s=     h 12
j&)"[j[TZ[ELrt   c                 p    UR                  S[        5        UR                  SS5        [        SSU 0UD6nU$ )z3EfficientNet-V2-B0. Tensorflow compatible variant  r:  r<   r  r   )tf_efficientnetv2_b0r<  r    rq  r  s      rl   r  r  
  s=     h 12
j&)$]
]V\]ELrt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z3EfficientNet-V2-B1. Tensorflow compatible variant  r:  r<   r  r   r5  r@  )tf_efficientnetv2_b1r  r  s      rl   r  r  
  O     h 12
j&)$o36YcogmoELrt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z3EfficientNet-V2-B2. Tensorflow compatible variant  r:  r<   r  r5  r2  r@  )tf_efficientnetv2_b2r  r  s      rl   r  r  
  r  rt   c                 v    UR                  S[        5        UR                  SS5        [         SSSU S.UD6nU$ )z2EfficientNet-V2-B3. Tensorflow compatible variant r:  r<   r  r2  r  r@  )tf_efficientnetv2_b3r  r  s      rl   r  r  
  r  rt   c                 &    [         SSSU S.UD6nU$ )rI  r2  r  r@  )efficientnet_x_b3r  r  s      rl   r  r  
  s.      l03cV`ldjlELrt   c                 &    [         SSSU S.UD6nU$ )rO  rP  rQ  r@  )efficientnet_x_b5r  r  s      rl   r   r   
  s.      l03cV`ldjlELrt   c                 (    [         SSSSU S.UD6nU$ )rO  gQ?rQ  rJ   )r   r  r  r   )efficientnet_h_b5r  r  s      rl   r  r  
  s1      x04sTUblxpvxELrt   c                 $    [         SSU S.UD6nU$ )z"Creates a MixNet Small model.
    r   r   r   )mixnet_s)r  r  s      rl   r  r  
  +     M'*zMEKMELrt   c                 $    [         SSU S.UD6nU$ )z#Creates a MixNet Medium model.
    r   r  )mixnet_mr  r  s      rl   r  r  
  r  rt   c                 $    [         SSU S.UD6nU$ )z"Creates a MixNet Large model.
    ?r  )mixnet_lr	  r  s      rl   r  r  
  r  rt   c                 &    [         SSSU S.UD6nU$ )z_Creates a MixNet Extra-Large model.
Not a paper spec, experimental def by RW w/ depth scaling.
rP  r2  r@  )	mixnet_xlr	  r  s      rl   r  r  
  s-    
 d(+cjd\bdELrt   c                 &    [         SSSU S.UD6nU$ )zfCreates a MixNet Double Extra Large model.
Not a paper spec, experimental def by RW w/ depth scaling.
g333333@r  r@  )
mixnet_xxlr	  r  s      rl   r  r  
  s-    
 e),sze]ceELrt   c                 t    UR                  S[        5        UR                  SS5        [         SSU S.UD6nU$ )z@Creates a MixNet Small model. Tensorflow compatible variant
    r:  r<   r  r   r  )tf_mixnet_s)r<  r    r  r  s      rl   r  r  
  L     h 12
j&)P*-*PHNPELrt   c                 t    UR                  S[        5        UR                  SS5        [         SSU S.UD6nU$ )zACreates a MixNet Medium model. Tensorflow compatible variant
    r:  r<   r  r   r  )tf_mixnet_mr<  r    r  r  s      rl   r  r  
  r  rt   c                 t    UR                  S[        5        UR                  SS5        [         SSU S.UD6nU$ )z@Creates a MixNet Large model. Tensorflow compatible variant
    r:  r<   r  r  r  )tf_mixnet_lr  r  s      rl   r  r  	  r  rt   c                      [        SSU 0UD6nU$ )N)	tinynet_ar   r2  r   r  r  s      rl   r  r    s    P:PPELrt   c                      [        SSU 0UD6nU$ )N)	tinynet_br
  r5  r   r  r  s      rl   r  r        QJQ&QELrt   c                      [        SSU 0UD6nU$ )N)	tinynet_cHzG?g333333?r   r  r  s      rl   r   r      s    RZR6RELrt   c                      [        SSU 0UD6nU$ )N)	tinynet_dr!  g=
ףp=?r   r  r  s      rl   r#  r#  &  s    SjSFSELrt   c                      [        SSU 0UD6nU$ )N)	tinynet_egRQ?g333333?r   r  r  s      rl   r%  r%  ,  r  rt   c                      [        SSU 0UD6nU$ )zMobileNet-EdgeTPU-v1 100. r   )mobilenet_edgetpu_100r  r  s      rl   r'  r'  2  s     #\z\U[\ELrt   c                      [        SSU 0UD6nU$ )z"MobileNet-EdgeTPU-v2 Extra Small. r   )mobilenet_edgetpu_v2_xsr(  r  s      rl   r*  r*  9  s     #^^W]^ELrt   c                      [        SSU 0UD6nU$ )zMobileNet-EdgeTPU-v2 Small. r   )mobilenet_edgetpu_v2_sr(  r  s      rl   r,  r,  @       #]
]V\]ELrt   c                      [        SSU 0UD6nU$ )zMobileNet-EdgeTPU-v2 Medium. r   )mobilenet_edgetpu_v2_mr(  r  s      rl   r/  r/  G  r-  rt   c                      [        SSU 0UD6nU$ )zMobileNet-EdgeTPU-v2 Large. r   )mobilenet_edgetpu_v2_lr(  r  s      rl   r1  r1  N  r-  rt   c                      [        SSU 0UD6nU$ )Nr   )test_efficientnet)r  r  s      rl   r3  r3  U  s    "X:XQWXELrt   c                 \    [         SU UR                  S[        [        SS95      S.UD6nU$ )Nr>   r  rN  r   r>   )test_efficientnet_gn)r  r   r   r   r  s      rl   r6  r6  [  s?     #::lGLQ,OP 	E Lrt   c                 L    [         SU UR                  S[        5      S.UD6nU$ )Nr>   r5  )test_efficientnet_ln)r  r   r   r  s      rl   r8  r8  g  s6    "::lN; 	E Lrt   c                 \    [         SU UR                  S[        [        SS95      S.UD6nU$ )Nr>   r  rN  r5  )test_efficientnet_evos)r  r   r   r   r  s      rl   r:  r:  r  s=    " ::lGKA,NO 	E Lrt   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_nsrG  rJ  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)r1   )r   	functoolsr   typingr   r   r   r   r   r	   r   torch.nnrT   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;  rC  rS  r_  rb  ri  rq  ry  r  r  r  r  r  r  r  r  r  r  default_cfgsr  r	  r  r  r  r  r  r  r  r  r"  r$  r'  r*  r,  r.  r0  r4  r8  r;  r>  rA  rE  rG  rJ  rM  rR  rU  rY  r\  r`  rb  re  rg  ri  rk  rn  rp  rt  rw  ry  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/  r1  r3  r6  r8  r:  r   rQ   rt   rl   <module>ri     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!<!<!<">))!? '  rt   