U
    ¯Ê¹j|Ž ã                �   @   sŒ  d Z ddlmZ ddlmZ ddlZddlmZ ddlm  m	Z
 ddlmZ ddlmZmZmZmZ ddl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# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z, ddgZ-G dd„ dej.ƒZ/G dd„ dej.ƒZ0�dâdd„Z1�dãdd„Z2�dädd„Z3�dådd„Z4�dædd„Z5�dçdd „Z6�dèd!d"„Z7�déd$d%„Z8�dêd&d'„Z9�dëd(d)„Z:�dìd*d+„Z;�díd,d-„Z<�dîd.d/„Z=�dïd0d1„Z>�dðd2d3„Z?�dñd4d5„Z@�dòd6d7„ZA�dód8d9„ZB�dôd:d;„ZC�dõd=d>„ZDe*eDƒ eDƒ eDd?d@dA�eDƒ eDƒ eDdBd@dA�eDdCd@dA�eDƒ eDdDd@dA�eDƒ eDdEd@dFdG�eDƒ eDdHd@dA�eDdId@dA�eDdJd@dA�eDdKd@dA�eDdLd@dMdG�eDdNd@dMdG�eDdOd@dA�eDdPd@dQddR�eDdSd@dQdTdUddV�eDdWd@dUdXdYddV�eDdZd@dYd[d\ddV�eDd@d]d^dd_d`�eDd@dadbdcddde�eDd<dfdgdhdi�eDd<djdkdldi�eDd<dmdndodi�eDd<dpdqdrdi�eDƒ eDƒ eDƒ eDdUdXdYdds�eDdUdXdYdds�eDdtd@dA�eDdud@dvdTdwdx�eDdyd@dzd[d{dx�eDd|d@dA�eDd}d@dzd[d{dx�eDƒ eDƒ eDdvdTdwd~�eDdd@dA�eDdvdTdwd~�eDd€dXd�d~�eDdzd[d{d~�eDd‚dƒd„d~�eDd…d@dvdTdweed†�eDd‡d@d€dXd�eed†�eDdˆd@dzd[d{eed†�eDd‰d@dŠdUd‹ddŒ�eDd�d@dŠdUd‹ddŒ�eDdŽd@dUd\dXddŒ�eDd�d@dYdad[ddŒ�eDdUd\dXdd��eDdYdad[dd��eDd\d‘dƒdd��eDd\d’dƒdd��eDd“d@dŠd”�eDd•d@dvdTdwdx�eDd–d@d€dXd�dx�eDd—d@dzd[d{dx�eDd˜d@d‚dƒd„dx�eDd™d@dšd›dœdx�eDd�d@dfdgdhdx�eDdžd@djdkdldx�eDdŸd@d d›d¡dx�eDd¢d@dpdqd£dx�eDd¤d@eedŠd¥�eDd¦d@eedvdTdwd§�eDd¨d@eed€dXd�d§�eDd©d@eedzd[d{d§�eDdªd@eed‚dƒd„d§�eDd«d@eedšd›dœd§�eDd¬d@eedfdgdhd§�eDd­d@eedjdkdld§�eDd®d@eedmdndod§�eDd¯d@dšd›dœdx�eDd°d@djdkdldx�eDd±d@dmdndodx�eDd²d@dŠd”�eDd³d@dvdTdwdx�eDd´d@d€dXd�dx�eDdµd@dzd[d{dx�eDd¶d@d‚dƒd„dx�eDd·d@dšd›dœdx�eDd¸d@dfdgdhdx�eDd¹d@djdkdldx�eDdºd@dŠd”�eDd»d@dvdTdwdx�eDd¼d@d€dXd�dx�eDd½d@dzd[d{dx�eDd¾d@d‚dƒd„dx�eDd¿d@dšd›dœdx�eDdÀd@dÁdÁdŠd¥�eDdÂd@dÁdÁdvdTdwd§�eDdÃd@dÁdÁdzd[d{d§�eDdÄd@eedÅ�eDdÆd@eedÅ�eDdÇd@eedvdTdwd§�eDdÈd@dÁdÁdFdÉ�eDdÊd@dÁdÁdvdTdwdFdË�eDdÌd@dÁdÁd€dXd�dFdË�eDdÍd@dÁdÁdzd[d{dMdË�eDdÎd@dÁdÁd‚dƒdÏdMdË�eDdÐd@dÁdÁdzd\d[ddÑ�eDdÒd@dÁdÁd\d‘dƒdd_dÓ�	eDdÔd@dÁdÁd\d‘dƒdd_dÓ�	eDdÕd@dÁdÁd\d’dƒdd_dÓ�	eDdÖd@dÁdÁdzd\d[ddÑ�eDd×d@dÁdÁd\d‘dƒdd_dÓ�	eDdØd@dÁdÁd\d‘dƒdd_dÓ�	eDdÙd@dÁdÁdÚdzd\d[ddÛ�	eDdÜd@dÁdÁdÚd\d‘dƒdd_dÝ�
