
    RЦi:                     :   S r SSKJr  SSKJrJrJrJrJrJ	r	  SSK
r
SSKJr  SSKJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%  SSK&J'r'  SS	K(J)r)  SS
K*J+r+J,r,  SSK-J.r.J/r/J0r0  S/r1 " S S\Rd                  5      r3 " S S\Rd                  5      r4 " S S\Rd                  5      r5\\4\\4\\4\\4\\4\\4S.r6S\	\\74   S\8S\94S jr: " S S\Rd                  5      r;SS\Rd                  S\\7   S\9SS4S jjr<S r=SS  jr>SS! jr?SS" jr@\." 0 S#\?" S$S%S&SS'9_S(\?" S$S%S&SS'9_S)\?" S$S*S*S+9_S,\?" S$S*S*S-S.9_S/\?" S0S$S&S%S19_S2\?" S3S$S&S%S19_S4\?" S5S%S69_S7\?" S8S$S&S%S19_S9\?" S:S$S&S%S19_S;\?" S<S$S&S%S19_S=\?" S>S$S%S&SS?9_S@\?" S$S%S&SS'9_SA\?" SBS$S%S&SS?9_SC\?" SDS$S%S&SS?9_SE\?" SFS$S%S&SS?9_SG\?" S$SHSISSJ9_SK\?" S$SHSISSLSM9_0 SN\?" S$SHSISSLSM9_SO\?" S$S%SPSQ9_SR\?" S$SHSISSPSS9_ST\?" S$SHSISSPSS9_SU\?" S$S%SPSQ9_SV\?" S$S%SPSQ9_SW\?" SXS$S&SS19_SY\?" SZS$S&SS19_S[\?" S\S$S&SS19_S]\?" S^S$S&SS19_S_\?" S`S$S&SS19_Sa\?" SbS$S&SS19_Sc\?" SdS$S&SS19_Se\?" SfS$S&SS19_Sg\?" ShS$S&SS19_Si\?" SjS$SHSISSLSk9_Sl\?" SmS$SHSISSLSk9_E0 Sn\?" SoS$SHSISSLSk9_Sp\?" SqS$SHSISSLSk9_Sr\?" SsS$SHSISSLSk9_St\?" SuS$SvSw9_Sx\?" SyS$SvSw9_Sz\?" S{S$SvSw9_S|\?" S}S$SvSw9_S~\?" SS$SvSw9_S\@" SS$S&SS19_S\@" SS$SHSISSLSk9_S\@" SS$S&SS19_S\@" SS$SHSISSLSk9_S\@" SS$S&SS19_S\@" SS$SHSISSLSk9_S\@" SS$S&SS19_S\@" SS$SHSISSLSk9_S\@" SS$SHSISSLSk9_E0 S\@" SS$SSSSLSk9_S\@" SS$S&S%S19_S\@" SS$S&S%S19_S\@" SS$S&S%S19_S\@" SS$S&SS19_S\@" SS$S&SS19_S\@" SS$S&SS19_S\@" SS$S&SS19_S\@" SS$S&SS19_S\@" SS$SSw9_S\@" SS$SSw9_S\@" SS$SSw9_S\@" SS$SSw9_S\@" SS$SSw9_S\@" SS$SSw9_S\@" SS$SSw9_S\@" SS$SSw9_E0 S\?" 5       _S\?" S$\\S5SSS9_S\?" S$\\SHSISSLS9_S\?" S$\\SSSS9_S\?" S$\\SHSISSLS9_S\?" S$\\S5SSS9_S\?" S$\\SHSISS9_S\?" S$\\S5SSS9_S\?" S$\\SHSISSLS9_S\?" S$\\S5SSS9_S\?" S$\\SPS5SSS9_S\?" S$\\SPSSSS9_S\?" S$\\SPSHSISSLS9_S\?" S$\\SPSHSISSLS9_S\?" S$\\SPS5SSS9_S\?" S$\\S5SSSS9_S\?" S$\\S5SSSS9_E\?" S$\\S5SSSS9\?" S$\\SSSSS9\?" S$\\SSSSS9\?" S$\\S5SSSS9\?" S$\\SSSSS9\?" S$\\SSSSS9\?" S$\\S5SSSS9\?" S$\\S5SSSS9\?" S$SSSS9\?" S$SSSS9\?" S$SSSS9\?" S$SSSS9\?" S$S*S*SSS%S9\?" S$S*S*SSS%S9\?" S$S*S*SSS%S9S.E5      rA\/SS\;4S jj5       rB\/SS\;4S jj5       rC\/SS\;4S jj5       rD\/SS\;4S jj5       rE\/SS\;4S jj5       rF\/SS\;4S jj5       rG\/SS\;4S jj5       rH\/SS\;4S jj5       rI\/SS\;4S jj5       rJ\/SS\;4S jj5       rK\/SS\;4S jj5       rL\/SS\;4S jj5       rM\/SS\;4S jj5       rN\/SS\;4S jj5       rO\/SS\;4S jj5       rP\/SS\;4S jj5       rQ\/SS\;4S jj5       rR\/SS\;4S jj5       rS\/SS\;4S jj5       rT\/SS\;4S jj5       rU\/SS\;4S jj5       rV\/SS\;4S jj5       rW\/SS\;4S jj5       rX\/SS\;4S jj5       rY\/SS\;4S jj5       rZ\/SS\;4S jj5       r[\/SS\;4S jj5       r\\/SS\;4S jj5       r]\/SS\;4S jj5       r^\/SS\;4S jj5       r_\/SS\;4S jj5       r`\0" \aSWSYS[S]S_SiSlSnSpSrStSxSzS|S~S.5        g)aw  ConvNeXt

Papers:
* `A ConvNet for the 2020s` - https://arxiv.org/pdf/2201.03545.pdf
@Article{liu2022convnet,
  author  = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},
  title   = {A ConvNet for the 2020s},
  journal = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year    = {2022},
}

* `ConvNeXt-V2 - Co-designing and Scaling ConvNets with Masked Autoencoders` - https://arxiv.org/abs/2301.00808
@article{Woo2023ConvNeXtV2,
  title={ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders},
  author={Sanghyun Woo, Shoubhik Debnath, Ronghang Hu, Xinlei Chen, Zhuang Liu, In So Kweon and Saining Xie},
  year={2023},
  journal={arXiv preprint arXiv:2301.00808},
}

