Ë
    éÓ^jÅì ã                   óÄ"  — d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlmc mZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZ dd	l m!Z! dd
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddgZ6 G d„ dejn                  «      Z8 G d„ dejn                  «      Z9�dd„Z:�dd„Z;�dd„Z<�dd„Z=	 	 �dd„Z>	 	 �dd„Z?�dd„Z@�dd„ZA	 	 �dd„ZB	 �dd„ZC	 �dd„ZD�dd„ZE	 �dd„ZF	 �dd „ZG	 �dd!„ZH	 �dd"„ZI	 �dd#„ZJ	 	 �dd$„ZK�dd%„ZL�dd&„ZM�dd'„ZN�dd(„ZO�dd)„ZP�d d+„ZQ e3i d, eQ«       “d- eQ«       “d. eQd/d0¬1«      “d2 eQ«       “d3 eQ«       “d4 eQd5d0¬1«      “d6 eQd7d0¬1«      “d8 eQ«       “d9 eQd:d0¬1«      “d; eQd0eed<d=¬>«      “d? eQd0eed<d=¬>«      “d@ eQd0eedAd<d¬B«      “dC eQ«       “dD eQdEd0dF¬G«      “dH eQ«       “dI eQdJd0¬1«      “dK eQdLd0¬1«      “i dM eQdNd0¬1«      “dO eQdPd0¬1«      “dQ eQdRd0dS¬G«      “dT eQdUd0dS¬G«      “dV eQdWd0¬1«      “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do¬p«      “dq eQd0drdsd=dt¬u«      “dv eQd*dwdxdy¬z«      “d{ eQd*d|d}d~¬z«      “d eQd*d€d�d‚¬z«      “dƒ eQd*d„d…d†¬z«      “¥i d‡ eQ«       “dˆ eQ«       “d‰ eQ«       “dŠ eQd\dfdgd¬‹«      “dŒ eQd\dfdgd¬‹«      “d� eQ«       “dŽ eQd0dmdnddod�¬�«      “d‘ eQd*d\dfd=¬z«      “d’ eQd0dmdnddod�¬�«      “d“ eQd”d0¬1«      “d• eQd–d0dZd[d—¬˜«      “d™ eQdšd0d›djdœ¬˜«      “d� eQdžd0¬1«      “dŸ eQd d0d›djdœ¬˜«      “d¡ eQ«       “d¢ eQ«       “d£ eQdZd[d—¬¤«      “¥i d¥ eQd¦d0¬1«      “d§ eQdZd[d—¬¤«      “d¨ eQd©dfdª¬¤«      “d« eQd›djdœ¬¤«      “d¬ eQd­d®d¯¬¤«      “d° eQd±d0dZd[d—ee¬²«      “d³ eQd´d0d©dfdªee¬²«      “dµ eQd¶d0d›djdœee¬²«      “d· eQd¸d0d¹d\dºd¬»«      “d¼ eQd½d0d¹d\dºd¬»«      “d¾ eQd¿d0d\dkdfd¬»«      “dÀ eQdÁd0dgdrdjd¬»«      “dÂ eQd\dkdfd¬Ã«      “dÄ eQdgdrdjd¬Ã«      “dÅ eQdkdÆd®d¬Ã«      “dÇ eQdkdÈd®d¬Ã«      “dÉ eQdÊd0d¹¬Ë«      “¥i dÌ eQdÍd0dZd[d—¬˜«      “dÎ eQdÏd0d©dfdª¬˜«      “dÐ eQdÑd0d›djdœ¬˜«      “dÒ eQdÓd0d­d®d¯¬˜«      “dÔ eQdÕd0dÖd×dØ¬˜«      “dÙ eQdÚd0dwdxdy¬˜«      “dÛ eQdÜd0d|d}d~¬˜«      “dÝ eQdÞd0dßd×dà¬˜«      “dá eQdâd0d„d…dã¬˜«      “dä eQdåd0eed¹¬æ«      “dç eQdèd0eedZd[d—¬é«      “dê eQdëd0eed©dfdª¬é«      “dì eQdíd0eed›djdœ¬é«      “dî eQdïd0eed­d®d¯¬é«      “dð eQdñd0eedÖd×dØ¬é«      “dò eQdód0eedwdxdy¬é«      “dô eQdõd0eed|d}d~¬é«      “¥i dö eQd÷d0eed€d�d‚¬é«      “dø eQdùd0dÖd×dØ¬˜«      “dú eQdûd0d|d}d~¬˜«      “dü eQdýd0d€d�d‚¬˜«      “dþ eQdÿd0d¹¬Ë«      “�d  eQ�dd0dZd[d—¬˜«      “�d eQ�dd0d©dfdª¬˜«      “�d eQ�dd0d›djdœ¬˜«      “�d eQ�dd0d­d®d¯¬˜«      “�d eQ�d	d0dÖd×dØ¬˜«      “�d
 eQ�dd0dwdxdy¬˜«      “�d eQ�dd0d|d}d~¬˜«      “�d eQ�dd0d¹¬Ë«      “�d eQ�dd0dZd[d—¬˜«      “�d eQ�dd0d©dfdª¬˜«      “�d eQ�dd0d›djdœ¬˜«      “�d eQ�dd0d­d®d¯¬˜«      “¥i �d eQ�dd0dÖd×dØ¬˜«      “�d eQ�dd0�d�dd¹¬æ«      “�d eQ�dd0�d�ddZd[d—¬é«      “�d eQ�d d0�d�dd›djdœ¬é«      “�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[d—dF�¬-«      “�d. eQ�d/d0�d�dd©dfdªdF�¬-«      “�d0 eQ�d1d0�d�dd›djdœdS�¬-«      “�d2 eQ�d3d0�d�dd­d®�d4dS�¬-«      “�d5 eQ�d6d0�d�dd›dkdjd�¬7«      “�d8 eQ�d9d0�d�ddkdÆd®ddo�¬:«	      “�d; eQ�d<d0�d�ddkdÆd®ddo�¬:«	      “�d= eQ�d>d0�d�ddkdÈd®ddo�¬:«	      “�d? eQ�d@d0�d�dd›dkdjd�¬7«      “¥i �dA eQ�dBd0�d�ddkdÆd®ddo�¬:«	      “�dC eQ�dDd0�d�ddkdÆd®ddo�¬:«	      “�dE eQ�dFd0�d�d�dGd›dkdjd�¬H«	      “�dI eQ�dJd0�d�d�dGdkdÆd®ddo�¬K«
      “�dL eQ�dMd0�d�d�dGdkdÆd®ddo�¬K«
      “�dN eQ�dOd0�d�d�dGdkdÈd®ddo�¬K«
      “�dP eQ�dQd0�dRd¹�dS�¬T«      “�dU eQ�dVd0�dRdZ�dSd—¬»«      “�dW eQ�dXd0�dYd©dºdª¬»«      “�dZ eQd0eedZd›d[dAdo�¬[«      “�d\ eQ�d]d0dZd›d[dœ¬»«      “�d^ eQd0ee�dGdZd›d[dœ�¬_«      “�d` eQ�dad0¬1«      “�db eQ�dcd0¬1«      “�dd eQ�ded0¬1«      “�df eQ�dgd0¬1«      “�dh eQ«       “¥i �di eQ�djd0¬1«      “�dk eQ�dld0¬1«      “�dm eQ�dnd0¬1«      “�do eQ�dR�dS�dpd0�¬q«      “�dr eQ�ds�dS�dtd0�¬q«      “�du eQ�dv�dS�dwd0�¬q«      “�dx eQ�dy�dz�d{d0�¬q«      “�d| eQ�d}�d~�dd0�¬q«      “�d€ eQd¹dA�¬�«      “�d‚ eQd¹dA�¬�«      “�dƒ eQd¹dA�¬�«      “�d„ eQd0eedAd<d=¬B«      “�d… eQd¹dA�¬�«      “�d† eQd0�d‡�dzd=�¬ˆ«      “�d‰ eQd0�d‡�dzd=�¬ˆ«      “�dŠ eQd0�d�d�d‡�dzd=�¬‹«      “�dŒ eQd0�d�d�d‡�dzd=�¬‹«      “¥«      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»„«       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Á„«       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Ç„«       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Í„«       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Ó„«       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Ù„«       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ß„«       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å„«       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ë„«       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ñ„«       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÷„«       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ý„«       ZÂe4�d�d�e8f�dþ„«       ZÃe4�d�d�e8f�dÿ„«       ZÄe4�d�d�e8f�d „«       ZÅ e5eÆi �ddä“�ddç“�ddê“�ddì“�ddî“�ddð“�ddò“�ddô“�d	dö“�d
dÉ“�ddÌ“�ddÎ“�ddÐ“�ddÒ“�ddÔ“�ddÙ“�ddÛ“dÝdá�d5�d8�d;�d=�dE�dI�dL�dN�d�d�d�d�dœ¥«       y(!  a   The EfficientNet Family in PyTorch

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

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

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

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

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

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

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

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

* And likely more...

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

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

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

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

        Args:
            block_args: Arguments for building blocks.
            num_classes: Number of classifier classes.
            num_features: Number of features for penultimate layer.
            in_chans: Number of input channels.
            stem_size: Number of output channels in stem.
            stem_kernel_size: Kernel size for stem convolution.
            fix_stem: If True, don't scale stem channels.
            output_stride: Output stride of network.
            pad_type: Padding type.
            act_layer: Activation layer class.
            norm_layer: Normalization layer class.
            aa_layer: Anti-aliasing layer class.
            se_layer: Squeeze-and-excitation layer class.
            round_chs_fn: Channel rounding function.
            drop_rate: Dropout rate for classifier.
            drop_path_rate: Drop path rate for stochastic depth.
            global_pool: Global pooling type.
        ©ÚdeviceÚdtypeFé   ©ÚstrideÚpaddingÚinplaceT)r:   r;   r@   r<   r=   r>   r?   rB   Ústager   r   rL   Ú	pool_typeN© )ÚsuperÚ__init__ÚnnÚReLUÚBatchNorm2dr   r   r4   r6   rA   Úgrad_checkpointingr   Ú	conv_stemÚbn1r   Ú
SequentialÚblocksÚfeaturesÚfeature_infoÚ
stage_endsÚin_chsÚ	conv_headÚbn2r5   Úhead_hidden_sizeÚIdentityr   rC   Ú
classifierr   )Úselfr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rG   rH   ÚddÚnorm_act_layerÚbuilderÚfÚhead_chsÚ	__class__s                            €úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/efficientnet.pyrR   zEfficientNet.__init__Q   sî  ø€ ôV 	‰ÑÔØ¨Ñ/ˆØÒ(¤§¡ˆ	ØÒ1¤2§>¡>ˆ
Ü+¨J¸	ÓBˆØÒ,œ}ˆØ&ˆÔØ ˆŒØ"ˆŒØ"'ˆÔñ Ù$ YÓ/ˆIÜ& x°Ð<LÐoÐUVÐ`hÑoÐlnÑoˆŒÙ! )Ñ@°TÐ@¸RÑ@ˆŒô &ð 

Ø'ØØ%ØØ!ØØØ)ñ

ð ñ

ˆô —m‘m¡W¨Y¸
Ó%CÐDˆŒØ#×,Ñ,ˆÔØ/3×/@Ñ/@ÖA¨!˜1˜W›:ÒAˆŒØ—>‘>ˆð ˜!ÒÜ*¨8°\À1Ñ]ÈhÐ]ÐZ\Ñ]ˆDŒNÙ% lÑG¸DÐGÀBÑGˆDŒHØ8DÐDˆDÔ Õ 5äŸ[™[›]ˆDŒNÜ—{‘{“}ˆDŒHØ8@Ð@ˆDÔ Ô 5ä,=Ø×ÑØ×Ññ-
ð "ð-
ð ñ	-
Ñ)ˆÔ˜$œ/ô 	" $Õ'ùò) Bs   Ã0Gc                 ód  — | j                   | j                  g}|j                  | j                  «       |j                  | j                  | j
                  | j                  g«       |j                  t        j                  | j                  «      | j                  g«       t        j                  |Ž S )z3Convert model to sequential for feature extraction.)rW   rX   ÚextendrZ   r_   r`   rC   rS   ÚDropoutrA   rc   rY   )rd   Úlayerss     rk   Úas_sequentialzEfficientNet.as_sequential±   sv   € à—.‘. $§(¡(Ð+ˆØ�‰�d—k‘kÔ"Ø�‰�t—~‘~ t§x¡x°×1AÑ1AÐBÔCØ�‰”r—z‘z $§.¡.Ó1°4·?±?ÐCÔDÜ�}‰}˜fÐ%Ð%ó    Úcoarsec                 ó,   — t        d|rdnddfdg¬«      S )zÊCreate regex patterns for parameter groups.

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

        Returns:
            Dictionary mapping group names to regex patterns.
        z^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+)N)zconv_head|bn2)iŸ† )ÚstemrZ   )Údict)rd   rr   s     rk   Úgroup_matcherzEfficientNet.group_matcher¹   s*   € ô Ø"á&,Ñ"Ð2JÈDÐQØ,ðô
ð 	
rq   Úenablec                 ó   — || _         y©zEnable or disable gradient checkpointing.

        Args:
            enable: Whether to enable gradient checkpointing.
        N©rV   ©rd   rw   s     rk   Úset_grad_checkpointingz#EfficientNet.set_grad_checkpointingË   ó   € ð #)ˆÕrq   c                 ó   — | j                   S )zGet the classifier module.)rc   )rd   s    rk   Úget_classifierzEfficientNet.get_classifierÔ   s   € ð �‰Ðrq   c                 óp   — || _         t        | j                  | j                   |¬«      \  | _        | _        y)zŸReset the classifier head.

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

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

        Returns:
            List of intermediate features or tuple of (final features, intermediates).
        )ÚNCHWzOutput shape must be NCHW.r   r   N)Ústartéÿÿÿÿ)r#   ÚlenrZ   r]   rW   rX   ÚappendÚtorchÚjitÚis_scriptingÚ	enumeraterV   r$   r_   r`   )rd   r‚   rƒ   r„   r…   r†   r‡   rˆ   ÚintermediatesÚtake_indicesÚ	max_indexÚiÚfeat_idxrZ   Úblks                  rk   Úforward_intermediatesz"EfficientNet.forward_intermediatesä   s‹  € ð0 ˜YÑ&ÐDÐ(DÓDÐ&ØˆÙÜ&:¼3¸t¿{¹{Ó;KÈaÑ;OÐQXÓ&YÑ#ˆL™)ä&:¼3¸t¿¹Ó;OÐQXÓ&YÑ#ˆL˜)Ø8DÖE°1˜DŸO™O¨AÓ.ÐEˆLÐEØŸ™¨	Ñ2ˆIàˆØ�N‰N˜1ÓˆØ�H‰H�Q‹KˆØ�|Ñ#Ø× Ñ  Ô#ä�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )Ð,ˆFÜ& v°QÔ7ò 	(‰MˆH�cØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ" 3¨Ó*‘á˜“F�Ø˜<Ò'Ø×$Ñ$ QÕ'ð	(ñ Ø Ð à�t—‘ rÑ*Ò*Ø—‘˜qÓ!ˆAØ—‘˜“ˆAà�-ÐÐùò9 Fs   ÁFÚ
prune_normÚ
prune_headc                 ó   — |r&t        t        | j                  «      dz   |«      \  }}n1t        t        | j                  «      |«      \  }}| j                  |   }| j                  d| | _        |s|t        | j                  «      k  r2t	        j
                  «       | _        t	        j
                  «       | _        |r| j                  dd«       |S )a€  Prune layers not required for specified intermediates.

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

        Returns:
            List of indices that were kept.
        r   Nr   r0   )	r#   r�   rZ   r]   rS   rb   r_   r`   r�   )rd   rƒ   rš   r›   rˆ   r”   r•   s          rk   Úprune_intermediate_layersz&EfficientNet.prune_intermediate_layers   s¨   € ñ$ Ü&:¼3¸t¿{¹{Ó;KÈaÑ;OÐQXÓ&YÑ#ˆL™)ä&:¼3¸t¿¹Ó;OÐQXÓ&YÑ#ˆL˜)ØŸ™¨	Ñ2ˆIØ—k‘k * 9Ð-ˆŒÙ˜¤S¨¯©Ó%5Ò5ÜŸ[™[›]ˆDŒNÜ—{‘{“}ˆDŒHÙØ×!Ñ! ! RÔ(ØÐrq   c                 ó6  — | j                  |«      }| j                  |«      }| j                  r7t        j                  j                  «       st        | j                  |d¬«      }n| j                  |«      }| j                  |«      }| j                  |«      }|S )z/Forward pass through feature extraction layers.T)Úflatten)
