Ë
    éÓ^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mZmZ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'm(Z(m)Z) ddl*m+Z+m,Z,m-Z- dgZ. G d„ dej^                  «      Z0 G d„ dej^                  «      Z1 G d„ dej^                  «      Z2 G d„ dej^                  «      Z3 G d„ dej^                  «      Z4 G d„ dej^                  «      Z5de6de7fd„Z8ddde eed ¬!«      ddfd"e9d#e9de6d$e7d%ed&edejt                  fd'„Z; G d(„ dej^                  «      Z<dwd)ej^                  d*e6d+e7ddfd,„Z= ej|                  «       dxd-ej^                  d.e6d/e6fd0„«       Z?dyd1e6d2e7d3ede<fd4„Z@dyd1e6d2e7d3ede<fd5„ZAdzd6e6d3edee6ef   fd7„ZB e+i d8 eBd9d:d¬;«      “d< eBd9d:d¬;«      “d= eBd9d>d?d@d:d¬A«      “dB eBd9dCdDd@d¬E«      “dF eBd9dCdDd@d¬E«      “dG eBd9dCdDd@d¬E«      “dH eBd9dCdDd@d¬E«      “dI eBd9dCdDd@d¬E«      “dJ eBd9dKdLd@d¬E«      “dM eBd9dNd¬O«      “dP eBd9dNd¬O«      “dQ eBd9dNd¬O«      “dR eBd9dNd¬O«      “dS eBd9dNd¬O«      “dT eBd9dNd¬O«      “dU eBd9d:dVdWd@¬X«      “dY eBd9d:dVdWd@dZ¬[«      “ eBd9d:dVdWd@¬X«       eBd9d:dVdWd@dZ¬[«       eBd9d@d>d?dCd:dZ¬\«       eBd9d:d]dWd@¬X«       eBd:dZ¬^«       eBd:dZ¬^«       eBd9d:d]dWd@¬X«       eBd:dZ¬^«       eBd:¬_«       eBd:dZ¬^«       eBd9d:dZd]dWd@¬`«       eBd9d:dZd]dWd@¬`«       eBd:dZ¬^«      daœ¥«      ZCe,dyd2e7d3ede<fdb„«       ZDe,dyd2e7d3ede<fdc„«       ZEe,dyd2e7d3ede<fdd„«       ZFe,dyd2e7d3ede<fde„«       ZGe,dyd2e7d3ede<fdf„«       ZHe,dyd2e7d3ede<fdg„«       ZIe,dyd2e7d3ede<fdh„«       ZJe,dyd2e7d3ede<fdi„«       ZKe,dyd2e7d3ede<fdj„«       ZLe,dyd2e7d3ede<fdk„«       ZMe,dyd2e7d3ede<fdl„«       ZNe,dyd2e7d3ede<fdm„«       ZOe,dyd2e7d3ede<fdn„«       ZPe,dyd2e7d3ede<fdo„«       ZQe,dyd2e7d3ede<fdp„«       ZRe,dyd2e7d3ede<fdq„«       ZSe,dyd2e7d3ede<fdr„«       ZTe,dyd2e7d3ede<fds„«       ZUe,dyd2e7d3ede<fdt„«       ZVe,dyd2e7d3ede<fdu„«       ZW e-eXdBdFdGdHdIdJdMdPdQdRdSdTd8d<d=dvœ«       y){a/  Pre-Activation ResNet v2 with GroupNorm and Weight Standardization.

A PyTorch implementation of ResNetV2 adapted from the Google Big-Transfer (BiT) source code
at https://github.com/google-research/big_transfer to match timm interfaces. The BiT weights have
been included here as pretrained models from their original .NPZ checkpoints.

Additionally, supports non pre-activation bottleneck for use as a backbone for Vision Transformers (ViT) and
extra padding support to allow porting of official Hybrid ResNet pretrained weights from
https://github.com/google-research/vision_transformer

Thanks to the Google team for the above two repositories and associated papers:
* Big Transfer (BiT): General Visual Representation Learning - https://arxiv.org/abs/1912.11370
* An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale - https://arxiv.org/abs/2010.11929
* Knowledge distillation: A good teacher is patient and consistent - https://arxiv.org/abs/2106.05237

Original copyright of Google code below, modifications by Ross Wightman, Copyright 2020.
é    )ÚOrderedDict)Úpartial)ÚAnyÚCallableÚDictÚListÚOptionalÚTupleÚUnionN©ÚIMAGENET_INCEPTION_MEANÚIMAGENET_INCEPTION_STD)ÚGroupNormActÚBatchNormAct2dÚEvoNorm2dS0ÚFilterResponseNormTlu2dÚClassifierHeadÚDropPathÚcalculate_drop_path_ratesÚAvgPool2dSameÚcreate_pool2dÚ	StdConv2dÚcreate_conv2dÚget_act_layerÚget_norm_act_layerÚmake_divisibleé   )Úbuild_model_with_cfg)Úfeature_take_indices)Úcheckpoint_seqÚnamed_applyÚadapt_input_conv)Úgenerate_default_cfgsÚregister_modelÚregister_model_deprecationsÚResNetV2c                   óÔ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 ddedee   dedededee   ded	ee   d
ee   dee   dee   defˆ fd„Zdd„Z	de
j                  de
j                  fd„Zˆ xZS )ÚPreActBasiczAPre-activation basic block (not in typical 'v2' implementations).Úin_chsÚout_chsÚbottle_ratioÚstrideÚdilationÚfirst_dilationÚgroupsÚ	act_layerÚ
conv_layerÚ
norm_layerÚ
proj_layerÚdrop_path_ratec           
      óà  •— ||dœ}t         ‰| �  «        |xs |}|	xs t        }	|
xs t        t        d¬«      }
|xs |}t        ||z  «      }|�&|dk7  s
||k7  s||k7  r |||f|||d|	|
dœ|¤Ž| _        nd| _         |
|fi |¤Ž| _         |	||df|||d	œ|¤Ž| _         |
|fi |¤Ž| _	         |	||df||d
œ|¤Ž| _
        |dkD  rt        |«      | _        yt        j                  «       | _        y)aw  Initialize PreActBasic block.

        Args:
            in_chs: Input channels.
            out_chs: Output channels.
            bottle_ratio: Bottleneck ratio (not used in basic block).
            stride: Stride for convolution.
            dilation: Dilation rate.
            first_dilation: First dilation rate.
            groups: Group convolution size.
            act_layer: Activation layer type.
            conv_layer: Convolution layer type.
            norm_layer: Normalization layer type.
            proj_layer: Projection/downsampling layer type.
            drop_path_rate: Stochastic depth drop rate.
        ©ÚdeviceÚdtypeé    ©Ú
