Ë
    éÓ^jUP  ã                   óJ  — d Z ddl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ZddlmZ ddlmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$m%Z% dgZ& eeejN                  ¬«      Z( G d„ dejR                  «      Z*	 	 	 	 	 	 d;de+de+de,de,de+de,dee
e,e+e,e+f      fd„Z-	 	 	 	 	 	 	 d<dee
e,e+e,e+f      de,de+de,de,de.de.d e+de
eejR                     eee.ef      f   fd!„Z/ G d"„ dejR                  «      Z0d#e.d$e1de0fd%„Z2d=d&e.dee.ef   fd'„Z3 e$ e3d(¬)«       e3d(¬)«       e3d(¬)«       e3d(¬)«       e3d(¬)«       e3«        e3«        e3«        e3d(d*dd+d,¬-«       e3d(d*dd+d,¬-«       e3d(d.d*dd+d,¬/«       e3d(d.d*dd+d,¬/«      d0œ«      Z4e%d>d$e1de0fd1„«       Z5e%d>d$e1de0fd2„«       Z6e%d>d$e1de0fd3„«       Z7e%d>d$e1de0fd4„«       Z8e%d>d$e1de0fd5„«       Z9e%d>d$e1de0fd6„«       Z:e%d>d$e1de0fd7„«       Z;e%d>d$e1de0fd8„«       Z<e%d>d$e1de0fd9„«       Z=e%d>d$e1de0fd:„«       Z>y)?a…   ReXNet

A PyTorch impl of `ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network` -
https://arxiv.org/abs/2007.00992

Adapted from original impl at https://github.com/clovaai/rexnet
Copyright (c) 2020-present NAVER Corp. MIT license

Changes for timm, feature extraction, and rounded channel variant hacked together by Ross Wightman
Copyright 2020 Ross Wightman
é    )Úpartial)Úceil)ÚAnyÚDictÚListÚOptionalÚTupleÚTypeÚUnionN©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚClassifierHeadÚcreate_act_layerÚConvNormActÚDropPathÚmake_divisibleÚSEModuleé   )Úbuild_model_with_cfg)Úefficientnet_init_weights)Úfeature_take_indices)Ú
checkpointÚcheckpoint_seq)Úgenerate_default_cfgsÚregister_modelÚRexNet)Ú
norm_layerc                   óÎ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 ddedededeeef   dededed	ed
edee	j                     fˆ fd„Zddedefd„Zdej                  dej                  fd„Zˆ xZS )ÚLinearBottleneckz‡Linear bottleneck block for ReXNet.

    A mobile inverted residual bottleneck block as used in MobileNetV2 and subsequent models.
    Úin_chsÚout_chsÚstrideÚdilationÚ	exp_ratioÚse_ratioÚch_divÚ	act_layerÚdw_act_layerÚ	drop_pathc           
      óö  •— ||dœ}t         ‰| �  «        |dk(  xr |d   |d   k(  xr ||k  | _        || _        || _        |dk7  r.t        t        ||z  «      |¬«      }t        ||fd|i|¤Ž| _        n	|}d| _        t        ||fd||d   |d	d
œ|¤Ž| _	        |dkD  r*t        |fdt        t        ||z  «      |«      i|¤Ž| _        nd| _        t        |	«      | _        t        ||dfdd	i|¤Ž| _        |
| _        y)aþ  Initialize LinearBottleneck.

        Args:
            in_chs: Number of input channels.
            out_chs: Number of output channels.
            stride: Stride for depthwise conv.
            dilation: Dilation rates.
            exp_ratio: Expansion ratio.
            se_ratio: Squeeze-excitation ratio.
            ch_div: Channel divisor.
            act_layer: Activation layer for expansion.
            dw_act_layer: Activation layer for depthwise.
            drop_path: Drop path module.
        ©ÚdeviceÚdtyper   r   ç      ð?©Údivisorr(   Né   F)Úkernel_sizer#   r$   ÚgroupsÚ	apply_actÚrd_channelsr5   )ÚsuperÚ__init__Úuse_shortcutÚin_channelsÚout_channelsr   Úroundr   Úconv_expÚconv_dwÚ