rW   rX   rV   r�   r�   r‘   r$   rZ   r_   r`   ©rd   r‚   s     rk   Úforward_featureszEfficientNet.forward_features?  st   € à�N‰N˜1ÓˆØ�H‰H�Q‹KˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨A°tÔ<‰Aà—‘˜A“ˆAØ�N‰N˜1ÓˆØ�H‰H�Q‹KˆØˆrq   Ú
pre_logitsc                 óÄ   — | j                  |«      }| j                  dkD  r,t        j                  || j                  | j                  ¬«      }|r|S | j                  |«      S )zÊForward pass through classifier head.

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

        Returns:
            Output tensor.
        r1   )ÚpÚtraining)rC   rA   ÚFÚdropoutr¥   rc   )rd   r‚   r¢   s      rk   Úforward_headzEfficientNet.forward_headK  sP   € ð ×Ñ˜QÓˆØ�>‰>˜BÒÜ—	‘	˜!˜tŸ~™~¸¿¹ÔFˆAÙˆqÐ6 D§O¡O°AÓ$6Ð6rq   c                 óJ   — | j                  |«      }| j                  |«      }|S )zForward pass.)r¡   r¨   r    s     rk   ÚforwardzEfficientNet.forwardZ  s'   € à×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆrq   ©F©T)r2   )NFFrŠ   FF)r   FTF)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚintÚboolÚstrr   r   r   ÚfloatrR   rS   rY   rp   r�   r�   Úignorer   r	   r   rv   r|   ÚModuler   r�   ÚTensorr   r™   r�   r¡   r¨   rª   Ú__classcell__©rj   s   @rk   r)   r)   ;   s5  ø„ ñð0  $Ø $ØØØ$%Ø"Ø!#ØØ-1Ø.2Ø,0Ø,0Ø%3Ø!Ø$&Ø$ØØñ)^(à!ð^(ð ð^(ð ð	^(ð
 ð^(ð ð^(ð "ð^(ð ð^(ð ð^(ð ð^(ð   	Ñ*ð^(ð ! Ñ+ð^(ð ˜yÑ)ð^(ð ˜yÑ)ð^(ð #ð^(ð  ð!^(ð" "ð#^(ð$ ð%^(ð* 
õ+^(ð@&˜rŸ}™}ó &ð ‡Y�Y×Ññ
 Dð 
°T¸#¸uÀSÈ$ÀYÑ?OÐ:OÑ5Pò 
ó ð
ð" ‡Y�Y×Ññ)¨Tð )¸Tò )ó ð)ð ‡Y�Y×Ñð §	¡	ò ó ðñ	H¨Cð 	H¸cð 	HÈdó 	Hð 8<ØØ$Ø$Ø',Ø!&ñ: à�|‰|ð: ð ˜e C¨¨c© NÑ3Ñ4ð: ð ð	: ð
 ð: ð ð: ð !%ð: ð ð: ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó: ð| ./Ø$Ø#Ø!&ñà˜3  S¡	˜>Ñ*ðð ðð ð	ð
 ðð 
ˆc‰óð>
 %§,¡,ð 
°5·<±<ó 
ñ7˜eŸl™lð 7¸ð 7ÈÏÉó 7ð˜Ÿ™ð ¨%¯,©,÷ rq   c            !       ó  ‡ — e Zd ZdZdddddddddddded	d	ddfd
edeedf   dedededede	dedede
e   de
e   de
e   de
e   dededef ˆ fd„Zej                   j"                  d de	ddfd„«       Zdeej(                     fd„Zˆ xZS )!r*   z¯ EfficientNet Feature Extractor

    A work-in-progress feature extraction module for EfficientNet, to use as a backbone for segmentation
    and object detection models.
    )r   r   rI   r.   é   Ú
bottleneckr.   r/   Fr0   Nr1   r3   Úout_indices.Úfeature_locationr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   c                 óæ  •— t         ‰| �  «        ||dœ}|
xs t        j                  }
|xs t        j                  }t        ||
«      }|xs t        }|| _        || _        d| _	        |s ||«      }t        |||fd|	dœ|¤Ž| _         ||fddi|¤Ž| _        t        d||	||
|||||dœ	|¤Ž}t        j                   |||«      Ž | _        t!        |j"                  |«      | _        | j$                  j'                  «       D �ci c]  }|d   |d	   “Œ c}| _        t+        | «       d | _        |d
k7  r<| j$                  j'                  d¬«      }t/        || j1                  «       «      | _        y y c c}w )NrF   FrI   rJ   rM   T)	r:   r;   r@   r<   r=   r>   r?   rB   r¾   rN   Úindexr¼   )ÚmoduleÚ	hook_type)ÚkeysrP   )rQ   rR   rS   rT   rU   r   r   r6   rA   rV   r   rW   rX   r   rY   rZ   r!   r[   r\   Ú	get_dictsÚ_stage_out_idxr   Úfeature_hooksr"   Únamed_modules)rd   r3   r½   r¾   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rG   rH   re   rf   rg   rh   Úhooksrj   s                           €rk   rR   zEfficientNetFeatures.__init__h  s‘  ø€ ô* 	‰ÑÔØ¨Ñ/ˆØÒ(¤§¡ˆ	ØÒ1¤2§>¡>ˆ
Ü+¨J¸	ÓBˆØÒ,œ}ˆØ ˆŒØ"ˆŒØ"'ˆÔñ Ù$ YÓ/ˆIÜ& x°Ð<LÐoÐUVÐ`hÑoÐlnÑoˆŒÙ! )Ñ@°TÐ@¸RÑ@ˆŒô &ð 
Ø'ØØ%ØØ!ØØØ)Ø-ñ
ð ñ
ˆô —m‘m¡W¨Y¸
Ó%CÐDˆŒÜ'¨×(8Ñ(8¸+ÓFˆÔØ?C×?PÑ?P×?ZÑ?ZÓ?\Ö]¸!˜q ™z¨1¨W©:Ñ5Ò]ˆÔä! $Ô'ð "ˆÔØ˜|Ò+Ø×%Ñ%×/Ñ/Ð5LÐ/ÓMˆEÜ!-¨e°T×5GÑ5GÓ5IÓ!JˆDÕð ,ùò ^s   ÄE.rw   rD   c                 ó   — || _         yry   rz   r{   s     rk   r|   z+EfficientNetFeatures.set_grad_checkpointing¦  r}   rq   c                 ó@  — | j                  |«      }| j                  |«      }| j                  €¢g }d| j                  v r|j	                  |«       t        | j                  «      D ]g  \  }}| j                  r+t        j                  j                  «       st        ||«      }n ||«      }|dz   | j                  v sŒW|j	                  |«       Œi |S | j                  |«       | j                  j                  |j                  «      }t        |j                  «       «      S )Nr   r   )rW   rX   rÆ   rÅ   rŽ   r’   rZ   rV   r�   r�   r‘   r%   Ú
get_outputrG   ÚlistÚvalues)rd   r‚   r[   r–   ÚbÚouts         rk   rª   zEfficientNetFeatures.forward¯  sì   € Ø�N‰N˜1ÓˆØ�H‰H�Q‹KˆØ×ÑÐ%ØˆHØ�D×'Ñ'Ñ'Ø—‘ Ô"Ü! $§+¡+Ó.ò '‘��1Ø×*Ò*´5·9±9×3IÑ3IÔ3KÜ" 1 aÓ(‘Aá˜!›�AØ�q‘5˜D×/Ñ/Ò/Ø—O‘O AÕ&ð'ð ˆOà�K‰K˜ŒNØ×$Ñ$×/Ñ/°·±Ó9ˆCÜ˜Ÿ
™
›Ó%Ð%rq   r¬   )r­   r®   r¯   r°   r   r   r   r±   r³   r²   r   r   r   r´   rR   r�   r�   rµ   r|   r   r·   rª   r¸   r¹   s   @rk   r*   r*   a  sO  ø„ ñð ,;Ø$0ØØØ$%Ø"Ø!#ØØ-1Ø.2Ø,0Ø,0Ø%3Ø!Ø$&ØØñ'<Kà!ð<Kð ˜s C˜x™ð<Kð "ð	<Kð
 ð<Kð ð<Kð "ð<Kð ð<Kð ð<Kð ð<Kð   	Ñ*ð<Kð ! Ñ+ð<Kð ˜yÑ)ð<Kð ˜yÑ)ð<Kð #ð<Kð  ð!<Kð" "õ#<Kð| ‡Y�Y×Ññ)¨Tð )¸Tò )ó ð)ð&˜D §¡Ñ.÷ &rq   c                 ó  — d}t         }d }|j                  dd«      rd|v sd|v rd}n
d}t        }d}|j                  d	d
«      }t        || |f|dk(  |xr |dk7  |dœ|¤Ž}|dk(  r!t	        |j
                  «      x|_        |_        |S )Nr0   Úfeatures_onlyFÚfeature_cfgÚfeature_clsÚcfg)r4   r5   Ú	head_convrC   ÚclsÚpretrained_strictT)rÑ   r×   Úkwargs_filter)r)   Úpopr*   r   r   Úpretrained_cfgÚdefault_cfg)ÚvariantÚ