num_groupsNr   T©r,   r-   r.   Úpreactr1   r2   é   ©r,   r-   r/   )r-   r/   r   )ÚsuperÚ__init__r   r   r   r   Ú
downsampleÚnorm1Úconv1Únorm2Úconv2r   ÚnnÚIdentityÚ	drop_path©Úselfr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r7   r8   ÚddÚmid_chsÚ	__class__s                    €ú_/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/resnetv2.pyrA   zPreActBasic.__init__5   s1  ø€ ðB ¨Ñ/ˆÜ‰ÑÔØ'Ò3¨8ˆØÒ,¤9ˆ
ØÒG¤7¬<ÀBÔ#Gˆ
ØÒ#˜VˆÜ  ¨<Ñ!7Ó8ˆàÐ! v°¢{°nÈÒ6PÐTZÐ^eÒTeÙ(ØØð
ð Ø!Ø-ØØ%Ø%ñ
ð ñ
ˆD�Oð #ˆDŒOá Ñ-¨"Ñ-ˆŒ
Ù ¨°Ðp¸6ÈNÐciÑpÐmoÑpˆŒ
Ù Ñ.¨2Ñ.ˆŒ
Ù ¨°!Ð\¸hÈvÑ\ÐY[Ñ\ˆŒ
Ø5CÀaÒ5Gœ .Ó1ˆ�ÌRÏ[É[Ë]ˆ�ó    Úreturnc                 ój   — t         j                  j                  | j                  j                  «       y)zLZero-initialize the last convolution weight (not applicable to basic block).N)rG   ÚinitÚzeros_rF   Úweight©rK   s    rO   Úzero_init_lastzPreActBasic.zero_init_lasts   ó   € ä
�‰�‰�t—z‘z×(Ñ(Õ)rP   Úxc                 óð   — | j                  |«      }|}| j                  �| j                  |«      }| j                  |«      }| j                  | j	                  |«      «      }| j                  |«      }||z   S ©zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output tensor.
        )rC   rB   rD   rF   rE   rI   ©rK   rY   Úx_preactÚshortcuts       rO   ÚforwardzPreActBasic.forwardw   sn   € ð —:‘:˜a“=ˆð ˆØ�?‰?Ð&Ø—‘ xÓ0ˆHð �J‰J�xÓ ˆØ�J‰J�t—z‘z !“}Ó%ˆØ�N‰N˜1ÓˆØ�8‰|ÐrP   )Nç      ð?r   r   Nr   NNNNç        NN©rQ   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr	   Úfloatr   rA   rW   ÚtorchÚTensorr_   Ú__classcell__©rN   s   @rO   r(   r(   2   sô   ø„ ÙKð
 &*Ø"%ØØØ,0ØØ,0Ø-1Ø-1Ø-1Ø$&ØØñ<[àð<[ð ˜c‘]ð<[ð  ð	<[ð
 ð<[ð ð<[ð % S™Mð<[ð ð<[ð   Ñ)ð<[ð ! Ñ*ð<[ð ! Ñ*ð<[ð ! Ñ*ð<[ð "õ<[ó|*ð˜Ÿ™ð ¨%¯,©,÷ rP   r(   c                   óÔ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 ddedee   dedededee   ded	ee   d
ee   dee   dee   defˆ fd„Zdd„Z	de
j                  de
j                  fd„Zˆ xZS )ÚPreActBottlenecka  Pre-activation (v2) bottleneck block.

    Follows the implementation of "Identity Mappings in Deep Residual Networks":
    https://github.com/KaimingHe/resnet-1k-layers/blob/master/resnet-pre-act.lua

    Except it puts the stride on 3x3 conv when available.
    r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   c           
      óø  •— ||dœ}t         ‰| �  «        |xs |}|	xs t        }	|
xs t        t        d¬«      }
|xs |}t        ||z  «      }|� |||f|||d|	|
dœ|¤Ž| _        nd| _         |
|fi |¤Ž| _         |	||dfi |¤Ž| _         |
|fi |¤Ž| _	         |	||df|||d	œ|¤Ž| _
         |
|fi |¤Ž| _         |	||dfi |¤Ž| _        |d
kD  rt        |«      | _        yt        j                  «       | _        y)ab  Initialize PreActBottleneck block.

        Args:
            in_chs: Input channels.
            out_chs: Output channels.
            bottle_ratio: Bottleneck ratio.
            stride: Stride for convolution.
            dilation: Dilation rate.
            first_dilation: First dilation rate.
            groups: Group convolution size.
            act_layer: Activation layer type.
            conv_layer: Convolution layer type.
            norm_layer: Normalization layer type.
            proj_layer: Projection/downsampling layer type.
            drop_path_rate: Stochastic depth drop rate.
        r6   r9   r:   NTr<   r   r>   r?   r   )r@   rA   r   r   r   r   rB   rC   rD   rE   rF   Únorm3Úconv3r   rG   rH   rI   rJ   s                    €rO   rA   zPreActBottleneck.__init__—   s9  ø€ ðB ¨Ñ/ˆÜ‰ÑÔØ'Ò3¨8ˆØÒ,¤9ˆ
ØÒG¤7¬<ÀBÔ#Gˆ
ØÒ#˜VˆÜ  ¨<Ñ!7Ó8ˆàÐ!Ù(ØØð
ð Ø!Ø-ØØ%Ø%ñ
ð ñ
ˆD�Oð #ˆDŒOá Ñ-¨"Ñ-ˆŒ
Ù ¨°Ñ9°bÑ9ˆŒ
Ù Ñ.¨2Ñ.ˆŒ
Ù ¨°!Ðq¸FÈ^ÐdjÑqÐnpÑqˆŒ
Ù Ñ.¨2Ñ.ˆŒ
Ù ¨°!Ñ:°rÑ:ˆŒ
Ø5CÀaÒ5Gœ .Ó1ˆ�ÌRÏ[É[Ë]ˆ�rP   rQ   c                 ój   — t         j                  j                  | j                  j                  «       y)z,Zero-initialize the last convolution weight.N)rG   rS   rT   rr   rU   rV   s    rO   rW   zPreActBottleneck.zero_init_last×   rX   rP   rY   c                 ó0  — | j                  |«      }|}| j                  �| j                  |«      }| j                  |«      }| j                  | j	                  |«      «      }| j                  | j                  |«      «      }| j                  |«      }||z   S r[   )rC   rB   rD   rF   rE   rr   rq   rI   r\   s       rO   r_   zPreActBottleneck.forwardÛ   s„   € ð —:‘:˜a“=ˆð ˆØ�?‰?Ð&Ø—‘ xÓ0ˆHð �J‰J�xÓ ˆØ�J‰J�t—z‘z !“}Ó%ˆØ�J‰J�t—z‘z !“}Ó%ˆØ�N‰N˜1ÓˆØ�8‰|ÐrP   ©Nç      Ð?r   r   Nr   NNNNra   NNrb   rc   rm   s   @rO   ro   ro   Ž   sö   ø„ ñð &*Ø"&ØØØ,0ØØ,0Ø-1Ø-1Ø-1Ø$&ØØñ>[àð>[ð ˜c‘]ð>[ð  ð	>[ð
 ð>[ð ð>[ð % S™Mð>[ð ð>[ð   Ñ)ð>[ð ! Ñ*ð>[ð ! Ñ*ð>[ð ! Ñ*ð>[ð "õ>[ó@*ð˜Ÿ™ð ¨%¯,©,÷ rP   ro   c                   óÔ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 ddedee   dedededee   ded	ee   d
ee   dee   dee   defˆ fd„Zdd„Z	de
j                  de
j                  fd„Zˆ xZS )Ú
BottleneckzUNon Pre-activation bottleneck block, equiv to V1.5/V1b Bottleneck. Used for ViT.
    r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   c           	      ó2  •— ||dœ}t         ‰| �  «        |xs |}|xs t        j                  }|	xs t        }	|
xs t        t        d¬«      }
|xs |}t        ||z  «      }|� |||f||d|	|
dœ|¤Ž| _        nd | _         |	||dfi |¤Ž| _	         |
|fi |¤Ž| _
         |	||df|||dœ|¤Ž| _         |