eDdÞd@dÁdÁdÚd\d‘dƒdd_dÝ�
eDdßd@dÁdÁdÚd\d’dƒdd_dÝ�
eDdàd@dádŠdâdã�eDdäd@dádvdâdwdŒ�eDdåd@dæd€d‹d�dŒ�eDd@eedvdzdTdçd_dè�eDdéd@dvdzdTd{dŒ�eDd@eedÚdvdzdTd{dê�eDdëd@dA�eDdìd@dA�eDdíd@dA�eDdîd@dA�eDƒ eDdïd@dA�eDdðd@dA�eDdñd@dA�eDdádâdòd@dó�eDdôdâdõd@dó�eDdödâd÷d@dó�eDdødùdúd@dó�eDdûdüdýd@dó�dþœ‡ƒZEe+�döe/dÿœ�d �d„ƒZFe+�d÷e/dÿœ�d�d„ƒZGe+�døe/dÿœ�d�d„ƒZHe+�dùe/dÿœ�d�d„ƒZIe+�dúe/dÿœ�d�d	„ƒZJe+�dûe/dÿœ�d
�d„ƒZKe+�düe/dÿœ�d�d„ƒZLe+�dýe/dÿœ�d�d„ƒZMe+�dþe/dÿœ�d�d„ƒZNe+�dÿe/dÿœ�d�d„ƒZOe+�d e/dÿœ�d�d„ƒZPe+�de/dÿœ�d�d„ƒZQe+�de/dÿœ�d�d„ƒZRe+�de/dÿœ�d�d„ƒZSe+�de/dÿœ�d�d„ƒZTe+�de/dÿœ�d�d„ƒZUe+�de/dÿœ�d �d!„ƒZVe+�de/dÿœ�d"�d#„ƒZWe+�de/dÿœ�d$�d%„ƒZXe+�d	e/dÿœ�d&�d'„ƒZYe+�d
e/dÿœ�d(�d)„ƒZZe+�de/dÿœ�d*�d+„ƒZ[e+�de/dÿœ�d,�d-„ƒZ\e+�de/dÿœ�d.�d/„ƒZ]e+�de/dÿœ�d0�d1„ƒZ^e+�de/dÿœ�d2�d3„ƒZ_e+�de/dÿœ�d4�d5„ƒZ`e+�de/dÿœ�d6�d7„ƒZae+�de/dÿœ�d8�d9„ƒZbe+�de/dÿœ�d:�d;„ƒZce+�de/dÿœ�d<�d=„ƒZde+�de/dÿœ�d>�d?„ƒZee+�de/dÿœ�d@�dA„ƒZfe+�de/dÿœ�dB�dC„ƒZge+�de/dÿœ�dD�dE„ƒZhe+�de/dÿœ�dF�dG„ƒZie+�de/dÿœ�dH�dI„ƒZje+�de/dÿœ�dJ�dK„ƒZke+�de/dÿœ�dL�dM„ƒZle+�de/dÿœ�dN�dO„ƒZme+�de/dÿœ�dP�dQ„ƒZne+�de/dÿœ�dR�dS„ƒZoe+�d e/dÿœ�dT�dU„ƒZpe+�d!e/dÿœ�dV�dW„ƒZqe+�d"e/dÿœ�dX�dY„ƒZre+�d#e/dÿœ�dZ�d[„ƒZse+�d$e/dÿœ�d\�d]„ƒZte+�d%e/dÿœ�d^�d_„ƒZue+�d&e/dÿœ�d`�da„ƒZve+�d'e/dÿœ�db�dc„ƒZwe+�d(e/dÿœ�dd�de„ƒZxe+�d)e/dÿœ�df�dg„ƒZye+�d*e/dÿœ�dh�di„ƒZze+�d+e/dÿœ�dj�dk„ƒZ{e+�d,e/dÿœ�dl�dm„ƒZ|e+�d-e/dÿœ�dn�do„ƒZ}e+�d.e/dÿœ�dp�dq„ƒZ~e+�d/e/dÿœ�dr�ds„ƒZe+�d0e/dÿœ�dt�du„ƒZ€e+�d1e/dÿœ�dv�dw„ƒZ�e+�d2e/dÿœ�dx�dy„ƒZ‚e+�d3e/dÿœ�dz�d{„ƒZƒe+�d4e/dÿœ�d|�d}„ƒZ„e+�d5e/dÿœ�d~�d„ƒZ…e+�d6e/dÿœ�d€�d�„ƒZ†e+�d7e/dÿœ�d‚�dƒ„ƒZ‡e+�d8e/dÿœ�d„�d…„ƒZˆe+�d9e/dÿœ�d†�d‡„ƒZ‰e+�d:e/dÿœ�dˆ�d‰„ƒZŠe+�d;e/dÿœ�dŠ�d‹„ƒZ‹e+�d<e/dÿœ�dŒ�d�„ƒZŒe+�d=e/dÿœ�dŽ�d�„ƒZ�e+�d>e/dÿœ�d��d‘„ƒZŽe+�d?e/dÿœ�d’�d“„ƒZ�e+�d@e/dÿœ�d”�d•„ƒZ�e+�dAe/dÿœ�d–�d—„ƒZ‘e+�dBe/dÿœ�d˜�d™„ƒZ’e+�dCe/dÿœ�dš�d›„ƒZ“e+�dDe/dÿœ�dœ�d�„ƒZ”e+�dEe/dÿœ�dž�dŸ„ƒZ•e+�dFe/dÿœ�d �d¡„ƒZ–e+�dGe/dÿœ�d¢�d£„ƒZ—e+�dHe/dÿœ�d¤�d¥„ƒZ˜e+�dIe/dÿœ�d¦�d§„ƒZ™e+�dJe/dÿœ�d¨�d©„ƒZše+�dKe/dÿœ�dª�d«„ƒZ›e+�dLe/dÿœ�d¬�d­„ƒZœe+�dMe/dÿœ�d®�d¯„ƒZ�e+�dNe/dÿœ�d°�d±„ƒZže+�dOe/dÿœ�d²�d³„ƒZŸe+�dPe/dÿœ�d´�dµ„ƒZ e+�dQe/dÿœ�d¶�d·„ƒZ¡e+�dRe/dÿœ�d¸�d¹„ƒZ¢e+�dSe/dÿœ�dº�d»„ƒZ£e+�dTe/dÿœ�d¼�d½„ƒZ¤e+�dUe/dÿœ�d¾�d¿„ƒZ¥e+�dVe/dÿœ�dÀ�dÁ„ƒZ¦e+�dWe/dÿœ�dÂ�dÃ„ƒZ§e+�dXe/dÿœ�dÄ�dÅ„ƒZ¨e,e©�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S (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)ÚListN)Ú
checkpoint)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDÚIMAGENET_INCEPTION_MEANÚIMAGENET_INCEPTION_STD)Úcreate_conv2dÚcreate_classifierÚget_norm_act_layerÚGroupNormActé   )Úbuild_model_with_cfgÚpretrained_cfg_for_features)ÚSqueezeExcite)ÚEfficientNetBuilderÚdecode_arch_defÚefficientnet_init_weightsÚround_channelsÚresolve_bn_argsÚresolve_act_layerÚBN_EPS_TF_DEFAULT)ÚFeatureInfoÚFeatureHooks)Úcheckpoint_seq)Úgenerate_default_cfgsÚregister_modelÚregister_model_deprecationsÚEfficientNetÚEfficientNetFeaturesc                       s¤   e Zd ZdZdddddddedddd	d	d
f‡ fdd„	Zdd„ Zejj	ddd„ƒZ
ejj	d dd„ƒZejj	dd„ ƒZd!dd„Zdd„ Zd"edœdd„Zdd„ Z‡  ZS )#r   a›   EfficientNet

    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
    éè  é   é   é    FÚ Nç        Úavgc              	      sú   t t| ƒ ¡  |
ptj}
|p tj}t||
ƒ}|p2t}|| _|| _	|| _
d| _|sX|	|ƒ}t||dd|d�| _||dd�| _t|||	|
|||d�}tj|||ƒŽ | _|j| _|j}t|| j	d|d	�| _|| j	dd�| _t| j	| j|d
�\| _| _t| ƒ d S )NFr"   é   ©ZstrideÚpaddingT©Zinplace)Úoutput_strideÚpad_typeÚround_chs_fnÚ	act_layerÚ
norm_layerÚse_layerÚdrop_path_rater   )r)   ©Z	pool_type)Úsuperr   Ú__init__ÚnnÚReLUÚBatchNorm2dr   r   Únum_classesÚnum_featuresÚ	drop_rateÚgrad_checkpointingr	   Ú	conv_stemÚbn1r   Ú
SequentialÚblocksÚfeaturesÚfeature_infoZin_chsÚ	conv_headÚbn2r
   Úglobal_poolÚ
classifierr   )ÚselfÚ
block_argsr8   r9   Úin_chansÚ	stem_sizeÚfix_stemr+   r,   r-   r.   r/   r0   r:   r1   rD   Únorm_act_layerÚbuilderZhead_chs©Ú	__class__© úW/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/efficientnet.pyr4   K   sB    


ù	  ÿzEfficientNet.__init__c                 C   sP   | j | jg}| | j¡ | | j| j| jg¡ | t | j	¡| j
g¡ tj|Ž S ©N)r<   r=   Úextendr?   rB   rC   rD   r5   ZDropoutr:   rE   r>   )rF   ZlayersrO   rO   rP   Úas_sequentialƒ   s
    zEfficientNet.as_sequentialc                 C   s   t d|rdndd fdgd�S )Nz^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+))zconv_head|bn2)iŸ† )Ústemr?   )Údict)rF   ZcoarserO   rO   rP   Úgroup_matcherŠ   s    þþzEfficientNet.group_matcherTc                 C   s
   || _ d S rQ   ©r;   ©rF   ÚenablerO   rO   rP   Úset_grad_checkpointing”   s    z#EfficientNet.set_grad_checkpointingc                 C   s   | j S rQ   )rE   )rF   rO   rO   rP   Úget_classifier˜   s    zEfficientNet.get_classifierc                 C   s$   || _ t| j| j |d�\| _| _d S )Nr2   )r8   r
   r9   rD   rE   )rF   r8   rD   rO   rO   rP   Úreset_classifierœ   s      ÿzEfficientNet.reset_classifierc                 C   sX   |   |¡}|  |¡}| jr6tj ¡ s6t| j|dd�}n
|  |¡}|  |¡}|  	|¡}|S )NT)Úflatten)
r<   r=   r;   ÚtorchÚjitÚis_scriptingr   r?   rB   rC   ©rF   ÚxrO   rO   rP   Úforward_features¡   s    




zEfficientNet.forward_features)Ú
pre_logitsc                 C   s:   |   |¡}| jdkr(tj|| j| jd�}|r0|S |  |¡S )Nr%   )ÚpÚtraining)rD   r:   ÚFZdropoutrf   rE   )rF   rb   rd   rO   rO   rP   Úforward_head¬   s    

zEfficientNet.forward_headc                 C   s   |   |¡}|  |¡}|S rQ   )rc   rh   ra   rO   rO   rP   Úforward²   s    

zEfficientNet.forward)F)T)r&   )F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r4   rS   r^   r_   ÚignorerV   rZ   r[   r\   rc   Úboolrh   ri   Ú__classcell__rO   rO   rM   rP   r   ;   s6   ð8	

c                       sb   e Zd ZdZdddddddedddd	d	f‡ fd
d„	Zejjddd„ƒZ	e
ej dœdd„Z‡  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   r'   r"   é   Ú
bottleneckr"   r#   Fr$   Nr%   c              
      sô   t t| ƒ ¡  |
ptj}
|p tj}t||
ƒ}|p2t}|| _d| _	|sL|	|ƒ}t
||dd|d�| _||dd�| _t|||	|
||||d�}tj|||ƒŽ | _t|j|ƒ| _dd	„ | j ¡ D ƒ| _t| ƒ d | _|d
krð| jjdd�}t||  ¡ ƒ| _d S )NFr"   r'   r(   Tr*   )r+   r,   r-   r.   r/   r0   r1   Úfeature_locationc                 S   s   i | ]}|d  |d “qS )ZstageÚindexrO   )Ú.0ÚfrO   rO   rP   Ú
<dictcomp>ë   s      z1EfficientNetFeatures.__init__.<locals>.<dictcomp>rr   )ÚmoduleZ	hook_type)Úkeys)r3   r   r4   r5   r6   r7   r   r   r:   r;   r	   r<   r=   r   r>   r?   r   r@   rA   Z	get_dictsÚ_stage_out_idxr   Úfeature_hooksr   Znamed_modules)rF   rG   Zout_indicesrs   rH   rI   rJ   r+   r,   r-   r.   r/   r0   r:   r1   rK   rL   ÚhooksrM   rO   rP   r4   ¿   s:    