SEWithNormÚintÚser   Úact_dwÚconv_pwlr*   )Úselfr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r-   r.   ÚddÚdw_chsÚ	__class__s                  €ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/rexnet.pyr8   zLinearBottleneck.__init__(   s1  ø€ ð: ¨Ñ/ˆÜ‰ÑÔØ" a™KÒ\¨H°Q©K¸8ÀA¹;Ñ,FÒ\È6ÐU\ÑK\ˆÔØ!ˆÔØ#ˆÔà˜Š?Ü#¤E¨&°9Ñ*<Ó$=ÀvÔNˆFÜ'¨°ÑRÀ)ÐRÈrÑRˆD�MàˆFØ ˆDŒMä"ØØð	
ð ØØ˜a‘[ØØñ	
ð ñ	
ˆŒð �aŠ<Ü  Ñj´^ÄCÈÐQYÑHYÓDZÐ\bÓ5cÐjÐgiÑjˆD�GàˆDŒGÜ& |Ó4ˆŒä# F¨G°QÑNÀ%ÐNÈ2ÑNˆŒØ"ˆ�ó    ÚexpÚreturnc                 óJ   — |r| j                   j                  S | j                  S )zŸGet feature channel count.

        Args:
            exp: Return expanded channels if True.

        Returns:
            Number of feature channels.
        )r>   r;   )rD   rJ   s     rH   Úfeat_channelszLinearBottleneck.feat_channelse   s!   € ñ -0ˆt�|‰|×(Ñ(ÐF°T×5FÑ5FÐFrI   Úxc                 óº  — |}| j                   �| j                  |«      }| j                  |«      }| j                  �| j                  |«      }| j                  |«      }| j	                  |«      }| j
                  r_| j                  �| j                  |«      }t        j                  |dd…d| j                  …f   |z   |dd…| j                  d…f   gd¬«      }|S )zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output tensor.
        Nr   r   )Údim)