|fi |¤Ž| _         |	||dfi |¤Ž| _         |
|fd	di|¤Ž| _        |d
kD  rt        |«      nt        j                   «       | _         |d¬«      | _        y )Nr6   r9   r:   F)r,   r-   r=   r1   r2   r   r>   r?   Ú	apply_actr   T)Úinplace)r@   rA   rG   ÚReLUr   r   r   r   rB   rD   rC   rF   rE   rr   rq   r   rH   rI   Úact3rJ   s                    €rO   rA   zBottleneck.__init__ö   sP  ø€ ð" ¨Ñ/ˆÜ‰ÑÔØ'Ò3¨8ˆØÒ(¤§¡ˆ	ØÒ,¤9ˆ
ØÒG¤7¬<ÀBÔ#Gˆ
ØÒ#˜VˆÜ  ¨<Ñ!7Ó8ˆàÐ!Ù(ØØð	ð Ø!ØØ%Ø%ñ	ð ñ	ˆD�Oð #ˆDŒOá ¨°Ñ9°bÑ9ˆŒ
Ù Ñ.¨2Ñ.ˆŒ
Ù ¨°!Ðq¸FÈ^ÐdjÑqÐnpÑqˆŒ
Ù Ñ.¨2Ñ.ˆŒ
Ù ¨°!Ñ:°rÑ:ˆŒ
Ù Ñ?°5Ð?¸BÑ?ˆŒ
Ø5CÀaÒ5Gœ .Ô1ÌRÏ[É[Ë]ˆŒÙ dÔ+ˆ�	rP   rQ   c                 óš   — t        | j                  dd«      �4t        j                  j	                  | j                  j
                  «       yy)z+Zero-initialize the last batch norm weight.rU   N)Úgetattrrq   rG   rS   rT   rU   rV   s    rO   rW   zBottleneck.zero_init_last'  s4   € ä�4—:‘:˜x¨Ó.Ð:Ü�G‰G�N‰N˜4Ÿ:™:×,Ñ,Õ-ð ;rP   rY   c                 óZ  — |}| j                   �| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  ||z   «      }|S r[   )	rB   rD   rC   rF   rE   rr   rq   rI   r}   )rK   rY   r^   s      rO   r_   zBottleneck.forward,  s–   € ð ˆØ�?‰?Ð&Ø—‘ qÓ)ˆHð �J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�N‰N˜1ÓˆØ�I‰I�a˜(‘lÓ#ˆØˆrP   ru   rb   rc   rm   s   @rO   rx   rx   ó   sé   ø„ ñð
 &*Ø"&ØØØ,0ØØ,0Ø-1Ø-1Ø-1Ø$&ØØñ/,àð/,ð ˜c‘]ð/,ð  ð	/,ð
 ð/,ð ð/,ð % S™Mð/,ð ð/,ð   Ñ)ð/,ð ! Ñ*ð/,ð ! Ñ*ð/,ð ! Ñ*ð/,ð "õ/,ób.ð
˜Ÿ™ð ¨%¯,©,÷ rP   rx   c                   ó    ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 ddededededee   dedee   d	ee   fˆ fd
„Zde	j                  de	j                  fd„Zˆ xZS )ÚDownsampleConvz$1x1 convolution downsampling module.r)   r*   r,   r-   r.   r=   r1   r2   c                 ó¨   •— |	|
dœ}t         ‰| �  «         |||dfd|i|¤Ž| _        |rt        j                  «       | _        y  ||fddi|¤Ž| _        y )Nr6   r   r,   rz   F)r@   rA   ÚconvrG   rH   Únorm)rK   r)   r*   r,   r-   r.   r=   r1   r2   r7   r8   rL   rN   s               €rO   rA   zDownsampleConv.__init__I  sY   ø€ ð ¨Ñ/ˆÜ‰ÑÔÙ˜v w°ÑG¸&ÐGÀBÑGˆŒ	Ù%+”B—K‘K“Mˆ�	±¸GÑ1[ÈuÐ1[ÐXZÑ1[ˆ�	rP   rY   rQ   c                 óB   — | j                  | j                  |«      «      S ©ztForward pass.

        Args:
            x: Input tensor.

        Returns:
            Downsampled tensor.
        )r…   r„   ©rK   rY   s     rO   r_   zDownsampleConv.forward[  s   € ð �y‰y˜Ÿ™ 1›Ó&Ð&rP   ©r   r   NTNNNN©rd   re   rf   rg   rh   r	   Úboolr   rA   rj   rk   r_   rl   rm   s   @rO   r‚   r‚   F  s¥   ø„ Ù.ð ØØ,0ØØ-1Ø-1ØØñ\àð\ð ð\ð ð	\ð
 ð\ð % S™Mð\ð ð\ð ! Ñ*ð\ð ! Ñ*õ\ð$	'˜Ÿ™ð 	'¨%¯,©,÷ 	'rP   r‚   c                   ó    ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 ddededededee   dedee   d	ee   fˆ fd
„Zde	j                  de	j                  fd„Zˆ xZS )ÚDownsampleAvgz/AvgPool downsampling as in 'D' ResNet variants.r)   r*   r,   r-   r.   r=   r1   r2   c                 ód  •— |	|
dœ}t         ‰| �  «        |dk(  r|nd}|dkD  s|dkD  r2|dk(  r|dkD  rt        nt        j                  } |d|dd¬«      | _        nt        j                  «       | _         |||dfddi|¤Ž| _        |rt        j                  «       | _        y  ||fddi|¤Ž| _        y )	Nr6   r   é   TF)Ú	ceil_modeÚcount_include_padr,   rz   )	r@   rA   r   rG   Ú	AvgPool2dÚpoolrH   r„   r…   )rK   r)   r*   r,   r-   r.   r=   r1   r2   r7   r8   rL   Ú
avg_strideÚavg_pool_fnrN   s                 €rO   rA   zDownsampleAvg.__init__j  s­   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ'¨1š}‘V°!ˆ
Ø�AŠ:˜ AšØ+5¸ª?¸xÈ!º|�-ÔQS×Q]ÑQ]ˆKÙ# A z¸TÐUZÔ[ˆD�IäŸ™›ˆDŒIÙ˜v w°ÑB¸!ÐB¸rÑBˆŒ	Ù%+”B—K‘K“Mˆ�	±¸GÑ1[ÈuÐ1[ÐXZÑ1[ˆ�	rP   rY   rQ   c                 ó`   — | j                  | j                  | j                  |«      «      «      S r‡   )r…   r„   r“   rˆ   s     rO   r_   zDownsampleAvg.forward‚  s$   € ð �y‰y˜Ÿ™ 4§9¡9¨Q£<Ó0Ó1Ð1rP   r‰   rŠ   rm   s   @rO   r�   r�   g  s¥   ø„ Ù9ð ØØ,0ØØ-1Ø-1ØØñ\àð\ð ð\ð ð	\ð
 ð\ð % S™Mð\ð ð\ð ! Ñ*ð\ð ! Ñ*õ\ð0	2˜Ÿ™ð 	2¨%¯,©,÷ 	2rP   r�   c                   óÄ   ‡ — e Zd ZdZddddedddfdededed	ed
ededededee	e      de
dee
   dee
   dee
   defˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚResNetStagezResNet Stage.rv   r   FNr)   r*   r,   r-   Údepthr+   r/   Úavg_downÚ	block_dprÚblock_fnr0   r1   r2   Úblock_kwargsc                 ól  •— t         ‰| �  «        d| _        |dv rdnd}t        |||¬«      }|rt        nt
        }|}t        j                  «       | _        t        |«      D ]Q  }|	r|	|   nd}|dk(  r|nd}| j                  j                  t        |«       |
||f|||||||dœ|¤|¤Ž«       |}|}d }ŒS y )	NF)r   r�   r   r�   )r0   r1   r2   ra   r   )r,   r-   r+   r/   r.   r3   r4   )r@   rA   Úgrad_checkpointingÚdictr�   r‚   rG   Ú
SequentialÚblocksÚrangeÚ
add_moduleÚstr)rK   r)   r*   r,   r-   r™   r+   r/   rš   r›   rœ   r0   r1   r2   r�   r.   Úlayer_kwargsr3   Úprev_chsÚ	block_idxr4   rN   s                        €rO   rA   zResNetStage.__init__�  sä   ø€ ô" 	‰ÑÔØ"'ˆÔà&¨&Ñ0™°aˆÜ i¸JÐS]Ô^ˆÙ&.•]´Nˆ
ØˆÜ—m‘m“oˆŒÜ˜u›ò 	ˆIÙ5>˜Y yÒ1ÀBˆNØ(¨Aš~‘V°1ˆFØ�K‰K×"Ñ"¤3 y£>±8ØØð4ð Ø!Ø)ØØ-Ø%Ø-ñ4ð ð4ð ñ4ô ð ˆHØ%ˆNØ‰Jñ%	rP   rY   rQ   c                 ó¬   — | j                   r6t        j                  j                  «       st	        | j
                  |«      }|S | j                  |«      }|S )z�Forward pass through all blocks in the stage.

        Args:
            x: Input tensor.

        Returns:
            Output tensor.
        )rŸ   rj   ÚjitÚis_scriptingr    r¢   rˆ   s     rO   r_   zResNetStage.forward½  sG   € ð ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.ˆAð ˆð —‘˜A“ˆAØˆrP   )rd   re   rf   rg   ro   rh   ri   r‹   r	   r   r   r   rA   rj   rk   r_   rl   rm   s   @rO   r˜   r˜   Ž  sã   ø„ Ùð #'ØØ"Ø/3Ø!1Ø,0Ø-1Ø-1ñ+àð+ð ð+ð ð	+ð
 ð+ð ð+ð  ð+ð ð+ð ð+ð    U¡Ñ,ð+ð ð+ð   Ñ)ð+ð ! Ñ*ð+ð ! Ñ*ð+ð  õ+ðZ˜Ÿ™ð ¨%¯,©,÷ rP   r˜   Ú	stem_typerQ   c                 óB   — t        dD �cg c]  }|| v ‘Œ c}«      S c c}w )z®Check if stem type is deep (has multiple convolutions).

    Args:
        stem_type: Type of stem to check.

    Returns:
        True if stem is deep, False otherwise.
    )ÚdeepÚtiered)Úany)r¬   Úss     rO   Úis_stem_deepr²   Í  s"   € ô Ð(:Ö; 1��Y’Ò;Ó<Ð<ùÒ;s   Šé@   Ú Tr9   r:   r)   r*   r=   r1   r2   c                 óˆ  — ||dœ}t        «       }	|dv sJ ‚t        |«      r…d|v rd|z  dz  |dz  f}