pretrainedÚkwargsÚfeatures_modeÚ	model_clsrØ   r×   Úmodels           rk   Ú_create_effnetrâ   Ä  sº   € Ø€MÜ€IØ€MØ‡z�z�/ 5Ô)Ø˜FÑ" m°vÑ&=Ø!‰MàWˆMÜ,ˆIØ!ˆMØŸ
™
Ð#6¸Ó=Ðä ØØØðð $ uÑ,Ø+ÒF°ÀÑ0FØ#ñð ñ€Eð ˜ÒÜ3NÈu×OcÑOcÓ3dÐdˆÔ˜uÔ0Ø€Lrq   ç      ð?c                 óú   — dgdgdgdgdgdgdgg}t        dt        |«      dt        t        |¬	«      |j	                  d
d«      xs# t        t
        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )z÷Creates a mnasnet-a1 model.

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

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    Úds_r1_k3_s1_e1_c16_noskipÚir_r2_k3_s2_e6_c24zir_r3_k5_s2_e3_c40_se0.25Úir_r4_k3_s2_e6_c80zir_r2_k3_s1_e6_c112_se0.25zir_r3_k5_s2_e6_c160_se0.25Úir_r1_k3_s1_e6_c320r/   ©Ú
multiplierr=   N©r3   r7   r@   r=   rP   ©	ru   r   r   r   rÙ   rS   rU   r   râ   ©rÜ   Úchannel_multiplierrÝ   rÞ   Úarch_defÚmodel_kwargsrá   s          rk   Ú_gen_mnasnet_a1rñ   ß  s¥   € ð 
%Ð%à	Ðà	$Ð%à	Ðà	%Ð&à	%Ð&à	Ðð€Hô  ð Ü" 8Ó,ØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñ	ð
 ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 óú   — dgdgdgdgdgdgdgg}t        dt        |«      dt        t        |¬	«      |j	                  d
d«      xs# t        t
        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )ú÷Creates a mnasnet-b1 model.

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

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    Úds_r1_k3_s1_c16_noskipÚir_r3_k3_s2_e3_c24Úir_r3_k5_s2_e3_c40Úir_r3_k5_s2_e6_c80Úir_r2_k3_s1_e6_c96Úir_r4_k5_s2_e6_c192Úir_r1_k3_s1_e6_c320_noskipr/   ré   r=   Nrë   rP   rì   rí   s          rk   Ú_gen_mnasnet_b1rû     s¥   € ð 
"Ð"à	Ðà	Ðà	Ðà	Ðà	Ðà	%Ð&ð€Hô  ð Ü" 8Ó,ØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñ	ð
 ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 óú   — dgdgdgdgdgdgdgg}t        dt        |«      dt        t        |¬	«      |j	                  d
d«      xs# t        t
        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )ró   Úds_r1_k3_s1_c8Úir_r1_k3_s2_e3_c16Úir_r2_k3_s2_e6_c16zir_r4_k5_s2_e6_c32_se0.25zir_r3_k3_s1_e6_c32_se0.25zir_r3_k5_s2_e6_c88_se0.25Úir_r1_k3_s1_e6_c144é   ré   r=   Nrë   rP   rì   rí   s          rk   Ú_gen_mnasnet_smallr  '  s¥   € ð 
ÐØ	ÐØ	ÐØ	$Ð%Ø	$Ð%Ø	$Ð%Ø	Ðð€Hô ð Ü" 8Ó,ØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñ	ð
 ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 óL  — dgdgdgdgdgg}t        t        |¬«      }	|r|rdnt        d |	d«      «      nd}
t        dt	        ||||¬	«      |
d
||	|j                  dd«      xs# t        t        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}|S )z�
    Ref impl: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_v2.py
    Paper: https://arxiv.org/abs/1801.04381
    Údsa_r1_k3_s1_c64Údsa_r2_k3_s2_c128Údsa_r2_k3_s2_c256Údsa_r6_k3_s2_c512Údsa_r2_k3_s2_c1024ré   i   r   ©Údepth_multiplierÚfix_first_lastÚ
group_sizer/   r=   NÚrelu6©r3   r5   r7   r9   r@   r=   r<   rP   )r   r   Úmaxru   r   rÙ   rS   rU   r   r   râ   )rÜ   rî   r
  r  Úfix_stem_headrÕ   rÝ   rÞ   rï   r@   Úhead_featuresrð   rá   s                rk   Ú_gen_mobilenet_v1r  D  sÖ   € ð 
ÐØ	ÐØ	ÐØ	ÐØ	Ðð€Hô œ>Ð6HÔI€LÙR[™]‘T´°D¹,ÀtÓ:LÔ0MÐab€MÜð Ü"ØØ-Ø(Ø!ô	
ð #ØØØ!Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨GÓ4ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 óH  — dgdgdgdgdgdgdgg}t        t        |¬«      }t        dt        ||||¬	«      |rd
nt	        d
 |d
«      «      d|||j                  dd«      xs# t        t        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}	t        | |fi |	¤Ž}
|
S )z» Generate MobileNet-V2 network
    Ref impl: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_v2.py
    Paper: https://arxiv.org/abs/1801.04381
    Úds_r1_k3_s1_c16ræ   Úir_r3_k3_s2_e6_c32Úir_r4_k3_s2_e6_c64Úir_r3_k3_s1_e6_c96Úir_r3_k3_s2_e6_c160rè   ré   r	  r-   r/   r=   Nr  r  rP   )r   r   ru   r   r  rÙ   rS   rU   r   r   râ   )rÜ   rî   r
  r  r  rÝ   rÞ   rï   r@   rð   rá   s              rk   Ú_gen_mobilenet_v2r  h  sØ   € ð 
ÐØ	ÐØ	ÐØ	ÐØ	ÐØ	ÐØ	Ðð€Hô œ>Ð6HÔI€LÜð Ü"ØØ-Ø(Ø!ô	
ñ +‘T´°D¹,ÀtÓ:LÓ0MØØØ!Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨GÓ4ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgddgg d¢g d¢ddgdgd	gg}t        dt        |«      d
dt        t        |¬«      |j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )ai   FBNet-C

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

        NOTE: the impl above does not relate to the 'C' variant here, that was derived from paper,
        it was used to confirm some building block details
    Úir_r1_k3_s1_e1_c16Úir_r1_k3_s2_e6_c24Úir_r2_k3_s1_e1_c24)Úir_r1_k5_s2_e6_c32Úir_r1_k5_s1_e3_c32Úir_r1_k5_s1_e6_c32Úir_r1_k3_s1_e6_c32)Úir_r1_k5_s2_e6_c64Úir_r1_k5_s1_e3_c64Úir_r2_k5_s1_e6_c64Úir_r3_k5_s1_e6_c112Úir_r1_k5_s1_e3_c112Úir_r4_k5_s2_e6_c184Úir_r1_k3_s1_e6_c352é   iÀ  ré   r=   N)r3   r7   r5   r@   r=   rP   rì   rí   s          rk   Ú_gen_fbnetcr*  �  s¨   € ð 
ÐØ	Ð3Ð4Ú`ÚJØ	Ð 5Ð6Ø	ÐØ	Ðð€Hô ð Ü" 8Ó,ØØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó   — dgdgddgddgddgd	gd
gg}t        dt        |«      dt        t        |¬«      |j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )zËCreates the Single-Path NAS model from search targeted for Pixel1 phone.

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

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    rô   rõ   Úir_r1_k5_s2_e6_c40Úir_r3_k3_s1_e3_c40Úir_r1_k5_s2_e6_c80Úir_r3_k3_s1_e3_c80Úir_r1_k5_s1_e6_c96Úir_r3_k5_s1_e3_c96rù   rú   r/   ré   r=   Nrë   rP   rì   rí   s          rk   Ú_gen_spnasnetr2  «  s®   € ð 
"Ð"à	Ðà	Ð3Ð4à	Ð3Ð4à	Ð3Ð4à	Ðà	%Ð&ð€Hô  ð Ü" 8Ó,ØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñ	ð
 ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó*  — dgdgdgdgdgdgdgg}t        t        ||¬«      }t        dt        |||¬	«       |d
«      d|t	        |d«      |j                  dd«      xs# t        t        j                  fi t        |«      ¤Ždœ|¤Ž}	t        | |fi |	¤Ž}
|
S )ax  Creates an EfficientNet model.

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

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

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

    úds_r1_k3_s1_e1_c16_se0.25úir_r2_k3_s2_e6_c24_se0.25úir_r2_k5_s2_e6_c40_se0.25úir_r3_k3_s2_e6_c80_se0.25úir_r3_k5_s1_e6_c112_se0.25úir_r4_k5_s2_e6_c192_se0.25úir_r1_k3_s1_e6_c320_se0.25©rê   Údivisor©r  r-   r/   Úswishr=   N©r3   r5   r7   r@   r<   r=   rP   ©
r   r   ru   r   r   rÙ   rS   rU   r   râ   )rÜ   rî   r
  Úchannel_divisorr  rÝ   rÞ   rï   r@   rð   rá   s              rk   Ú_gen_efficientnetrB  Î  sÄ   € ð8 
%Ð%Ø	$Ð%Ø	$Ð%Ø	$Ð%Ø	%Ð&Ø	%Ð&Ø	%Ð&ð€Hô œ>Ð6HÐRaÔb€LÜð Ü" 8Ð-=È*ÔUÙ! $Ó'ØØ!Ü# F¨GÓ4Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó$  — dgdgdgdgdgdgg}t        t        |¬«      }t        dt        |||¬«       |d	«      d
||j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}	|	S )z� Creates an EfficientNet-EdgeTPU model

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/edgetpu
    Úer_r1_k3_s1_e4_c24_fc24_noskipÚer_r2_k3_s2_e8_c32Úer_r4_k3_s2_e8_c48Úir_r5_k5_s2_e8_c96Úir_r4_k5_s1_e8_c144Úir_r2_k5_s2_e8_c192ré   r=  r-   r/   r=   NÚrelu©r3   r5   r7   r@   r=   r<   rP   ©
r   r   ru   r   rÙ   rS   rU   r   r   râ   ©
rÜ   rî   r
  r  rÝ   rÞ   rï   r@   rð   rá   s
             rk   Ú_gen_efficientnet_edgerN     s»   € ð 
*Ð*Ø	ÐØ	ÐØ	ÐØ	ÐØ	Ðð	€Hô œ>Ð6HÔI€LÜð Ü" 8Ð-=È*ÔUÙ! $Ó'ØØ!Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨FÓ3ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó(  — dgdgdgdgdgdgdgg}t        t        |¬«      }t        dt        |||¬	«       |d
«      d||j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}	|	S )z�Creates an EfficientNet-CondConv model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv
    r4  r5  r6  r7  zir_r3_k5_s1_e6_c112_se0.25_cc4zir_r4_k5_s2_e6_c192_se0.25_cc4zir_r1_k3_s1_e6_c320_se0.25_cc4ré   )Úexperts_multiplierr-   r/   r=   Nr>  rK  rP   rL  )
rÜ   rî   r
  rP  rÝ   rÞ   rï   r@   rð   rá   s
             rk   Ú_gen_efficientnet_condconvrQ     sÂ   € ð 
%Ð%Ø	$Ð%Ø	$Ð%Ø	$Ð%Ø	)Ð*Ø	)Ð*Ø	)Ð*ð€Hô œ>Ð6HÔI€LÜð Ü" 8Ð-=ÐRdÔeÙ! $Ó'ØØ!Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨GÓ4ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgdgdgdgdgdgdgg}t        dt        ||d¬	«      d
ddt        t        |¬«      t	        |d«      |j                  dd«      xs# t        t        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )a£  Creates an EfficientNet-Lite model.

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

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

    Args:
      channel_multiplier: multiplier to number of channels per layer
      depth_multiplier: multiplier to number of repeats per stage
    Úds_r1_k3_s1_e1_c16ræ   Úir_r2_k5_s2_e6_c40Úir_r3_k3_s2_e6_c80r%  rù   rè   T)r  r-   r/   ré   r  r=   N©r3   r5   r7   r9   r@   r<   r=   rP   )
ru   r   r   r   r   rÙ   rS   rU   r   râ   ©rÜ   rî   r
  rÝ   rÞ   rï   rð   rá   s           rk   Ú_gen_efficientnet_literX  @  sº   € ð& 
ÐØ	ÐØ	ÐØ	ÐØ	ÐØ	ÐØ	Ðð€Hô ð 	Ü" 8Ð-=ÈdÔSØØØÜœ^Ð8JÔKÜ# F¨GÓ4Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñ	ð ñ	€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó&  — dgdgdgdgdgdgg}t        t        |d¬«      }t        dt        |||¬	«       |d
«      d||j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}	|	S )zÙ Creates an EfficientNet-V2 base model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    Úcn_r1_k3_s1_e1_c16_skipÚer_r2_k3_s2_e4_c32Úer_r2_k3_s2_e4_c48zir_r3_k3_s2_e4_c96_se0.25zir_r5_k3_s1_e6_c112_se0.25zir_r8_k3_s2_e6_c192_se0.25r1   ©rê   Úround_limitr=  r-   r/   r=   NÚsilurK  rP   rL  rM  s
             rk   Ú_gen_efficientnetv2_baser`  i  s¾   € ð 
#Ð#Ø	ÐØ	ÐØ	$Ð%Ø	%Ð&Ø	%Ð&ð€Hô œ>Ð6HÐVXÔY€LÜð Ü" 8Ð-=È*ÔUÙ! $Ó'ØØ!Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨FÓ3ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 óH  — dgdgdgdgdgdgg}d}|rdg|d	<   d
g|d<   d}t        t        |¬«      }	t        dt        |||¬«       |	|«      d|	|j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}
t        | |fi |
¤Ž}|S )a[   Creates an EfficientNet-V2 Small model

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

    NOTE: `rw` flag sets up 'small' variant to behave like my initial v2 small model,
        before ref the impl was released.
    Úcn_r2_k3_s1_e1_c24_skipÚer_r4_k3_s2_e4_c48Úer_r4_k3_s2_e4_c64zir_r6_k3_s2_e4_c128_se0.25zir_r9_k3_s1_e6_c160_se0.25zir_r15_k3_s2_e6_c256_se0.25r-   Úer_r2_k3_s1_e1_c24r   zir_r15_k3_s2_e6_c272_se0.25rŒ   i   ré   r=  é   r=   Nr_  rK  rP   rL  )rÜ   rî   r
  r  ÚrwrÝ   rÞ   rï   r5   r@   rð   rá   s               rk   Ú_gen_efficientnetv2_srh  ‡  sà   € ð 