r=   r>   rA   rB   rC   r9   r*   ÚtorchÚcatr:   )rD   rN   Úshortcuts      rH   ÚforwardzLinearBottleneck.forwardp   sÉ   € ð ˆØ�=‰=Ð$Ø—‘˜aÓ ˆAØ�L‰L˜‹OˆØ�7‰7ÐØ—‘˜“
ˆAØ�K‰K˜‹NˆØ�M‰M˜!ÓˆØ×ÒØ�~‰~Ð)Ø—N‘N 1Ó%�Ü—	‘	˜1šQ  $×"2Ñ"2Ð 2Ð2Ñ3°hÑ>ÀÂ!ÀT×EUÑEUÑEVÐBVÑ@WÐXÐ^_Ô`ˆAØˆrI   )	)r   r   r/   ç        r   ÚswishÚrelu6NNN©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r@   r	   ÚfloatÚstrr   ÚnnÚModuler8   ÚboolrM   rQ   ÚTensorrT   Ú__classcell__©rG   s   @rH   r    r    "   sÏ   ø„ ñð )/Ø"Ø ØØ$Ø 'Ø-1ØØñ;#àð;#ð ð;#ð ð	;#ð
 ˜C ˜H‘oð;#ð ð;#ð ð;#ð ð;#ð ð;#ð ð;#ð   §	¡	Ñ*õ;#ñz	G ð 	G°#ó 	Gð˜Ÿ™ð ¨%¯,©,÷ rI   r    r/   Ú
width_multÚ
depth_multÚinitial_chsÚ	final_chsr&   r'   rK   c           
      óD  — g d¢}g d¢}|D �cg c]  }t        ||z  «      ‘Œ }}t        t        |«      D �	�cg c]  \  }	}|gdg||	   dz
  z  z   ‘Œ c}}	g «      }dg|d   z  dgt        |dd «      z  z   }
t        |dd «      dz  }| dk  r|| z  n|}g }t        |dz  «      D ]8  }|j	                  t        t        || z  «      |¬	«      «       |||dz  dz  z  z  }Œ: d
g|d   |d   z   z  |gt        |dd «      z  z   }t        t        ||
||«      «      S c c}w c c}}	w )as  Generate ReXNet block configuration.

    Args:
        width_mult: Width multiplier.
        depth_mult: Depth multiplier.
        initial_chs: Initial channel count.
        final_chs: Final channel count.
        se_ratio: Squeeze-excitation ratio.
        ch_div: Channel divisor.

    Returns:
        List of tuples (out_channels, exp_ratio, stride, se_ratio).
    )r   é   rj   r2   r2   é   )r   rj   rj   rj   r   rj   r   r   é   Nr2   r/   r0   rU   rj   )	r   ÚsumÚ	enumerateÚrangeÚappendr   r<   ÚlistÚzip)re   rf   rg   rh   r&   r'   ÚlayersÚstridesÚelementÚidxÚ
exp_ratiosÚdepthÚbase_chsÚout_chs_listÚiÚ	se_ratioss                   rH   Ú
_block_cfgr}   ˆ   sT  € ò*  €FÚ €GØ8>Ö?¨WŒd�7˜ZÑ'Õ(Ð?€FÐ?ÜÌ9ÐU\ÓK]×^¹<¸3À�G�9 ˜s f¨S¡k°A¡oÑ6Ó6Ó^Ð`bÓc€GØ��v˜a‘y‘ A 3¬¨V°A°B¨Z«Ñ#8Ñ8€JÜ�‘q�	‹N˜QÑ€EØ+5¸Ò+;ˆ{˜ZÒ'À€Hð €LÜ�5˜A‘:Óò 3ˆØ×ÑœN¬5°¸JÑ1FÓ+GÐQWÔXÔYØ�I ¨!¡¨cÑ!1Ñ2Ñ2‰ð3ð �˜˜q™	 F¨1¡IÑ-Ñ.°(°¼cÀ&ÈÈÀ*»oÑ1MÑM€Iä”�L *¨g°yÓAÓBÐBùò @ùÛ^s
   �D·D
Ú	block_cfgÚprev_chsÚoutput_strider(   r)   Údrop_path_ratec
                 óJ  — ||	dœ}
|g}g }d}d}g }t        | «      }t        | «      D ]¥  \  }\  }}}}|}|dkD  r0|dk(  rdnd|dz
  › �}|t        |d   ||¬«      gz  }||k\  r||z  }d}||z  |dz
  z  }|d	kD  rt        |«      nd
}|j	                  t        d||||||f|||||dœ
|
¤Ž«       ||z  }|}|}||d   j                  «       gz  }Œ§ t        d|z  |¬«      }|t        |d   |dt        |«      dz
  › �¬«      gz  }|j	                  t        ||fd|i|
¤Ž«       ||fS )aÎ  Build ReXNet blocks from configuration.

    Args:
        block_cfg: Block configuration list.
        prev_chs: Previous channel count.
        width_mult: Width multiplier.
        ch_div: Channel divisor.
        output_stride: Target output stride.
        act_layer: Activation layer name.
        dw_act_layer: Depthwise activation layer name.
        drop_path_rate: Drop path rate.

    Returns:
        Tuple of (features list, feature_info list).
    r,   rj   r   r   Ústemz	features.éÿÿÿÿ)Únum_chsÚ	reductionÚmodulerU   N)