ø
zEfficientNetFeatures.__init__Tc                 C   s
   || _ d S rQ   rW   rX   rO   rO   rP   rZ   õ   s    z+EfficientNetFeatures.set_grad_checkpointing©Úreturnc                 C   s²   |   |¡}|  |¡}| jd krŠg }d| jkr6| |¡ t| jƒD ]D\}}| jrdtj	 
¡ sdt||ƒ}n||ƒ}|d | jkr@| |¡ q@|S |  |¡ | j |j¡}t| ¡ ƒS d S )Nr   r   )r<   r=   r{   rz   ÚappendÚ	enumerater?   r;   r^   r_   r`   r   Z
get_outputZdeviceÚlistÚvalues)rF   rb   r@   ÚiÚbÚoutrO   rO   rP   ri   ù   s     





zEfficientNetFeatures.forward)T)rj   rk   rl   rm   r   r4   r^   r_   rn   rZ   r   ZTensorri   rp   rO   rO   rM   rP   r   ¸   s$   	ñ6Fc                 K   st   d}t }d }| dd¡r2d|kr&d}nd}t}d}t|| |f|dk|dk|dœ|—Ž}|dkrpt|jƒ |_|_|S )	Nr$   Úfeatures_onlyFZfeature_cfgÚcfg)r8   r9   Z	head_convrD   Úcls)r†   Zpretrained_strictÚkwargs_filter)r   Úpopr   r   r   Zpretrained_cfgZdefault_cfg)ÚvariantÚ
pretrainedÚkwargsZfeatures_modeZ	model_clsr‰   ÚmodelrO   rO   rP   Ú_create_effnet  s.    ýúù	r�   ç      ð?c              	   K   sp   dgdgdgdgdgdgdgg}t f t|ƒdtt|d	�| d
d¡pRttjft|ƒŽdœ|—Ž}t| |f|Ž}|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.
    Zds_r1_k3_s1_e1_c16_noskipÚir_r2_k3_s2_e6_c24zir_r3_k5_s2_e3_c40_se0.25Z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©rG   rI   r-   r/   ©	rU   r   r   r   rŠ   r5   r7   r   r�   ©r‹   Úchannel_multiplierrŒ   r�   Úarch_defÚmodel_kwargsrŽ   rO   rO   rP   Ú_gen_mnasnet_a1(  s$    ò
üûr›   c              	   K   sp   dgdgdgdgdgdgdgg}t f t|ƒdtt|d	�| d
d¡pRttjft|ƒŽdœ|—Ž}t| |f|Ž}|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_c24Zir_r3_k5_s2_e3_c40Zir_r3_k5_s2_e6_c80Zir_r2_k3_s1_e6_c96Úir_r4_k5_s2_e6_c192Úir_r1_k3_s1_e6_c320_noskipr#   r“   r/   Nr•   r–   r—   rO   rO   rP   Ú_gen_mnasnet_b1L  s$    ò
üûr¡   c              	   K   sp   dgdgdgdgdgdgdgg}t f t|ƒdtt|d	�| d
d¡pRttjft|ƒŽdœ|—Ž}t| |f|Ž}|S )rœ   Zds_r1_k3_s1_c8Zir_r1_k3_s2_e3_c16Z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.25Zir_r1_k3_s1_e6_c144é   r“   r/   Nr•   r–   r—   rO   rO   rP   Ú_gen_mnasnet_smallp  s$    
ù	
üûr£   c           
      K   s˜   dgdgdgdgdgdgdgg}t t|d�}tf t|||d	�|rDd
ntd
|d
ƒƒd||| dd¡prt tjft|ƒŽt	|dƒdœ|—Ž}t
| |f|Ž}	|	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
    Zds_r1_k3_s1_c16r‘   Zir_r3_k3_s2_e6_c32Zir_r4_k3_s2_e6_c64Zir_r3_k3_s1_e6_c96Zir_r3_k3_s2_e6_c160r’   r“   )Údepth_multiplierÚfix_first_lastr!   r#   r/   NÚrelu6)rG   r9   rI   rJ   r-   r/   r.   )r   r   rU   r   ÚmaxrŠ   r5   r7   r   r   r�   )
r‹   r˜   r¤   Úfix_stem_headrŒ   r�   r™   r-   rš   rŽ   rO   rO   rP   Ú_gen_mobilenet_v2�  s,    ù	ùø
r©   c              
   K   s€   dgddgddddgdd	d
gddgdgdgg}t f t|ƒddtt|d�| dd¡pbttjft|ƒŽdœ|—Ž}t| |f|Ž}|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
    Zir_r1_k3_s1_e1_c16Zir_r1_k3_s2_e6_c24Zir_r2_k3_s1_e1_c24Zir_r1_k5_s2_e6_c32Zir_r1_k5_s1_e3_c32Zir_r1_k5_s1_e6_c32Zir_r1_k3_s1_e6_c32Zir_r1_k5_s2_e6_c64Zir_r1_k5_s1_e3_c64Zir_r2_k5_s1_e6_c64Úir_r3_k5_s1_e6_c112Zir_r1_k5_s1_e3_c112Zir_r4_k5_s2_e6_c184Zir_r1_k3_s1_e6_c352é   iÀ  r“   r/   N)rG   rI   r9   r-   r/   r–   r—   rO   rO   rP   Ú_gen_fbnetc«  s&    

ù	
ûúr¬   c              	   K   sv   dgdgddgddgddgd	gd
gg}t f t|ƒdtt|d�| dd¡pXttjft|ƒŽdœ|—Ž}t| |f|Ž}|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ž   Zir_r1_k5_s2_e6_c40Zir_r3_k3_s1_e3_c40Zir_r1_k5_s2_e6_c80Zir_r3_k3_s1_e3_c80Zir_r1_k5_s1_e6_c96Zir_r3_k5_s1_e3_c96rŸ   r    r#   r“   r/   Nr•   r–   r—   rO   rO   rP   Ú_gen_spnasnetÉ  s$    
ò
üûr­   r¢   c                 K   sŠ   dgdgdgdgdgdgdgg}t t||d�}tf t|||d	�|d
ƒd|t|dƒ| dd¡plt tjft|ƒŽdœ|—Ž}	t	| |f|	Ž}
|
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”   Zdivisor©Ú
group_sizer!   r#   Úswishr/   N)rG   r9   rI   r-   r.   r/   )
r   r   rU   r   r   rŠ   r5   r7   r   r�   )r‹   r˜   r¤   Úchannel_divisorr¶   rŒ   r�   r™   r-   rš   rŽ   rO   rO   rP   Ú_gen_efficientnetì  s*    ù	úù	r¹   c           
   
   K   s„   dgdgdgdgdgdgg}t t|d�}tf t|||d�|d	ƒd
|| dd¡p^t tjft|ƒŽt|dƒdœ|—Ž}t	| |f|Ž}	|	S )z� Creates an EfficientNet-EdgeTPU model

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/edgetpu
    Zer_r1_k3_s1_e4_c24_fc24_noskipZer_r2_k3_s2_e8_c32Zer_r4_k3_s2_e8_c48Zir_r5_k5_s2_e8_c96Zir_r4_k5_s1_e8_c144Zir_r2_k5_s2_e8_c192r“   rµ   r!   r#   r/   NZrelu©rG   r9   rI   r-   r/   r.   ©
r   r   rU   r   rŠ   r5   r7   r   r   r�   )
r‹   r˜   r¤   r¶   rŒ   r�   r™   r-   rš   rŽ   rO   rO   rP   Ú_gen_efficientnet_edge  s(    
ø
úù	r¼   c           
   
   K   sˆ   dgdgdgdgdgdgdgg}t t|d�}tf t|||d	�|d
ƒd|| dd¡pbt tjft|ƒŽt|dƒdœ|—Ž}t	| |f|Ž}	|	S )z�Creates an EfficientNet-CondConv model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv
    r®   r¯   r°   r±   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·   rº   r»   )
r‹   r˜   r¤   r½   rŒ   r�   r™   r-   rš   rŽ   rO   rO   rP   Ú_gen_efficientnet_condconv<  s*    ùúù	r¾   c                 K   s‚   dgdgdgdgdgdgdgg}t f t||dd	�d
ddtt|d�t|dƒ| dd¡pdttjft|ƒŽdœ|—Ž}t	| |f|Ž}|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‘   Zir_r2_k5_s2_e6_c40Zir_r3_k3_s2_e6_c80rª   rŸ   r’   T)r¥   r!   r#   r“   r¦   r/   N©rG   r9   rI   rJ   r-   r.   r/   )
rU   r   r   r   r   rŠ   r5   r7   r   r�   ©r‹   r˜   r¤   rŒ   r�   r™   rš   rŽ   rO   rO   rP   Ú_gen_efficientnet_lite[  s*    ù	
ùø
rÂ   c           	   
   K   s‚   dgdgdgdgdgdgg}t t|dd�}tf t||ƒ|d	ƒd
|| dd¡p\t tjft|ƒŽt|dƒdœ|—Ž}t	| |f|Ž}|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
    Zcn_r1_k3_s1_e1_c16_skipZer_r2_k3_s2_e4_c32Z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.25r%   )r”   Zround_limitr!   r#   r/   NÚsilurº   r»   )	r‹   r˜   r¤   rŒ   r�   r™   r-   rš   rŽ   rO   rO   rP   Ú_gen_efficientnetv2_base„  s(    úúù	rÄ   c              
   K   s¤   dgdgdgdgdgdgg}d}|r<dg|d	< d
g|d< d}t t|d�}	tf t|||d�|	|ƒd|	| dd¡p~t tjft|ƒŽt|dƒdœ|—Ž}
t	| |f|
Ž}|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.
    Zcn_r2_k3_s1_e1_c24_skipZer_r4_k3_s2_e4_c48Z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!   Zer_r2_k3_s1_e1_c24r   zir_r15_k3_s2_e6_c272_se0.25éÿÿÿÿi   r“   rµ   é   r/   NrÃ   rº   r»   )r‹   r˜   r¤   r¶   ÚrwrŒ   r�   r™   r9   r-   rš   rŽ   rO   rO   rP   Ú_gen_efficientnetv2_s¡  s2    ú

úù	rÈ   c              
   K   s|   dgdgdgdgdgdgdgg}t f t||ƒdd	tt|d
�| dd¡pVttjft|ƒŽt|dƒdœ|—Ž}t	| |f|Ž}|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
    Zcn_r3_k3_s1_e1_c24_skipZer_r5_k3_s2_e4_c48Z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Æ   r“   r/   NrÃ   rº   ©
rU   r   r   r   rŠ   r5   r7   r   r   r�   rÁ   rO   rO   rP   Ú_gen_efficientnetv2_mÈ  s(    ù

úù	rÊ   c              
   K   s|   dgdgdgdgdgdgdgg}t f t||ƒdd	tt|d
�| dd¡pVttjft|ƒŽt|dƒdœ|—Ž}t	| |f|Ž}|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_skipZer_r7_k3_s2_e4_c64Z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/   NrÃ   rº   rÉ   rÁ   rO   rO   rP   Ú_gen_efficientnetv2_læ  s(    ù

úù	rÌ   c              
   K   s|   dgdgdgdgdgdgdgg}t f t||ƒdd	tt|d
�| dd¡pVttjft|ƒŽt|dƒdœ|—Ž}t	| |f|Ž}|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
    rË   Zer_r8_k3_s2_e4_c64Z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/   NrÃ   rº   rÉ   rÁ   rO   rO   rP   Ú_gen_efficientnetv2_xl  s(    ù

úù	rÍ   c              
   K   sx   dgddgddgddgdd	gd
dgg}t f t|ƒddtt|d�| dd¡pZttjft|ƒŽdœ|—Ž}t| |f|Ž}|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
    r¿   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©rG   r9   rI   r-   r/   r–   r—   rO   rO   rP   Ú_gen_mixnet_s"  s$    ô
ûúrÑ   c              
   K   s~   dgddgddgddgdd	gd
dgg}t f t||dd�ddtt|d�| dd¡p`ttjft|ƒŽdœ|—Ž}t| |f|Ž}|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
    Z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©Zdepth_truncrÏ   rÆ   r“   r/   NrÐ   r–   rÁ   rO   rO   rP   Ú_gen_mixnet_mC  s$    ô