#Ð#Ø	ÐØ	ÐØ	%Ð&Ø	%Ð&Ø	&Ð'ð€Hð €LÙ	à+Ð,ˆ�‰Ø5Ð6ˆ�‰Øˆäœ>Ð6HÔI€LÜð Ü" 8Ð-=È*ÔUÙ! ,Ó/ØØ!Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨FÓ3ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgdgdgdgdgdgdgg}t        dt        |||¬«      d	d
t        t        |¬«      |j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}|S )zÛ Creates an EfficientNet-V2 Medium model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    Úcn_r3_k3_s1_e1_c24_skipÚer_r5_k3_s2_e4_c48Úer_r5_k3_s2_e4_c80zir_r7_k3_s2_e4_c160_se0.25zir_r14_k3_s1_e6_c176_se0.25zir_r18_k3_s2_e6_c304_se0.25zir_r5_k3_s1_e6_c512_se0.25r=  r-   rf  ré   r=   Nr_  rK  rP   ©
ru   r   r   r   rÙ   rS   rU   r   r   râ   ©	rÜ   rî   r
  r  rÝ   rÞ   rï   rð   rá   s	            rk   Ú_gen_efficientnetv2_mro  ¯  s·   € ð 
#Ð#Ø	ÐØ	ÐØ	%Ð&Ø	&Ð'Ø	&Ð'Ø	%Ð&ð€Hô ð Ü" 8Ð-=È*ÔUØØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨FÓ3ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgdgdgdgdgdgdgg}t        dt        |||¬«      d	d
t        t        |¬«      |j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}|S )zÚ Creates an EfficientNet-V2 Large model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    Úcn_r4_k3_s1_e1_c32_skipÚer_r7_k3_s2_e4_c64Úer_r7_k3_s2_e4_c96zir_r10_k3_s2_e4_c192_se0.25zir_r19_k3_s1_e6_c224_se0.25zir_r25_k3_s2_e6_c384_se0.25zir_r7_k3_s1_e6_c640_se0.25r=  r-   r/   ré   r=   Nr_  rK  rP   rm  rn  s	            rk   Ú_gen_efficientnetv2_lrt  Ï  ó·   € ð 
#Ð#Ø	ÐØ	ÐØ	&Ð'Ø	&Ð'Ø	&Ð'Ø	%Ð&ð€Hô ð Ü" 8Ð-=È*ÔUØØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨FÓ3ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgdgdgdgdgdgdgg}t        dt        |||¬«      d	d
t        t        |¬«      |j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}|S )zß Creates an EfficientNet-V2 Xtra-Large model

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

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

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

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

    r   zds_r1_k3_s1_e1_c16_se0.25_d1zer_r2_k3_s2_e6_c24_se0.25_nrezer_r2_k5_s2_e6_c40_se0.25_nrer7  r8  r9  r:  zer_r2_k3_s2_e4_c24_se0.25_nrezer_r2_k5_s2_e4_c40_se0.25_nrezir_r3_k3_s2_e4_c80_se0.25r;  r=  r-   r/   r_  r=   Nr?  rP   r@  )rÜ   rî   r
  rA  r  ÚversionrÝ   rÞ   rï   r@   rð   rá   s               rk   Ú_gen_efficientnet_xr|    s  € ð6ð, �!‚|à+Ð,Ø,Ð-Ø,Ð-Ø(Ð)Ø)Ð*Ø)Ð*Ø)Ð*ð
‰ð ,Ð,Ø,Ð-Ø,Ð-Ø(Ð)Ø)Ð*Ø)Ð*Ø)Ð*ð
ˆô œ>Ð6HÐRaÔb€LÜð Ü" 8Ð-=È*ÔUÙ! $Ó'ØØ!Ü# F¨FÓ3Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgddgddgddgdd	gd
dgg}t        dt        |«      ddt        t        |¬«      |j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )zªCreates a MixNet Small model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet
    Paper: https://arxiv.org/abs/1907.09595
    rS  zir_r1_k3_a1.1_p1.1_s2_e6_c24zir_r1_k3_a1.1_p1.1_s1_e3_c24z ir_r1_k3.5.7_s2_e6_c40_se0.5_nswú(ir_r3_k3.5_a1.1_p1.1_s1_e6_c40_se0.5_nswz&ir_r1_k3.5.7_p1.1_s2_e6_c80_se0.25_nswz$ir_r2_k3.5_p1.1_s1_e6_c80_se0.25_nswz+ir_r1_k3.5.7_a1.1_p1.1_s1_e6_c120_se0.5_nswz-ir_r2_k3.5.7.9_a1.1_p1.1_s1_e3_c120_se0.5_nswz&ir_r1_k3.5.7.9.11_s2_e6_c200_se0.5_nswz(ir_r2_k3.5.7.9_p1.1_s1_e6_c200_se0.5_nswé   r)  ré   r=   N©r3   r5   r7   r@   r=   rP   rì   rí   s          rk   Ú_gen_mixnet_sr�  b  s±   € ð 
Ðà	'Ð)GÐHà	+Ð-WÐXà	1Ð3YÐZà	6Ð8gÐhà	1Ð3]Ð^ð€Hô ð Ü" 8Ó,ØØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgddgddgddgdd	gd
dgg}t        dt        ||d¬«      ddt        t        |¬«      |j	                  dd«      xs# t        t
        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )z±Creates a MixNet Medium-Large model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet
    Paper: https://arxiv.org/abs/1907.09595
    Úds_r1_k3_s1_e1_c24z ir_r1_k3.5.7_a1.1_p1.1_s2_e6_c32zir_r1_k3_a1.1_p1.1_s1_e3_c32z"ir_r1_k3.5.7.9_s2_e6_c40_se0.5_nswr~  z!ir_r1_k3.5.7_s2_e6_c80_se0.25_nswz-ir_r3_k3.5.7.9_a1.1_p1.1_s1_e6_c80_se0.25_nswzir_r1_k3_s1_e6_c120_se0.5_nswz-ir_r3_k3.5.7.9_a1.1_p1.1_s1_e3_c120_se0.5_nswz#ir_r1_k3.5.7.9_s2_e6_c200_se0.5_nswz(ir_r3_k3.5.7.9_p1.1_s1_e6_c200_se0.5_nswÚround©Údepth_truncr  rf  ré   r=   Nr€  rP   rì   rW  s           rk   Ú_gen_mixnet_mr‡  ƒ  s¶   € ð 
Ðà	+Ð-KÐLà	-Ð/YÐZà	,Ð.]Ð^à	(Ð*YÐZà	.Ð0ZÐ[ð€Hô ð Ü" 8Ð-=È7ÔSØØÜœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 óF  — dgdgdgdgdgdgdgg}t        dt        ||d¬	«      t        d
t        d
|dd«      «      ddt	        t        |¬«      t        |d«      |j                  dd«      xs# t	        t        j                  fi t        |«      ¤Ždœ|¤Ž}t        | |fi |¤Ž}|S )zCreates a TinyNet model.
    r4  r5  r6  r7  r8  r9  r:  r„  r…  r-   r  Nr/   Tré   r>  r=   rV  rP   )ru   r   r  r   r   r   rÙ   rS   rU   r   râ   )rÜ   Úmodel_widthr
  rÝ   rÞ   rï   rð   rá   s           rk   Ú_gen_tinynetrŠ  ¤  sË   € ð 
%Ð%Ð(CÐ'DØ	$Ð%Ð(CÐ'DØ	%Ð&Ð)EÐ(FØ	%Ð&ð	€Hô ð 	Ü" 8Ð-=È7ÔSÜ˜œ~¨d°KÀÀDÓIÓJØØÜœ^¸ÔDÜ# F¨GÓ4Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gñ	ð ñ	€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — d| v rgd}d}d}d}t        |d«      }	dt        t           dt        fd„}
d	| v r	d
}d}g d¢}n%d| v rg d¢}nd| v rg d¢}d}nd| v rd}d}g d¢}d}nJ ‚ |
||«      }n'd
}d}d}t        |d«      }	dgddgddgddgddgdd gd!gg}t        d&t	        ||«      |||t        t        |¬"«      |j                  d#d$«      xs# t        t        j                  fi t        |«      ¤Ž|	d%œ|¤Ž}t        | |fi |¤Ž}|S )'z–
    Based on definitions in: https://github.com/tensorflow/models/tree/d2427a562f401c9af118e47af2f030a0a5599f55/official/projects/edgetpu/vision
    Ú
edgetpu_v2é@   é   r-   rJ  Úchsr  c           
      óê   — d| d   › �gd| d   › �d|› d| d   › �gd| d   › �d|› d| d   › �d| d   › �d|› d| d   › �gd| d	   › �d
| d	   › �gd| d   › �d
| d   › �gd| d   › �d
| d   › �gd| d   › �ggS )NÚcn_r1_k1_s1_cr   Úer_r1_k3_s2_e8_cr   Úer_r1_k3_s1_e4_gsÚ_crI   Úer_r1_k3_s1_e4_cr.   Úir_r3_k3_s1_e4_cÚir_r1_k3_s1_e8_cr»   Úir_r1_k3_s2_e8_crŽ  é   rP   )r�  r  s     rk   Ú	_arch_defz)_gen_mobilenet_edgetpu.<locals>._arch_defÆ  s  € ð !  Q¡ Ð)Ð*à# C¨¡F 8Ð,Ð0AÀ*ÀÈRÐPSÐTUÑPVÈxÐ.XÐYð ' s¨1¡v hÐ/Ø'¨
 |°2°c¸!±f°XÐ>Ø& s¨1¡v hÐ/Ø'¨
 |°2°c¸!±f°XÐ>ð	ð $ C¨¡F 8Ð,Ð0@ÀÀQÁÀÐ.IÐJà# C¨¡F 8Ð,Ð0@ÀÀQÁÀÐ.IÐJà# C¨¡F 8Ð,Ð0@ÀÀQÁÀÐ.IÐJà# C¨¡F 8Ð,Ð-ð'ð rq   Úedgetpu_v2_xsr/   r.   )r)  r/   é0   é`   é�   é    éÀ   Úedgetpu_v2_s)rf  rœ  r�  é€   rŸ  r   é   Úedgetpu_v2_m)r/   r�  éP   rŸ  r   éð   é@  i@  Úedgetpu_v2_lé   r¢  )r/   r�  r�  r   r¦  r£  é€  i€  Úcn_r1_k1_s1_c16Úer_r1_k3_s2_e8_c32Úer_r3_k3_s1_e4_c32Úer_r1_k3_s2_e8_c48Úer_r3_k3_s1_e4_c48Úir_r1_k3_s2_e8_c96Úir_r3_k3_s1_e4_c96Úir_r1_k3_s1_e8_c96_noskipÚir_r1_k5_s2_e8_c160Úir_r3_k5_s1_e4_c160Úir_r1_k3_s1_e8_c192ré   r=   N)r3   r5   r7   r8   r@   r=   r<   rP   )r   r   r±   ru   r   r   r   rÙ   rS   rU   r   râ   )rÜ   rî   r
  rÝ   rÞ   r7   r8   r  r5   r<   rš  Úchannelsrï   rð   rá   s                  rk   Ú_gen_mobilenet_edgetpur·  »  s‡  € ð �wÑØˆ	ØÐØˆ
ØˆÜ% f¨fÓ5ˆ	ð	œ4¤™9ð 	´#ó 	ð. ˜gÑ%ØˆIØ ÐÚ6‰HØ˜wÑ&Ú7‰HØ˜wÑ&Ú7ˆHØ‰LØ˜wÑ&Ø ÐØˆJÚ7ˆHØ‰Là�5á˜X zÓ2‰ð ˆ	ØÐØˆÜ% f¨fÓ5ˆ	ð Ðà!Ð#7Ð8à!Ð#7Ð8à!Ð#7Ð8à(Ð*>Ð?à"Ð$9Ð:à"Ð#ð
ˆô" ð 	Ü" 8Ð-=Ó>Ø!ØØ)Üœ^Ð8JÔKØ—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gØñ	ð ñ	€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   c                 ó  — dgdgdgdgdgg}t        t        |d¬«      }t        dt        ||«       |d«      d	||j	                  d
d«      xs# t        t
        j                  fi t        |«      ¤Žt        |d«      dœ|¤Ž}t        | |fi |¤Ž}|S )z* Minimal test EfficientNet generator.
    rZ  Úer_r1_k3_s2_e4_c24Úer_r1_k3_s2_e4_c32zir_r1_k3_s2_e4_c48_se0.25zir_r1_k3_s2_e4_c64_se0.25r1   r]  r£  rf  r=   Nr_  rK  rP   rL  )	rÜ   rî   r
  rÝ   rÞ   rï   r@   rð   rá   s	            rk   Ú_gen_test_efficientnetr»    s¶   € ð 