r!   r"   r%   r#   r$   r&   r'   r(   r)   r*   i   r0   r(   © )	Úlenrn   Údictr   rp   r    rM   r   r   )r~   r   re   r'   r€   r(   r)   r�   r-   r.   rE   Úfeat_chsÚfeature_infoÚcurr_strider$   ÚfeaturesÚ
num_blocksÚ	block_idxÚchsr%   r#   r&   Únext_dilationÚfnameÚ	block_dprr*   Úpen_chss                              rH   Ú_build_blocksr–   °   s°  € ð6  UÑ	+€BØˆz€HØ€LØ€KØ€HØ€HÜ�Y“€JÜ9BÀ9Ó9Mò 3Ñ5ˆ	Ñ5�C˜ F¨HØ ˆØ�AŠ:Ø'¨1šn‘F°I¸iÈ!¹m¸_Ð2MˆEØœT¨(°2©,À+ÐV[Ô\Ð]Ñ]ˆLØ˜mÒ+Ø (¨6Ñ 1�Ø�Ø" YÑ.°*¸q±.ÑAˆ	Ø+4°rª>”H˜YÔ'¸tˆ	Ø�‰Ô(ð 
ØØØØØ Ð.ØØØØ%Øñ
ð ñ
ô 	ð 	�vÑˆØ ˆØˆØ�X˜b‘\×/Ñ/Ó1Ð2Ñ2‰ð53ô6 ˜T JÑ.¸Ô?€GØ”T (¨2¡,¸+ÐPYÔZ]Ð^fÓZgÐjkÑZkÐYlÐNmÔnÐoÑo€LØ‡O�O”K ¨'ÑM¸YÐMÈ"ÑMÔNØ�\Ð!Ð!rI   c                   ó  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'dedededededed	ed
ededededededefˆ fd„Zej                  j                  d(dedeeef   fd„«       Zej                  j                  d)deddfd„«       Zej                  j                  dej"                  fd„«       Zd*dedee   ddfd„Z	 	 	 	 	 d+dej*                  deeeee   f      dededededeeej*                     eej*                  eej*                     f   f   fd„Z	 	 	 d,deeee   f   d ed!edee   fd"„Zdej*                  dej*                  fd#„Zd(dej*                  d$edej*                  fd%„Zdej*                  dej*                  fd&„Zˆ xZS )-r   z¦ReXNet model architecture.

    Based on `ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network`
    - https://arxiv.org/abs/2007.00992
    NÚin_chansÚnum_classesÚglobal_poolr€   rg   rh   re   rf   r&   r'   r(   r)   Ú	drop_rater�   c           
      óò  •— t         ‰| �  «        ||dœ}|| _        || _        || _        d| _        |dv sJ ‚|dk  rd|z  nd}t        t        ||z  «      |
¬«      }t        ||dfd|d	œ|¤Ž| _	        t        |||||	|
«      }t        ||||
||||fi |¤Ž\  }| _        |d
   j                  x| _        | _        t!        j"                  |Ž | _        t'        | j                  |||fi |¤Ž| _        t+        | «       y)a°  Initialize ReXNet.

        Args:
            in_chans: Number of input channels.
            num_classes: Number of classes for classification.
            global_pool: Global pooling type.
            output_stride: Output stride.
            initial_chs: Initial channel count.
            final_chs: Final channel count.
            width_mult: Width multiplier.
            depth_mult: Depth multiplier.
            se_ratio: Squeeze-excitation ratio.
            ch_div: Channel divisor.
            act_layer: Activation layer name.
            dw_act_layer: Depthwise activation layer name.
            drop_rate: Dropout rate.
            drop_path_rate: Drop path rate.
        r,   F)é    é   é   r/   r�   r0   r2   rj   )r#   r(   r„   N)r7   r8   r™   r˜   r›   Úgrad_checkpointingr   r<   r   rƒ   r}   r–   rŒ   r;   Únum_featuresÚhead_hidden_sizer_   Ú