ûúrÔ   c                 K   s’   dgdgdgdgdgdgdgg}t f t||dd	�td
td
|ddƒƒddtt|d�t|dƒ| dd¡ptttjft	|ƒŽdœ|—Ž}t
| |f|Ž}|S )zCreates a TinyNet model.
    r®   r¯   r°   r±   r²   r³   r´   rÒ   rÓ   r!   r¢   Nr#   Tr“   r·   r/   rÀ   )rU   r   r§   r   r   r   rŠ   r5   r7   r   r�   )r‹   Zmodel_widthr¤   rŒ   r�   r™   rš   rŽ   rO   rO   rP   Ú_gen_tinynetd  s*       ü
ùø
rÕ   r$   c                 K   s   | dddddt tdddœ
|–S )	Nr    ©r"   éà   r×   ©é   rÙ   g      ì?Úbicubicr<   rE   )
Úurlr8   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdZ
first_convrE   )r   r   )rÛ   r�   rO   rO   rP   Ú_cfg}  s          üûrâ   zhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_b1-74cb7081.pthztimm/)rÛ   Ú	hf_hub_idzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/semnasnet_075-18710866.pthzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_a1-d9418771.pthzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_small_lamb-aff75073.pthzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_050-3d30d450.pthrÚ   )rÛ   rã   rß   zphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_100_ra-b33bc2c4.pthzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_110d_ra-77090ade.pthzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_120d_ra-5987e2ed.pthzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_140_ra-21a4e913.pthzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetc_100-c345b898.pthZbilinearzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/spnasnet_100-048bc3f4.pthzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b0_ra-3dd342df.pthzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b1-533bc792.pth)r"   é   rä   )rÛ   rã   Útest_input_sizerÞ   zphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b2_ra-bcdf34b7.pth)r¢   r¢   )r"   é   ræ   )rÛ   rã   rÜ   rÝ   rå   rÞ   zqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b3_ra2-cf984f9c.pth)é	   rç   )r"   é@  rè   zuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b4_ra2_320-7eb33cd5.pth)é
   ré   )r"   é€  rê   )r"   éÀ  rë   )é   rì   Zsquash)rã   rÜ   rÝ   rÞ   Ú	crop_mode)r"   é   rî   )é   rï   gffffffî?i-.  )rã   rÜ   rÝ   rÞ   r8   )r"   é  rð   )é   rñ   g¾Ÿ/Ý$î?)rÛ   rÜ   rÝ   rÞ   )r"   éX  rò   )é   ró   g‘í|?5^î?)r"   é   rô   )é   rõ   gºI+‡î?)r"   é   rö   )é   r÷   g�—nƒÀî?)rÜ   rÝ   rå   rÞ   zphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_es_ra-f111e99c.pthzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_em_ra2-66250f76.pth)r"   éð   rø   gÓMbX9ì?)rÛ   rã   rÜ   rÝ   rÞ   zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_el-3b455510.pth)r"   é,  rù   g!°rh‘íì?zvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_es_pruned75-1b7248cf.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_el_pruned70-ef2a2ccf.pth)rÜ   rÝ   rÞ   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_lite0_ra-37913777.pth)r"   é  rú   g{®Gázì?)r"   é|  rû   )é   rü   g/Ý$�í?zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb1_pruned-bea43a3a.pth)rÛ   rã   rÜ   rÝ   rÞ   rà   rá   zmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb2_pruned-08c1b27c.pthzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb3_pruned-59ecf72d.pthzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnetv2_t_agc-3620981a.pthrÖ   rØ   )rÛ   rã   rÜ   rå   rÝ   rÞ   zxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/gc_efficientnetv2_rw_t_agc-927a0bde.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_v2s_ra2_288-a6477665.pthzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnetv2_rw_m_agc-3d90cb1e.pth)rÜ   rå   rÝ   rÞ   )r"   éà  rý   )r"   é   rþ   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_ns-c0e6a31c.pth)rÛ   rã   rÜ   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_ns-99dd0c41.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_ns-00306e48.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_ns-9d44bf68.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_ns-d6313a46.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ns-6f26d0cf.pth)r"   éÈ  rÿ   )é   r   gÙÎ÷Sãí?zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_ns-51548356.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ns-1dbc32de.pthzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_l2_ns_475-bebbd00a.pth)r"   éÛ  r  gÁÊ¡E¶óí?zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_l2_ns-df73bb44.pthg¸…ëQ¸î?zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_ap-f262efe1.pth)rÛ   rã   rà   rá   rÜ   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_ap-44ef0a3d.pth)rÛ   rã   rà   rá   rÜ   rÝ   rÞ   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_ap-2f8e7636.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_ap-aad25bdd.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_ap-dedb23e6.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ap-9e82fae8.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_ap-4ffb161f.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ap-ddb28fec.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b8_ap-00e169fa.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ra-9a3e5369.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ra-6c08e654.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b8_ra-572d5dd9.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_aa-827b6e33.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_aa-ea7a6ee0.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_aa-60c94f97.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_aa-84b4657e.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_aa-818f208c.pthzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_aa-99018a74.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_aa-80ba17e4.pthzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_aa-076e3472.pthzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0-0af12548.pthzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1-5c1377c4.pthzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2-e393ef04.pthzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3-e3bd6955.pthzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4-74ee3bed.pthzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5-c6949ce9.pthzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_es-ca1afbfe.pth)ç      à?r  r  zphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_em-e78cfe58.pthzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_el-5143854e.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b0_4e-4362b6b2.pth)rÛ   rã   rà   rá   zvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b0_8e-66184a25.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b1_8e-f7c79ae1.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite0-0aa007d2.pth)rÛ   rã   rà   rá   rß   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite1-bde8b488.pth)rÛ   rã   rà   rá   rÜ   rÝ   rÞ   rß   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite2-dcccb7df.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite3-b733e338.pthzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite4-741542c3.pthgq=