#Ð#Ø	ÐØ	ÐØ	$Ð%Ø	$Ð%ð€Hô œ>Ð6HÐVXÔY€LÜð Ü" 8Ð-=Ó>Ù! #Ó&ØØ!Ø—:‘:˜l¨DÓ1Òg´W¼R¿^¹^Ñ5gÌÐ_eÓOfÑ5gÜ# F¨FÓ3ñð ñ€Lô ˜7 JÑ?°,Ñ?€EØ€Lrq   r0   c                 ó2   — | dddddt         t        dddd	œ|¥S )
Nr,   ©r.   éà   r¾  ©r©  r©  g      ì?ÚbicubicrW   rc   z
apache-2.0)Úurlr4   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdÚ
first_convrc   Úlicense)r
   r   )rÁ  rÞ   s     rk   Ú_cfgrÊ  ,  s3   € à 4°}ÐSYØ¨IÜ%Ô.BØ!°Øñð
 $*ðð rq   zmnasnet_050.untrainedzmnasnet_075.untrainedzmnasnet_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_b1-74cb7081.pthztimm/)rÁ  Ú	hf_hub_idzmnasnet_140.untrainedzsemnasnet_050.untrainedzsemnasnet_075.rmsp_in1kzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/semnasnet_075-18710866.pthzsemnasnet_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_a1-d9418771.pthzsemnasnet_140.untrainedzmnasnet_small.lamb_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_small_lamb-aff75073.pthz#mobilenetv1_100.ra4_e3600_r224_in1k)r.   r£  r£  gffffffî?)rË  rÆ  rÇ  Útest_input_sizeÚtest_crop_pctz$mobilenetv1_100h.ra4_e3600_r224_in1kz#mobilenetv1_125.ra4_e3600_r224_in1kçÍÌÌÌÌÌì?)rË  rÆ  rÇ  rÄ  rÌ  rÍ  zmobilenetv2_035.untrainedzmobilenetv2_050.lamb_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_050-3d30d450.pthrÀ  )rÁ  rË  rÅ  zmobilenetv2_075.untrainedzmobilenetv2_100.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_100_ra-b33bc2c4.pthzmobilenetv2_110d.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_110d_ra-77090ade.pthzmobilenetv2_120d.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_120d_ra-5987e2ed.pthzmobilenetv2_140.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_140_ra-21a4e913.pthzfbnetc_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetc_100-c345b898.pthÚbilinearzspnasnet_100.rmsp_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/spnasnet_100-048bc3f4.pthzefficientnet_b0.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b0_ra-3dd342df.pthz#efficientnet_b0.ra4_e3600_r224_in1kz#efficientnet_b1.ra4_e3600_r240_in1k)r.   r¦  r¦  )r  r  )r.   é   rÐ  )rË  rÆ  rÇ  rÂ  rÄ  rÃ  rÌ  rÍ  zefficientnet_b1.ft_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b1-533bc792.pth)rÁ  rË  rÌ  rÍ  zefficientnet_b2.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b2_ra-bcdf34b7.pth)rÁ  rË  rÂ  rÃ  rÌ  rÍ  zefficientnet_b3.ra2_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b3_ra2-cf984f9c.pth)é	   rÑ  )r.   r§  r§  zefficientnet_b4.ra2_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b4_ra2_320-7eb33cd5.pth)é
   rÒ  )r.   rª  rª  z efficientnet_b5.sw_in12k_ft_in1k)r.   éÀ  rÓ  )é   rÔ  Úsquash)rË  rÂ  rÃ  rÄ  Ú	crop_modezefficientnet_b5.sw_in12k)r.   é   r×  )é   rØ  i-.  )rË  rÂ  rÃ  rÄ  r4   zefficientnet_b6.untrained)r.   é  rÙ  )é   rÚ  g¾Ÿ/Ý$î?)rÁ  rÂ  rÃ  rÄ  zefficientnet_b7.untrained)r.   éX  rÛ  )é   rÜ  g‘í|?5^î?zefficientnet_b8.untrained)r.   é   rÝ  )é   rÞ  gºI+‡î?zefficientnet_l2.untrained)r.   é   rß  )é   rà  g�—nƒÀî?zefficientnet_b0_gn.untrainedzefficientnet_b0_g8_gn.untrainedz"efficientnet_b0_g16_evos.untrainedzefficientnet_b3_gn.untrained)rÂ  rÃ  rÌ  rÄ  zefficientnet_b3_g8_gn.untrainedzefficientnet_blur_b0.untrainedz#efficientnet_h_b5.sw_r448_e450_in1k)r.   é@  rá  )rË  rÂ  rÃ  rÄ  rÖ  rÌ  zefficientnet_x_b3.untrainedz#efficientnet_x_b5.sw_r448_e450_in1kzefficientnet_es.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_es_ra-f111e99c.pthzefficientnet_em.ra2_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_em_ra2-66250f76.pthgÓMb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{®Gázì?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_in1kz�https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21ft1k-06c35c48.pthztf_efficientnetv2_s.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s-eb54923e.pthztf_efficientnetv2_m.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m-cc09e0cd.pthztf_efficientnetv2_l.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l-d664b728.pthztf_efficientnetv2_s.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s_21k-6337ad01.pthiSU  )	rÁ  rË  rÆ  rÇ  r4   rÂ  rÌ  rÃ  rÄ  ztf_efficientnetv2_m.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m_21k-361418a2.pth)