SequentialrŽ   r   Úheadr   )rD   r˜   r™   rš   r€   rg   rh   re   rf   r&   r'   r(   r)   r›   r�   r-   r.   rE   Ústem_base_chsÚstem_chsr~   rŽ   rG   s                         €rH   r8   zRexNet.__init__ú   s(  ø€ ôJ 	‰ÑÔØ¨Ñ/ˆØ&ˆÔØ ˆŒØ"ˆŒØ"'ˆÔà Ñ+Ð+Ð+Ø+5¸Ò+;˜˜ZšÀˆÜ!¤%¨¸
Ñ(BÓ"CÈVÔTˆÜ ¨(°AÐ[¸aÈ9Ñ[ÐXZÑ[ˆŒ	ä˜z¨:°{ÀIÈxÐY_Ó`ˆ	Ü&3ØØØØØØØØñ
'
ð ñ
'
Ñ#ˆ�$Ô#ð 5=¸R±L×4MÑ4MÐMˆÔ˜DÔ1ÜŸ™ xÐ0ˆŒä" 4×#4Ñ#4°kÀ;ÐPYÑ`Ð]_Ñ`ˆŒ	ä! $Õ'rI   ÚcoarserK   c                 ó    — t        dd¬«      }|S )z¯Group matcher for parameter groups.

        Args:
            coarse: Whether to use coarse grouping.

        Returns:
            Dictionary of grouped parameters.
        z^stemz^features\.(\d+))rƒ   Úblocks)rŠ   )rD   r§   Úmatchers      rH   Úgroup_matcherzRexNet.group_matcher>  s   € ô ØØ&ô