×£pí?z~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~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~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l_21ft1k-60127a9d.pthz�https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21ft1k-06c35c48.pthzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s-eb54923e.pthzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m-cc09e0cd.pthzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l-d664b728.pthz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s_21k-6337ad01.pthiSU  )	rÛ   rã   rà   rá   r8   rÜ   rå   rÝ   rÞ   z{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m_21k-361418a2.pth)
rÛ   rã   rà   rá   r8   rÜ   rå   rÝ   rÞ   rí   z{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l_21k-91a19ec9.pthz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21k-fd7e8abf.pthzxhttps://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Ý   zxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b1-be6e41b0.pthzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b2-847de54e.pth)r"   éÐ   r  çÍÌÌÌÌÌì?)rã   rà   rá   rÜ   rå   rÝ   rÞ   rí   zxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b3-57773f13.pth)rã   rà   rá   r8   rÜ   rå   rÝ   rÞ   zfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_s-a907afbc.pthzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_m-4647fc68.pthzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_l-5a9a2ed8.pthzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_xl_ra-aac3c00c.pthzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_s-89d3354b.pthzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_m-0f4d8805.pthzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_l-6c92e0c8.pthzRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_a.pth)rÜ   rÝ   rÛ   rã   )r"   é¼   r  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_b.pth)r"   é¸   r  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_c.pth)r"   é˜   r	  )é   r
  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_d.pth)r"   éj   r  )rq   rq   zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_e.pth)‡zmnasnet_050.untrainedzmnasnet_075.untrainedzmnasnet_100.rmsp_in1kzmnasnet_140.untrainedzsemnasnet_050.untrainedzsemnasnet_075.rmsp_in1kzsemnasnet_100.rmsp_in1kzsemnasnet_140.untrainedzmnasnet_small.lamb_in1kzmobilenetv2_035.untrainedzmobilenetv2_050.lamb_in1kzmobilenetv2_075.untrainedzmobilenetv2_100.ra_in1kzmobilenetv2_110d.ra_in1kzmobilenetv2_120d.ra_in1kzmobilenetv2_140.ra_in1kzfbnetc_100.rmsp_in1kzspnasnet_100.rmsp_in1kzefficientnet_b0.ra_in1kzefficientnet_b1.ft_in1kzefficientnet_b2.ra_in1kzefficientnet_b3.ra2_in1kzefficientnet_b4.ra2_in1kz efficientnet_b5.sw_in12k_ft_in1kzefficientnet_b5.sw_in12kzefficientnet_b6.untrainedzefficientnet_b7.untrainedzefficientnet_b8.untrainedzefficientnet_l2.untrainedzefficientnet_b0_gn.untrainedzefficientnet_b0_g8_gn.untrainedz"efficientnet_b0_g16_evos.untrainedzefficientnet_b3_gn.untrainedzefficientnet_b3_g8_gn.untrainedzefficientnet_es.ra_in1kzefficientnet_em.ra2_in1kzefficientnet_el.ra_in1kzefficientnet_es_pruned.in1kzefficientnet_el_pruned.in1kzefficientnet_cc_b0_4e.untrainedzefficientnet_cc_b0_8e.untrainedzefficientnet_cc_b1_8e.untrainedzefficientnet_lite0.ra_in1kzefficientnet_lite1.untrainedzefficientnet_lite2.untrainedzefficientnet_lite3.untrainedzefficientnet_lite4.untrainedzefficientnet_b1_pruned.in1kzefficientnet_b2_pruned.in1kzefficientnet_b3_pruned.in1kzefficientnetv2_rw_t.ra2_in1kzgc_efficientnetv2_rw_t.agc_in1kzefficientnetv2_rw_s.ra2_in1kzefficientnetv2_rw_m.agc_in1kzefficientnetv2_s.untrainedzefficientnetv2_m.untrainedzefficientnetv2_l.untrainedzefficientnetv2_xl.untrainedútf_efficientnet_b0.ns_jft_in1kútf_efficientnet_b1.ns_jft_in1kútf_efficientnet_b2.ns_jft_in1kútf_efficientnet_b3.ns_jft_in1kútf_efficientnet_b4.ns_jft_in1kútf_efficientnet_b5.ns_jft_in1kútf_efficientnet_b6.ns_jft_in1kútf_efficientnet_b7.ns_jft_in1kú"tf_efficientnet_l2.ns_jft_in1k_475útf_efficientnet_l2.ns_jft_in1kútf_efficientnet_b0.ap_in1kútf_efficientnet_b1.ap_in1kútf_efficientnet_b2.ap_in1kútf_efficientnet_b3.ap_in1kútf_efficientnet_b4.ap_in1kútf_efficientnet_b5.ap_in1kútf_efficientnet_b6.ap_in1kútf_efficientnet_b7.ap_in1kútf_efficientnet_b8.ap_in1kztf_efficientnet_b5.ra_in1kztf_efficientnet_b7.ra_in1kztf_efficientnet_b8.ra_in1kztf_efficientnet_b0.aa_in1kztf_efficientnet_b1.aa_in1kztf_efficientnet_b2.aa_in1kztf_efficientnet_b3.aa_in1kztf_efficientnet_b4.aa_in1kztf_efficientnet_b5.aa_in1kztf_efficientnet_b6.aa_in1kztf_efficientnet_b7.aa_in1kztf_efficientnet_b0.in1kztf_efficientnet_b1.in1kztf_efficientnet_b2.in1kztf_efficientnet_b3.in1kztf_efficientnet_b4.in1kztf_efficientnet_b5.in1kztf_efficientnet_es.in1kztf_efficientnet_em.in1kztf_efficientnet_el.in1kztf_efficientnet_cc_b0_4e.in1kztf_efficientnet_cc_b0_8e.in1kztf_efficientnet_cc_b1_8e.in1kztf_efficientnet_lite0.in1kztf_efficientnet_lite1.in1kztf_efficientnet_lite2.in1kztf_efficientnet_lite3.in1kztf_efficientnet_lite4.in1kú!tf_efficientnetv2_s.in21k_ft_in1kú!tf_efficientnetv2_m.in21k_ft_in1kú!tf_efficientnetv2_l.in21k_ft_in1kú"tf_efficientnetv2_xl.in21k_ft_in1kztf_efficientnetv2_s.in1kztf_efficientnetv2_m.in1kztf_efficientnetv2_l.in1kútf_efficientnetv2_s.in21kútf_efficientnetv2_m.in21kútf_efficientnetv2_l.in21kútf_efficientnetv2_xl.in21kztf_efficientnetv2_b0.in1kztf_efficientnetv2_b1.in1kztf_efficientnetv2_b2.in1kz"tf_efficientnetv2_b3.in21k_ft_in1kztf_efficientnetv2_b3.in1kztf_efficientnetv2_b3.in21kzmixnet_s.ft_in1kzmixnet_m.ft_in1kzmixnet_l.ft_in1kzmixnet_xl.ra_in1kzmixnet_xxl.untrainedztf_mixnet_s.in1kztf_mixnet_m.in1kztf_mixnet_l.in1kztinynet_a.in1kztinynet_b.in1kztinynet_c.in1kztinynet_d.in1kztinynet_e.in1kr}   c                 K   s   t dd| i|—Ž}|S )z& MNASNet B1, depth multiplier of 0.5. Úmnasnet_050r  rŒ   )r'  r  ©r¡   ©rŒ   r�   rŽ   rO   rO   rP   r'  �  s    r'  c                 K   s   t dd| i|—Ž}|S )z' MNASNet B1, depth multiplier of 0.75. Úmnasnet_075ç      è?rŒ   )r*  r+  r(  r)  rO   rO   rP   r*  –  s    r*  c                 K   s   t dd| i|—Ž}|S )z& MNASNet B1, depth multiplier of 1.0. Úmnasnet_100r�   rŒ   )r,  r�   r(  r)  rO   rO   rP   r,  �  s    r,  c                 K   s   t dd| i|—Ž}|S )z& MNASNet B1,  depth multiplier of 1.4 Úmnasnet_140çffffffö?rŒ   )r-  r.  r(  r)  rO   rO   rP   r-  ¤  s    r-  c                 K   s   t dd| i|—Ž}|S )z- MNASNet A1 (w/ SE), depth multiplier of 0.5 Úsemnasnet_050r  rŒ   )r/  r  ©r›   r)  rO   rO   rP   r/  «  s    r/  c                 K   s   t dd| i|—Ž}|S )z0 MNASNet A1 (w/ SE),  depth multiplier of 0.75. Úsemnasnet_075r+  rŒ   )r1  r+  r0  r)  rO   rO   rP   r1  ²  s    r1  c                 K   s   t dd| i|—Ž}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.0. Úsemnasnet_100r�   rŒ   )r2  r�   r0  r)  rO   rO   rP   r2  ¹  s    r2  c                 K   s   t dd| i|—Ž}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.4. Úsemnasnet_140r.  rŒ   )r3  r.  r0  r)  rO   rO   rP   r3  À  s    r3  c                 K   s   t dd| i|—Ž}|S )z* MNASNet Small,  depth multiplier of 1.0. Úmnasnet_smallr�   rŒ   )r4  r�   )r£   r)  rO   rO   rP   r4  Ç  s    r4  c                 K   s   t dd| i|—Ž}|S )z) MobileNet V2 w/ 0.35 channel multiplier Úmobilenetv2_035çffffffÖ?rŒ   )r5  r6  ©r©   r)  rO   rO   rP   r5  Î  s    r5  c                 K   s   t dd| i|—Ž}|S )z( MobileNet V2 w/ 0.5 channel multiplier Úmobilenetv2_050r  rŒ   )r8  r  r7  r)  rO   rO   rP   r8  Õ  s    r8  c                 K   s   t dd| i|—Ž}|S )z) MobileNet V2 w/ 0.75 channel multiplier Úmobilenetv2_075r+  rŒ   )r9  r+  r7  r)  rO   rO   rP   r9  Ü  s    r9  c                 K   s   t dd| i|—Ž}|S )z( MobileNet V2 w/ 1.0 channel multiplier Úmobilenetv2_100r�   rŒ   )r:  r�   r7  r)  rO   rO   rP   r:  ã  s    r:  c                 K   s   t dd| i|—Ž}|S )z( MobileNet V2 w/ 1.4 channel multiplier Úmobilenetv2_140r.  rŒ   )r;  r.  r7  r)  rO   rO   rP   r;  ê  s    r;  c                 K   s   t ddd| dœ|—Ž}|S )z3 MobileNet V2 w/ 1.1 channel, 1.2 depth multipliersÚmobilenetv2_110dçš™™™™™ñ?ç333333ó?T©r¤   r¨   rŒ   )r<  r=  r7  r)  rO   rO   rP   r<  ñ  s       ÿ  ÿÿr<  c                 K   s   t ddd| dœ|—Ž}|S )z4 MobileNet V2 w/ 1.2 channel, 1.4 depth multipliers Úmobilenetv2_120dr>  r.  Tr?  )r@  r>  r7  r)  rO   rO   rP   r@  ù  s       ÿ  ÿÿr@  c                 K   s&   | r|  dt¡ tdd| i|—Ž}|S )z	 FBNet-C Úbn_epsÚ