rÁ  rË  rÆ  rÇ  r4   rÂ  rÌ  rÃ  rÄ  rÖ  ztf_efficientnetv2_l.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l_21k-91a19ec9.pthztf_efficientnetv2_xl.in21kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21k-fd7e8abf.pthztf_efficientnetv2_b0.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b0-c7cc451f.pth)r.   r   r   )r™  r™  )rÁ  rË  rÂ  rÌ  rÃ  ztf_efficientnetv2_b1.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b1-be6e41b0.pthztf_efficientnetv2_b2.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b2-847de54e.pth)r.   éÐ   rì  z"tf_efficientnetv2_b3.in21k_ft_in1k)rË  rÆ  rÇ  rÂ  rÌ  rÃ  rÄ  rÖ  ztf_efficientnetv2_b3.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b3-57773f13.pthztf_efficientnetv2_b3.in21k)rË  rÆ  rÇ  r4   rÂ  rÌ  rÃ  rÄ  zmixnet_s.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_s-a907afbc.pthzmixnet_m.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_m-4647fc68.pthzmixnet_l.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_l-5a9a2ed8.pthzmixnet_xl.ra_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_xl_ra-aac3c00c.pthzmixnet_xxl.untrainedztf_mixnet_s.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_s-89d3354b.pthztf_mixnet_m.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_m-0f4d8805.pthztf_mixnet_l.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_l-6c92e0c8.pthztinynet_a.in1kzRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_a.pth)rÂ  rÃ  rÁ  rË  ztinynet_b.in1k)r.   é¼   rí  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_b.pthztinynet_c.in1k)r.   é¸   rî  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_c.pthztinynet_d.in1k)r.   é˜   rï  )rŽ  rŽ  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_d.pthztinynet_e.in1k)r.   éj   rð  )r»   r»   zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_e.pthzmobilenet_edgetpu_100.untrained)rÂ  rÄ  z!mobilenet_edgetpu_v2_xs.untrainedz mobilenet_edgetpu_v2_s.untrainedz*mobilenet_edgetpu_v2_m.ra4_e3600_r224_in1kz mobilenet_edgetpu_v2_l.untrainedztest_efficientnet.r160_in1k)r.   rŸ  rŸ  )rË  rÂ  rÃ  rÄ  ztest_efficientnet_ln.r160_in1kztest_efficientnet_gn.r160_in1k)rË  rÆ  rÇ  rÂ  rÃ  rÄ  z test_efficientnet_evos.r160_in1krD   c                 ó    — t        dd| i|¤Ž}|S )z& MNASNet B1, depth multiplier of 0.5. rÝ   )Úmnasnet_050rë  ©rû   ©rÝ   rÞ   rá   s      rk   rò  rò  ‚  ó   € ô ÑP¸:ÐPÈÑP€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z' MNASNet B1, depth multiplier of 0.75. rÝ   )Úmnasnet_075ç      è?ró  rô  s      rk   r÷  r÷  ‰  s   € ô ÑQ¸JÐQÈ&ÑQ€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z& MNASNet B1, depth multiplier of 1.0. rÝ   )Úmnasnet_100rã   ró  rô  s      rk   rú  rú  �  rõ  rq   c                 ó    — t        dd| i|¤Ž}|S )z& MNASNet B1,  depth multiplier of 1.4 rÝ   )Úmnasnet_140çffffffö?ró  rô  s      rk   rü  rü  —  rõ  rq   c                 ó    — t        dd| i|¤Ž}|S )z- MNASNet A1 (w/ SE), depth multiplier of 0.5 rÝ   )Úsemnasnet_050rë  ©rñ   rô  s      rk   rÿ  rÿ  ž  ó   € ô ÑR¸ZÐRÈ6ÑR€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z0 MNASNet A1 (w/ SE),  depth multiplier of 0.75. rÝ   )Úsemnasnet_075rø  r   rô  s      rk   r  r  ¥  s   € ô ÑS¸jÐSÈFÑS€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.0. rÝ   )Úsemnasnet_100rã   r   rô  s      rk   r  r  ¬  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.4. rÝ   )Úsemnasnet_140rý  r   rô  s      rk   r  r  ³  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z* MNASNet Small,  depth multiplier of 1.0. rÝ   )Úmnasnet_smallrã   )r  rô  s      rk   r	  r	  º  s   € ô ÑUÀ
ÐUÈfÑU€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )ú MobileNet V1 rÝ   )Úmobilenetv1_100rã   ©r  rô  s      rk   r  r  Á  ó   € ô ÑVÀÐVÈvÑV€EØ€Lrq   c                 ó"   — t        dd| dœ|¤Ž}|S )r  T)rÕ   rÝ   )Úmobilenetv1_100hrã   r  rô  s      rk   r  r  È  s   € ô ÐgÀÐR\ÑgÐ`fÑg€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )r  rÝ   )Úmobilenetv1_125g      ô?r  rô  s      rk   r  r  Ï  ó   € ô ÑWÀ*ÐWÐPVÑW€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z) MobileNet V2 w/ 0.35 channel multiplier rÝ   )Úmobilenetv2_035gffffffÖ?©r  rô  s      rk   r  r  Ö  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z( MobileNet V2 w/ 0.5 channel multiplier rÝ   )Úmobilenetv2_050rë  r  rô  s      rk   r  r  Ý  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z) MobileNet V2 w/ 0.75 channel multiplier rÝ   )Úmobilenetv2_075rø  r  rô  s      rk   r  r  ä  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z( MobileNet V2 w/ 1.0 channel multiplier rÝ   )Úmobilenetv2_100rã   r  rô  s      rk   r  r  ë  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z( MobileNet V2 w/ 1.4 channel multiplier rÝ   )Úmobilenetv2_140rý  r  rô  s      rk   r  r  ò  r  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z3 MobileNet V2 w/ 1.1 channel, 1.2 depth multipliersç333333ó?T©r
  r  rÝ   )Úmobilenetv2_110dçš™™™™™ñ?r  rô  s      rk   r"  r"  ù  ó.   € ô ØðlØ25ÀTÐV`ñlØdjñl€Eà€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z4 MobileNet V2 w/ 1.2 channel, 1.4 depth multipliers rý  Tr!  )Úmobilenetv2_120dr   r  rô  s      rk   r&  r&    r$  rq   c                 óP   — | r|j                  dt        «       t        dd| i|¤Ž}|S )z	 FBNet-C Úbn_epsrÝ   )Ú
fbnetc_100rã   )Ú
setdefaultr    r*  rô  s      rk   r)  r)  	  s/   € ñ à×Ñ˜(Ô$5Ô6ÜÑK°jÐKÀFÑK€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z Single-Path NAS Pixel1rÝ   )Úspnasnet_100rã   )r2  rô  s      rk   r,  r,    s   € ô ÑO¸*ÐOÈÑO€EØ€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-B0 rã   ©rî   r
  rÝ   )Úefficientnet_b0©rB  rô  s      rk   r/  r/    ó.   € ô ØðjØ.1ÀCÐT^ñjØbhñj€Eà€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-B1 rã   r#  r.  )Úefficientnet_b1r0  rô  s      rk   r3  r3  #  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-B2 r#  r   r.  )Úefficientnet_b2r0  rô  s      rk   r5  r5  ,  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú EfficientNet-B3 r   rý  r.  )Úefficientnet_b3r0  rô  s      rk   r8  r8  5  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-B4 rý  çÍÌÌÌÌÌü?r.  )Úefficientnet_b4r0  rô  s      rk   r;  r;  >  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú EfficientNet-B5 çš™™™™™ù?çš™™™™™@r.  )Úefficientnet_b5r0  rô  s      rk   r@  r@  G  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-B6 r:  çÍÌÌÌÌÌ@r.  )Úefficientnet_b6r0  rô  s      rk   rC  rC  P  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-B7 ç       @çÍÌÌÌÌÌ@r.  )Úefficientnet_b7r0  rô  s      rk   rG  rG  Y  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-B8 r?  çÍÌÌÌÌÌ@r.  )Úefficientnet_b8r0  rô  s      rk   rJ  rJ  b  r1  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-L2.ç333333@ç333333@r.  )Úefficientnet_l2r0  rô  s      rk   rN  rN  k  r1  rq   c                 óB   — t        	 dt        t        d¬«      | dœ|¤Ž}|S )z EfficientNet-B0 + GroupNormr  r=  )r=   rÝ   )Úefficientnet_b0_gn©rB  r   r   rô  s      rk   rP  rP  u  s3   € ô ØðoÜ)0´È!Ô)LÐYcñoØgmño€Eà€Lrq   c                 óD   — t        	 ddt        t        d¬«      | dœ|¤Ž}|S )z* EfficientNet-B0 w/ group conv + GroupNormr  r=  )r  r=   rÝ   )Úefficientnet_b0_g8_gnrQ  rô  s      rk   rS  rS  }  s5   € ô Øð)Ø,-¼'Ä,Ð[\Ô:]Øñ)à!'ñ)€Eð €Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z+ EfficientNet-B0 w/ group 16 conv + EvoNormr)  )r  rA  rÝ   )Úefficientnet_b0_g16_evosr0  rô  s      rk   rU  rU  †  s-   € ô Ø"ð)Ø/1À2Øñ)à!'ñ)€Eð €Lrq   c           
      óH   — t        	 ddddt        t        d¬«      | dœ|¤Ž}|S )z EfficientNet-B3 w/ GroupNorm r   rý  r)  r=  )rî   r
  rA  r=   rÝ   )Úefficientnet_b3_gnrQ  rô  s      rk   rW  rW  �  s<   € ô ØðZØ14ÀsÐ\^Üœ<°BÔ7ÀJñZàRXñZ€Eð €Lrq   c                 óJ   — t        	 dddddt        t        d¬«      | dœ|¤Ž}|S )z% EfficientNet-B3 w/ grouped conv + BNr   rý  r  r)  r=  )rî   r
  r  rA  r=   rÝ   )Úefficientnet_b3_g8_gnrQ  rô  s      rk   rY  rY  ™  s?   € ô ØðZØ47È#ÐZ[ÐmoÜœ<°BÔ7ÀJñZàRXñZ€Eð €Lrq   c                 ó(   — t        	 ddd| ddœ|¤Ž}|S )z EfficientNet-B0 w/ BlurPool rã   Úblurpc)rî   r
  rÝ   r>   )Úefficientnet_blur_b0r0  rô  s      rk   r\  r\  £  s0   € ô ØðØ36ÈÐYcØñà#ñ€Eð €Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-Edge Small. rã   r.  )Úefficientnet_es©rN  rô  s      rk   r^  r^  ®  ó.   € ô #ØðjØ.1ÀCÐT^ñjØbhñj€Eà€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )zw EfficientNet-Edge Small Pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0rã   r.  )Úefficientnet_es_prunedr_  rô  s      rk   rb  rb  ¶  ó.   € ô #Ø ðqØ58È3Ð[eñqØioñq€Eà€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-Edge-Medium. rã   r#  r.  )Úefficientnet_emr_  rô  s      rk   re  re  ½  r`  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )z EfficientNet-Edge-Large. r   rý  r.  )Úefficientnet_elr_  rô  s      rk   rg  rg  Å  r`  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )zw EfficientNet-Edge-Large pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0r   rý  r.  )Úefficientnet_el_prunedr_  rô  s      rk   ri  ri  Ì  rc  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú' EfficientNet-CondConv-B0 w/ 8 Experts rã   r.  )Úefficientnet_cc_b0_4e©rQ  rô  s      rk   rl  rl  Ó  s.   € ô 'ØðpØ47È#ÐZdñpØhnñp€Eà€Lrq   c                 ó(   — t        	 dddd| dœ|¤Ž}|S )rk  rã   rI   ©rî   r
  rP  rÝ   )Úefficientnet_cc_b0_8erm  rô  s      rk   rp  rp  Ü  ó0   € ô 'Øð)Ø47È#ÐbcØñ)à!'ñ)€Eð €Lrq   c                 ó(   — t        	 dddd| dœ|¤Ž}|S )z' EfficientNet-CondConv-B1 w/ 8 Experts rã   r#  rI   ro  )Úefficientnet_cc_b1_8erm  rô  s      rk   rs  rs  æ  rq  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú EfficientNet-Lite0 rã   r.  )Úefficientnet_lite0©rX  rô  s      rk   rv  rv  ð  ó.   € ô #ØðmØ14ÀsÐWañmØekñm€Eà€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú EfficientNet-Lite1 rã   r#  r.  )Úefficientnet_lite1rw  rô  s      rk   r{  r{  ù  rx  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú EfficientNet-Lite2 r#  r   r.  )Úefficientnet_lite2rw  rô  s      rk   r~  r~  	  rx  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú EfficientNet-Lite3 r   rý  r.  )Úefficientnet_lite3rw  rô  s      rk   r�  r�  	  rx  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )ú EfficientNet-Lite4 rý  r:  r.  )Úefficientnet_lite4rw  rô  s      rk   r„  r„  	  rx  rq   c                 ó|   — |j                  dt        «       |j                  dd«       d}t        |fddd| dœ|¤Ž}|S )	zc EfficientNet-B1 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf  r(  r;   ÚsameÚefficientnet_b1_prunedrã   r#  T©rî   r
  ÚprunedrÝ   ©r*  r    rB  )rÝ   rÞ   rÜ   rá   s       rk   r‡  r‡  	  sV   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ø&€GÜØðmØ$'¸#ÀdÐWañmØekñm€Eà€Lrq   c                 óx   — |j                  dt        «       |j                  dd«       t        	 dddd| dœ|¤Ž}|S )	zb EfficientNet-B2 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r(  r;   r†  r#  r   Trˆ  )Úefficientnet_b2_prunedrŠ  rô  s      rk   rŒ  rŒ  (	  óQ   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)ÜØ ð)Ø58È3ÐW[Øñ)à!'ñ)€Eð €Lrq   c                 óx   — |j                  dt        «       |j                  dd«       t        	 dddd| dœ|¤Ž}|S )	zb EfficientNet-B3 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r(  r;   r†  r   rý  Trˆ  )Úefficientnet_b3_prunedrŠ  rô  s      rk   r�  r�  3	  r�  rq   c                 ó(   — t        	 dddd| dœ|¤Ž}|S )z; EfficientNet-V2 Tiny (Custom variant, tiny not in paper). çš™™™™™é?rÎ  F©rî   r
  rg  rÝ   )Úefficientnetv2_rw_t©rh  rô  s      rk   r“  r“  >	  s1   € ô "ØðxØ25ÈÐPUÐblñxØpvñx€Eà€Lrq   c           	      ó*   — t        	 ddddd| dœ|¤Ž}|S )zR EfficientNet-V2 Tiny w/ Global Context Attn (Custom variant, tiny not in paper). r‘  rÎ  FÚgc)rî   r
  rg  r?   rÝ   )Úgc_efficientnetv2_rw_tr”  rô  s      rk   r—  r—  F	  s4   € ô "Ø ðBØ58È3Ø˜4¨JñBà:@ñB€Eð €Lrq   c                 ó"   — t        dd| dœ|¤Ž}|S )zæ EfficientNet-V2 Small (RW variant).
    NOTE: This is my initial (pre official code release) w/ some differences.
    See efficientnetv2_s and tf_efficientnetv2_s for versions that match the official w/ PyTorch vs TF padding
    T)rg  rÝ   )Úefficientnetv2_rw_sr”  rô  s      rk   r™  r™  O	  s   € ô "Ðb¸DÈZÑbÐ[aÑb€EØ€Lrq   c                 ó(   — t        	 dddd| dœ|¤Ž}|S )z* EfficientNet-V2 Medium (RW variant).
    r   )r   r   r   r   r>  r>  Tr’  )Úefficientnetv2_rw_mr”  rô  s      rk   r›  r›  Y	  s1   € ô "Øð)Ø25ÐH_ÐdhØñ)à!'ñ)€Eð €Lrq   c                 ó    — t        dd| i|¤Ž}|S )z EfficientNet-V2 Small. rÝ   )Úefficientnetv2_sr”  rô  s      rk   r�  r�  c	  ó   € ô "ÑVÀÐVÈvÑV€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z EfficientNet-V2 Medium. rÝ   )Úefficientnetv2_m)ro  rô  s      rk   r   r   j	  rž  rq   c                 ó    — t        dd| i|¤Ž}|S )z EfficientNet-V2 Large. rÝ   )Úefficientnetv2_l)rt  rô  s      rk   r¢  r¢  q	  rž  rq   c                 ó    — t        dd| i|¤Ž}|S )z EfficientNet-V2 Xtra-Large. rÝ   )Úefficientnetv2_xl)ry  rô  s      rk   r¤  r¤  x	  s   € ô #ÑXÀ:ÐXÐQWÑX€EØ€Lrq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z1 EfficientNet-B0. Tensorflow compatible variant  r(  r;   r†  rã   r.  )Útf_efficientnet_b0rŠ  rô  s      rk   r¦  r¦  	  óO   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)ÜØðmØ14ÀsÐWañmØekñm€Eà€Lrq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z1 EfficientNet-B1. Tensorflow compatible variant  r(  r;   r†  rã   r#  r.  )Útf_efficientnet_b1rŠ  rô  s      rk   r©  r©  ‰	  r§  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z1 EfficientNet-B2. Tensorflow compatible variant  r(  r;   r†  r#  r   r.  )Útf_efficientnet_b2rŠ  rô  s      rk   r«  r«  “	  r§  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z0 EfficientNet-B3. Tensorflow compatible variant r(  r;   r†  r   rý  r.  )Útf_efficientnet_b3rŠ  rô  s      rk   r­  r­  �	  r§  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z0 EfficientNet-B4. Tensorflow compatible variant r(  r;   r†  rý  r:  r.  )Útf_efficientnet_b4rŠ  rô  s      rk   r¯  r¯  §	  r§  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z0 EfficientNet-B5. Tensorflow compatible variant r(  r;   r†  r>  r?  r.  )Útf_efficientnet_b5rŠ  rô  s      rk   r±  r±  ±	  r§  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z0 EfficientNet-B6. Tensorflow compatible variant r(  r;   r†  r:  rB  r.  )Útf_efficientnet_b6rŠ  rô  s      rk   r³  r³  »	  óO   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)ÜØðmØ14ÀsÐWañmØekñm€Eà€Lrq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z0 EfficientNet-B7. Tensorflow compatible variant r(  r;   r†  rE  rF  r.  )Útf_efficientnet_b7rŠ  rô  s      rk   r¶  r¶  Æ	  r´  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z0 EfficientNet-B8. Tensorflow compatible variant r(  r;   r†  r?  rI  r.  )Útf_efficientnet_b8rŠ  rô  s      rk   r¸  r¸  Ñ	  r´  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z= EfficientNet-L2 NoisyStudent. Tensorflow compatible variant r(  r;   r†  rL  rM  r.  )Útf_efficientnet_l2rŠ  rô  s      rk   rº  rº  Ü	  r´  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z9 EfficientNet-Edge Small. Tensorflow compatible variant  r(  r;   r†  rã   r.  )Útf_efficientnet_es©r*  r    rN  rô  s      rk   r¼  r¼  ç	  óO   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü"ØðmØ14ÀsÐWañmØekñm€Eà€Lrq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z: EfficientNet-Edge-Medium. Tensorflow compatible variant  r(  r;   r†  rã   r#  r.  )Útf_efficientnet_emr½  rô  s      rk   rÀ  rÀ  ñ	  r¾  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z9 EfficientNet-Edge-Large. Tensorflow compatible variant  r(  r;   r†  r   rý  r.  )Útf_efficientnet_elr½  rô  s      rk   rÂ  rÂ  û	  r¾  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )zF EfficientNet-CondConv-B0 w/ 4 Experts. Tensorflow compatible variant r(  r;   r†  rã   r.  )Útf_efficientnet_cc_b0_4e©r*  r    rQ  rô  s      rk   rÄ  rÄ  
  sO   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü&Ø"ðsØ7:ÈSÐ]gñsØkqñs€Eà€Lrq   c                 óx   — |j                  dt        «       |j                  dd«       t        	 dddd| dœ|¤Ž}|S )zF EfficientNet-CondConv-B0 w/ 8 Experts. Tensorflow compatible variant r(  r;   r†  rã   rI   ro  )Útf_efficientnet_cc_b0_8erÅ  rô  s      rk   rÇ  rÇ  
  óQ   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü&Ø"ð)Ø7:ÈSÐefØñ)à!'ñ)€Eð €Lrq   c                 óx   — |j                  dt        «       |j                  dd«       t        	 dddd| dœ|¤Ž}|S )	zF EfficientNet-CondConv-B1 w/ 8 Experts. Tensorflow compatible variant r(  r;   r†  rã   r#  rI   ro  )Útf_efficientnet_cc_b1_8erÅ  rô  s      rk   rÊ  rÊ  
  rÈ  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )ru  r(  r;   r†  rã   r.  )Útf_efficientnet_lite0©r*  r    rX  rô  s      rk   rÌ  rÌ  (
  óO   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü"ØðpØ47È#ÐZdñpØhnñp€Eà€Lrq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )rz  r(  r;   r†  rã   r#  r.  )Útf_efficientnet_lite1rÍ  rô  s      rk   rÐ  rÐ  3
  rÎ  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )r}  r(  r;   r†  r#  r   r.  )Útf_efficientnet_lite2rÍ  rô  s      rk   rÒ  rÒ  >
  rÎ  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )r€  r(  r;   r†  r   rý  r.  )Útf_efficientnet_lite3rÍ  rô  s      rk   rÔ  rÔ  I
  rÎ  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )rƒ  r(  r;   r†  rý  r:  r.  )Útf_efficientnet_lite4rÍ  rô  s      rk   rÖ  rÖ  T
  rÎ  rq   c                 óp   — |j                  dt        «       |j                  dd«       t        dd| i|¤Ž}|S )z7 EfficientNet-V2 Small. Tensorflow compatible variant  r(  r;   r†  rÝ   )Útf_efficientnetv2_s)r*  r    rh  rô  s      rk   rØ  rØ  _
  ó=   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü!ÑYÀJÐYÐRXÑY€EØ€Lrq   c                 óp   — |j                  dt        «       |j                  dd«       t        dd| i|¤Ž}|S )z8 EfficientNet-V2 Medium. Tensorflow compatible variant  r(  r;   r†  rÝ   )Útf_efficientnetv2_m)r*  r    ro  rô  s      rk   rÛ  rÛ  h
  rÙ  rq   c                 óp   — |j                  dt        «       |j                  dd«       t        dd| i|¤Ž}|S )z7 EfficientNet-V2 Large. Tensorflow compatible variant  r(  r;   r†  rÝ   )Útf_efficientnetv2_l)r*  r    rt  rô  s      rk   rÝ  rÝ  q
  rÙ  rq   c                 óp   — |j                  dt        «       |j                  dd«       t        dd| i|¤Ž}|S )z? EfficientNet-V2 Xtra-Large. Tensorflow compatible variant
    r(  r;   r†  rÝ   )Útf_efficientnetv2_xl)r*  r    ry  rô  s      rk   rß  rß  z
  s=   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü"Ñ[ÀjÐ[ÐTZÑ[€EØ€Lrq   c                 óp   — |j                  dt        «       |j                  dd«       t        dd| i|¤Ž}|S )z4 EfficientNet-V2-B0. Tensorflow compatible variant  r(  r;   r†  rÝ   )Útf_efficientnetv2_b0©r*  r    r`  rô  s      rk   rá  rá  „
  s=   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü$Ñ]È