ˆð ˆrI   Úenablec                 ó   — || _         y)zEnable or disable gradient checkpointing.

        Args:
            enable: Whether to enable gradient checkpointing.
        N)r    )rD   r¬   s     rH   Úset_grad_checkpointingzRexNet.set_grad_checkpointingN  s   € ð #)ˆÕrI   c                 ó.   — | j                   j                  S )zTGet the classifier module.

        Returns:
            Classifier module.
        )r¤   Úfc)rD   s    rH   Úget_classifierzRexNet.get_classifierW  s   € ð �y‰y�|‰|ÐrI   c                 óö   — || _         |€|�R||dœ}|�|n| j                  j                  j                  }t	        | j
                  ||| j                  fi |¤Ž| _        y| j                  j                  ||«       y)zšReset the classifier.

        Args:
            num_classes: Number of classes for new classifier.
            global_pool: Global pooling type.
        Nr,   )r™   r¤   rš   Ú	pool_typer   r¡   r›   Úreset)rD   r™   rš   r-   r.   rE   r³   s          rH   Úreset_classifierzRexNet.reset_classifier`  st   € ð 'ˆÔØÐ Ð!2Ø"¨UÑ3ˆBØ'2Ð'>™ÀDÇIÁI×DYÑDY×DcÑDcˆIÜ& t×'8Ñ'8¸+ÀyÐRV×R`ÑR`ÑgÐdfÑgˆD�Ià�I‰I�O‰O˜K¨Õ5rI   rN   ÚindicesÚnormÚ
stop_earlyÚ
output_fmtÚintermediates_onlyc                 ó|  — |dv sJ d«       ‚g }| j                   D �cg c]"  }t        |d   j                  d«      d   «      ‘Œ$ }	}t        t	        |	«      |«      \  }
}|
D �cg c]  }|	|   ‘Œ	 }
}|	|   }| j                  |«      }t        j                  j                  «       s|s| j                  }n| j                  d|dz    }t        |«      D ]Z  \  }}| j                  r+t        j                  j                  «       st        ||«      }n ||«      }||
v sŒJ|j                  |«       Œ\ |r|S ||fS c c}w 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
        Returns:

        )ÚNCHWzOutput shape must be NCHW.r‡   ú.r„   Nr   )rŒ   r@   Úsplitr   r‰   rƒ   rQ   ÚjitÚis_scriptingrŽ   rn   r    r   rp   )rD   rN   r¶   r·   r¸   r¹   rº   ÚintermediatesÚinfoÚ
stage_endsÚtake_indicesÚ	max_indexr{   ÚstagesÚfeat_idxÚstages                   rH   Úforward_intermediateszRexNet.forward_intermediateso  s=  € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆØEI×EVÑEVÖW¸T”c˜$˜x™.×.Ñ.¨sÓ3°BÑ7Õ8ÐWˆ
ÐWÜ"6´s¸:³ÈÓ"PÑˆ�iØ/;Ö<¨!˜
 1›Ð<ˆÐ<Ø˜yÑ)ˆ	ð �I‰I�a‹LˆÜ�9‰9×!Ñ!Ô#©:Ø—]‘]‰Fà—]‘] > I°¡MÐ2ˆFä(¨Ó0ò 	(‰OˆH�eØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ˜u aÓ(‘á˜!“H�Ø˜<Ò'Ø×$Ñ$ QÕ'ð	(ñ Ø Ð à�-ÐÐùò/ Xùâ<s   œ'D4Á!D9Ú
prune_normÚ
prune_headc                 ó  — | j                   D �cg c]"  }t        |d   j                  d«      d   «      ‘Œ$ }}t        t	        |«      |«      \  }}||   }| j
                  d|dz    | _        |r| j                  dd«       |S c c}w )aE  Prune layers not required for specified intermediates.

        Args:
            indices: Indices of intermediate layers to keep.
            prune_norm: Whether to prune normalization layer.
            prune_head: Whether to prune the classifier head.

        Returns:
            List of indices that were kept.
        r‡   r½   r„   Nr   r   Ú )rŒ   r@   r¾   r   r‰   rŽ   rµ   )rD   r¶   rÊ   rË   rÂ   rÃ   rÄ   rÅ   s           rH   Úprune_intermediate_layersz RexNet.prune_intermediate_layersŸ  sŒ   € ð  FJ×EVÑEVÖW¸T”c˜$˜x™.×.Ñ.¨sÓ3°BÑ7Õ8ÐWˆ
ÐWÜ"6´s¸:³ÈÓ"PÑˆ�iØ˜yÑ)ˆ	ØŸ™ n y°1¡}Ð5ˆŒÙØ×!Ñ! ! RÔ(ØÐùò Xs   �'Bc                 óÎ   — | j                  |«      }| j                  r6t        j                  j	                  «       st        | j                  |«      }|S | j                  |«      }|S )z’Forward pass through feature extraction layers.

        Args:
            x: Input tensor.

        Returns:
            Feature tensor.
        )rƒ   r    rQ   r¿   rÀ   r   rŽ   ©rD   rN   s     rH   Úforward_featureszRexNet.forward_features·  sU   € ð �I‰I�a‹LˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ}™}¨aÓ0ˆAð ˆð —‘˜aÓ ˆAØˆrI   Ú
pre_logitsc                 óN   — |r| j                  ||¬«      S | j                  |«      S )zÕForward pass through head.

        Args:
            x: Input features.
            pre_logits: Return features before final linear layer.

        Returns:
            Classification logits or features.
        )rÒ   )r¤   )rD   rN   rÒ   s      rH   Úforward_headzRexNet.forward_headÇ  s(   € ñ 7Aˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRrI   c                 óJ   — | j                  |«      }| j                  |«      }|S )zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output logits.
        )rÑ   rÔ   rÐ   s     rH   rT   zRexNet.forwardÓ  s)   € ð ×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆrI   )r2   éè  Úavgr�   rž   é´   r/   r/   gUUUUUUµ?r   rV   rW   gš™™™™™É?rU   NNrX   )T)NNN)NFFr¼   F)r   FT)rY   rZ   r[   r\   r@   r^   r]   r8   rQ   r¿   Úignorera   r   r   r«   r®   r_   r`   r±   r   rµ   rb   r   r   r	   rÉ   rÎ   rÑ   rÔ   rT   rc   rd   s   @rH   r   r   ó   s¿  ø„ ñð Ø#Ø$Ø!#Ø!Ø Ø #Ø #Ø#ØØ$Ø 'Ø"Ø$&ØØñ#B(àðB(ð ðB(ð ð	B(ð
 ðB(ð ðB(ð ðB(ð ðB(ð ðB(ð ðB(ð ðB(ð ðB(ð ðB(ð ðB(ð "õB(ðH ‡Y�Y×Ññ Dð °T¸#¸s¸(±^ò ó ðð ‡Y�Y×Ññ)¨Tð )¸Tò )ó ð)ð ‡Y�Y×Ñð §	¡	ò ó ðñ6¨Cð 6¸hÀs¹mð 6Ðptó 6ð$ 8<ØØ$Ø$Ø',ñ. à�|‰|ð. ð ˜e C¨¨c© NÑ3Ñ4ð. ð ð	. ð
 ð. ð ð. ð !%ð. ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó. ðd ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ð	ð
 
ˆc‰óð0 %§,¡,ð °5·<±<ó ñ 
S˜eŸl™lð 
S¸ð 
SÈÏÉó 
Sð˜Ÿ™ð ¨%¯,©,÷ rI   ÚvariantÚ
pretrainedc                 óB   — t        d¬«      }t        t        | |fd|i|¤ŽS )zÓCreate a ReXNet model.

    Args:
        variant: Model variant name.
        pretrained: Load pretrained weights.
        **kwargs: Additional model arguments.

    Returns:
        ReXNet model instance.
    T)Úflatten_sequentialÚfeature_cfg)rŠ   r   r   )rÚ   rÛ   ÚkwargsrÞ   s       rH   Ú_create_rexnetrà   á  s8   € ô ¨$Ô/€KÜÜØØñð  ð	ð
 ñð rI   Úurlc                 ó2   — | dddddt         t        dddd	œ|¥S )
z»Create default configuration dictionary.

    Args:
        url: Model weight URL.
        **kwargs: Additional configuration options.

    Returns:
        Configuration dictionary.
    rÖ   )r2   éà   rã   )é   rä   g      ì?Úbicubicz	stem.convzhead.fcÚmit)rá   r™   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdÚ
first_convÚ
classifierÚlicenser   )rá   rß   s     rH   Ú_cfgrð   ö  s5   € ð  4°}ÐSYØ¨IÜ%Ô.BØ!°Øñð
 #ðð rI   ztimm/)Ú	hf_hub_idgffffffî?)r2   é   rò   z