n
|dz  |dz  f}
 || |
d   fdddœ|¤Ž|	d	<    ||
d   fi |¤Ž|	d
<    ||
d   |
d   fdddœ|¤Ž|	d<    ||
d   fi |¤Ž|	d<    ||
d   |fdddœ|¤Ž|	d<   |s+ ||fi |¤Ž|	d<   n || |fdddœ|¤Ž|	d<   |s ||fi |¤Ž|	d<   d|v r5t        j                  dd«      |	d<   t        j                  ddd¬«      |	d<   n2d|v rt        dddd¬«      |	d<   nt        j                  ddd¬«      |	d<   t        j                  |	«      S )Nr6   )r´   ÚfixedÚsamer®   Ú
deep_fixedÚ	deep_samer¯   r¯   r>   é   r�   r   )Úkernel_sizer,   rD   rC   r   rF   rE   rr   rq   é   r„   r…   r¶   ra   Úpad)r»   r,   Úpaddingr“   r·   Úmax)r   r²   rG   ÚConstantPad2dÚ	MaxPool2dr   r¡   )r)   r*   r¬   r=   r1   r2   r7   r8   rL   ÚstemÚstem_chss              rO   Úcreate_resnetv2_stemrÄ   Ù  s¶  € ð  UÑ	+€BÜ‹=€DØÐZÑZÐZÐZô �IÔà�yÑ Ø˜G™ qÑ(¨'°Q©,Ð7‰Hà 1™ g°¡lÐ3ˆHÙ" 6¨8°A©;ÐVÀAÈaÑVÐSUÑVˆˆW‰Ù" 8¨A¡;Ñ5°"Ñ5ˆˆW‰Ù" 8¨A¡;°¸±Ð[ÈÐSTÑ[ÐXZÑ[ˆˆW‰Ù" 8¨A¡;Ñ5°"Ñ5ˆˆW‰Ù" 8¨A¡;°ÐWÀQÈqÑWÐTVÑWˆˆW‰ÙÙ& wÑ5°"Ñ5ˆD�ŠMñ " &¨'ÐQ¸qÈÑQÈbÑQˆˆV‰ÙÙ% gÑ4°Ñ4ˆD�‰Là�)Ñä×&Ñ& q¨"Ó-ˆˆU‰Ü—|‘|°¸!ÀQÔGˆˆVŠØ	�9Ñ	ä$ U¸À!ÈVÔTˆˆVŠô —|‘|°¸!ÀQÔGˆˆV‰ä�=‰=˜ÓÐrP   c            '       óò  ‡ — e Zd ZdZdddddddd	d
dd
dej
                   eed¬«      eddd
ddfde	e
   dee
df   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d!ed"ed#ef&ˆ fd$„Zej$                  j&                  d>d#ed%dfd&„«       Zej$                  j'                  «       d?d'ed(ed%d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j4                  fd.„«       ZdAde
dee   d%dfd/„Z	 	 	 	 	 dBd0ej<                  d1eee
e	e
   f      d2ed3ed4ed5ed%ee	ej<                     eej<                  e	ej<                     f   f   fd6„Z 	 	 	 dCd1ee
e	e
   f   d7ed8efd9„Z!d0ej<                  d%ej<                  fd:„Z"d@d0ej<                  d;ed%ej<                  fd<„Z#d0ej<                  d%ej<                  fd=„Z$ˆ xZ%S )Dr&   z7Implementation of Pre-activation (v2) ResNet mode.
    )é   é   i   i   éè  r>   Úavgr9   r   r³   r´   FTrv   r:   ra   NÚlayersÚchannels.Únum_classesÚin_chansÚglobal_poolÚoutput_strideÚwidth_factorrÃ   r¬   rš   r=   Úbasicr+   r0   r2   r1   Ú	drop_rater4   rW   c                 ó2  •— t         ‰%| �  «        ||dœ}|| _        || _        || _        |}t        ||¬«      }t        |«      }g | _        t        ||z  «      }t        |||	|f||dœ|¤Ž| _
        |rt        |	«      rdndnd}| j                  j                  t        |d|¬«      «       |}d	}d
}t        ||d¬«      }|r|rt        nt         }n
|rJ ‚t"        }t%        j&                  «       | _        t+        t-        |||«      «      D ]•  \  }\  }} }!t        | |z  «      }"|dk(  rd
nd}#||k\  r||#z  }d
}#t/        ||"f|#||||
||||!|dœ
|¤Ž}$|"}||#z  }| xj                  t        ||d|› �¬«      gz  c_        | j(                  j1                  t3        |«      |$«       Œ— |x| _        | _        |r || j4                  fi |¤Žnt%        j8                  «       | _        t=        | j4                  |f|| j                  ddœ|¤Ž| _        | jA                  |¬«       y)aÒ  
        Args:
            layers (List[int]) : number of layers in each block
            channels (List[int]) : number of channels in each block:
            num_classes (int): number of classification classes (default 1000)
            in_chans (int): number of input (color) channels. (default 3)
            global_pool (str): Global pooling type. One of 'avg', 'max', 'avgmax', 'catavgmax' (default 'avg')
            output_stride (int): output stride of the network, 32, 16, or 8. (default 32)
            width_factor (int): channel (width) multiplication factor
            stem_chs (int): stem width (default: 64)
            stem_type (str): stem type (default: '' == 7x7)
            avg_down (bool): average pooling in residual downsampling (default: False)
            preact (bool): pre-activation (default: True)
            act_layer (Union[str, nn.Module]): activation layer
            norm_layer (Union[str, nn.Module]): normalization layer
            conv_layer (nn.Module): convolution module
            drop_rate: classifier dropout rate (default: 0.)
            drop_path_rate: stochastic depth rate (default: 0.)
            zero_init_last: zero-init last weight in residual path (default: False)
        r6   )r0   )r1   r2   z