fbnetc_100r�   rŒ   )rB  r�   )Ú
setdefaultr   r¬   r)  rO   rO   rP   rB    s    rB  c                 K   s   t dd| i|—Ž}|S )z Single-Path NAS Pixel1Úspnasnet_100r�   rŒ   )rD  r�   )r­   r)  rO   rO   rP   rD    s    rD  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B0 Úefficientnet_b0r�   ©r˜   r¤   rŒ   )rE  ©r¹   r)  rO   rO   rP   rE    s     ÿ  ÿÿrE  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B1 Úefficientnet_b1r�   r=  rF  )rH  rG  r)  rO   rO   rP   rH    s     ÿ  ÿÿrH  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B2 Úefficientnet_b2r=  r>  rF  )rI  rG  r)  rO   rO   rP   rI  $  s     ÿ  ÿÿrI  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B3 Úefficientnet_b3r>  r.  rF  )rJ  rG  r)  rO   rO   rP   rJ  -  s     ÿ  ÿÿrJ  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B4 Úefficientnet_b4r.  çÍÌÌÌÌÌü?rF  )rK  rG  r)  rO   rO   rP   rK  6  s     ÿ  ÿÿrK  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B5 Úefficientnet_b5çš™™™™™ù?çš™™™™™@rF  )rM  rG  r)  rO   rO   rP   rM  ?  s     ÿ  ÿÿrM  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B6 Úefficientnet_b6rL  çÍÌÌÌÌÌ@rF  )rP  rG  r)  rO   rO   rP   rP  H  s     ÿ  ÿÿrP  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B7 Úefficientnet_b7ç       @çÍÌÌÌÌÌ@rF  )rR  rG  r)  rO   rO   rP   rR  Q  s     ÿ  ÿÿrR  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-B8 Úefficientnet_b8rO  çÍÌÌÌÌÌ@rF  )rU  rG  r)  rO   rO   rP   rU  Z  s     ÿ  ÿÿrU  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-L2.Úefficientnet_l2ç333333@ç333333@rF  )rW  rG  r)  rO   rO   rP   rW  c  s     ÿ  ÿÿrW  c                 K   s    t dttdd�| dœ|—Ž}|S )z EfficientNet-B0 + GroupNormÚefficientnet_b0_gnr¢   rµ   )r/   rŒ   )rZ  ©r¹   r   r   r)  rO   rO   rP   rZ  m  s     ÿ
 ÿÿrZ  c                 K   s"   t ddttdd�| dœ|—Ž}|S )z* EfficientNet-B0 w/ group conv + GroupNormÚefficientnet_b0_g8_gnr¢   rµ   )r¶   r/   rŒ   )r\  r[  r)  rO   rO   rP   r\  u  s     ÿ 