apache-2.0)rñ   ré   Útest_crop_pctÚtest_input_sizerï   i-.  )rñ   r™   ré   ró   rô   rï   )zrexnet_100.nav_in1kzrexnet_130.nav_in1kzrexnet_150.nav_in1kzrexnet_200.nav_in1kzrexnet_300.nav_in1kzrexnetr_100.untrainedzrexnetr_130.untrainedzrexnetr_150.untrainedzrexnetr_200.sw_in12k_ft_in1kzrexnetr_300.sw_in12k_ft_in1kzrexnetr_200.sw_in12kzrexnetr_300.sw_in12kc                 ó   — t        d| fi |¤ŽS )zReXNet V1 1.0xÚ
rexnet_100©rà   ©rÛ   rß   s     rH   rö   rö   #  s   € ô ˜,¨
Ñ=°fÑ=Ð=rI   c                 ó    — t        d| fddi|¤ŽS )zReXNet V1 1.3xÚ
rexnet_130re   çÍÌÌÌÌÌô?r÷   rø   s     rH   rú   rú   )  ó   € ô ˜,¨
ÑM¸sÐMÀfÑMÐMrI   c                 ó    — t        d| fddi|¤ŽS )zReXNet V1 1.5xÚ
rexnet_150re   ç      ø?r÷   rø   s     rH   rþ   rþ   /  rü   rI   c                 ó    — t        d| fddi|¤ŽS )zReXNet V1 2.0xÚ
rexnet_200re   ç       @r÷   rø   s     rH   r  r  5  rü   rI   c                 ó    — t        d| fddi|¤ŽS )zReXNet V1 3.0xÚ
rexnet_300re   ç      @r÷   rø   s     rH   r  r  ;  rü   rI   c                 ó    — t        d| fddi|¤ŽS )z*ReXNet V1 1.0x w/ rounded (mod 8) channelsÚrexnetr_100r'   rŸ   r÷   rø   s     rH   r  r  A  s   € ô ˜-¨ÑH¸AÐHÀÑHÐHrI   c                 ó"   — t        d| fdddœ|¤ŽS )z*ReXNet V1 1.3x w/ rounded (mod 8) channelsÚrexnetr_130rû   rŸ   ©re   r'   r÷   rø   s     rH   r	  r	  G  ó   € ô ˜-¨ÐXÀÈAÑXÐQWÑXÐXrI   c                 ó"   — t        d| fdddœ|¤ŽS )z*ReXNet V1 1.5x w/ rounded (mod 8) channelsÚrexnetr_150rÿ   rŸ   r
  r÷   rø   s     rH   r  r  M  r  rI   c                 ó"   — t        d| fdddœ|¤ŽS )z*ReXNet V1 2.0x w/ rounded (mod 8) channelsÚrexnetr_200r  rŸ   r
  r÷   rø   s     rH   r  r  S  r  rI   c                 ó"   — t        d| fdddœ|¤ŽS )z+ReXNet V1 3.0x w/ rounded (mod 16) channelsÚrexnetr_300r  rž   r
  r÷   rø   s     rH   r  r  Y  s   € ô ˜-¨ÐYÀÈBÑYÐRXÑYÐYrI   )r/   r/   rž   rØ   rU   r   )r   r�   rV   rW   rU   NN)rÍ   rX   )?r\   Ú	functoolsr   Úmathr   Útypingr   r   r   r   r	   r
   r   rQ   Útorch.nnr_   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   Ú_builderr   Ú_efficientnet_builderr   Ú	_featuresr   Ú_manipulater   r   Ú	_registryr   r   Ú__all__ÚBatchNorm2dr?   r`   r    r]   r@   r}   r^   r–   r   ra   rà   rð   Údefault_cfgsrö   rú   rþ   r  r  r  r	  r  r  r  rˆ   rI   rH   ú<module>r      s÷  ðñ
õ Ý ß @× @Ñ @ã Ý ç Aß i× iÝ *Ý <Ý +ß 3ß <àˆ*€ñ �X¨"¯.©.Ô9€
ôc�r—y‘yô cðN  ØØØØØñ%CØð%Càð%Cð ð%Cð ð	%Cð
 ð%Cð ð%Cð 
ˆ%��U˜C Ð&Ñ
'Ñ(ó%CðX ØØ Ø#Ø "ØØñ@"Ø˜˜c 5¨#¨uÐ4Ñ5Ñ6ð@"àð@"ð ð@"ð ð	@"ð
 ð@"ð ð@"ð ð@"ð ð@"ð ˆ4�—	‘	‰?˜D  c¨3 h¡Ñ0Ð0Ñ1ó@"ôFkˆR�Y‰Yô kð\˜Cð ¨Tð Àó ñ*ˆcð  T¨#¨s¨(¡^ó ñ& %Ù¨'Ô2Ù¨'Ô2Ù¨'Ô2Ù¨'Ô2Ù¨'Ô2Ù!›VÙ!›VÙ!›VÙ$(ØØ S¸-ÐQ]ô%_ñ %)ØØ S¸-ÐQ]ô%_ñ !ØØØ S¸-ÐQ]ô_ñ !ØØØ S¸-ÐQ]ô_ñ'&ó €ð4 ñ>˜4ð >°fò >ó ð>ð
 ñN˜4ð N°fò Nó ðNð
 ñN˜4ð N°fò Nó ðNð
 ñN˜4ð N°fò Nó ðNð
 ñN˜4ð N°fò Nó ðNð
 ñI˜Dð I°vò Ió ðIð
 ñY˜Dð Y°vò Yó ðYð
 ñY˜Dð Y°vò Yó ðYð
 ñY˜Dð Y°vò Yó ðYð
 ñZ˜Dð Z°vò Zó ñZrI   