Original code and weights from:
* https://github.com/facebookresearch/ConvNeXt, original copyright below
* https://github.com/facebookresearch/ConvNeXt-V2, original copyright below

Model defs atto, femto, pico, nano and _ols / _hnf variants are timm originals.

Modifications and additions for timm hacked together by / Copyright 2022, Ross Wightman
    )partial)CallableDictListOptionalTupleUnionN)IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDOPENAI_CLIP_MEANOPENAI_CLIP_STD)trunc_normal_AvgPool2dSameDropPathcalculate_drop_path_ratesMlpGlobalResponseNormMlpLayerNorm2d	LayerNorm	RmsNorm2dRmsNormSimpleNorm2d
SimpleNormcreate_conv2dget_act_layerget_norm_layermake_divisible	to_ntupleNormMlpClassifierHeadClassifierHead   )build_model_with_cfg)feature_take_indices)named_applycheckpoint_seq)generate_default_cfgsregister_modelregister_model_deprecationsConvNeXtc                      ^  \ rS rSrSr    SS\S\S\S\SS4
U 4S	 jjjrS
\R                  S\R                  4S jr	Sr
U =r$ )
DownsampleL   zDownsample module for ConvNeXt.Nin_chsout_chsstridedilationreturnc                 T  > XVS.n[         T
U ]  5         US:X  a  UOSnUS:  d  US:  a1  US:X  a  US:  a  [        O[        R                  n	U	" SUSSS9U l        O[        R                  " 5       U l        X:w  a  [        XS4SS0UD6U l        g[        R                  " 5       U l        g)	zInitialize Downsample module.

Args:
    in_chs: Number of input channels.
    out_chs: Number of output channels.
    stride: Stride for downsampling.
    dilation: Dilation rate.
devicedtyper!      TF)	ceil_modecount_include_padr/   N)	super__init__r   nn	AvgPool2dpoolIdentityr   conv)selfr-   r.   r/   r0   r4   r5   dd
avg_strideavg_pool_fn	__class__s             S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/convnext.pyr:   Downsample.__init__O   s    " /'1}V!
A:A+5?x!|-QSQ]Q]K#AzTUZ[DIDI%fqIIbIDIDI    xc                 J    U R                  U5      nU R                  U5      nU$ Forward pass.)r=   r?   r@   rH   s     rE   forwardDownsample.forwardn   s!    IIaLIIaLrG   )r?   r=   )r!   r!   NN)__name__
__module____qualname____firstlineno____doc__intr:   torchTensorrM   __static_attributes____classcell__rD   s   @rE   r+   r+   L   sn    ) && & 	&
 & 
& &> %,,  rG   r+   c                      ^  \ rS rSrSr              SS\S\\   S\S\S\\\\\4   4   S\	S	\
S
\
S\
S\\	   S\\\4   S\\   S\	4U 4S jjjrS\R                  S\R                  4S jrSrU =r$ )ConvNeXtBlocku   aF  ConvNeXt Block.

There are two equivalent implementations:
  (1) DwConv -> LayerNorm (channels_first) -> 1x1 Conv -> GELU -> 1x1 Conv; all in (N, C, H, W)
  (2) DwConv -> Permute to (N, H, W, C); LayerNorm (channels_last) -> Linear -> GELU -> Linear; Permute back

