
    khJ                    "   d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlmc mZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZ dd	l m!Z! dd
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddgZ6 G d dejn                        Z8 G d dejn                        Z9ddZ:ddZ;ddZ<ddZ=	 	 ddZ>	 	 ddZ?ddZ@ddZA	 	 d	dZB	 d
dZC	 ddZDddZE	 d
dZF	 dd ZG	 d
d!ZH	 d
d"ZI	 d
d#ZJ	 	 dd$ZKdd%ZLdd&ZMdd'ZNdd(ZOdd)ZPdd+ZQ e3i d, eQ       d- eQ       d. eQd/d01      d2 eQ       d3 eQ       d4 eQd5d01      d6 eQd7d01      d8 eQ       d9 eQd:d01      d; eQd0eed<d=>      d? eQd0eed<d=>      d@ eQd0eedAd<dB      dC eQ       dD eQdEd0dFG      dH eQ       dI eQdJd01      dK eQdLd01      i dM eQdNd01      dO eQdPd01      dQ eQdRd0dSG      dT eQdUd0dSG      dV eQdWd01      dX eQd0eedAd<dB      dY eQd0eedZdAd[d\d]      d^ eQd_d0d<d`      da eQdbd0d<d[d\dc      dd eQded0d\dfdgdc      dh eQdid0dgdjdkdc      dl eQd0dmdnddop      dq eQd0drdsd=dtu      dv eQd*dwdxdyz      d{ eQd*d|d}d~z      d eQd*dddz      d eQd*dddz      i d eQ       d eQ       d eQ       d eQd\dfdgd      d eQd\dfdgd      d eQ       d eQdd01      d eQdd0dZd[d      d eQdd0ddjd      d eQdd01      d eQdd0ddjd      d eQ       d eQ       d eQdZd[d      d eQdd01      d eQdZd[d      d eQddfd      i d eQddjd      d eQddd      d eQdd0dZd[dee      d eQdd0ddfdee      d eQdd0ddjdee      d eQdd0dd\dd      d eQdd0dd\dd      d eQdd0d\dkdfd      d eQdd0dgdrdjd      d eQd\dkdfd      d eQdgdrdjd      d eQdkddd      d eQdkddd      d eQdd0dƫ      d eQdd0dZd[d      d eQdd0ddfd      d eQdd0ddjd      i d eQdd0ddd      d eQdd0dddӬ      d eQdd0dwdxdy      d eQdd0d|d}d~      d eQdd0ddd۬      d eQdd0dddެ      d eQdd0eed      d eQdd0eedZd[d      d eQdd0eeddfd      d eQdd0eeddjd      d eQdd0eeddd      d eQdd0eedddӬ      d eQdd0eedwdxdy      d eQdd0eed|d}d~      d eQdd0eeddd      d eQdd0dddӬ      d eQdd0d|d}d~      i d eQdd0ddd      d eQdd0dƫ      d eQdd0dZd[d      d eQdd0ddfd      d eQd d0ddjd      d eQdd0ddd      d eQdd0dddӬ      d eQdd0dwdxdy      d eQdd0d|d}d~      d	 eQd
d0dƫ      d eQdd0dZd[d      d eQdd0ddfd      d eQdd0ddjd      d eQdd0ddd      d eQdd0dddӬ      d eQdd0ddd      d eQdd0dddZd[d      i d eQdd0ddddjd      d eQdd0ee      d eQd d0ee      d! eQd"d0eedZd[d      d# eQd$d0dddF%      d& eQd'd0dddZd[ddF(      d) eQd*d0ddddfddF(      d+ eQd,d0ddddjddS(      d- eQd.d0ddddd/dS(      d0 eQd1d0ddddkdjd2      d3 eQd4d0dddkddddo5	      d6 eQd7d0dddkddddo5	      d8 eQd9d0dddkddddo5	      d: eQd;d0ddddkdjd2      d< eQd=d0dddkddddo5	      d> eQd?d0dddkddddo5	      d@ eQdAd0dddBddkdjdC	      i dD eQdEd0dddBdkddddoF
      dG eQdHd0dddBdkddddoF
      dI eQdJd0dddBdkddddoF
      dK eQdLd0dMddNO      dP eQdQd0dMdZdNd      dR eQdSd0dTddd      dU eQd0eedZdd[dAdoV      dW eQdXd0dZdd[d      dY eQd0eedBdZdd[dZ      d[ eQd\d01      d] eQd^d01      d_ eQd`d01      da eQdbd01      dc eQ       dd eQded01      df eQdgd01      dh eQdid01       eQdMdNdjd0k       eQdldNdmd0k       eQdndNdod0k       eQdpdqdrd0k       eQdsdtdud0k       eQddAv       eQddAv       eQddAv       eQd0eedAd<d=B       eQddAv       eQd0dwdqd=x       eQd0dwdqd=x       eQd0dddwdqd=y       eQd0dddwdqd=y      dz      ZRe4dd{e8fd|       ZSe4dd{e8fd}       ZTe4dd{e8fd~       ZUe4dd{e8fd       ZVe4dd{e8fd       ZWe4dd{e8fd       ZXe4dd{e8fd       ZYe4dd{e8fd       ZZe4dd{e8fd       Z[e4dd{e8fd       Z\e4dd{e8fd       Z]e4dd{e8fd       Z^e4dd{e8fd       Z_e4dd{e8fd       Z`e4dd{e8fd       Zae4dd{e8fd       Zbe4dd{e8fd       Zce4dd{e8fd       Zde4dd{e8fd       Zee4dd{e8fd       Zfe4dd{e8fd       Zge4dd{e8fd       Zhe4dd{e8fd       Zie4dd{e8fd       Zje4dd{e8fd       Zke4dd{e8fd       Zle4dd{e8fd       Zme4dd{e8fd       Zne4dd{e8fd       Zoe4dd{e8fd       Zpe4dd{e8fd       Zqe4dd{e8fd       Zre4dd{e8fd       Zse4dd{e8fd       Zte4dd{e8fd       Zue4dd{e8fd       Zve4dd{e8fd       Zwe4dd{e8fd       Zxe4dd{e8fd       Zye4dd{e8fd       Zze4dd{e8fd       Z{e4dd{e8fd       Z|e4dd{e8fd       Z}e4dd{e8fd       Z~e4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fdÄ       Ze4dd{e8fdĄ       Ze4dd{e8fdń       Ze4dd{e8fdƄ       Ze4dd{e8fdǄ       Ze4dd{e8fdȄ       Ze4dd{e8fdɄ       Ze4dd{e8fdʄ       Ze4dd{e8fd˄       Ze4dd{e8fd̄       Ze4dd{e8fd̈́       Ze4dd{e8fd΄       Ze4dd{e8fdτ       Ze4dd{e8fdЄ       Ze4dd{e8fdф       Ze4dd{e8fd҄       Ze4dd{e8fdӄ       Ze4dd{e8fdԄ       Ze4dd{e8fdՄ       Ze4dd{e8fdք       Ze4dd{e8fdׄ       Ze4dd{e8fd؄       Ze4dd{e8fdل       Ze4dd{e8fdڄ       Ze4dd{e8fdۄ       Ze4dd{e8fd܄       Ze4dd{e8fd݄       Ze4dd{e8fdބ       Ze4dd{e8fd߄       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Ze4dd{e8fd       Z e5ei ddߓddddddddddddddddddēddǓddɓdd˓dd͓ddϓddԓdd֓ddܐd0d3d6d8d@dDdGdId dddd       y(  a   The EfficientNet Family in PyTorch

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

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

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

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

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

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

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

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

* And likely more...

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

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

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

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

        Args:
            block_args: Arguments for building blocks.
            num_classes: Number of classifier classes.
            num_features: Number of features for penultimate layer.
            in_chans: Number of input channels.
            stem_size: Number of output channels in stem.
            stem_kernel_size: Kernel size for stem convolution.
            fix_stem: If True, don't scale stem channels.
            output_stride: Output stride of network.
            pad_type: Padding type.
            act_layer: Activation layer class.
            norm_layer: Normalization layer class.
            aa_layer: Anti-aliasing layer class.
            se_layer: Squeeze-and-excitation layer class.
            round_chs_fn: Channel rounding function.
            drop_rate: Dropout rate for classifier.
            drop_path_rate: Drop path rate for stochastic depth.
            global_pool: Global pooling type.
        F   stridepaddingTinplace)r:   r;   r@   r<   r=   r>   r?   rB   stager   r   )rI   	pool_typeN)superr)   __init__nnReLUBatchNorm2dr   r   r4   rA   grad_checkpointingr   	conv_stembn1r   
Sequentialblocksfeaturesfeature_info
stage_endsin_chs	conv_headbn2r5   head_hidden_sizeIdentityr   rC   
classifierr   )selfr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   norm_act_layerbuilderfhead_chs	__class__s                         T/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/efficientnet.pyrP   zEfficientNet.__init__Q   s   R 	lD*,(	12>>
+J	B,}&""' $Y/I&x<LUV`hi!)T: &'%!)	
 mmWY
%CD#,,/3/@/@A!1W:A>> !*8\1hWDN%lDADH8DDD 5[[]DN{{}DH8@@D 5,=t//;-H)$/ 	"$'! Bs   %F7c                 d   | j                   | j                  g}|j                  | j                         |j                  | j                  | j
                  | j                  g       |j                  t        j                  | j                        | j                  g       t        j                  | S )z3Convert model to sequential for feature extraction.)rU   rV   extendrX   r]   r^   rC   rQ   DropoutrA   ra   rW   )rb   layerss     rh   as_sequentialzEfficientNet.as_sequential   sv    ..$((+dkk"t~~txx1A1ABCrzz$..14??CD}}f%%    coarsec                 ,    t        d|rdnddfdg      S )zCreate regex patterns for parameter groups.

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

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

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

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

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

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

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

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

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

        Returns:
            Output tensor.
        r1   )ptraining)rC   rA   Fdropoutr   ra   )rb   r   r   s      rh   forward_headzEfficientNet.forward_headB  sP     Q>>B		!t~~FAq6DOOA$66rn   c                 J    | j                  |      }| j                  |      }|S )zForward pass.)r   r   r   s     rh   forwardzEfficientNet.forwardQ  s'    !!!$a rn   FT)r2   )NFFr   FF)r   FTF)$__name__
__module____qualname____doc__r   r   intboolstrr   r   r   floatrP   rQ   rW   rm   r   r   ignorer   r	   r   rs   ry   Moduler|   r~   Tensorr   r   r   r   r   r   __classcell__rg   s   @rh   r)   r)   ;   s/   0  $ $$%"!#-1.2,0,0%3!$&$%U(!U( U( 	U(
 U( U( "U( U( U( U(  	*U( !+U( y)U( y)U( #U(  !U(" "#U($ %U(& 
'U(n&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 %,, rn   c            !           e Zd ZdZdddddddddddded	d	fd
edeedf   dedededede	dedede
e   de
e   de
e   de
e   dededef  fdZej                   j"                  d de	ddfd       Zdeej(                     fdZ xZS )!r*   z EfficientNet Feature Extractor

    A work-in-progress feature extraction module for EfficientNet, to use as a backbone for segmentation
    and object detection models.
    )r   r   rF   r.      
bottleneckr.   r/   Fr0   Nr1   r3   out_indices.feature_locationr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   c                    t         t        |           |
xs t        j                  }
|xs t        j
                  }t        ||
      }|xs t        }|| _        d| _	        |s ||      }t        |||d|	      | _         ||d      | _        t        ||	||
|||||	      }t        j                   |||       | _        t!        |j"                  |      | _        | j$                  j'                         D ci c]  }|d   |d    c}| _        t+        |        d | _        |d	k7  r<| j$                  j'                  d
      }t/        || j1                               | _        y y c c}w )NFrF   rG   TrJ   )	r:   r;   r@   r<   r=   r>   r?   rB   r   rL   indexr   )module	hook_type)keys)rO   r*   rP   rQ   rR   rS   r   r   rA   rT   r   rU   rV   r   rW   rX   r!   rY   rZ   	get_dicts_stage_out_idxr   feature_hooksr"   named_modules)rb   r3   r   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rc   rd   re   hooksrg   s                        rh   rP   zEfficientNetFeatures.__init___  sc   & 	"D24(	12>>
+J	B,}""' $Y/I&x<LUV`hi!)T: &'%!)-

 mmWY
%CD'(8(8+F?C?P?P?Z?Z?\]!qz1W:5]!$' "|+%%//5L/ME!-eT5G5G5I!JD , ^s   7E#rt   rD   c                     || _         yrv   rw   rx   s     rh   ry   z+EfficientNetFeatures.set_grad_checkpointing  rz   rn   c                 @   | j                  |      }| j                  |      }| j                  g }d| j                  v r|j	                  |       t        | j                        D ]g  \  }}| j                  r+t        j                  j                         st        ||      }n ||      }|dz   | j                  v sW|j	                  |       i |S | j                  |       | j                  j                  |j                        }t        |j                               S )Nr   r   )rU   rV   r   r   r   r   rX   rT   r   r   r   r%   
get_outputdevicelistvalues)rb   r   rY   r   bouts         rh   r   zEfficientNetFeatures.forward  s    NN1HHQK%HD'''"!$++. '1**5993I3I3K"1a(A!Aq5D///OOA&' OKKN$$//9C

%%rn   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   r   r   r   ry   r   r   r   r   r   s   @rh   r*   r*   X  sI    ,;$0$%"!#-1.2,0,0%3!$&#7K!7K sCx7K "	7K
 7K 7K "7K 7K 7K 7K  	*7K !+7K y)7K y)7K #7K  !7K" "#7Kr YY)T )T ) )&D. &rn   c                     d}t         }d }|j                  dd      rd|v sd|v rd}n
d}t        }d}t        || |f|dk(  |dk7  |d	|}|dk(  r!t	        |j
                        x|_        |_        |S )
Nr0   features_onlyFfeature_cfgfeature_clscfg)r4   r5   	head_convrC   cls)r   pretrained_strictkwargs_filter)r)   popr*   r   r   pretrained_cfgdefault_cfg)variant
pretrainedkwargsfeatures_mode	model_clsr   models          rh   _create_effnetr     s    MIMzz/5)F"mv&=!MWM,I!M  $u,'50# E 3NuOcOc3ddu0Lrn         ?c                     dgdgdgdgdgdgdgg}t        dt        |      dt        t        |	      |j	                  d
d      xs# t        t
        j                  fi t        |      d|}t        | |fi |}|S )zCreates a mnasnet-a1 model.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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