þþr\  c                 K   s   t ddd| dœ|—Ž}|S )z+ EfficientNet-B0 w/ group 16 conv + EvoNormÚefficientnet_b0_g16_evosr«   )r¶   r¸   rŒ   )r]  rG  r)  rO   rO   rP   r]  ~  s     ÿ þþr]  c              	   K   s&   t ddddttdd�| dœ|—Ž}|S )z EfficientNet-B3 w/ GroupNorm Úefficientnet_b3_gnr>  r.  r«   rµ   )r˜   r¤   r¸   r/   rŒ   )r^  r[  r)  rO   rO   rP   r^  ‡  s     ÿ  
 þþr^  c              
   K   s(   t dddddttdd�| dœ|—Ž}|S )	z% EfficientNet-B3 w/ grouped conv + BNÚefficientnet_b3_g8_gnr>  r.  r¢   r«   rµ   )r˜   r¤   r¶   r¸   r/   rŒ   )r_  r[  r)  rO   rO   rP   r_  ‘  s     ÿ   
 þþr_  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-Edge Small. Úefficientnet_esr�   rF  )r`  ©r¼   r)  rO   rO   rP   r`  ›  s     ÿ  ÿÿr`  c                 K   s   t ddd| dœ|—Ž}|S )zw EfficientNet-Edge Small Pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0Úefficientnet_es_prunedr�   rF  )rb  ra  r)  rO   rO   rP   rb  £  s     ÿ  ÿÿrb  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-Edge-Medium. Úefficientnet_emr�   r=  rF  )rc  ra  r)  rO   rO   rP   rc  ª  s     ÿ  ÿÿrc  c                 K   s   t ddd| dœ|—Ž}|S )z EfficientNet-Edge-Large. Úefficientnet_elr>  r.  rF  )rd  ra  r)  rO   rO   rP   rd  ²  s     ÿ  ÿÿrd  c                 K   s   t ddd| dœ|—Ž}|S )zw EfficientNet-Edge-Large pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0Úefficientnet_el_prunedr>  r.  rF  )re  ra  r)  rO   rO   rP   re  ¹  s     ÿ  ÿÿre  c                 K   s   t ddd| dœ|—Ž}|S )ú' EfficientNet-CondConv-B0 w/ 8 Experts Úefficientnet_cc_b0_4er�   rF  )rg  ©r¾   r)  rO   rO   rP   rg  À  s     ÿ  ÿÿrg  c                 K   s   t dddd| dœ|—Ž}|S )rf  Úefficientnet_cc_b0_8er�   r'   ©r˜   r¤   r½   rŒ   )ri  rh  r)  rO   rO   rP   ri  É  s     ÿ  þþri  c                 K   s   t dddd| dœ|—Ž}|S )z' EfficientNet-CondConv-B1 w/ 8 Experts Úefficientnet_cc_b1_8er�   r=  r'   rj  )rk  rh  r)  rO   rO   rP   rk  Ó  s     ÿ  þþrk  c                 K   s   t ddd| dœ|—Ž}|S )ú EfficientNet-Lite0 Úefficientnet_lite0r�   rF  )rm  ©rÂ   r)  rO   rO   rP   rm  Ý  s     ÿ  ÿÿrm  c                 K   s   t ddd| dœ|—Ž}|S )ú EfficientNet-Lite1 Úefficientnet_lite1r�   r=  rF  )rp  rn  r)  rO   rO   rP   rp  æ  s     ÿ  ÿÿrp  c                 K   s   t ddd| dœ|—Ž}|S )ú EfficientNet-Lite2 Úefficientnet_lite2r=  r>  rF  )rr  rn  r)  rO   rO   rP   rr  ï  s     ÿ  ÿÿrr  c                 K   s   t ddd| dœ|—Ž}|S )ú EfficientNet-Lite3 Úefficientnet_lite3r>  r.  rF  )rt  rn  r)  rO   rO   rP   rt  ø  s     ÿ  ÿÿrt  c                 K   s   t ddd| dœ|—Ž}|S )ú EfficientNet-Lite4 Úefficientnet_lite4r.  rL  rF  )rv  rn  r)  rO   rO   rP   rv    s     ÿ  ÿÿrv  c                 K   s:   |  dt¡ |  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  rA  r,   ÚsameÚefficientnet_b1_prunedr�   r=  T©r˜   r¤   ZprunedrŒ   ©rC  r   r¹   )rŒ   r�   r‹   rŽ   rO   rO   rP   rx  
  s    ÿ   ÿÿrx  c                 K   s4   |  dt¡ |  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 rA  r,   rw  Úefficientnet_b2_prunedr=  r>  Try  )r{  rz  r)  rO   rO   rP   r{    s     ÿ  þþr{  c                 K   s4   |  dt¡ |  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 rA  r,   rw  Úefficientnet_b3_prunedr>  r.  Try  )r|  rz  r)  rO   rO   rP   r|     s     ÿ  þþr|  c                 K   s   t dddd| dœ|—Ž}|S )z; EfficientNet-V2 Tiny (Custom variant, tiny not in paper). Úefficientnetv2_rw_tçš™™™™™é?r  F©r˜   r¤   rÇ   rŒ   )r}  ©rÈ   r)  rO   rO   rP   r}  +  s     ÿ   ÿÿr}  c                 K   s   t ddddd| dœ|—Ž}|S )zR EfficientNet-V2 Tiny w/ Global Context Attn (Custom variant, tiny not in paper). Úgc_efficientnetv2_rw_tr~  r  FÚgc)r˜   r¤   rÇ   r0   rŒ   )r�  r€  r)  rO   rO   rP   r�  3  s     ÿ   þþr�  c                 K   s   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
    Úefficientnetv2_rw_sT)rÇ   rŒ   )rƒ  r€  r)  rO   rO   rP   rƒ  <  s    rƒ  c                 K   s   t dddd| dœ|—Ž}|S )z* EfficientNet-V2 Medium (RW variant).
    Úefficientnetv2_rw_mr>  )r>  r>  r>  r>  rN  rN  Tr  )r„  r€  r)  rO   rO   rP   r„  F  s     ÿ  þþr„  c                 K   s   t dd| i|—Ž}|S )z EfficientNet-V2 Small. Úefficientnetv2_srŒ   )r…  r€  r)  rO   rO   rP   r…  P  s    r…  c                 K   s   t dd| i|—Ž}|S )z EfficientNet-V2 Medium. Úefficientnetv2_mrŒ   )r†  )rÊ   r)  rO   rO   rP   r†  W  s    r†  c                 K   s   t dd| i|—Ž}|S )z EfficientNet-V2 Large. Úefficientnetv2_lrŒ   )r‡  )rÌ   r)  rO   rO   rP   r‡  ^  s    r‡  c                 K   s   t dd| i|—Ž}|S )z EfficientNet-V2 Xtra-Large. Úefficientnetv2_xlrŒ   )rˆ  )rÍ   r)  rO   rO   rP   rˆ  e  s    rˆ  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )z1 EfficientNet-B0. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnet_b0r�   rF  )r‰  rz  r)  rO   rO   rP   r‰  l  s     ÿ  ÿÿr‰  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z1 EfficientNet-B1. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnet_b1r�   r=  rF  )rŠ  rz  r)  rO   rO   rP   rŠ  v  s     ÿ  ÿÿrŠ  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z1 EfficientNet-B2. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnet_b2r=  r>  rF  )r‹  rz  r)  rO   rO   rP   r‹  €  s     ÿ  ÿÿr‹  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z0 EfficientNet-B3. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_b3r>  r.  rF  )rŒ  rz  r)  rO   rO   rP   rŒ  Š  s     ÿ  ÿÿrŒ  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z0 EfficientNet-B4. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_b4r.  rL  rF  )r�  rz  r)  rO   rO   rP   r�  ”  s     ÿ  ÿÿr�  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z0 EfficientNet-B5. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_b5rN  rO  rF  )rŽ  rz  r)  rO   rO   rP   rŽ  ž  s     ÿ  ÿÿrŽ  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z0 EfficientNet-B6. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_b6rL  rQ  rF  )r�  rz  r)  rO   rO   rP   r�  ¨  s     ÿ  ÿÿr�  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z0 EfficientNet-B7. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_b7rS  rT  rF  )r�  rz  r)  rO   rO   rP   r�  ³  s     ÿ  ÿÿr�  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z0 EfficientNet-B8. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_b8rO  rV  rF  )r‘  rz  r)  rO   rO   rP   r‘  ¾  s     ÿ  ÿÿr‘  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z= EfficientNet-L2 NoisyStudent. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_l2rX  rY  rF  )r’  rz  r)  rO   rO   rP   r’  É  s     ÿ  ÿÿr’  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )z9 EfficientNet-Edge Small. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnet_esr�   rF  )r“  ©rC  r   r¼   r)  rO   rO   rP   r“  Ô  s     ÿ  ÿÿr“  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z: EfficientNet-Edge-Medium. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnet_emr�   r=  rF  )r•  r”  r)  rO   rO   rP   r•  Þ  s     ÿ  ÿÿr•  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z9 EfficientNet-Edge-Large. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnet_elr>  r.  rF  )r–  r”  r)  rO   rO   rP   r–  è  s     ÿ  ÿÿr–  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )zF EfficientNet-CondConv-B0 w/ 4 Experts. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_cc_b0_4er�   rF  )r—  ©rC  r   r¾   r)  rO   rO   rP   r—  ò  s     ÿ  ÿÿr—  c                 K   s4   |  dt¡ |  dd¡ tdddd| dœ|—Ž}|S )	zF EfficientNet-CondConv-B0 w/ 8 Experts. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_cc_b0_8er�   r'   rj  )r™  r˜  r)  rO   rO   rP   r™  ý  s     ÿ  þþr™  c                 K   s4   |  dt¡ |  dd¡ td	ddd| dœ|—Ž}|S )
zF EfficientNet-CondConv-B1 w/ 8 Experts. Tensorflow compatible variant rA  r,   rw  Útf_efficientnet_cc_b1_8er�   r=  r'   rj  )rš  r˜  r)  rO   rO   rP   rš  	  s     ÿ  þþrš  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )rl  rA  r,   rw  Útf_efficientnet_lite0r�   rF  )r›  ©rC  r   rÂ   r)  rO   rO   rP   r›    s     ÿ  ÿÿr›  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	ro  rA  r,   rw  Útf_efficientnet_lite1r�   r=  rF  )r�  rœ  r)  rO   rO   rP   r�     s     ÿ  ÿÿr�  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	rq  rA  r,   rw  Útf_efficientnet_lite2r=  r>  rF  )rž  rœ  r)  rO   rO   rP   rž  +  s     ÿ  ÿÿrž  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	rs  rA  r,   rw  Útf_efficientnet_lite3r>  r.  rF  )rŸ  rœ  r)  rO   rO   rP   rŸ  6  s     ÿ  ÿÿrŸ  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	ru  rA  r,   rw  Útf_efficientnet_lite4r.  rL  rF  )r   rœ  r)  rO   rO   rP   r   A  s     ÿ  ÿÿr   c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )z7 EfficientNet-V2 Small. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnetv2_srŒ   )r¡  )rC  r   rÈ   r)  rO   rO   rP   r¡  L  s    r¡  c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )z8 EfficientNet-V2 Medium. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnetv2_mrŒ   )r¢  )rC  r   rÊ   r)  rO   rO   rP   r¢  U  s    r¢  c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )z7 EfficientNet-V2 Large. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnetv2_lrŒ   )r£  )rC  r   rÌ   r)  rO   rO   rP   r£  ^  s    r£  c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )z? EfficientNet-V2 Xtra-Large. Tensorflow compatible variant
    rA  r,   rw  Útf_efficientnetv2_xlrŒ   )r¤  )rC  r   rÍ   r)  rO   rO   rP   r¤  g  s    r¤  c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )z4 EfficientNet-V2-B0. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnetv2_b0rŒ   )r¥  ©rC  r   rÄ   r)  rO   rO   rP   r¥  q  s    r¥  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z4 EfficientNet-V2-B1. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnetv2_b1r�   r=  rF  )r§  r¦  r)  rO   rO   rP   r§  z  s     ÿ  ÿÿr§  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z4 EfficientNet-V2-B2. Tensorflow compatible variant  rA  r,   rw  Útf_efficientnetv2_b2r=  r>  rF  )r¨  r¦  r)  rO   rO   rP   r¨  „  s     ÿ  ÿÿr¨  c                 K   s2   |  dt¡ |  dd¡ tddd| dœ|—Ž}|S )	z3 EfficientNet-V2-B3. Tensorflow compatible variant rA  r,   rw  Útf_efficientnetv2_b3r>  r.  rF  )r©  r¦  r)  rO   rO   rP   r©  Ž  s     ÿ  ÿÿr©  c                 K   s   t dd| dœ|—Ž}|S )z"Creates a MixNet Small model.
    Úmixnet_sr�   ©r˜   rŒ   )rª  )rÑ   r)  rO   rO   rP   rª  ˜  s     ÿ ÿÿrª  c                 K   s   t dd| dœ|—Ž}|S )z#Creates a MixNet Medium model.
    Úmixnet_mr�   r«  )r¬  ©rÔ   r)  rO   rO   rP   r¬  ¡  s     ÿ ÿÿr¬  c                 K   s   t dd| dœ|—Ž}|S )z"Creates a MixNet Large model.
    Úmixnet_lçÍÌÌÌÌÌô?r«  )r®  r­  r)  rO   rO   rP   r®  ª  s     ÿ ÿÿr®  c                 K   s   t ddd| dœ|—Ž}|S )zgCreates a MixNet Extra-Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    Ú	mixnet_xlrN  r>  rF  )r°  r­  r)  rO   rO   rP   r°  ³  s     ÿ  ÿÿr°  c                 K   s   t ddd| dœ|—Ž}|S )znCreates a MixNet Double Extra Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    Ú
mixnet_xxlg333333@r¯  rF  )r±  r­  r)  rO   rO   rP   r±  ½  s     ÿ  ÿÿr±  c                 K   s0   |  dt¡ |  dd¡ tdd| dœ|—Ž}|S )z@Creates a MixNet Small model. Tensorflow compatible variant
    rA  r,   rw  Útf_mixnet_sr�   r«  )r²  )rC  r   rÑ   r)  rO   rO   rP   r²  Ç  s     ÿ ÿÿr²  c                 K   s0   |  dt¡ |  dd¡ tdd| dœ|—Ž}|S )zACreates a MixNet Medium model. Tensorflow compatible variant
    rA  r,   rw  Útf_mixnet_mr�   r«  )r³  ©rC  r   rÔ   r)  rO   rO   rP   r³  Ò  s     ÿ ÿÿr³  c                 K   s0   |  dt¡ |  dd¡ tdd| dœ|—Ž}|S )z@Creates a MixNet Large model. Tensorflow compatible variant
    rA  r,   rw  Útf_mixnet_lr¯  r«  )rµ  r´  r)  rO   rO   rP   rµ  Ý  s     ÿ ÿÿrµ  c                 K   s   t dd| i|—Ž}|S )NÚ	tinynet_ar�   r>  rŒ   )r¶  r�   r>  ©rÕ   r)  rO   rO   rP   r¶  è  s    r¶  c                 K   s   t dd| i|—Ž}|S )NÚ	tinynet_br+  r=  rŒ   )r¸  r+  r=  r·  r)  rO   rO   rP   r¸  î  s    r¸  c                 K   s   t dd| i|—Ž}|S )NÚ	tinynet_cçHáz®Gá?ç333333ë?rŒ   )r¹  rº  r»  r·  r)  rO   rO   rP   r¹  ô  s    r¹  c                 K   s   t dd| i|—Ž}|S )NÚ	tinynet_drº  ç=
×£p=æ?rŒ   )r¼  rº  r½  r·  r)  rO   rO   rP   r¼  ú  s    r¼  c                 K   s   t dd| i|—Ž}|S )NÚ	tinynet_eçR¸…ëQà?ç333333ã?rŒ   )r¾  r¿  rÀ  r·  r)  rO   rO   rP   r¾   	  s    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&  )Ztf_efficientnet_b0_apZtf_efficientnet_b1_apZtf_efficientnet_b2_apZtf_efficientnet_b3_apZtf_efficientnet_b4_apZtf_efficientnet_b5_apZtf_efficientnet_b6_apZtf_efficientnet_b7_apZtf_efficientnet_b8_apZtf_efficientnet_b0_nsZtf_efficientnet_b1_nsZtf_efficientnet_b2_nsZtf_efficientnet_b3_nsZtf_efficientnet_b4_nsZtf_efficientnet_b5_nsZtf_efficientnet_b6_nsZtf_efficientnet_b7_nsZtf_efficientnet_l2_ns_475Ztf_efficientnet_l2_nsZtf_efficientnetv2_s_in21ft1kZtf_efficientnetv2_m_in21ft1kZtf_efficientnetv2_l_in21ft1kZtf_efficientnetv2_xl_in21ft1kZtf_efficientnetv2_s_in21kZtf_efficientnetv2_m_in21kZtf_efficientnetv2_l_in21kZtf_efficientnetv2_xl_in21kZefficientnet_b2aZefficientnet_b3aZ
mnasnet_a1Z
mnasnet_b1)F)r�   F)r�   F)r�   F)r�   r�   FF)r�   F)r�   F)r�   r�   r¢   NF)r�   r�   NF)r�   r�   r   F)r�   r�   F)r�   r�   F)r�   r�   NFF)r�   r�   F)r�   r�   F)r�   r�   F)r�   F)r�   r�   F)r�   r�   F)r$   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)ªrm   Ú	functoolsr   Útypingr   r^   Ztorch.nnr5   Ztorch.nn.functionalZ
functionalrg   Ztorch.utils.checkpointr   Z	timm.datar   r   r   r   Ztimm.layersr	   r
   r   r   Z_builderr   r   Z_efficientnet_blocksr   Z_efficientnet_builderr   r   r   r   r   r   r   Z	_featuresr   r   Z_manipulater   Ú	_registryr   r   r   Ú__all__ÚModuler   r   r�   r›   r¡   r£   r©   r¬   r­   r¹   r¼   r¾   rÂ   rÄ   rÈ   rÊ   rÌ   rÍ   rÑ   rÔ   rÕ   râ   Zdefault_cfgsr'  r*  r,  r-  r/  r1  r2  r3  r4  r5  r8  r9  r:  r;  r<  r@  rB  rD  rE  rH  rI  rJ  rK  rM  rP  rR  rU  rW  rZ  r\  r]  r^  r_  r`  rb  rc  rd  re  rg  ri  rk  rm  rp  rr  rt  rv  rx  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¾  rj   rO   rO   rO   rP   Ú<module>   s*	  %$}V$$      ÿ
$       þ
2      ÿ
       ÿ
*    ÿ
        ÿ
'!"    ÿ

þþþþýþþþþýýþ ý   ý   ý   ý   þ   þ   ÿ   ÿ   ÿ   ÿ   ÿ   ÿþ  ý  ýþ  ýþ  ÿ  ÿ  ÿ  ÿ   ü   ü   ü   ý   ý   ý   ý   ÿ   ÿ   ÿ   ÿý  ý  ý  ý  ý  ý  ý  ý  ý  ý  ý   ü   ü   ü   ü   ü   ü   ü   ü  ý  ý  ýý  ý  ý  ý  ý  ý  ý  ýý  ý  ý  ý  ý  ý ü   ü   ü ý ý   ü ü   û   û    ü    ü    ü     ü     ü     ü    ü     ü     ü     ü      ü      ü      ü  ý   ý   ý     ý   ý     ýþþþþþþþ ý ý ý ý ý€ € € € ÿ    						


								



			





						


á