Unlike the official impl, this one allows choice of 1 or 2, 1x1 conv can be faster with appropriate
choice of LayerNorm impl, however as model size increases the tradeoffs appear to change and nn.Linear
is a better choice. This was observed with PyTorch 1.10 on 3090 GPU, it could change over time & w/ different HW.
r-   r.   kernel_sizer/   r0   	mlp_ratioconv_mlp	conv_biasuse_grnls_init_value	act_layer
norm_layer	drop_pathc           	        > XS.n[         TU ]  5         U=(       d    Un[        S5      " U5      n[        U5      nU(       d  U(       a  [        O[
        n[        U	(       a  [        O[        US9nXpl	        [        UU4UUUS   SUS.UD6U l        U" U40 UD6U l        U" U[        Xb-  5      4SU0UD6U l        U
b.  [        R                   " U
["        R$                  " U40 UD6-  5      OSU l        X:w  d  US	:w  d  US   US	   :w  a  [)        X4XES   S
.UD6U l        O[        R,                  " 5       U l        US:  a  [/        U5      U l        g[        R,                  " 5       U l        g)a  

Args:
    in_chs: Block input channels.
    out_chs: Block output channels (same as in_chs if None).
    kernel_size: Depthwise convolution kernel size.
    stride: Stride of depthwise convolution.
    dilation: Tuple specifying input and output dilation of block.
    mlp_ratio: MLP expansion ratio.
    conv_mlp: Use 1x1 convolutions for MLP and a NCHW compatible norm layer if True.
    conv_bias: Apply bias for all convolution (linear) layers.
    use_grn: Use GlobalResponseNorm in MLP (from ConvNeXt-V2)
    ls_init_value: Layer-scale init values, layer-scale applied if not None.
    act_layer: Activation layer.
    norm_layer: Normalization layer (defaults to LN if not specified).
    drop_path: Stochastic depth probability.
r3   r6   )use_convr   T)r]   r/   r0   	depthwisebiasrc   Nr!   )r/   r0           )r9   r:   r   r   r   r   r   r   r   use_conv_mlpr   conv_dwnormrT   mlpr;   	ParameterrU   onesgammar+   shortcutr>   r   re   )r@   r-   r.   r]   r/   r0   r^   r_   r`   ra   rb   rc   rd   re   r4   r5   rA   	mlp_layerrD   s                     rE   r:   ConvNeXtBlock.__init__   sh   F /#VQ<)!),	(0iJW1#PXY	$$	
 $a[	
 	
 w-"-		#$
  
 	
 Q^PiR\\-%**W2K2K"KLos
!x{hqk/I&vbvYZP[b_abDMKKMDM09B),BKKMrG   rH   r1   c                    UnU R                  U5      nU R                  (       a#  U R                  U5      nU R                  U5      nOJUR	                  SSSS5      nU R                  U5      nU R                  U5      nUR	                  SSSS5      nU R
                  b-  UR                  U R
                  R                  SSSS5      5      nU R                  U5      U R                  U5      -   nU$ )rK   r   r6      r!   )
rl   rk   rm   rn   permuterq   mulreshapere   rr   )r@   rH   rr   s      rE   rM   ConvNeXtBlock.forward   s    LLO		!AA		!Q1%A		!AA		!Q1%A::!djj((B156ANN1h 77rG   )rl   re   rq   rn   rm   rr   rk   )N   r!   r!   r!      FTFư>geluNrj   NN)rO   rP   rQ   rR   rS   rT   r   r	   r   floatboolstrr   r:   rU   rV   rM   rW   rX   rY   s   @rE   r[   r[   u   s%   	 &* 4: ""!-1.4-1!!BRBR c]BR 	BR
 BR CsCx01BR BR BR BR BR $E?BR S(]+BR !*BR BR BRH %,,  rG   r[   c                      ^  \ rS rSrSr              SS\S\S\S\S\S	\\\4   S
\\\	      S\	S\
S\
S\
S\\\4   S\\   S\\   SS4U 4S jjjrS\R                   S\R                   4S jrSrU =r$ )ConvNeXtStage   z!ConvNeXt stage (multiple blocks).Nr-   r.   r]   r/   depthr0   drop_path_ratesrb   r_   r`   ra   rc   rd   norm_layer_clr1   c                 :  > UUS.n[         TU ]  5         SU l        X:w  d  US:  d  US   US   :w  a]  US:  d  US   US   :w  a  SOSnUS   S:  a  SOSn[        R                  " U" U40 UD6[        UU4UUUS   UU
S.UD65      U l        UnO[        R                  " 5       U l        U=(       d    S/U-  n/ n[        U5       H:  nUR                  [        SUUUUS   UU   UU	U
UUU	(       a  UOUS	.UD65        UnM<     [        R                  " U6 U l        g
)av  Initialize ConvNeXt stage.

Args:
    in_chs: Number of input channels.
    out_chs: Number of output channels.
    kernel_size: Kernel size for depthwise convolution.
    stride: Stride for downsampling.
    depth: Number of blocks in stage.
    dilation: Dilation rates.
    drop_path_rates: Drop path rates for each block.
    ls_init_value: Initial value for layer scale.
    conv_mlp: Use convolutional MLP.
    conv_bias: Use bias in convolutions.
    use_grn: Use global response normalization.
    act_layer: Activation layer.
    norm_layer: Normalization layer.
    norm_layer_cl: Normalization layer for channels last.
r3   Fr!   r   r6   same)r]   r/   r0   paddingri   rj   )r-   r.   r]   r0   re   rb   r_   r`   ra   rc   rd   N )r9   r:   grad_checkpointingr;   
Sequentialr   
downsampler>   rangeappendr[   blocks)r@   r-   r.   r]   r/   r   r0   r   rb   r_   r`   ra   rc   rd   r   r4   r5   rA   ds_kspadstage_blocksirD   s                         rE   r:   ConvNeXtStage.__init__   s\   J /"'
hqkXa[.H!x{hqk'AAqE$QK!O&C mm6(R(	 !&!%a["	 	DO F kkmDO)9bTE\uA !'!!)!,+!##)1:}! !  F   mm\2rG   rH   c                     U R                  U5      nU R                  (       a;  [        R                  R	                  5       (       d  [        U R                  U5      nU$ U R                  U5      nU$ rJ   )r   r   rU   jitis_scriptingr%   r   rL   s     rE   rM   ConvNeXtStage.forward,  sV    OOA""599+A+A+C+Ct{{A.A  AArG   )r   r   r   )r|   r6   r6   r}   N      ?FTFr   NNNN)rO   rP   rQ   rR   rS   rT   r   r   r   r   r   r	   r   r   r:   rU   rV   rM   rW   rX   rY   s   @rE   r   r      s&   +  !(.59#&""!.4-104#O3O3 O3 	O3
 O3 O3 CHoO3 &d5k2O3 !O3 O3 O3 O3 S(]+O3 !*O3 $H-O3$ 
%O3 O3b %,,  rG   r   )	layernormlayernorm2d
simplenormsimplenorm2drmsnorm	rmsnorm2drd   r_   norm_epsc                    U =(       d    Sn U [         ;   aC  U(       a  [         U    S   O[         U    S   n[         U    S   n Ub  [        XS9n [        X2S9nX4$ U(       d   S5       e[        U 5      n U nUb	  [        X2S9nX4$ )Nr   r   r!   )epszcIf a norm_layer is specified, conv MLP must be used so all norm expect rank-4, channels-first input)	_NORM_MAPr   r   )rd   r_   r   r   s       rE   _get_norm_layersr   @  s    *{JY4<	*-a0)JBWXYBZz*1-
 :J#M@M $$  	rq	rx#J/
"#M@M$$rG   c            +         ^  \ rS rSrSr                       S1S\S\S\S\S\\S	4   S
\\S	4   S\\\\S	4   4   S\	\
   S\S\S\
S\S\	\   S\S\S\S\\\4   S\	\\\4      S\	\
   S\
S\
4*U 4S jjjr\R                  R                   S2S\S\\\\\4   4   4S jj5       r\R                  R                   S3S\SS4S jj5       r\R                  R                   S\R,                  4S  j5       rS4S\S\	\   SS4S! jjr     S5S"\R2                  S#\	\\\\   4      S$\S%\S&\S'\S\\\R2                     \\R2                  \\R2                     4   4   4S( jjr   S6S#\\\\   4   S)\S*\S\\   4S+ jjrS"\R2                  S\R2                  4S, jrS2S"\R2                  S-\S\R2                  4S. jjrS"\R2                  S\R2                  4S/ jrS0rU =r $ )7r)   iR  ztConvNeXt model architecture.

A PyTorch impl of : `A ConvNet for the 2020s`  - https://arxiv.org/pdf/2201.03545.pdf
Nin_chansnum_classesglobal_pooloutput_stridedepths.dimskernel_sizesrb   	stem_type
patch_sizehead_init_scalehead_norm_firsthead_hidden_sizer_   r`   ra   rc   rd   r   	drop_ratedrop_path_ratec                   > [         T%U ]  5         UUS.nUS;   d   e[        S5      " U5      n[        UUU5      u  nn[	        U5      nX l        Xl        UU l        / U l        U	S;   d   eU	S:X  aD  [        R                  " [        R                  " XS   4XUS.UD6U" US   40 UD65      U l        U
nOSU	;   a  [        US   S	-  5      OUS   n[        R                  " [        S
[        R                  " UU4SS	SUS.UD6SU	;   a  U" 5       OS
[        R                  " UUS   4SS	SUS.UD6U" US   40 UD6/5      6 U l        Sn[        R                  " 5       U l        [!        UUSS9n/ nUS   nUnSn [#        S5       H  n!US	:X  d  U!S:  a  S	OSn"UU:  a  U"S:  a  U U"-  n Sn"UU"-  nU S;   a  SOS	n#UU!   n$UR%                  ['        UU$4UU!   U"U#U 4UU!   UU!   UUUUUUUS.UD65        U$nU =R                  [)        UUSU! 3S9/-  sl        M     [        R                  " U6 U l        U=U l        U l        U(       aK  U(       a   eU" U R*                  40 UD6U l        [1        U R*                  U4UU R                  S.UD6U l        Oa[        R4                  " 5       U l        [7        U R*                  U4UUU R                  USS.UD6U l        U R2                  R*                  U l        [9        [;        [<        US9U 5        g
)af  
Args:
    in_chans: Number of input image channels.
    num_classes: Number of classes for classification head.
    global_pool: Global pooling type.
    output_stride: Output stride of network, one of (8, 16, 32).
    depths: Number of blocks at each stage.
    dims: Feature dimension at each stage.
    kernel_sizes: Depthwise convolution kernel-sizes for each stage.
    ls_init_value: Init value for Layer Scale, disabled if None.
    stem_type: Type of stem.
    patch_size: Stem patch size for patch stem.
    head_init_scale: Init scaling value for classifier weights and biases.
    head_norm_first: Apply normalization before global pool + head.
    head_hidden_size: Size of MLP hidden layer in head if not None and head_norm_first == False.
    conv_mlp: Use 1x1 conv in MLP, improves speed for small networks w/ chan last.
    conv_bias: Use bias layers w/ all convolutions.
    use_grn: Use Global Response Norm (ConvNeXt-V2) in MLP.
    act_layer: Activation layer type.
    norm_layer: Normalization layer type.
    drop_rate: Head pre-classifier dropout rate.
    drop_path_rate: Stochastic depth drop rate.
r3   )          r~   )patchoverlapoverlap_tieredoverlap_actr   r   )r]   r/   ri   tieredr6   Nrv   r!   )r]   r/   r   ri   actT)	stagewise)r!   r6   )r]   r/   r0   r   r   rb   r_   r`   ra   rc   rd   r   zstages.)num_chs	reductionmodule)	pool_typer   r   )hidden_sizer   r   rd   rc   )r   )r9   r:   r   r   r   r   r   r   feature_infor;   r   Conv2dstemr   filterstagesr   r   r   r   dictnum_featuresr   norm_prer    headr>   r   r$   r   _init_weights)&r@   r   r   r   r   r   r   r   rb   r   r   r   r   r   r_   r`   ra   rc   rd   r   r   r   r4   r5   rA   r   stem_stridemid_chsdp_ratesr   prev_chscurr_strider0   r   r/   first_dilationr.   rD   s&                                        rE   r:   ConvNeXt.__init__X  s   b 	/+++ |L1$4Z8$T!
M!),	& "QQQQ		(Gm]fmjlm47)b)DI %K6>)6KnT!W\2QUVWQXGvd		(Gf1aV_fcef$	1	t		'47e!QU^ebde47)b)	5 ( DI Kmmo,^VtT7!qA%*a!eQFm+
F"6!K"*f"4Q!N1gGMM- )O((3Qi (+!##%+  " H$x;Y`ab`cWd"e!ff7 8 mmV,4<<D1 '''&t'8'8?B?DM&!! &..	
 DI KKMDM-!!	 -%..% 	 	DI %)II$:$:D!GM?KTRrG   coarser1   c                 0    [        SU(       a  SS9$ / SQS9$ )zCreate regex patterns for parameter grouping.

Args:
    coarse: Use coarse grouping.

Returns:
    Dictionary mapping group names to regex patterns.
z^stemz^stages\.(\d+)))z^stages\.(\d+)\.downsample)r   )z^stages\.(\d+)\.blocks\.(\d+)N)z	^norm_pre)i )r   r   )r   )r@   r   s     rE   group_matcherConvNeXt.group_matcher  s)     (.$
 	
5
 	
rG   enablec                 6    U R                    H	  nXl        M     g)zgEnable or disable gradient checkpointing.

Args:
    enable: Whether to enable gradient checkpointing.
N)r   r   )r@   r   ss      rE   set_grad_checkpointingConvNeXt.set_grad_checkpointing  s     A#)  rG   c                 .    U R                   R                  $ )zGet the classifier module.)r   fc)r@   s    rE   get_classifierConvNeXt.get_classifier  s     yy||rG   c                 F    Xl         U R                  R                  X5        g)zReset the classifier head.

Args:
    num_classes: Number of classes for new classifier.
    global_pool: Global pooling type.
N)r   r   reset)r@   r   r   s      rE   reset_classifierConvNeXt.reset_classifier
  s     '		1rG   rH   indicesrm   
stop_early
output_fmtintermediates_onlyc                 P   US;   d   S5       e/ n[        [        U R                  5      U5      u  pU R                  U5      n[        U R                  5      S-
  n
[        R
                  R                  5       (       d  U(       d  U R                  nOU R                  SU	S-    n[        U5       HS  u  pU" U5      nX;   d  M  U(       a'  X:X  a"  UR                  U R                  U5      5        MB  UR                  U5        MU     U(       a  U$ WU
:X  a  U R                  U5      nX4$ )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:
    List of intermediate features or tuple of (final features, intermediates).
)NCHWzOutput shape must be NCHW.r!   N)
r#   lenr   r   rU   r   r   	enumerater   r   )r@   rH   r   rm   r   r   r   intermediatestake_indices	max_indexlast_idxr   feat_idxstages                 rE   forward_intermediatesConvNeXt.forward_intermediates  s    , Y&D(DD&"6s4;;7G"Q IIaLt{{#a'99!!##:[[F[[)a-0F(0OHaA'H0!((q)9:!((+  1   xa ArG   
prune_norm
prune_headc                     [        [        U R                  5      U5      u  pEU R                  SUS-    U l        U(       a  [        R                  " 5       U l        U(       a  U R                  SS5        U$ )a  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.
Nr!   r    )r#   r   r   r;   r>   r   r   )r@   r   r   r   r   r   s         rE   prune_intermediate_layers"ConvNeXt.prune_intermediate_layersF  s[      #7s4;;7G"Qkk.9q=1KKMDM!!!R(rG   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ )z/Forward pass through feature extraction layers.)r   r   r   rL   s     rE   forward_featuresConvNeXt.forward_features^  s/    IIaLKKNMM!rG   
pre_logitsc                 R    U(       a  U R                  USS9$ U R                  U5      $ )zForward pass through classifier head.

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

Returns:
    Output tensor.
T)r  )r   )r@   rH   r  s      rE   forward_headConvNeXt.forward_heade  s&     1;tyyty,L		!LrG   c                 J    U R                  U5      nU R                  U5      nU$ rJ   )r  r  rL   s     rE   rM   ConvNeXt.forwardq  s'    !!!$a rG   )
r   r   r   r   r   r   r   r   r   r   )rv     avgr   rv   rv   	   rv   `           r|   r   r   r~   r   FNFTFr   NNrj   rj   NNF)T)N)NFFr   F)r!   FT)!rO   rP   rQ   rR   rS   rT   r   r   r	   r   r   r   r   r:   rU   r   ignorer   r   r   r   r;   Moduler   r   rV   r   r   r  r  rM   rW   rX   rY   s   @rE   r)   r)   R  s    #$!#&2$789-1$%'$).2""!.49=(,!$&1NSNS NS 	NS
 NS #s(ONS S/NS  U38_ 45NS $E?NS NS NS #NS "NS 'smNS NS  !NS" #NS$ S(]+%NS& !sH}!56'NS( uo)NS* +NS, "-NS NS` YY