stem.conv3ú	stem.convz	stem.normr�   )Únum_chsÚ	reductionÚmoduleé   r   T)Ú	stagewiser   )
r,   r-   r™   r+   rš   r0   r1   r2   r›   rœ   zstages.)Ú	pool_typerÒ   Úuse_conv©rW   N)!r@   rA   rÌ   rÍ   rÒ   r   r   Úfeature_infor   rÄ   rÂ   r²   Úappendr    r   r(   ro   rx   rG   r¡   ÚstagesÚ	enumerateÚzipr˜   r¤   r¥   Únum_featuresÚhead_hidden_sizerH   r…   r   ÚheadÚinit_weights)&rK   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÃ   r¬   rš   r=   rÑ   r+   r0   r2   r1   rÒ   r4   rW   r7   r8   rL   ÚwfÚ	stem_featr§   Úcurr_strider-   Ú
block_dprsrœ   Ú	stage_idxÚdÚcÚbdprr*   r,   ÚstagerN   s&                                        €rO   rA   zResNetV2.__init__  so  ø€ ôX 	‰ÑÔØ¨Ñ/ˆØ&ˆÔØ ˆŒØ"ˆŒØˆÜ'¨
¸iÔHˆ
Ü! )Ó,ˆ	àˆÔÜ! (¨R¡-Ó0ˆÜ(ØØØØð	
ð
 "Ø!ñ
ð ñ
ˆŒ	ñ SY¤\°)Ô%<‘\Á+Ð^iˆ	Ø×Ñ× Ñ ¤¨hÀ!ÈIÔ!VÔWàˆØˆØˆÜ.¨~¸vÐQUÔVˆ
ÙÙ&+•{Ô1A‰HáÐ�9Ü!ˆHÜ—m‘m“oˆŒÜ'0´°V¸XÀzÓ1RÓ'Sò 	:Ñ#ˆI‘|˜˜1˜dÜ$ Q¨¡VÓ,ˆGØ# qš.‘Q¨aˆFØ˜mÒ+Ø˜FÑ"�Ø�ÜØØðð Ø!ØØ)Ø!Ø#Ø%Ø%ØØ!ñð ñˆEð ˆHØ˜6Ñ!ˆKØ×Ò¤$¨xÀ;ÐY`ÐajÐ`kÐWlÔ"mÐ!nÑnÕØ�K‰K×"Ñ"¤3 y£>°5Õ9ð1	:ð4 5=Ð<ˆÔ˜DÔ1Ù;A‘J˜t×0Ñ0Ñ7°BÒ7ÄrÇ{Á{Ã}ˆŒ	Ü"Ø×ÑØð
ð "Ø—n‘nØñ
ð ñ
ˆŒ	ð 	×Ñ¨ÐÕ8rP   rQ   c                 ó:   — t        t        t        |¬«      | «       y)zInitialize model weights.rÜ   N)r!   r   Ú_init_weights)rK   rW   s     rO   rå   zResNetV2.init_weights�  s   € ô 	”GœM¸.ÔIÈ4ÕPrP   Úcheckpoint_pathÚprefixc                 ó   — t        | ||«       y)zLoad pretrained weights.N)Ú_load_weights)rK   rñ   rò   s      rO   Úload_pretrainedzResNetV2.load_pretrained†  s   € ô 	�d˜O¨VÕ4rP   Úcoarsec                 ó,   — t        d|rdnddg¬«      }|S )z"Group parameters for optimization.z^stemz^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)N)z^norm)iŸ† )rÂ   r¢   )r    )rK   rö   Úmatchers      rO   Úgroup_matcherzResNetV2.group_matcher‹  s)   € ô ØÙ(.Ñ$Ø8Ø$ð5ô
ˆð ˆrP   Úenablec                 ó4   — | j                   D ]	  }||_        Œ y)z)Enable or disable gradient checkpointing.N)rß   rŸ   )rK   rú   r±   s      rO   Úset_grad_checkpointingzResNetV2.set_grad_checkpointing—  s   € ð —‘ò 	*ˆAØ#)ˆAÕ ñ	*rP   c                 ó.   — | j                   j                  S )zGet the classifier head.)rä   ÚfcrV   s    rO   Úget_classifierzResNetV2.get_classifier�  s   € ð �y‰y�|‰|ÐrP   c                 óJ   — || _         | j                  j                  ||«       y)zŸReset the classifier head.

        Args:
            num_classes: Number of classes for new classifier.
            global_pool: Global pooling type.
        N)rÌ   rä   Úreset)rK   rÌ   rÎ   s      rO   Úreset_classifierzResNetV2.reset_classifier¢  s   € ð 'ˆÔØ�	‰	�‰˜ [Õ1rP   rY   Úindicesr…   Ú
stop_earlyÚ
output_fmtÚintermediates_onlyc                 ó”  — |dv sJ d«       ‚g }t        d|«      \  }}	d}
|j                  dd \  }}| j                  D ]'  } ||«      }|j                  dd |dz  |dz  fk(  sŒ&|}Œ) |
|v r|j                  «       t	        | j
                  «      }t        j                  j                  «       s|s| j
                  }n| j
                  d|	 }t        |d¬	«      D ]O  \  }
} ||«      }|
|v sŒ|
|k(  r'|r| j                  |«      n|}|j                  |«       Œ?|j                  |«       ŒQ |r|S |
|k(  r| j                  |«      }||fS )
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   éþÿÿÿNr�   r   )Ústart)r   ÚshaperÂ   rÞ   Úlenrß   rj   rª   r«   rà   r…   )rK   rY   r  r…   r  r  r  ÚintermediatesÚtake_indicesÚ	max_indexÚfeat_idxÚHÚWrÂ   Úx_downÚlast_idxrß   rî   Úx_inters                      rO   Úforward_intermediateszResNetV2.forward_intermediates¬  sc  € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6°q¸'Ó"BÑˆ�ið ˆØ�w‰w�r�sˆ|‰ˆˆ1Ø—I‘Iò 	ˆDÙ�Q“ˆAØ�w‰w�r�sˆ|  A¡ q¨1¡u˜~Ó-Ø‘ð	ð �|Ñ#Ø× Ñ  Ô(Ü�t—{‘{Ó#ˆÜ�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )Ð,ˆFä(¨°qÔ9ò 	,‰OˆH�eÙ�a“ˆAØ˜<Ò'Ø˜xÒ'Ù.2˜dŸi™i¨œl¸�GØ!×(Ñ(¨Õ1à!×(Ñ(¨Õ+ð	,ñ Ø Ð à�xÒØ—	‘	˜!“ˆAà�-ÐÐrP   Ú
prune_normÚ
prune_headc                 óª   — t        d|«      \  }}| j                  d| | _        |rt        j                  «       | _        |r| j                  dd«       |S )z@ Prune layers not required for specified intermediates.
        r	  Nr   r´   )r   rß   rG   rH   r…   r  )rK   r  r  r  r  r  s         rO   Úprune_intermediate_layersz"ResNetV2.prune_intermediate_layerså  sP   € ô #7°q¸'Ó"BÑˆ�iØ—k‘k * 9Ð-ˆŒÙÜŸ™›ˆDŒIÙØ×!Ñ! ! RÔ(ØÐrP   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S )z’Forward pass through feature extraction layers.

        Args:
            x: Input tensor.

        Returns:
            Feature tensor.
        )rÂ   rß   r…   rˆ   s     rO   Úforward_featureszResNetV2.forward_featuresõ  s0   € ð �I‰I�a‹LˆØ�K‰K˜‹NˆØ�I‰I�a‹LˆØˆrP   Ú
pre_logitsc                 óN   — |r| j                  ||¬«      S | j                  |«      S )zàForward pass through classifier head.

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

        Returns:
            Classification logits or features.
        )r  )rä   )rK   rY   r  s      rO   Úforward_headzResNetV2.forward_head  s(   € ñ 7Aˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRrP   c                 óJ   — | j                  |«      }| j                  |«      }|S )zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output logits.
        )r  r   rˆ   s     rO   r_   zResNetV2.forward  s)   € ð ×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆrP   )T©zresnet/©F)N)NFFr  F)r   FT)&rd   re   rf   rg   rG   r|   r   r   r   r   rh   r
   r¥   r‹   ri   r   rA   rj   rª   Úignorerå   rõ   r   r   rù   rü   ÚModulerÿ   r	   r  rk   r   r  r  r  r   r_   rl   rm   s   @rO   r&   r&   	  sr  ø„ ñð )?Ø#ØØ$Ø!#Ø !ØØØ"ØØØ"&Ø"$§'¡'Ù#*¨<ÀBÔ#GØ#,Ø!Ø$&Ø#(ØØñ-r9à˜‘Iðr9ð ˜C ˜H‘oðr9ð ð	r9ð
 ðr9ð ðr9ð ðr9ð ðr9ð ðr9ð ðr9ð ðr9ð ðr9ð ðr9ð  ðr9ð  ðr9ð  !ð!r9ð" !ð#r9ð$ ð%r9ð& "ð'r9ð( !õ)r9ðh ‡Y�Y×ÑñQ¨4ð Q¸4ò Qó ðQð ‡Y�Y×ÑÓñ5¨sð 5¸Cð 5ÐPTò 5ó ð5ð ‡Y�Y×Ññ	 Dð 	°T¸#¸s¸(±^ò 	ó ð	ð ‡Y�Y×Ññ*¨Tð *¸Tò *ó ð*ð
 ‡Y�Y×Ñð §	¡	ò ó ðñ2¨Cð 2¸hÀs¹mð 2ÐW[ó 2ð 8<ØØ$Ø$Ø',ñ7 à�|‰|ð7 ð ˜e C¨¨c© NÑ3Ñ4ð7 ð ð	7 ð
 ð7 ð ð7 ð !%ð7 ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó7 ðv ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	ð  %§,¡,ð °5·<±<ó ñ
S˜eŸl™lð 
S¸ð 
SÈÏÉó 
Sð˜Ÿ™ð ¨%¯,©,÷ rP   r×   ÚnamerW   c                 ór  — t        | t        j                  «      sd|v rpt        | t        j                  «      rVt        j                  j                  | j                  dd¬«       t        j                  j                  | j                  «       yt        | t        j                  «      rct        j                  j                  | j                  dd¬«       | j                  �*t        j                  j                  | j                  «       yyt        | t        j                  t        j                  t        j                  f«      rSt        j                  j                  | j                  «       t        j                  j                  | j                  «       y|rt        | d	«      r| j                  «        yyy)
z¯Initialize module weights.

    Args:
        module: PyTorch module to initialize.
        name: Module name.
        zero_init_last: Zero-initialize last layer weights.
    úhead.fcra   g{®Gáz„?)ÚmeanÚstdÚfan_outÚrelu)ÚmodeÚnonlinearityNrW   )Ú