Ð]ÐV\Ñ]€EØ€Lrq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z4 EfficientNet-V2-B1. Tensorflow compatible variant  r(  r;   r†  rã   r#  r.  )Útf_efficientnetv2_b1râ  rô  s      rk   rä  rä  �
  óO   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)Ü$ØðoØ36ÈÐYcñoØgmño€Eà€Lrq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z4 EfficientNet-V2-B2. Tensorflow compatible variant  r(  r;   r†  r#  r   r.  )Útf_efficientnetv2_b2râ  rô  s      rk   rç  rç  —
  rå  rq   c                 óv   — |j                  dt        «       |j                  dd«       t        	 ddd| dœ|¤Ž}|S )z3 EfficientNet-V2-B3. Tensorflow compatible variant r(  r;   r†  r   rý  r.  )Útf_efficientnetv2_b3râ  rô  s      rk   ré  ré  ¡
  rå  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )r7  r   rý  r.  )Úefficientnet_x_b3©r|  rô  s      rk   rë  rë  «
  s.   € ô  ØðlØ03ÀcÐV`ñlØdjñl€Eà€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )r=  r>  r?  r.  )Úefficientnet_x_b5rì  rô  s      rk   rî  rî  ´
  s.   € ô  ØðlØ03ÀcÐV`ñlØdjñl€Eà€Lrq   c                 ó(   — t        	 dddd| dœ|¤Ž}|S )r=  g¸…ëQ¸þ?r?  rI   )rî   r
  r{  rÝ   )Úefficientnet_h_b5rì  rô  s      rk   rð  rð  ¼
  s1   € ô  ØðxØ04ÀsÐTUÐblñxØpvñx€Eà€Lrq   c                 ó$   — t        	 dd| dœ|¤Ž}|S )z"Creates a MixNet Small model.
    rã   ©rî   rÝ   )Úmixnet_s)r�  rô  s      rk   ró  ró  Ä
  ó+   € ô ØðMØ'*°zñMØEKñM€Eà€Lrq   c                 ó$   — t        	 dd| dœ|¤Ž}|S )z#Creates a MixNet Medium model.
    rã   rò  )Úmixnet_m©r‡  rô  s      rk   rö  rö  Í
  rô  rq   c                 ó$   — t        	 dd| dœ|¤Ž}|S )z"Creates a MixNet Large model.
    çÍÌÌÌÌÌô?rò  )Úmixnet_lr÷  rô  s      rk   rú  rú  Ö
  rô  rq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )zgCreates a MixNet Extra-Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    r>  r   r.  )Ú	mixnet_xlr÷  rô  s      rk   rü  rü  ß
  s-   € ô
 ØðdØ(+¸cÈjñdØ\bñd€Eà€Lrq   c                 ó&   — t        	 ddd| dœ|¤Ž}|S )znCreates a MixNet Double Extra Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    g333333@rù  r.  )Ú
mixnet_xxlr÷  rô  s      rk   rþ  rþ  é
  s-   € ô
 ØðeØ),¸sÈzñeØ]cñe€Eà€Lrq   c                 ót   — |j                  dt        «       |j                  dd«       t        	 dd| dœ|¤Ž}|S )z@Creates a MixNet Small model. Tensorflow compatible variant
    r(  r;   r†  rã   rò  )Útf_mixnet_s)r*  r    r�  rô  s      rk   r   r   ó
  óL   € ð ×Ñ�hÔ 1Ô2Ø
×Ñ�j &Ô)ÜØðPØ*-¸*ñPØHNñP€Eà€Lrq   c                 ót   — |j                  dt        «       |j                  dd«       t        	 dd| dœ|¤Ž}|S )zACreates a MixNet Medium model. Tensorflow compatible variant
    r(  r;   r†  rã   rò  )Útf_mixnet_m©r*  r    r‡  rô  s      rk   r  r  þ
  r  rq   c                 ót   — |j                  dt        «       |j                  dd«       t        	 dd| dœ|¤Ž}|S )z@Creates a MixNet Large model. Tensorflow compatible variant
    r(  r;   r†  rù  rò  )Útf_mixnet_lr  rô  s      rk   r  r  	  r  rq   c                 ó    — t        dd| i|¤Ž}|S )N)Ú	tinynet_arã   r   rÝ   ©rŠ  rô  s      rk   r  r    s   € äÑP¸:ÐPÈÑP€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )N)Ú	tinynet_brø  r#  rÝ   r	  rô  s      rk   r  r    ó   € äÑQ¸JÐQÈ&ÑQ€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )N)Ú	tinynet_cçHáz®Gá?g333333ë?rÝ   r	  rô  s      rk   r  r     s   € äÑR¸ZÐRÈ6ÑR€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )N)Ú	tinynet_dr  g=