D 
T#uS$Y?O:O5P 
 
$ YY*T *T * * YY		  2C 2hsm 2W[ 2 8<$$',0 ||0  eCcN340  	0 
 0  0  !%0  
tELL!5tELL7I)I#JJ	K0 h ./$#	3S	>*  	
 
c0%,, 5<< 
Mell 
M 
M 
M %,,  rG   r   r   namer   r1   c                 F   [        U [        R                  5      (       aL  [        U R                  SS9  U R
                  b*  [        R                  R                  U R
                  5        gg[        U [        R                  5      (       a  [        U R                  SS9  [        R                  R                  U R
                  5        U(       aR  SU;   aK  U R                  R                  R                  U5        U R
                  R                  R                  U5        gggg)zInitialize model weights.

Args:
    module: Module to initialize.
    name: Module name.
    head_init_scale: Scale factor for head initialization.
g{Gz?)stdNhead.)
isinstancer;   r   r   weightri   initzeros_Lineardatamul_)r   r  r   s      rE   r   r   x  s     &"))$$fmm-;;"GGNN6;;' #	FBII	&	&fmm-
v{{#GtOMM##O4KK!!/2 $4 
'rG   c                 |   SU ;   d  SU ;   a  U $ SU ;   a  U S   n 0 nSU ;   a  U R                  5        VVs0 s H0  u  p4UR                  S5      (       d  M  UR                  SS5      U_M2     nnnSU ;   a3  U S   US'   [        R                  " U S   R
                  S	   5      US
'   U$ SU ;   aA  U S   US'   U S   US'   U S   US'   [        R                  " U S   R
                  S	   5      US
'   U$ S	SKnU R                  5        GH,  u  p4UR                  SS5      nUR                  SSU5      nUR                  SSU5      nUR                  SS5      nUR                  SS5      nSU;   aB  UR                  SS5      nUR                  SS5      nUR                  UR
                  S    5      nUR                  S!S"5      nUR                  S#5      (       a  UR                  S$S%5      nUR                  S&:X  a4  S'U;  a.  UR                  5       U   R
                  nUR                  U5      nXBU'   GM/     U$ s  snnf )(zRemap FB checkpoints -> timm zhead.norm.weightznorm_pre.weightmodelzvisual.trunk.stem.0.weightzvisual.trunk.r   zvisual.head.proj.weightzhead.fc.weightr   zhead.fc.biaszvisual.head.mlp.fc1.weightzhead.pre_logits.fc.weightzvisual.head.mlp.fc1.biaszhead.pre_logits.fc.biaszvisual.head.mlp.fc2.weightNzdownsample_layers.0.zstem.zstages.([0-9]+).([0-9]+)zstages.\1.blocks.\2z#downsample_layers.([0-9]+).([0-9]+)zstages.\1.downsample.\2dwconvrl   pwconvzmlp.fcgrnzgrn.betazmlp.grn.biasz	grn.gammazmlp.grn.weightrw   r  zhead.fc.znorm.rm   z	head.normr6   r   )items
startswithreplacerU   zerosshaperesubrz   ndim
state_dict)r-  r!  out_dictkvr*  model_shapes          rE   checkpoint_filter_fnr2    sQ   Z'+<
+J*(
H#z1BLBRBRBTvBT$!XYXdXdetXu5AIIor2A5BTv$
2)34M)NH%&',{{:>W3X3^3^_`3a'bH^$  *Z74>?[4\H012<=W2XH./)34P)QH%&',{{:>Z3[3a3abc3d'eH^$  "II,g6FF.0FJFF9;UWXYIIh	*IIh)A:		*n5A		+'78A		!''"+&AIIgz*<<  		&+.A66Q;6?**,Q/55K		+&A! #$ O= ws   H8H8c           	          UR                  SS5      S:X  a  UR                  SS5        [        [        X4[        [        SSS9S	.UD6nU$ )
Npretrained_cfgr   fcmaepretrained_strictF)r   r!   r6   rv   T)out_indicesflatten_sequential)pretrained_filter_fnfeature_cfg)get
setdefaultr"   r)   r2  r   )variant
pretrainedkwargsr!  s       rE   _create_convnextr@    s[    zz"B'72 	-u5 '1\dK 	E
 LrG   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr	  rv      rC  r|   r|         ?bicubicstem.0head.fcz
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationmeanr  
first_conv
classifierlicenser
   r   rI  r?  s     rE   _cfgrT    s3    =vI%.Bi $* rG   c                 8    U SSSSS[         [        SSSS	S
SS.UE$ )Nr	  rB  rD  rE  rF  rG  rH  zcc-by-nc-4.0zarXiv:2301.00808zGConvNeXt-V2: Co-designing and Scaling ConvNets with Masked Autoencodersz/https://github.com/facebookresearch/ConvNeXt-V2)rI  r   rJ  rK  rL  rM  rN  r  rO  rP  rQ  	paper_ids
paper_name
origin_urlrR  rS  s     rE   _cfgv2rY    s<    =vI%.Bi!0B_G
 
 
rG   zconvnext_tiny.in12k_ft_in1kztimm/gffffff?)rv      rZ  )	hf_hub_idrL  test_input_sizetest_crop_pctzconvnext_small.in12k_ft_in1kz&convnext_zepto_rms.ra4_e3600_r224_in1k)      ?r^  r^  )r[  rN  r  z*convnext_zepto_rms_ols.ra4_e3600_r224_in1kg?)r[  rN  r  rL  zconvnext_atto.d2_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_atto_d2-01bb0f51.pth)rI  r[  r\  r]  zconvnext_atto_ols.a2_in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_atto_ols_a2-78d1c8f3.pthzconvnext_atto_rms.untrained)rv      r_  )r\  r]  zconvnext_femto.d1_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_femto_d1-d71d5b4c.pthzconvnext_femto_ols.d1_in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_femto_ols_d1-246bf2ed.pthzconvnext_pico.d1_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_pico_d1-10ad7f0d.pthzconvnext_pico_ols.d1_in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_pico_ols_d1-611f0ca7.pth)rI  r[  rL  r\  r]  zconvnext_nano.in12k_ft_in1kzconvnext_nano.d1h_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_nano_d1h-7eb4bdea.pthzconvnext_nano_ols.d1h_in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_nano_ols_d1h-ae424a9a.pthzconvnext_tiny_hnf.a2h_in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_tiny_hnf_a2h-ab7e9df2.pthz convnext_nano.r384_in12k_ft_in1k)rv   r  r  )   r`  )r[  rJ  rK  rL  zconvnext_tiny.in12k_ft_in1k_384squash)r[  rJ  rK  rL  	crop_modez convnext_small.in12k_ft_in1k_384zconvnext_nano.in12ki-.  )r[  rL  r   zconvnext_nano.r384_in12k)r[  rJ  rK  rL  r   zconvnext_nano.r384_ad_in12kzconvnext_tiny.in12kzconvnext_small.in12kzconvnext_tiny.fb_in22k_ft_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_1k_224.pthzconvnext_small.fb_in22k_ft_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_small_22k_1k_224.pthzconvnext_base.fb_in22k_ft_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_224.pthzconvnext_large.fb_in22k_ft_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_224.pthz convnext_xlarge.fb_in22k_ft_in1kzJhttps://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_224_ema.pthzconvnext_tiny.fb_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pthzconvnext_small.fb_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_small_1k_224_ema.pthzconvnext_base.fb_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_base_1k_224_ema.pthzconvnext_large.fb_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_large_1k_224_ema.pthz"convnext_tiny.fb_in22k_ft_in1k_384zDhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_1k_384.pth)rI  r[  rJ  rK  rL  rb  z#convnext_small.fb_in22k_ft_in1k_384zEhttps://dl.fbaipublicfiles.com/convnext/convnext_small_22k_1k_384.pthz"convnext_base.fb_in22k_ft_in1k_384zDhttps://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_384.pthz#convnext_large.fb_in22k_ft_in1k_384zEhttps://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_384.pthz$convnext_xlarge.fb_in22k_ft_in1k_384zJhttps://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_384_ema.pthzconvnext_tiny.fb_in22kzAhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_224.pthiQU  )rI  r[  r   zconvnext_small.fb_in22kzBhttps://dl.fbaipublicfiles.com/convnext/convnext_small_22k_224.pthzconvnext_base.fb_in22kzAhttps://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pthzconvnext_large.fb_in22kzBhttps://dl.fbaipublicfiles.com/convnext/convnext_large_22k_224.pthzconvnext_xlarge.fb_in22kzChttps://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_224.pthz#convnextv2_nano.fcmae_ft_in22k_in1kzWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_224_ema.ptz'convnextv2_nano.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_384_ema.ptz#convnextv2_tiny.fcmae_ft_in22k_in1kzWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_224_ema.ptz'convnextv2_tiny.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_384_ema.ptz#convnextv2_base.fcmae_ft_in22k_in1kzWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_224_ema.ptz'convnextv2_base.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_384_ema.ptz$convnextv2_large.fcmae_ft_in22k_in1kzXhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_224_ema.ptz(convnextv2_large.fcmae_ft_in22k_in1k_384zXhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_384_ema.ptz'convnextv2_huge.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_384_ema.ptz'convnextv2_huge.fcmae_ft_in22k_in1k_512zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_512_ema.pt)rv      rc  )   rd  zconvnextv2_atto.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_atto_1k_224_ema.ptzconvnextv2_femto.fcmae_ft_in1kzVhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_femto_1k_224_ema.ptzconvnextv2_pico.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_pico_1k_224_ema.ptzconvnextv2_nano.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_nano_1k_224_ema.ptzconvnextv2_tiny.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_tiny_1k_224_ema.ptzconvnextv2_base.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_base_1k_224_ema.ptzconvnextv2_large.fcmae_ft_in1kzVhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_large_1k_224_ema.ptzconvnextv2_huge.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_huge_1k_224_ema.ptzconvnextv2_atto.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_atto_1k_224_fcmae.ptzconvnextv2_femto.fcmaez[https://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_femto_1k_224_fcmae.ptzconvnextv2_pico.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_pico_1k_224_fcmae.ptzconvnextv2_nano.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_nano_1k_224_fcmae.ptzconvnextv2_tiny.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_tiny_1k_224_fcmae.ptzconvnextv2_base.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_base_1k_224_fcmae.ptzconvnextv2_large.fcmaez[https://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_large_1k_224_fcmae.ptzconvnextv2_huge.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_huge_1k_224_fcmae.ptzconvnextv2_small.untrainedz/convnext_base.clip_laion2b_augreg_ft_in12k_in1k)r   r   )r[  rN  r  rJ  rK  rL  z3convnext_base.clip_laion2b_augreg_ft_in12k_in1k_384)r[  rN  r  rJ  rK  rL  rb  z6convnext_large_mlp.clip_laion2b_soup_ft_in12k_in1k_320)rv   @  re  )
   rf  z6convnext_large_mlp.clip_laion2b_soup_ft_in12k_in1k_384z)convnext_base.clip_laion2b_augreg_ft_in1kz,convnext_base.clip_laiona_augreg_ft_in1k_384z.convnext_large_mlp.clip_laion2b_augreg_ft_in1kz2convnext_large_mlp.clip_laion2b_augreg_ft_in1k_384z*convnext_xxlarge.clip_laion2b_soup_ft_in1kz*convnext_base.clip_laion2b_augreg_ft_in12k)r[  rN  r  r   rJ  rK  rL  z1convnext_large_mlp.clip_laion2b_soup_ft_in12k_320z3convnext_large_mlp.clip_laion2b_augreg_ft_in12k_384)r[  rN  r  r   rJ  rK  rL  rb  z1convnext_large_mlp.clip_laion2b_soup_ft_in12k_384z+convnext_xxlarge.clip_laion2b_soup_ft_in12kzconvnext_base.clip_laion2b  )r[  rN  r  rJ  rK  rL  r   z!convnext_base.clip_laion2b_augregr     zdinov3-license)r[  rL  r   rQ  )rv      ri  )   rj  )zconvnext_base.clip_laionazconvnext_base.clip_laiona_320z$convnext_base.clip_laiona_augreg_320z&convnext_large_mlp.clip_laion2b_augregz&convnext_large_mlp.clip_laion2b_ft_320z+convnext_large_mlp.clip_laion2b_ft_soup_320z"convnext_xxlarge.clip_laion2b_soupz$convnext_xxlarge.clip_laion2b_rewindzconvnext_tiny.dinov3_lvd1689mzconvnext_small.dinov3_lvd1689mzconvnext_base.dinov3_lvd1689mzconvnext_large.dinov3_lvd1689mztest_convnext.r160_in1kztest_convnext2.r160_in1kztest_convnext3.r160_in1kc           	      L    [        SSSSS9n[        SSU 0[        U40 UD6D6nU$ )Nr6   r6   r~   r6   r   @      r_  Tr   r   r   r_   rd   r>  )convnext_zepto_rmsr   r@  r>  r?  
model_argsr!  s       rE   rq  rq    s9     \0BT^jkJgjgDQ[Lf_eLfgELrG   c           	      N    [        SSSSSS9n[        SSU 0[        U40 UD6D6nU$ )	Nrl  rm  Tr   r   )r   r   r_   rd   r   r>  )convnext_zepto_rms_olsrr  rs  s       rE   rv  rv    sA     "4tP\huwJk*kPTU_PjciPjkELrG   c           	      J    [        SSSS9n[        SSU 0[        U40 UD6D6nU$ )Nr6   r6      r6   (   P   ri  re  Tr   r   r_   r>  )convnext_attorr  rs  s       rE   r~  r~    s5     \0BTRJbbtJGaZ`GabELrG   c           	      L    [        SSSSS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  rz  Tr   r   r   r_   r   r>  )convnext_atto_olsrr  rs  s       rE   r  r    s9     \0BT]mnJfZf4PZKe^dKefELrG   c           	      L    [        SSSSS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  rz  Tr   rp  r>  )convnext_atto_rmsrr  rs  s       rE   r  r    s9     \0BT^ijJfZf4PZKe^dKefELrG   c           	      J    [        SSSS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  0   r  r  r  Tr}  r>  )convnext_femtorr  rs  s       rE   r  r    s5     \0BTRJc*cZHb[aHbcELrG   c           	      L    [        SSSSS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  r  Tr   r  r>  )convnext_femto_olsrr  rs  s       rE   r  r    s9     \0BT]mnJgjgDQ[Lf_eLfgELrG   c           	      J    [        SSSS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  rn  ro  r_  rc  Tr}  r>  )convnext_picorr  rs  s       rE   r  r    5     \0CdSJbbtJGaZ`GabELrG   c           	      L    [        SSSSS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  r  Tr   r  r>  )convnext_pico_olsrr  rs  s       rE   r  r    s9     \0Cd_opJfZf4PZKe^dKefELrG   c           	      J    [        SSSS9n[        SSU 0[        U40 UD6D6nU$ )Nr6   r6   r   r6   r|  ri  re  rg  Tr}  r>  )convnext_nanorr  rs  s       rE   r  r    r  rG   c           	      L    [        SSSSS9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  Tr   r  r>  )convnext_nano_olsrr  rs  s       rE   r  r    s9     \0Cd^ghJfZf4PZKe^dKefELrG   c           	      L    [        SSSSS9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  T)r   r   r   r_   r>  )convnext_tiny_hnfrr  rs  s       rE   r  r    s:     \0CUYdhiJfZf4PZKe^dKefELrG   c           	      H    [        SSS9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  r   r   r>  )convnext_tinyrr  rs  s       rE   r  r    s1    \0CDJbbtJGaZ`GabELrG   c           	      P    [        / SQ/ SQS9n[        SSU 0[        U40 UD6D6nU$ )Nrv   rv      rv   r  r  r>  )convnext_smallrr  rs  s       rE   r  r    s1    ]1DEJc*cZHb[aHbcELrG   c           	      P    [        / SQ/ SQS9n[        SSU 0[        U40 UD6D6nU$ )Nr  ro  r_  rc  rh  r  r>  )convnext_baserr  rs  s       rE   r  r    s1    ]1FGJbbtJGaZ`GabELrG   c           	      P    [        / SQ/ SQS9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  r  r     r  r>  )convnext_largerr  rs  s       rE   r  r    s1    ]1FGJc*cZHb[aHbcELrG   c           	      R    [        / SQ/ SQSS9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  r  )r   r   r   r>  )convnext_large_mlprr  rs  s       rE   r  r    s5    ]1FY]^JgjgDQ[Lf_eLfgELrG   c           	      P    [        / SQ/ SQS9n[        SSU 0[        U40 UD6D6nU$ )Nr  )r_  rc  rh  i   r  r>  )convnext_xlargerr  rs  s       rE   r  r    s1    ]1GHJd:djIc\bIcdELrG   c           	      r    [        / SQ/ SQUR                  SS5      S9n[        SSU 0[        U40 UD6D6nU$ )N)rv   r~      rv   )r  r  r  i   r   h㈵>)r   r   r   r>  )convnext_xxlarger   popr@  rs  s       rE   r  r    sC    ]1GRXR\R\]gimRnoJeJe$zJd]cJdeELrG   c           	      N    [        SSSS SS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  rz  Tr   r   ra   rb   r_   r>  )convnextv2_attorr  rs  s       rE   r  r    s?     "4dRVaegJd:djIc\bIcdELrG   c           	      N    [        SSSS SS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  r  Tr  r>  )convnextv2_femtorr  rs  s       rE   r  r    s?     "4dRVaegJeJe$zJd]cJdeELrG   c           	      N    [        SSSS SS9n[        SSU 0[        U40 UD6D6nU$ )Nrx  r  Tr  r>  )convnextv2_picorr  rs  s       rE   r  r  &  ?     "5tSWbfhJd:djIc\bIcdELrG   c           	      N    [        SSSS SS9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  Tr  r>  )convnextv2_nanorr  rs  s       rE   r  r  /  r  rG   c           	      L    [        SSSS S9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  Tr   r   ra   rb   r>  )convnextv2_tinyrr  rs  s       rE   r  r  8  s6    \0CTaefJd:djIc\bIcdELrG   c           	      T    [        / SQ/ SQSS S9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  Tr  r>  )convnextv2_smallrr  rs  s       rE   r  r  ?  s6    ]1DdbfgJeJe$zJd]cJdeELrG   c           	      T    [        / SQ/ SQSS S9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  Tr  r>  )convnextv2_baserr  rs  s       rE   r  r  F  s7    ]1FPTdhiJd:djIc\bIcdELrG   c           	      T    [        / SQ/ SQSS S9n[        SSU 0[        U40 UD6D6nU$ )Nr  r  Tr  r>  )convnextv2_largerr  rs  s       rE   r  r  M  s7    ]1FPTdhiJeJe$zJd]cJdeELrG   c           	      T    [        / SQ/ SQSS S9n[        SSU 0[        U40 UD6D6nU$ )Nr  )i`  i  i  i   Tr  r>  )convnextv2_hugerr  rs  s       rE   r  r  T  s7    ]1GQUeijJd:djIc\bIcdELrG   c           	      t    [        / SQ/ SQUR                  SS5      SS9n[        SSU 0[        U40 UD6D6nU$ )	N)r!   r6   r~   r6   )   r   r  rn  r   r  	gelu_tanhr   r   r   rc   r>  )test_convnextr  rs  s       rE   r  r  [  sC    \0@6::V`bfKgs~JbbtJGaZ`GabELrG   c           	      t    [        / SQ/ SQUR                  SS5      SS9n[        SSU 0[        U40 UD6D6nU$ )	Nr!   r!   r!   r!   r   rn  r  ro  r   r  r  r  r>  )test_convnext2r  rs  s       rE   r  r  b  sF    \0AFJJWacgLht  AJc*cZHb[aHbcELrG   c           	      v    [        / SQ/ SQUR                  SS5      SSS9n[        S	SU 0[        U40 UD6D6nU$ )
Nr  r  r   r  )r|   rj  rj  rv   silu)r   r   r   r   rc   r>  )test_convnext3r  rs  s       rE   r  r  i  sM    "3fjjUY>Ziu  BHIJc*cZHb[aHbcELrG   )convnext_tiny_in22ft1kconvnext_small_in22ft1kconvnext_base_in22ft1kconvnext_large_in22ft1kconvnext_xlarge_in22ft1kconvnext_tiny_384_in22ft1kconvnext_small_384_in22ft1kconvnext_base_384_in22ft1kconvnext_large_384_in22ft1kconvnext_xlarge_384_in22ft1kconvnext_tiny_in22kconvnext_small_in22kconvnext_base_in22kconvnext_large_in22kconvnext_xlarge_in22k)Nr   r  )r   )brS   	functoolsr   typingr   r   r   r   r   r	   rU   torch.nnr;   	timm.datar
   r   r   r   timm.layersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    _builderr"   	_featuresr#   _manipulater$   r%   	_registryr&   r'   r(   __all__r  r+   r[   r   r   r   r   r   r   r)   r   r2  r@  rT  rY  default_cfgsrq  rv  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rO   r   rG   rE   <module>r     s3  N  ? ?   d d     * + + 4 Y Y,& &R`BII `F[BII [~ y)+,!:.7#W%	%x}!5 % %QV %$cryy cL	3")) 38C= 3RW 3bf 3('T % b&!4}C$Ib&
 #D}C%Ib& -d//3b& 1$/3b&  T A%T;!b&(   E%T";)b&0 "4%T$;1b&6 d B%T;7b&> !$ F%T#;?b&F T A%T;Gb&N   E}C"IOb&V "4}C$IWb&\ d B}CI]b&d !$ F}C#Ieb&l !$ F}C#Imb&t ' Hs)Dub&| &t8sh(X}b&B ' Hsx)YCb&J 45*Kb&P  HsPU!WQb&V "4 HsPU$WWb&\ 45*]b&b D5*cb&j %dR%S':kb&r &tS%S(:sb&z %dR%S':{b&B &tS%S(:Cb&J 'X%S):Kb&T TR%S:Ub&\ dS%S:]b&d TR%S:eb&l dS%S:mb&v )$R Hsh+Xwb&~ *4S Hsh,Xb&F )$R Hsh+XGb&N *4S Hsh,XOb&V +DX Hsh-XWb&` dOab&h tP ib&p dOqb&x tP yb&@ Q!Ab&J *6e%S,:Kb&R .ve Hsh0XSb&Z *6e%S,:[b&b .ve Hsh0Xcb&j *6e%S,:kb&r .ve Hsh0Xsb&z +Ff%S-:{b&B /f Hsh1XCb&J .ve Hsh0XKb&R .ve Hsh0XSb&\ $Vc%T&;]b&d %fd%T';eb&l $Vc%T&;mb&t $Vc%S&:ub&| $Vc%S&:}b&D $Vc%S&:Eb&L %fd%S':Mb&T $Vc%S&:Ub&^ Vh_b&f figb&n Vhob&v Vhwb&~ Vhb&F VhGb&N fiOb&V VhWb&` !$&ab&f 6t? FS8Bgb&n :4? Hsh<Xob&v =d? Hs?Dwb&~ =d? Hsh?Xb&H	 0? FS2BI	b&P	 3D? Hs5DQ	b&X	 5d? FS7Y	b&b	 9$? Hsh;c	b&l	 1$? FS3Bm	b&v	 1$? FS3Bw	b&~	 8? Hs:D	b&F
 :4? Hsh<XG
b&N
 8? Hsh:XO
b&V
 24? FS4BW
b&b
 !$? FSc#Sc
b&j
 (? FSc*Sk
b&r
 "&? FSc"S &*? HsPS&U -1? HsPS-U /3? FSc/S /3? HsPS/U 48? HsPS4U +/? FSd+T -1? FSd-T &* 	& '+ 	' &* 	& '+ 	'  $/ FT C !%/ FT!C !%/ FT!C{b& bJ h   (      X   X   (   h      X      X   X      (      (   h   8   H   8   H   8   8   8   H   8   H   8      (   (   H>@>@ B"F#H"F#H$J35357' rG   