isinstancerG   ÚLinearÚConv2drS   Únormal_rU   rT   ÚbiasÚkaiming_normal_ÚBatchNorm2dÚ	LayerNormÚ	GroupNormÚones_ÚhasattrrW   )r×   r&  rW   s      rO   rð   rð     s
  € ô �&œ"Ÿ)™)Ô$¨°dÑ):¼zÈ&ÔRT×R[ÑR[Ô?\Ü
�‰�‰˜Ÿ™¨C°TˆÔ:Ü
�‰�‰�v—{‘{Õ#Ü	�FœBŸI™IÔ	&Ü
�‰×Ñ §¡°IÈFÐÔSØ�;‰;Ð"Ü�G‰G�N‰N˜6Ÿ;™;Õ'ð #ä	�FœRŸ^™^¬R¯\©\¼2¿<¹<ÐHÔ	IÜ
�‰�‰�f—m‘mÔ$Ü
�‰�‰�v—{‘{Õ#Ù	œG FÐ,<Ô=Ø×ÑÕð >ˆrP   Úmodelrñ   rò   c                 ó´  — dd l }d„ }|j                  |«      }t        | j                  j                  j
                  j                  d    |||› d�   «      «      }| j                  j                  j
                  j                  |«       | j                  j
                  j                   |||› d�   «      «       | j                  j                  j                   |||› d�   «      «       t        t        | j                  dd «      t        j                  «      r¹| j                  j                  j
                  j                  d   ||› d�   j                  d	   k(  rv| j                  j                  j
                  j                   |||› d�   «      «       | j                  j                  j                  j                   |||› d
�   «      «       t!        | j"                  j%                  «       «      D �]]  \  }\  }}	t!        |	j&                  j%                  «       «      D �]-  \  }
\  }}d}|› d|dz   › d|
dz   d›d�}|j(                  j
                  j                   |||› d|› d�   «      «       |j*                  j
                  j                   |||› d|› d�   «      «       |j,                  j
                  j                   |||› d|› d�   «      «       |j.                  j
                  j                   |||› d�   «      «       |j0                  j
                  j                   |||› d�   «      «       |j2                  j
                  j                   |||› d�   «      «       |j.                  j                  j                   |||› d�   «      «       |j0                  j                  j                   |||› d�   «      «       |j2                  j                  j                   |||› d�   «      «       |j4                  €�Œî||› d|› d�   }|j4                  j                  j
                  j                   ||«      «       �Œ0 �Œ` y )Nr   c                 óp   — | j                   dk(  r| j                  g d¢«      } t        j                  | «      S )zPossibly convert HWIO to OIHW.rØ   )r>   r�   r   r   )ÚndimÚ	transposerj   Ú
from_numpy)Úconv_weightss    rO   Út2pz_load_weights.<locals>.t2p7  s1   € à×Ñ Ò!Ø'×1Ñ1²,Ó?ˆLÜ×Ñ Ó-Ð-rP   r   z%root_block/standardized_conv2d/kernelzgroup_norm/gammazgroup_norm/betarþ   zhead/conv2d/kerneléÿÿÿÿzhead/conv2d/biasÚstandardized_conv2dÚblockz/unitÚ02dú/za/z/kernelzb/zc/za/group_norm/gammazb/group_norm/gammazc/group_norm/gammaza/group_norm/betazb/group_norm/betazc/group_norm/betaza/proj/)ÚnumpyÚloadr"   rÂ   r„   rU   r  Úcopy_r…   r3  r/  r   rä   rG   r1  rþ   rà   rß   Únamed_childrenr¢   rD   rF   rr   rC   rE   rq   rB   )r:  rñ   rò   ÚnprA  ÚweightsÚstem_conv_wÚiÚsnamerî   ÚjÚbnamerD  ÚcnameÚblock_prefixÚws                   rO   rô   rô   3  s¾  € ãò.ð �g‰g�oÓ&€GÜ"Ø�
‰
�‰×Ñ×$Ñ$ QÑ'©¨W¸°xÐ?dÐ5eÑ-fÓ)gói€Kà	‡J�J‡O�O×Ñ× Ñ  Ô-Ø	‡J�J×Ñ×Ñ™C ¨6¨(Ð2BÐ(CÑ DÓEÔFØ	‡J�J‡O�O×Ñ™#˜g¨¨°Ð&@ÑAÓBÔCÜ”'˜%Ÿ*™* d¨DÓ1´2·9±9Ô=Ø�J‰J�M‰M× Ñ ×&Ñ& qÑ)¨W¸°xÐ?QÐ5RÑ-S×-YÑ-YÐZ\Ñ-]Ò]Ø�
‰
�‰×Ñ×"Ñ"¡3 w°&°Ð9KÐ/LÑ'MÓ#NÔOØ�
‰
�‰×Ñ× Ñ ¡ W°¨xÐ7GÐ-HÑ%IÓ!JÔKÜ& u§|¡|×'BÑ'BÓ'DÓEó ;Ñˆ‰>ˆE�5Ü!*¨5¯<©<×+FÑ+FÓ+HÓ!Ió 	;ÑˆA‰~��uØ)ˆEØ$˜X U¨1¨q©5¨'°°q¸1±u¸S°kÀÐCˆLØ�K‰K×Ñ×$Ñ$¡S¨°L°>ÀÀEÀ7È'Ð1RÑ)SÓ%TÔUØ�K‰K×Ñ×$Ñ$¡S¨°L°>ÀÀEÀ7È'Ð1RÑ)SÓ%TÔUØ�K‰K×Ñ×$Ñ$¡S¨°L°>ÀÀEÀ7È'Ð1RÑ)SÓ%TÔUØ�K‰K×Ñ×$Ñ$¡S¨°L°>ÐASÐ1TÑ)UÓ%VÔWØ�K‰K×Ñ×$Ñ$¡S¨°L°>ÐASÐ1TÑ)UÓ%VÔWØ�K‰K×Ñ×$Ñ$¡S¨°L°>ÐASÐ1TÑ)UÓ%VÔWØ�K‰K×Ñ×"Ñ"¡3 w°,°Ð?PÐ/QÑ'RÓ#SÔTØ�K‰K×Ñ×"Ñ"¡3 w°,°Ð?PÐ/QÑ'RÓ#SÔTØ�K‰K×Ñ×"Ñ"¡3 w°,°Ð?PÐ/QÑ'RÓ#SÔTØ×ÑÒ+Ø˜|˜n¨G°E°7¸'ÐBÑC�Ø× Ñ ×%Ñ%×,Ñ,×2Ñ2±3°q³6Ö:ò	;ñ;rP   ÚvariantÚ
pretrainedÚkwargsc                 óB   — t        d¬«      }t        t        | |fd|i|¤ŽS )z×Create a ResNetV2 model.

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

    Returns:
        ResNetV2 model instance.
    T)Úflatten_sequentialÚfeature_cfg)r    r   r&   )rU  rV  rW  rZ  s       rO   Ú_create_resnetv2r[  Y  s4   € ô ¨$Ô/€KÜÜ�'˜:ñàðð ñð rP   c           	      ó@   — t        | f|dt        t        d¬«      dœ|¤ŽS )zèCreate a ResNetV2 model with BiT weights.

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

    Returns:
        ResNetV2 model instance.
    r¶   g:Œ0âŽyE>)Úeps)rV  r¬   r1   )r[  r   r   )rU  rV  rW  s      rO   Ú_create_resnetv2_bitr^  l  s3   € ô ØðàØÜœ9¨$Ô/ñ	ð
 ñð rP   Úurlc                 ó2   — | dddddt         t        dddd	œ|¥S )
NrÈ   )r>   éà   ra  )r¼   r¼   g      ì?ÚbilinearrÔ   r(  z
apache-2.0)r_  rÌ   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationr)  r*  Ú
first_convÚ
classifierÚlicenser   )r_  rW  s     rO   Ú_cfgrj  €  s3   € àØ¨=ÀvØ¨JÜ'Ô0FØ!°Øñð ðð rP   z%resnetv2_50x1_bit.goog_distilled_in1kztimm/Úbicubic)Ú	hf_hub_idrf  Úcustom_loadz-resnetv2_152x2_bit.goog_teacher_in21k_ft_in1kz1resnetv2_152x2_bit.goog_teacher_in21k_ft_in1k_384)r>   é€  rn  )é   ro  r`   )rl  rc  rd  re  rf  rm  z$resnetv2_50x1_bit.goog_in21k_ft_in1k)r>   éÀ  rp  )é   rq  )rl  rc  rd  re  rm  z$resnetv2_50x3_bit.goog_in21k_ft_in1kz%resnetv2_101x1_bit.goog_in21k_ft_in1kz%resnetv2_101x3_bit.goog_in21k_ft_in1kz%resnetv2_152x2_bit.goog_in21k_ft_in1kz%resnetv2_152x4_bit.goog_in21k_ft_in1k)r>   éà  rr  )é   rs  zresnetv2_50x1_bit.goog_in21kiSU  )rl  rÌ   rm  zresnetv2_50x3_bit.goog_in21kzresnetv2_101x1_bit.goog_in21kzresnetv2_101x3_bit.goog_in21kzresnetv2_152x2_bit.goog_in21kzresnetv2_152x4_bit.goog_in21kzresnetv2_18.ra4_e3600_r224_in1kgÍÌÌÌÌÌì?)r>   é   rt  )rl  rf  re  Útest_input_sizeÚtest_crop_pctz resnetv2_18d.ra4_e3600_r224_in1kz
stem.conv1)rl  rf  re  ru  rv  rg  )rl  re  rc  rd  ru  rf  rg  gffffffî?)rf  rg  )rf  )rl  rf  rg  re  ru  rv  )zresnetv2_34.ra4_e3600_r224_in1kz resnetv2_34d.ra4_e3600_r224_in1kz resnetv2_34d.ra4_e3600_r384_in1kzresnetv2_50.a1h_in1kzresnetv2_50d.untrainedzresnetv2_50t.untrainedzresnetv2_101.a1h_in1kzresnetv2_101d.untrainedzresnetv2_152.untrainedzresnetv2_152d.untrainedzresnetv2_50d_gn.ah_in1kzresnetv2_50d_evos.ah_in1kzresnetv2_50d_frn.untrainedc                 ó&   — t        	 d| g d¢ddœ|¤ŽS )zResNetV2-50x1-BiT model.©r>   rØ   é   r>   r   ©rV  rÊ   rÐ   )Úresnetv2_50x1_bit©r^  ©rV  rW  s     rO   r{  r{  ð  ó-   € ô  ØðcØ(2º<ÐVWñcØ[añcð crP   c                 ó&   — t        	 d| g d¢ddœ|¤ŽS )zResNetV2-50x3-BiT model.rx  r>   rz  )Úresnetv2_50x3_bitr|  r}  s     rO   r€  r€  ÷  r~  rP   c                 ó&   — t        	 d| g d¢ddœ|¤ŽS )zResNetV2-101x1-BiT model.©r>   rØ   é   r>   r   rz  )Úresnetv2_101x1_bitr|  r}  s     rO   r„  r„  þ  ó-   € ô  ØðeØ)3ºMÐXYñeØ]cñeð erP   c                 ó&   — t        	 d| g d¢ddœ|¤ŽS )zResNetV2-101x3-BiT model.r‚  r>   rz  )Úresnetv2_101x3_bitr|  r}  s     rO   r‡  r‡    r…  rP   c                 ó&   — t        	 d| g d¢ddœ|¤ŽS )zResNetV2-152x2-BiT model.©r>   rº   é$   r>   r�   rz  )Úresnetv2_152x2_bitr|  r}  s     rO   r‹  r‹    r…  rP   c                 ó&   — t        	 d| g d¢ddœ|¤ŽS )zResNetV2-152x4-BiT model.r‰  rØ   rz  )Úresnetv2_152x4_bitr|  r}  s     rO   r�  r�    r…  rP   c           	      óf   — t        g d¢dddt        t        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )zResNetV2-18 model.©r�   r�   r�   r�   ©r³   é€   rÆ   rÇ   Tr`   ©rÊ   rË   rÑ   r+   r1   r2   rV  )Úresnetv2_18©r    r   r   r[  ©rV  rW  Ú
model_argss      rO   r“  r“    s>   € ô ÚÐ&9ÀÐTWÜ ¬^ô€Jô Ñ_°jÐ_ÄDÈÑD^ÐW]ÑD^Ñ_Ð_rP   c           
      ój   — t        g d¢dddt        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )	z'ResNetV2-18d model (deep stem variant).r�  r�  Tr`   r®   ©rÊ   rË   rÑ   r+   r1   r2   r¬   rš   rV  )Úresnetv2_18dr”  r•  s      rO   r™  r™  $  sC   € ô ÚÐ&9ÀÐTWÜ ¬^ÀvÐX\ô€Jô Ñ`°zÐ`ÄTÈ*ÑE_ÐX^ÑE_Ñ`Ð`rP   c           	      ób   — t        ddddt        t        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )zResNetV2-34 model.rx  r�  Tr`   r’  rV  )Úresnetv2_34r”  r•  s      rO   r›  r›  .  s>   € ô ØÐ&9ÀÐTWÜ ¬^ô€Jô Ñ_°jÐ_ÄDÈÑD^ÐW]ÑD^Ñ_Ð_rP   c           
      óf   — t        ddddt        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )	z'ResNetV2-34d model (deep stem variant).rx  r�  Tr`   r®   r˜  rV  )Úresnetv2_34dr”  r•  s      rO   r�  r�  8  sC   € ô ØÐ&9ÀÐTWÜ ¬^ÀvÐX\ô€Jô Ñ`°zÐ`ÄTÈ*ÑE_ÐX^ÑE_Ñ`Ð`rP   c           	      ó`   — t        g d¢t        t        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )zResNetV2-50 model.rx  ©rÊ   r1   r2   rV  )Úresnetv2_50r”  r•  s      rO   r   r   B  s1   € ô š\´mÔP^Ô_€JÜÑ_°jÐ_ÄDÈÑD^ÐW]ÑD^Ñ_Ð_rP   c           	      ód   — t        g d¢t        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )z'ResNetV2-50d model (deep stem variant).rx  r®   T©rÊ   r1   r2   r¬   rš   rV  )Úresnetv2_50dr”  r•  s      rO   r£  r£  I  s:   € ô Ú¬Ä.Ø 4ô)€Jô Ñ`°zÐ`ÄTÈ*ÑE_ÐX^ÑE_Ñ`Ð`rP   c           	      ód   — t        g d¢t        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )z)ResNetV2-50t model (tiered stem variant).rx  r¯   Tr¢  rV  )Úresnetv2_50tr”  r•  s      rO   r¥  r¥  R  s:   € ô Ú¬Ä.Ø Tô+€Jô Ñ`°zÐ`ÄTÈ*ÑE_ÐX^ÑE_Ñ`Ð`rP   c           	      ó`   — t        g d¢t        t        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )zResNetV2-101 model.r‚  rŸ  rV  )Úresnetv2_101r”  r•  s      rO   r§  r§  [  ó1   € ô š]´}ÔQ_Ô`€JÜÑ`°zÐ`ÄTÈ*ÑE_ÐX^ÑE_Ñ`Ð`rP   c           	      ód   — t        g d¢t        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )z(ResNetV2-101d model (deep stem variant).r‚  r®   Tr¢  rV  )Úresnetv2_101dr”  r•  s      rO   rª  rª  b  ó:   € ô Ú¬Ä>Ø 4ô)€Jô Ña¸
ÐaÄdÈ:ÑF`ÐY_ÑF`ÑaÐarP   c           	      ó`   — t        g d¢t        t        ¬«      }t        dd| it        |fi |¤Ž¤ŽS )zResNetV2-152 model.r‰  rŸ  rV  )Úresnetv2_152r”  r•  s      rO   r­  r­  k  r¨  rP   c           	      ód   — t        g d¢t        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )z(ResNetV2-152d model (deep stem variant).r‰  r®   Tr¢  rV  )Úresnetv2_152dr”  r•  s      rO   r¯  r¯  r  r«  rP   c           	      ód   — t        g d¢t        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )z,ResNetV2-50d model with Group Normalization.rx  r®   Tr¢  rV  )Úresnetv2_50d_gn)r    r   r   r[  r•  s      rO   r±  r±  }  s:   € ô Ú¬Ä,Ø 4ô)€Jô Ñc¸*ÐcÌÈZÑHbÐ[aÑHbÑcÐcrP   c           	      ód   — t        g d¢t        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )z ResNetV2-50d model with EvoNorm.rx  r®   Tr¢  rV  )Úresnetv2_50d_evos)r    r   r   r[  r•  s      rO   r³  r³  †  s:   € ô Ú¬Ä+Ø 4ô)€Jô Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑeÐerP   c           	      ód   — t        g d¢t        t        dd¬«      }t        dd| it        |fi |¤Ž¤ŽS )z6ResNetV2-50d model with Filter Response Normalization.rx  r®   Tr¢  rV  )Úresnetv2_50d_frn)r    r   r   r[  r•  s      rO   rµ  rµ  �  s;   € ô Ú¬ÔBYØ 4ô)€Jô Ñd¸:ÐdÌÈjÑIcÐ\bÑIcÑdÐdrP   )Úresnetv2_50x1_bitmÚresnetv2_50x3_bitmÚresnetv2_101x1_bitmÚresnetv2_101x3_bitmÚresnetv2_152x2_bitmÚresnetv2_152x4_bitmÚresnetv2_50x1_bitm_in21kÚresnetv2_50x3_bitm_in21kÚresnetv2_101x1_bitm_in21kÚresnetv2_101x3_bitm_in21kÚresnetv2_152x2_bitm_in21kÚresnetv2_152x4_bitm_in21kÚresnetv2_50x1_bit_distilledÚresnetv2_152x2_bit_teacherÚresnetv2_152x2_bit_teacher_384)r´   Tr"  r#  )r´   )Yrg   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   r	   r
   r   rj   Útorch.nnrG   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_manipulater    r!   r"   Ú	_registryr#   r$   r%   Ú__all__r%  r(   ro   rx   r‚   r�   r˜   r¥   r‹   r²   rh   r¡   rÄ   r&   rð   Úno_gradrô   r[  r^  rj  Údefault_cfgsr{  r€  r„  r‡  r‹  r�  r“  r™  r›  r�  r   r£  r¥  r§  rª  r­  r¯  r±  r³  rµ  rd   © rP   rO   ú<module>rÓ     s		  ðñõ> $Ý ß D× DÑ Dã Ý ç E÷S÷ S÷ S÷ Så *Ý +ß FÑ Fß YÑ Yàˆ,€ôY�"—)‘)ô Yôxb�r—y‘yô bôJP�—‘ô Pôf'�R—Y‘Yô 'ôB$2�B—I‘Iô $2ôN<�"—)‘)ô <ð~	=˜Cð 	= Dó 	=ð ØØØ(Ù& |ÀÔCØØñ-Øð-àð-ð ð-ð ð	-ð
 ð-ð ð-ð ‡]�]ó-ô`Qˆr�y‰yô Qñh ˜"Ÿ)™)ð  ¨3ð  ÀTð  ÐUYó  ð, €‡�ƒñ";˜Ÿ™ð ";°Sð ";À#ò ";ó ð";ñJ˜cð ¨tð Àsð Èxó ñ& #ð °4ð È3ð ÐS[ó ñ(	ˆcð 	 #ð 	¨$¨s°C¨x©.ó 	ñ %ð a&à+©TØØ¨Tô.3ða&ð
 4±TØØ¨Tô63ða&ð 8¹ØØ ¨H¸sÐR[Ðimô:oða&ð +©DØØ ¨H¸sÐPTô-Vða&ð  +©DØØ ¨H¸sÐPTô-Vð!a&ð& ,©TØØ ¨H¸sÐPTô.Vð'a&ð, ,©TØØ ¨H¸sÐPTô.Vð-a&ð2 ,©TØØ ¨H¸sÐPTô.Vð3a&ð8 ,©TØØ ¨H¸sÐPTô.Vð9a&ðB #¡DØØ tô%-ðCa&ðH #¡DØØ tô%-ðIa&ðN $¡TØØ tô&-ðOa&ðT $¡TØØ tô&-ðUa&ðZ $¡TØØ tô&-ð[a&ð` $¡TØØ tô&-ðaa&ðh &¡tØØ¨#¸}Ð\_ô(aðia&ðn '©ØØ¨#¸}Ð\_Øô)!ðoa&ñv (,ØØ¨#¸}Ð\_ô(añ )-ØØ¨#¸}Ð\_Øô)!ñ )-ØØ ¸(ÐTaØ¨Lô):ñ !ØØ¨$ÀÐ]`ôbñ #Ø¨Lô:á"Ø¨Lô:á!ØØ¨$ÀÐ]`ôbñ  $Ø¨Lô :á"Øô!á#Ø¨Lô :ñ  $ØØ¨LØ }ÀCô Iñ "&ØØ¨LØ }ÀCô"Iñ #'Ø¨Lô#:òa&ó a€ðH ñc $ð c¸#ð cÀ(ò có ðcð ñc $ð c¸#ð cÀ(ò có ðcð ñe 4ð e¸3ð eÀ8ò eó ðeð ñe 4ð e¸3ð eÀ8ò eó ðeð ñe 4ð e¸3ð eÀ8ò eó ðeð ñe 4ð e¸3ð eÀ8ò eó ðeð ñ`˜Dð `°Cð `¸Hò `ó ð`ð ña˜Tð a°Sð a¸Xò aó ðað ñ`˜Dð `°Cð `¸Hò `ó ð`ð ña˜Tð a°Sð a¸Xò aó ðað ñ`˜Dð `°Cð `¸Hò `ó ð`ð ña˜Tð a°Sð a¸Xò aó ðað ña˜Tð a°Sð a¸Xò aó ðað ña˜Tð a°Sð a¸Xò aó ðað ñb˜dð b°cð b¸hò bó ðbð ña˜Tð a°Sð a¸Xò aó ðað ñb˜dð b°cð b¸hò bó ðbð ñd ð d¸ð dÀò dó ðdð ñf $ð f¸#ð fÀ(ò fó ðfð ñe ð e¸ð eÀò eó ðeñ ˜HØ@Ø@ØBØBØBØBØ >Ø >Ø!@Ø!@Ø!@Ø!@Ø#JØ"QØ&Yñ'õ rP   