×£p=æ?rÝ   r	  rô  s      rk   r  r  &  s   € äÑS¸jÐSÈFÑS€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )N)Ú	tinynet_egR¸…ëQà?g333333ã?rÝ   r	  rô  s      rk   r  r  ,  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z MobileNet-EdgeTPU-v1 100. rÝ   )Úmobilenet_edgetpu_100©r·  rô  s      rk   r  r  2  s   € ô #Ñ\ÀzÐ\ÐU[Ñ\€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z# MobileNet-EdgeTPU-v2 Extra Small. rÝ   )Úmobilenet_edgetpu_v2_xsr  rô  s      rk   r  r  9  s   € ô #Ñ^ÈÐ^ÐW]Ñ^€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z MobileNet-EdgeTPU-v2 Small. rÝ   )Úmobilenet_edgetpu_v2_sr  rô  s      rk   r  r  @  ó   € ô #Ñ]È
Ð]ÐV\Ñ]€EØ€Lrq   c                 ó    — t        dd| i|¤Ž}|S )z MobileNet-EdgeTPU-v2 Medium. rÝ   )Úmobilenet_edgetpu_v2_mr  rô  s      rk   r  r  G  r  rq   c                 ó    — t        dd| i|¤Ž}|S )z MobileNet-EdgeTPU-v2 Large. rÝ   )Úmobilenet_edgetpu_v2_lr  rô  s      rk   r  r  N  r  rq   c                 ó    — t        dd| i|¤Ž}|S )NrÝ   )Útest_efficientnet)r»  rô  s      rk   r!  r!  U  s   € ä"ÑXÀ:ÐXÐQWÑX€EØ€Lrq   c                 ób   — t        	 d| |j                  dt        t        d¬«      «      dœ|¤Ž}|S )Nr=   r  r=  ©rÝ   r=   )Útest_efficientnet_gn)r»  rÙ   r   r   rô  s      rk   r$  r$  [  s?   € ô #ØðàØ—:‘:˜l¬G´LÈQÔ,OÓPñð ñ	€Eð €Lrq   c                 óL   — t        	 d| |j                  dt        «      dœ|¤Ž}|S )Nr=   r#  )Útest_efficientnet_ln)r»  rÙ   r   rô  s      rk   r&  r&  g  s6   € ä"ØðàØ—:‘:˜l¬NÓ;ñð ñ	€Eð €Lrq   c                 ób   — t        	 d| |j                  dt        t        d¬«      «      dœ|¤Ž}|S )Nr=   r  r=  r#  )Útest_efficientnet_evos)r»  rÙ   r   r   rô  s      rk   r(  r(  r  s=   € ä"Ø ðàØ—:‘:˜l¬G´KÈAÔ,NÓOñð ñ	€Eð €Lrq   Útf_efficientnet_b0_apÚtf_efficientnet_b1_apÚtf_efficientnet_b2_apÚtf_efficientnet_b3_apÚtf_efficientnet_b4_apÚtf_efficientnet_b5_apÚtf_efficientnet_b6_apÚtf_efficientnet_b7_apÚtf_efficientnet_b8_apÚtf_efficientnet_b0_nsÚtf_efficientnet_b1_nsÚtf_efficientnet_b2_nsÚtf_efficientnet_b3_nsÚtf_efficientnet_b4_nsÚtf_efficientnet_b5_nsÚtf_efficientnet_b6_nsÚtf_efficientnet_b7_nsr5  r8  r  rú  )Útf_efficientnet_l2_ns_475Útf_efficientnet_l2_nsÚtf_efficientnetv2_s_in21ft1kÚtf_efficientnetv2_m_in21ft1kÚtf_efficientnetv2_l_in21ft1kÚtf_efficientnetv2_xl_in21ft1kÚtf_efficientnetv2_s_in21kÚtf_efficientnetv2_m_in21kÚtf_efficientnetv2_l_in21kÚtf_efficientnetv2_xl_in21kÚefficientnet_b2aÚefficientnet_b3aÚ
mnasnet_a1Ú
mnasnet_b1r«   )rã   F)rã   rã   NFFF)rã   rã   NFF)rã   rã   r  NF)rã   rã   NF)rã   rã   r   F)rã   rã   F)rã   rã   r  Nr   F)r0   )Çr°   Ú	functoolsr   Útypingr   r   r   r   r   r	   r�   Útorch.nnrS   Útorch.nn.functionalÚ
functionalr¦   Ú	timm.datar
   r   r   r   Útimm.layersr   r   r   r   r   r   r   Ú_builderr   r   Ú_efficientnet_blocksr   Ú_efficientnet_builderr   r   r   r   r   r   r   r    Ú	_featuresr!   r"   r#   Ú_manipulater$   r%   Ú	_registryr&   r'   r(   Ú__all__r¶   r)   r*   râ   rñ   rû   r  r  r  r*  r2  rB  rN  rQ  rX  r`  rh  ro  rt  ry  r|  r�  r‡  rŠ  r·  r»  rÊ  Údefault_cfgsrò  r÷  rú  rü  rÿ  r  r  r  r	  r  r  r  r  r  r  r  r  r"  r&  r)  r,  r/  r3  r5  r8  r;  r@  rC  rG  rJ  rN  rP  rS  rU  rW  rY  r\  r^  rb  re  rg  ri  rl  rp  rs  rv  r{  r~  r�  r„  r‡  rŒ  r�  r“  r—  r™  r›  r�  r   r¢  r¤  r¦  r©  r«  r­  r¯  r±  r³  r¶  r¸  rº  r¼  rÀ  rÂ  rÄ  rÇ  rÊ  rÌ  rÐ  rÒ  rÔ  rÖ  rØ  rÛ  rÝ  rß  rá  rä  rç  ré  rë  rî  rð  ró  rö  rú  rü  rþ  r   r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r&  r(  r­   rP   rq   rk   ú<module>rW     sÅ"  ðñ$õJ ß ?× ?ã Ý ß Ð ç rÓ r÷.÷ .ñ .ç GÝ /÷J÷ Jó Jç FÑ Fß 3ß YÑ YàÐ1Ð
2€ôc�2—9‘9ô côL	`&˜2Ÿ9™9ô `&ôFô6!ôH!ôHð< ;>ØJOô!ðJ ;>Ø9>ô"ôJô< ðH PQØ$)ô/ðf \aôðB afôô@&ðT \aôð> fkô%ðR \aôðB \aôðB \aôðB PQØ/4ôPôfôBôBô.Vôrô0ñ %ð I	&Ø™T›VðI	&à™T›VðI	&ð ™TØvØôðI	&ð ™T›VðI	&ð ™t›vðI	&ð ™tØyØô ðI	&ð ™tØvØô ðI	&ð ™t›vðI	&ð  ™tØ~Øô ð!I	&ð( *©4ØØ$Ð*@Ø%°Tô,ð)I	&ð2 +©DØØ$Ð*@Ø%°Tô-ð3I	&ð< *©4ØØ$Ð*@Ø mÀ3ô,ð=I	&ðH  ¡£ðII	&ðJ  ¡Ø{ØØô"ðKI	&ðT  ¡£ðUI	&ðV ™tØ~Øô ðWI	&ð\ ¡ØØô!ñ]I	&ðb ¡ØØô!ðcI	&ðh ™tØ~Øô ðiI	&ðp ™DØvØØ ô"ðqI	&ðx ™dØxØØ ô"ðyI	&ðD ™tØ~Øô ðEI	&ðJ *©4ØØ$Ð*@Ø mÀ3ô,HðKI	&ðR *©4ØØ$Ð*@Ø ¨3¸&Ø%°Sô	,:ðSI	&ð\ ™tØ{ØØ%°Sô :ð]I	&ðd ™tØ~ØØ ¨FÀMÐadô fðeI	&ðl ¡ØØØ ¨FÀMÐadô!fðmI	&ðt ¡ð DØØ ¨HÀmÐcfô!hðuI	&ð| '©ØØ ¨H¸sÈhô)Xð}I	&ðB ¡ØØ ¨H¸tÐQVô!XðCI	&ðH  ¡Ø˜=°HÀuô"NðII	&ðL  ¡Ø˜=°HÀuô"NðMI	&ðP  ¡Ø˜=°HÀuô"NðQI	&ðT  ¡Ø˜=°HÀuô"NòUI	&ð\ #¡D£Fð]I	&ð^ &¡t£vð_I	&ð` )©$«&ðaI	&ðb #¡DØ ¨FÀMÐ\_ô%aðcI	&ðf &¡tØ ¨FÀMÐ\_ô(aðgI	&ðj %¡d£fðkI	&ðl *©4ØØ ¨H¸sØ¨Mô,;ðmI	&ðt "¡4Ø˜=°FÀTô$KðuI	&ðx *©4ØØ ¨H¸sØ¨Mô,;ðyI	&ðB ™tØ~Øô ðCI	&ðH ¡ØØØ ¨F¸Uô!DðII	&ðP ™tØ{ØØ ¨H¸uô FðQI	&ðZ "¡4ð EØô$ð[I	&ð` "¡4ð EØØ ¨H¸uô$FðaI	&ðj &¡t£vðkI	&ðl &¡t£vðmI	&ðn &¡t°}ÐPVÐafÔ'gòoI	&ðr !¡$ð BØô#ðsI	&ðx #¡DØ ¨F¸Uô%DðyI	&ð| #¡DØ ¨F¸Uô%Dð}I	&ð@ #¡DØ ¨H¸uô%FðAI	&ðD #¡DØ ¨H¸uô%FðEI	&ðJ "¡4Ø{ØØ ¨FØÐ4Ð:Pô	$RðKI	&ðT "¡4Ø{ØØ ¨FØÐ4Ð:Pô	$RðUI	&ð^ "¡4Ø{ØØ ¨HØÐ4Ð:Pô	$Rð_I	&ðj #¡Dð AØØ °-È6Ð\_ô%aðkI	&ðr &¡tð GØØ °-È6Ð\_ô(aðsI	&ðz #¡Dð EØØ °-È6Ð\_ô%að{I	&ðB #¡Dð DØØ °-È8Ð^aô%cðCI	&ðL !¡$Ø °-È6Ð\_ô#aðMI	&ðP !¡$Ø °-È8Ð^aô#cðQI	&ðT !¡$Ø °-È8Ð^aô#cðUI	&ðX "¡4Ø °-È8Ð^aô$cðYI	&ð^ %¡dð BØØ ô'"ò_I	&ðf %¡dð BØØ ¨F¸Uô'DðgI	&ðn %¡dð BØØ ¨F¸Uô'DðoI	&ðv %¡dð BØØ ¨H¸uô'FðwI	&ð~ %¡dð BØØ ¨H¸uô'FðI	&ðF %¡dð BØØ ¨H¸uô'FðGI	&ðN %¡dð BØØ ¨H¸uô'FðOI	&ðV %¡dð BØØ ¨H¸uô'FðWI	&ð^ )©$ð FØØ ¨H¸uô+Fð_I	&ðf %¡dð BØØ ¨H¸tô'EðgI	&ðp !¡$ð BØØ$Ð*@È]ô#\ðqI	&ðx !¡$ð BØØ$Ð*@Ø ¨F¸Uô	#DðyI	&ðB !¡$ð BØØ$Ð*@Ø ¨F¸Uô	#DðCI	&ðL !¡$ð BØØ$Ð*@Ø ¨H¸uô	#FðMI	&ðV !¡$ð BØØ$Ð*@Ø ¨H¸uô	#FðWI	&ð` !¡$ð BØØ$Ð*@Ø ¨H¸uô	#FðaI	&ðj !¡$ð BØØ$Ð*@Ø ¨H¸uô	#FðkI	&ðt !¡$ð BØØ$Ð*@Ø ¨H¸uô	#FòuI	&ð~ !¡$ð BØØ$Ð*@Ø ¨H¸uô	#FðI	&ðJ	 !¡$ð BØØ ¨H¸uô#FðK	I	&ðR	 !¡$ð BØØ ¨H¸uô#FðS	I	&ðZ	 !¡$ð BØØ ¨H¸uô#Fð[	I	&ðd	 !¡$ð BØØ ô#"ðe	I	&ñl	 !¡$ñ BØØ ¨F¸Uô#Dðm	I	&ñt	 !¡$ñ BØØ ¨F¸Uô#Dðu	I	&ñ|	 !¡$ñ BØØ ¨H¸uô#Fð}	I	&ñD
 !¡$ñ BØØ ¨H¸uô#FðE
I	&ñL
 !¡$ñ DØØ ¨H¸uô#FðM
I	&ñT
 !¡$ñ BØØ ¨H¸uô#FðU
I	&ñ\
 !¡$ñ DØØ ¨H¸uô#Fð]
I	&ñf
 ™tñ AØØ ô "ðg
I	&ñn
 ™tñ AØØ ¨F¸Uô Dðo
I	&ñv
 ™tñ AØØ ¨F¸Uô Dðw
I	&ñ~
 ™tñ AØØ ¨H¸uô Fð
I	&ñF ™tñ AØØ ¨H¸uô FòGI	&ñN ™tñ AØØ ¨H¸uô FðOI	&ñX ™tÙ~ØÙ¡/Ø ô	 $ðYI	&ñb ™tÙ~ØÙ¡/Ø ¨F¸Uô	 DðcI	&ñl ™tÙ~ØÙ¡/Ø ¨H¸uô	 FðmI	&ñx $¡Tñ EØØ$Ð*@õ&BðyI	&ñ@ $¡Tñ EØØ$Ð*@õ&BðAI	&ñH $¡Tñ EØØ$Ð*@Ø ¨F¸Uô	&DðII	&ñT !¡$ñ BØÙ¡/Øõ	#ðUI	&ñ` !¡$ñ BØÙ¡/Ø ¨F¸UØõ#ðaI	&ñn !¡$ñ BØÙ¡/Ø ¨F¸UØõ#ðoI	&ñ| !¡$ñ BØÙ¡/Ø ¨H¸uÐT^õ	#`ð}I	&ñF !¡$ñ BØÙ¡/Ø ¨H¹uÐT^õ	#`ðGI	&ñR (©ñ MØÙ¡/Ø °-È8Ð^aõ	*cðSI	&ñ\ (©ñ MØÙ¡/Ø °-È8Ð^aÐmuõ	*wð]I	&ñf (©ñ MØÙ¡/Ø °-È8Ð^aÐmuõ	*wðgI	&ñp )©$ñ PØÙ¡/Ø °-È8Ð^aÐmuõ	+wðqI	&ñ| ¡ñ FØÙ¡/Ø °-È8Ð^aõ	!cò}I	&ñF ¡ñ FØÙ¡/Ø °-È8Ð^aÐmuõ	!wðGI	&ñP ¡ñ FØÙ¡/Ø °-È8Ð^aÐmuõ	!wðQI	&ñ\  ¡ñ JØÙ¡/¹uØ °-È8Ð^aõ	"cð]I	&ñf  ¡ñ JØÙ¡/¹uØ °-È8Ð^aÐmuõ	"wðgI	&ñp  ¡ñ JØÙ¡/¹uØ °-È8Ð^aÐmuõ	"wðqI	&ñz !¡$ñ MØÙ¡/¹uØ °-È8Ð^aÐmuõ	#wð{I	&ñF  ¡ñ GØÙ °-É6õ"SðGI	&ñN  ¡ñ GØÙ °-É6Ð\aô"cðOI	&ñV  ¡ñ GØÙ °-È6Ð\aô"cðWI	&ñ^ )©$ØØ$Ð*@Ø °-È6Ð\_Ðksõ+uð_I	&ñf  ¡ñ GØØ °-È6Ð\aô"cðgI	&ñn !¡$ØØ$Ð*@ÉeØ °-È6Ð\aõ#cðoI	&ñx ™ÙtØôðyI	&ñ~ ™ÙtØôðI	&ñD ™ÙtØôðEI	&ñJ ™ÙxØôðKI	&ñP ™D›FòQI	&ñT ™ÙwØôðUI	&ñZ ™ÙwØôð[I	&ñ` ™ÙwØôðaI	&ñh ‘dÙ ©FÙ`ØõðiI	&ñp ‘dÙ ©FÙ`ØõðqI	&ñx ‘dÙ ©FÙ`ØõðyI	&ñ@ ‘dÙ ©FÙ`ØõðAI	&ñH ‘dÙ ©FÙ`ØõðII	&ñR &¡tà ¨3õ(0ðSI	&ñX (©à ¨3õ*0ðYI	&ñ^ '©à ¨3õ)0ð_I	&ñd 1±$ØØ$Ð*@Ø mÀ4ô3ðeI	&ñn '©à ¨3õ)0ðoI	&ñv "¡4ØÙ ©F¸Tõ$CðwI	&ñ| %¡dØÙ ©F¸Tõ'Cð}I	&ñB %¡dØÙ¡/Ù ©F¸Tõ'CðCI	&ñJ '©ØÙ¡/Ù ©F¸Tõ)CñKI	&ó I	€ðX ó¨|ó ó ðð ó¨|ó ó ðð ó¨|ó ó ðð ó¨|ó ó ðð ó°ó ó ðð ó°ó ó ðð ó°ó ó ðð ó°ó ó ðð ó°ó ó ðð ó°<ó ó ðð ó°Ló ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°Ló ó ðð ó°Ló ó ðð ó¨ló ó ðð ó°ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó°ló ó ðð ó¸ó ó ðð ó¸Ló ó ðð ó°ló ó ðð ó¸ó ó ðð ó¸ó ó ðð ó°<ó ó ðð ó¸,ó ó ðð ó°<ó ó ðð ó°<ó ó ðð ó¸,ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó¸,ó ó ðð ó¸,ó ó ðð ó¸,ó ó ðð ó°|ó ó ðð ó¸,ó ó ðð ó°|ó ó ðð ó°|ó ó ðð ó°Ló ó ðð ó°Ló ó ðð ó°Ló ó ðð ó°\ó ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó°ló ó ðð ó¸Ló ó ðð ó¸Ló ó ðð ó¸Ló ó ðð ó¸ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó°|ó ó ðð ó°|ó ó ðð ó°|ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó¸ó ó ðð ó°\ó ó ðð ó°\ó ó ðð ó°\ó ó ðð ó¨Ló ó ðð ó¨Ló ó ðð ó¨Ló ó ðð ó¨\ó ó ðð ó¨ló ó ðð ó¨|ó ó ðð ó¨|ó ó ðð ó¨|ó ó ðð ó¨\ó ó ðð
 ó¨\ó ó ðð
 ó¨\ó ó ðð
 ó¨\ó ó ðð
 ó¨\ó ó ðð
 ó¸ó ó ðð ó¸<ó ó ðð ó¸,ó ó ðð ó¸,ó ó ðð ó¸,ó ó ðð ó°\ó ó ðð
 ó¸ó ó ðð ó¸ó ó ðð ó¸,ó ó ðñ ˜Hð  'ÙÐ9ð 'áÐ9ð 'ñ Ð9ð 'ñ Ð9ð	 'ñ
 Ð9ð 'ñ Ð9ð 'ñ Ð9ð 'ñ Ð9ð 'ñ Ð9ð 'ñ Ð=ð 'ñ Ð=ð 'ñ Ð=ð 'ñ Ð=ð 'ñ Ð=ð 'ñ Ð=ð 'ñ  Ð=ð! 'ñ" Ð=ð# 'ð$ "FØ=Ù$GÙ$GÙ$GÙ%IÙ!<Ù!<Ù!<Ù">Ù)Ù)Ù!Ùó? 'õ  rq   