
    kh                        d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlmZmZ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!m"Z" ddlm#Z#m$Z$ d	d
l%m&Z& d	dl'm(Z( d	dl)m*Z*m+Z+ d	dl,m-Z-m.Z.m/Z/ dgZ0 G d dejb                        Z2 G d dejb                        Z3 G d dejb                        Z4eefeefe!e"fe!e"feefeefdZ5de	ee6f   de7de8fdZ9 G d dejb                        Z:ddejb                  dee6   de8ddfd Z;d! Z<dd"Z=dd#Z>dd$Z? e-i d% e>d&d'd(d)      d* e>d&d'd(d)      d+ e>d&d,d,-      d. e>d&d,d,d/0      d1 e>d2d&d(d'3      d4 e>d5d&d(d'3      d6 e>d7d'8      d9 e>d:d&d(d'3      d; e>d<d&d(d'3      d= e>d>d&d(d'3      d? e>d@d&d'd(dA      dB e>d&d'd(d)      dC e>dDd&d'd(dA      dE e>dFd&d'd(dA      dG e>dHd&d'd(dA      dI e>d&dJdKdL      dM e>d&dJdKddNO      i dP e>d&dJdKddNO      dQ e>d&d'dRS      dT e>d&dJdKddRU      dV e>d&dJdKddRU      dW e>d&d'dRS      dX e>d&d'dRS      dY e>dZd&d(d3      d[ e>d\d&d(d3      d] e>d^d&d(d3      d_ e>d`d&d(d3      da e>dbd&d(d3      dc e>ddd&d(d3      de e>dfd&d(d3      dg e>dhd&d(d3      di e>djd&d(d3      dk e>dld&dJdKddNm      dn e>dod&dJdKddNm      i dp e>dqd&dJdKddNm      dr e>dsd&dJdKddNm      dt e>dud&dJdKddNm      dv e>dwd&dxy      dz e>d{d&dxy      d| e>d}d&dxy      d~ e>dd&dxy      d e>dd&dxy      d e?dd&d(d3      d e?dd&dJdKddNm      d e?dd&d(d3      d e?dd&dJdKddNm      d e?dd&d(d3      d e?dd&dJdKddNm      d e?dd&d(d3      d e?dd&dJdKddNm      d e?dd&dJdKddNm      i d e?dd&ddddNm      d e?dd&d(d'3      d e?dd&d(d'3      d e?dd&d(d'3      d e?dd&d(d3      d e?dd&d(d3      d e?dd&d(d3      d e?dd&d(d3      d e?dd&d(d3      d e?dd&dy      d e?dd&dy      d e?dd&dy      d e?dd&dy      d e?dd&dy      d e?dd&dy      d e?dd&dy      d e?dd&dy      i d e>       d e>d&eed7dd      d e>d&eedJdKddN      d e>d&eeddd      d e>d&eedJdKddN      d e>d&eed7dd      d e>d&eedJdKd      d e>d&eed7dd      d e>d&eedJdKddN      d e>d&eed7dd      d e>d&eedRd7ddȫ      d e>d&eedRdddȫ      d e>d&eedRdJdKddN˫      d e>d&eedRdJdKddN˫      d e>d&eedRd7ddȫ      d e>d&eed7dddϬЫ      d e>d&eed7dddϬЫ       e>d&eed7dddϬЫ       e>d&eeddddϬЫ       e>d&eeddddϬЫ       e>d&eed7dddҬЫ       e>d&eeddddҬЫ       e>d&eeddddҬЫ       e>d&eed7dddӬЫ       e>d&eed7dddӬЫ       e>d&d,d,ddd'       e>d&d,d,ddd'       e>d&d,d,ddd'      d֜      Z@e.dde:fdׄ       ZAe.dde:fd؄       ZBe.dde:fdل       ZCe.dde:fdڄ       ZDe.dde:fdۄ       ZEe.dde:fd܄       ZFe.dde:fd݄       ZGe.dde:fdބ       ZHe.dde:fd߄       ZIe.dde:fd       ZJe.dde:fd       ZKe.dde:fd       ZLe.dde:fd       ZMe.dde:fd       ZNe.dde:fd       ZOe.dde:fd       ZPe.dde:fd       ZQe.dde:fd       ZRe.dde:fd       ZSe.dde:fd       ZTe.dde:fd       ZUe.dde:fd       ZVe.dde:fd       ZWe.dde:fd       ZXe.dde:fd       ZYe.dde:fd       ZZe.dde:fd       Z[e.dde:fd       Z\e.dde:fd       Z]e.dde:fd       Z^e.dde:fd       Z_ e/e`dYd[d]d_dadkdndpdrdtdvdzd|d~dd       y)ax   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MlpGlobalResponseNormMlpLayerNorm2d	LayerNorm	RmsNorm2dRmsNormcreate_conv2dget_act_layerget_norm_layermake_divisible	to_ntuple)SimpleNorm2d
SimpleNorm)NormMlpClassifierHeadClassifierHead   )build_model_with_cfg)feature_take_indices)named_applycheckpoint_seq)generate_default_cfgsregister_modelregister_model_deprecationsConvNeXtc                   r     e Zd ZdZddededededdf
 fdZd	ej                  dej                  fd
Z xZ	S )
DownsamplezDownsample module for ConvNeXt.in_chsout_chsstridedilationreturnNc                 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                         | _        ||k7  rt        ||dd      | _        yt        j                         | _        y)zInitialize Downsample module.

        Args:
            in_chs: Number of input channels.
            out_chs: Number of output channels.
            stride: Stride for downsampling.
            dilation: Dilation rate.
        r       TF)	ceil_modecount_include_pad)r-   N)	super__init__r   nn	AvgPool2dpoolIdentityr   conv)selfr+   r,   r-   r.   
avg_strideavg_pool_fn	__class__s          P/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/convnext.pyr5   zDownsample.__init__>   s     	'1}V!
A:A+5?x!|-QSQ]Q]K#AzTUZ[DIDIW%fgqCDIDI    xc                 J    | j                  |      }| j                  |      }|S Forward pass.)r8   r:   r;   rA   s     r?   forwardzDownsample.forwardT   s!    IIaLIIaLr@   r    r    )
__name__
__module____qualname____doc__intr5   torchTensorrF   __classcell__r>   s   @r?   r*   r*   ;   sJ    )&s &S &# &S &Y] &, %,, r@   r*   c                        e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 ddedee   dededeeeeef   f   dede	d	e	d
e	dee   dee
ef   dee   def fdZdej                  dej                  fdZ xZS )ConvNeXtBlockab  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-   r.   	mlp_ratioconv_mlp	conv_biasuse_grnls_init_value	act_layer
norm_layer	drop_pathc           	         t         |           |xs |} t        d      |      }t        |      }|s|rt        nt
        }t        |	rt        nt        |      }|| _	        t        |||||d   d|      | _         ||      | _         ||t        ||z        |      | _        |
+t        j                   |
t#        j$                  |      z        nd| _        ||k7  s|dk7  s|d   |d   k7  rt)        ||||d   	      | _        nt        j,                         | _        |d
kD  rt/        |      | _        yt        j,                         | _        y)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.
        r1   )use_convr   T)rS   r-   r.   	depthwisebias)rY   Nr    )r-   r.           )r4   r5   r   r   r   r   r   r   r   use_conv_mlpr   conv_dwnormrL   mlpr6   	ParameterrM   onesgammar*   shortcutr9   r   r[   )r;   r+   r,   rS   r-   r.   rT   rU   rV   rW   rX   rY   rZ   r[   	mlp_layerr>   s                  r?   r5   zConvNeXtBlock.__init__g   s/   B 	#V9Q<)!),	(0iJW1#PXY	$$#a[
 w'	Wc)g*=&>)TJWJcR\\-%**W2E"EFim
W!x{hqk/I&vwvPXYZP[\DMKKMDM09B),BKKMr@   rA   r/   c                    |}| j                  |      }| j                  r#| j                  |      }| j                  |      }nJ|j	                  dddd      }| j                  |      }| j                  |      }|j	                  dddd      }| j
                  -|j                  | j
                  j                  dddd            }| j                  |      | j                  |      z   }|S )rD   r   r1      r    )
rb   ra   rc   rd   permuterg   mulreshaper[   rh   )r;   rA   rh   s      r?   rF   zConvNeXtBlock.forward   s    LLO		!AA		!Q1%A		!AA		!Q1%A::!djj((B156ANN1h 77r@   )N   r    rG      FTFư>geluNr`   )rH   rI   rJ   rK   rL   r   r	   r   floatboolstrr   r5   rM   rN   rF   rO   rP   s   @r?   rR   rR   [   s   	 &* 4: ""!-1.4-1!9R9R c]9R 	9R
 9R CsCx019R 9R 9R 9R 9R $E?9R S(]+9R !*9R 9Rv %,, r@   rR   c                        e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 ddedededededeeef   d	eee      d
ede	de	de	de
eef   dee   dee   ddf fdZdej                  dej                  fdZ xZS )ConvNeXtStagez!ConvNeXt stage (multiple blocks).Nr+   r,   rS   r-   depthr.   drop_path_ratesrX   rU   rV   rW   rY   rZ   norm_layer_clr/   c                    t         |           d| _        ||k7  s|dkD  s|d   |d   k7  rW|dkD  s|d   |d   k7  rdnd}|d   dkD  rdnd}t        j                   ||      t        |||||d   ||
            | _        |}nt        j                         | _        |xs dg|z  }g }t        |      D ]3  }|j                  t        ||||d   ||   ||	|
|||	r|n|             |}5 t        j                  | | _        y	)
a  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.
        Fr    r   r1   same)rS   r-   r.   paddingr_   r`   )r+   r,   rS   r.   r[   rX   rU   rV   rW   rY   rZ   N)r4   r5   grad_checkpointingr6   
Sequentialr   
downsampler9   rangeappendrR   blocks)r;   r+   r,   rS   r-   ry   r.   rz   rX   rU   rV   rW   rY   rZ   r{   ds_kspadstage_blocksir>   s                      r?   r5   zConvNeXtStage.__init__   s4   F 	"'W
hqkXa[.H!x{hqk'AAqE$QK!O&C mm6" %!%a["DO F kkmDO)9bTE\u 	A'!!)!,+!##)1:}!  F	 mm\2r@   rA   c                     | j                  |      }| j                  r6t        j                  j	                         st        | j                  |      }|S | j                  |      }|S rC   )r   r   rM   jitis_scriptingr$   r   rE   s     r?   rF   zConvNeXtStage.forward  sS    OOA""599+A+A+Ct{{A.A  AAr@   )rp   r1   r1   rG   N      ?FTFrs   NN)rH   rI   rJ   rK   rL   r   r   r   rt   ru   r	   rv   r   r5   rM   rN   rF   rO   rP   s   @r?   rx   rx      s   +  !(.59#&""!.4-104J3J3 J3 	J3
 J3 J3 CHoJ3 &d5k2J3 !J3 J3 J3 J3 S(]+J3 !*J3 $H-J3  
!J3X %,, r@   rx   )	layernormlayernorm2d
simplenormsimplenorm2drmsnorm	rmsnorm2drZ   rU   norm_epsc                     | xs d} | t         v rF|rt         |    d   nt         |    d   }t         |    d   } |t        | |      } t        ||      }| |fS |sJ d       t        |       } | }|t        ||      }| |fS )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   )rZ   rU   r   r{   s       r?   _get_norm_layersr     s    *{JY4<	*-a0)JBWXYBZz*1-
 :J#Mx@M }$$  	rq	rx#J/
"#Mx@M}$$r@   c            +           e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d/dededededeedf   d	eedf   d
eeeedf   f   dee	   dedede	de
dee   de
de
de
deeef   deeeef      dee	   de	de	f* fdZej                  j                  d0de
deeeeef   f   fd       Zej                  j                  d1de
ddfd       Zej                  j                  dej*                  fd       Zd2dedee   ddfd Z	 	 	 	 	 d3d!ej0                  d"eeeee   f      d#e
d$e
d%ed&e
deeej0                     eej0                  eej0                     f   f   fd'Z	 	 	 d4d"eeee   f   d(e
d)e
dee   fd*Zd!ej0                  dej0                  fd+Zd0d!ej0                  d,e
dej0                  fd-Zd!ej0                  dej0                  fd.Z xZS )5r(   z|ConvNeXt 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_sizesrX   	stem_type
patch_sizehead_init_scalehead_norm_firsthead_hidden_sizerU   rV   rW   rY   rZ   r   	drop_ratedrop_path_ratec                 D   t         #|           |dv sJ  t        d      |      }t        |||      \  }}t	        |      }|| _        || _        g | _        |	dv sJ |	dk(  rBt        j                  t        j                  ||d   |
|
|       ||d               | _        |
}nd|	v rt        |d   dz        n|d   }t        j                  t        d	t        j                  ||d
dd|      d|	v r |       nd	t        j                  ||d   d
dd|       ||d         g       | _        d}t        j                         | _        t        j                   d|t#        |            j%                  |      D cg c]  }|j'                          }}g }|d   }|}d}t)        d      D ]  }|dk(  s|dkD  rdnd} ||k\  r| dkD  r|| z  }d} || z  }|dv rdnd}!||   }"|j+                  t-        ||"||   | |!|f||   ||   |||||||             |"}| xj                  t/        ||d|       gz  c_         t        j                  | | _        |x| _        | _        |rD|rJ  || j0                        | _        t7        | j0                  ||| j                        | _        n_t        j:                         | _        t=        | j0                  |||| j                  |d      | _        | j8                  j0                  | _        t?        tA        tB        |      |        y	c c}w )a  
        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.
        )          rq   )patchoverlapoverlap_tieredoverlap_actr   r   )rS   r-   r_   tieredr1   Nrk   r    )rS   r-   r~   r_   act)r    r1   )rS   r-   r.   ry   rz   rX   rU   rV   rW   rY   rZ   r{   zstages.)num_chs	reductionmodule)	pool_typer   rs   )hidden_sizer   r   rZ   rY   )r   )"r4   r5   r   r   r   r   r   feature_infor6   r   Conv2dstemr   filterstagesrM   linspacesumsplittolistr   r   rx   dictnum_featuresr   norm_prer   headr9   r   r#   r   _init_weights)$r;   r   r   r   r   r   r   r   rX   r   r   r   r   r   rU   rV   rW   rY   rZ   r   r   r   r{   stem_stridemid_chsrA   dp_ratesr   prev_chscurr_strider.   r   r-   first_dilationr,   r>   s$                                      r?   r5   zConvNeXt.__init__0  sQ   ^ 	+++#y|L1$4Z8$T!
M!),	&"QQQQ		(DGJ]fg47#DI %K6>)6KnT!W\2QUVWQXGvd		(G1aV_`$	1	t		'47!QU^_47#	5 ( DI Kmmo(-q.#f+(V(\(\]c(de1AHHJee7!q 	gA%*a!eQFm+
F"6!K"*f"4Q!N1gGMM-(O((3Qi (+!##%+   H$x;Y`ab`cWd"e!ff5	g6 mmV,4<<D1 '''&t'8'89DM&!!%..	DI KKMDM-!!,%..% DI %)II$:$:D!GM?KTRw fs   8Lcoarser/   c                 2    t        d|rd      S g d      S )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     r?   group_matcherzConvNeXt.group_matcher  s)     (.$
 	
5
 	
r@   enablec                 4    | j                   D ]	  }||_         y)zEnable or disable gradient checkpointing.

        Args:
            enable: Whether to enable gradient checkpointing.
        N)r   r   )r;   r   ss      r?   set_grad_checkpointingzConvNeXt.set_grad_checkpointing  s      	*A#)A 	*r@   c                 .    | j                   j                  S )zGet the classifier module.)r   fc)r;   s    r?   get_classifierzConvNeXt.get_classifier  s     yy||r@   c                 J    || _         | j                  j                  ||       y)zReset 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      r?   reset_classifierzConvNeXt.reset_classifier  s     '		[1r@   rA   indicesrc   
stop_early
output_fmtintermediates_onlyc                    |dv sJ d       g }t        t        | j                        |      \  }}	| j                  |      }t        | j                        dz
  }
t        j
                  j                         s|s| j                  }n| j                  d|	dz    }t        |      D ]K  \  }} ||      }||v s|r&||
k(  r!|j                  | j                  |             ;|j                  |       M |r|S |
k(  r| j                  |      }||fS )aK  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   rM   r   r   	enumerater   r   )r;   rA   r   rc   r   r   r   intermediatestake_indices	max_indexlast_idxr   feat_idxstages                 r?   forward_intermediateszConvNeXt.forward_intermediates  s   , Y&D(DD&"6s4;;7G"Qi IIaLt{{#a'99!!#:[[F[[)a-0F(0 	,OHeaA<'H0!((q)9:!((+	,   xa A-r@   
prune_norm
prune_headc                     t        t        | j                        |      \  }}| j                  d|dz    | _        |rt        j                         | _        |r| j                  dd       |S )aE  Prune layers not required for specified intermediates.

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

        Returns:
            List of indices that were kept.
        Nr    r    )r"   r   r   r6   r9   r   r   )r;   r   r   r   r   r   s         r?   prune_intermediate_layersz"ConvNeXt.prune_intermediate_layers  s]      #7s4;;7G"Qikk.9q=1KKMDM!!!R(r@   c                 l    | j                  |      }| j                  |      }| j                  |      }|S )z/Forward pass through feature extraction layers.)r   r   r   rE   s     r?   forward_featureszConvNeXt.forward_features/  s/    IIaLKKNMM!r@   
pre_logitsc                 N    |r| j                  |d      S | j                  |      S )zForward pass through classifier head.

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

        Returns:
            Output tensor.
        T)r   )r   )r;   rA   r   s      r?   forward_headzConvNeXt.forward_head6  s&     1;tyyty,L		!Lr@   c                 J    | j                  |      }| j                  |      }|S rC   )r   r   rE   s     r?   rF   zConvNeXt.forwardB  s'    !!!$a r@   )rk     avgr   rk   rk   	   rk   `           rp   rr   r   rq   r   FNFTFrs   NNr`   r`   F)T)N)NFFr   F)r    FT)rH   rI   rJ   rK   rL   rv   r   r	   r   rt   ru   r   r5   rM   r   ignorer   r   r   r   r6   Moduler   r   rN   r   r   r   r   rF   rO   rP   s   @r?   r(   r(   *  s    #$!#&2$789-1$%'$).2""!.49=(,!$&-GSGS GS 	GS
 GS #s(OGS S/GS  U38_ 45GS $E?GS GS GS #GS "GS 'smGS GS  !GS" #GS$ S(]+%GS& !sH}!56'GS( uo)GS* +GS, "-GSR 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 %,, r@   r   r   namer   r/   c                 .   t        | t        j                        rNt        | j                  d       | j
                  *t        j                  j                  | j
                         yyt        | t        j                        rt        | j                  d       t        j                  j                  | j
                         |rPd|v rK| j                  j                  j                  |       | j
                  j                  j                  |       yyyy)zInitialize model weights.

    Args:
        module: Module to initialize.
        name: Module name.
        head_init_scale: Scale factor for head initialization.
    g{Gz?)stdNhead.)
isinstancer6   r   r   weightr_   initzeros_Lineardatamul_)r   r   r   s      r?   r   r   I  s     &"))$fmm-;;"GGNN6;;' #	FBII	&fmm-
v{{#GtOMM##O4KK!!/2 $4 
'r@   c                 <   d| v sd| v r| S d| v r| d   } i }d| v r| j                         D ci c]*  \  }}|j                  d      s|j                  dd      |, }}}d| v r2| d   |d<   t        j                  | d   j
                  d	         |d
<   |S d| v r@| d   |d<   | d   |d<   | d   |d<   t        j                  | d   j
                  d	         |d
<   |S d	dl}| j                         D ]#  \  }}|j                  dd      }|j                  dd|      }|j                  dd|      }|j                  dd      }|j                  dd      }d|v rB|j                  dd      }|j                  dd      }|j                  |j
                  d          }|j                  d!d"      }|j                  d#      r|j                  d$d%      }|j                  d&k(  r2d'|vr.|j                         |   j
                  }|j                  |      }|||<   & |S c c}}w )(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dwconvrb   pwconvzmlp.fcgrnzgrn.betazmlp.grn.biasz	grn.gammazmlp.grn.weightrl   r   zhead.fc.znorm.rc   z	head.normr1   r   )items
startswithreplacerM   zerosshaperesubro   ndim
state_dict)r  r	  out_dictkvr  model_shapes          r?   checkpoint_filter_fnr  ]  sS   Z'+<
+J*(
H#z1BLBRBRBTv$!QXYXdXdetXuAIIor2A5vv$
2)34M)NH%&',{{:>W3X3^3^_`3a'bH^$  *Z74>?[4\H012<=W2XH./)34P)QH%&',{{:>Z3[3a3abc3d'eH^$  " 1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   HHc                     |j                  dd      dk(  r|j                  dd       t        t        | |ft        t        dd      d	|}|S )
Npretrained_cfgr   fcmaepretrained_strictF)r   r    r1   rk   T)out_indicesflatten_sequential)pretrained_filter_fnfeature_cfg)get
setdefaultr!   r(   r  r   )variant
pretrainedkwargsr	  s       r?   _create_convnextr(    s]    zz"B'72 	-u5 ':1\dK 	E
 Lr@   c                 0    | dddddt         t        ddd
|S )	Nr   rk      r+  rp   rp         ?bicubicstem.0head.fc)
urlr   
input_size	pool_sizecrop_pctinterpolationmeanr   
first_conv
classifierr
   r   r1  r'  s     r?   _cfgr;    s0    =vI%.Bi  r@   c                 8    | dddddt         t        dddd	d
dd|S )Nr   r*  r,  r-  r.  r/  r0  zcc-by-nc-4.0zarXiv:2301.00808zGConvNeXt-V2: Co-designing and Scaling ConvNets with Masked Autoencodersz/https://github.com/facebookresearch/ConvNeXt-V2)r1  r   r2  r3  r4  r5  r6  r   r7  r8  license	paper_ids
paper_name
origin_urlr9  r:  s     r?   _cfgv2rA    s<    =vI%.Bi!0B_G
 
 
r@   zconvnext_tiny.in12k_ft_in1kztimm/gffffff?)rk      rB  )	hf_hub_idr4  test_input_sizetest_crop_pctzconvnext_small.in12k_ft_in1kz&convnext_zepto_rms.ra4_e3600_r224_in1k)      ?rF  rF  )rC  r6  r   z*convnext_zepto_rms_ols.ra4_e3600_r224_in1kg?)rC  r6  r   r4  zconvnext_atto.d2_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_atto_d2-01bb0f51.pth)r1  rC  rD  rE  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)rk      rG  )rD  rE  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)r1  rC  r4  rD  rE  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)rk   r   r   )   rH  )rC  r2  r3  r4  zconvnext_tiny.in12k_ft_in1k_384squash)rC  r2  r3  r4  	crop_modez convnext_small.in12k_ft_in1k_384zconvnext_nano.in12ki-.  )rC  r4  r   zconvnext_nano.r384_in12k)rC  r2  r3  r4  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)r1  rC  r2  r3  r4  rJ  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  )r1  rC  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)rk      rK  )   rL  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   )rC  r6  r   r2  r3  r4  z3convnext_base.clip_laion2b_augreg_ft_in12k_in1k_384)rC  r6  r   r2  r3  r4  rJ  z6convnext_large_mlp.clip_laion2b_soup_ft_in12k_in1k_320)rk   @  rM  )
   rN  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)rC  r6  r   r   r2  r3  r4  z1convnext_large_mlp.clip_laion2b_soup_ft_in12k_320z3convnext_large_mlp.clip_laion2b_augreg_ft_in12k_384)rC  r6  r   r   r2  r3  r4  rJ  z1convnext_large_mlp.clip_laion2b_soup_ft_in12k_384z+convnext_xxlarge.clip_laion2b_soup_ft_in12kzconvnext_base.clip_laion2b  )rC  r6  r   r2  r3  r4  r   z!convnext_base.clip_laion2b_augregr      )rk      rQ  )   rR  )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test_convnext.r160_in1kztest_convnext2.r160_in1kztest_convnext3.r160_in1kc           	      R    t        dddd      }t        dd| it        |fi |}|S )Nr1   r1   rq   r1   r   @      rG  Tr   r   r   rU   rZ   r&  )convnext_zepto_rmsr   r(  r&  r'  
model_argsr	  s       r?   rY  rY  8  s9     \0BT^jkJgjgDQ[Lf_eLfgELr@   c           	      T    t        ddddd      }t        dd| it        |fi |}|S )	NrT  rU  Tr   r   )r   r   rU   rZ   r   r&  )convnext_zepto_rms_olsrZ  r[  s       r?   r^  r^  @  sA     "4tP\huwJk*kPTU_PjciPjkELr@   c           	      P    t        ddd      }t        dd| it        |fi |}|S )Nr1   r1      r1   (   P   rQ  rM  Tr   r   rU   r&  )convnext_attorZ  r[  s       r?   rf  rf  I  s5     \0BTRJbbtJGaZ`GabELr@   c           	      R    t        dddd      }t        dd| it        |fi |}|S )Nr`  rb  Tr   r   r   rU   r   r&  )convnext_atto_olsrZ  r[  s       r?   ri  ri  Q  s9     \0BT]mnJfZf4PZKe^dKefELr@   c           	      R    t        dddd      }t        dd| it        |fi |}|S )Nr`  rb  Tr   rX  r&  )convnext_atto_rmsrZ  r[  s       r?   rk  rk  Y  s9     \0BT^ijJfZf4PZKe^dKefELr@   c           	      P    t        ddd      }t        dd| it        |fi |}|S )Nr`  0   r   r   r   Tre  r&  )convnext_femtorZ  r[  s       r?   ro  ro  a  s5     \0BTRJc*cZHb[aHbcELr@   c           	      R    t        dddd      }t        dd| it        |fi |}|S )Nr`  rm  Tr   rh  r&  )convnext_femto_olsrZ  r[  s       r?   rq  rq  i  s9     \0BT]mnJgjgDQ[Lf_eLfgELr@   c           	      P    t        ddd      }t        dd| it        |fi |}|S )Nr`  rV  rW  rG  rK  Tre  r&  )convnext_picorZ  r[  s       r?   rt  rt  q  5     \0CdSJbbtJGaZ`GabELr@   c           	      R    t        dddd      }t        dd| it        |fi |}|S )Nr`  rs  Tr   rh  r&  )convnext_pico_olsrZ  r[  s       r?   rw  rw  y  s9     \0Cd_opJfZf4PZKe^dKefELr@   c           	      P    t        ddd      }t        dd| it        |fi |}|S )Nr1   r1   r   r1   rd  rQ  rM  rO  Tre  r&  )convnext_nanorZ  r[  s       r?   r{  r{    ru  r@   c           	      R    t        dddd      }t        dd| it        |fi |}|S )Nry  rz  Tr   rh  r&  )convnext_nano_olsrZ  r[  s       r?   r}  r}    s9     \0Cd^ghJfZf4PZKe^dKefELr@   c           	      R    t        dddd      }t        dd| it        |fi |}|S )Nr   r   T)r   r   r   rU   r&  )convnext_tiny_hnfrZ  r[  s       r?   r  r    s:     \0CUYdhiJfZf4PZKe^dKefELr@   c           	      N    t        dd      }t        dd| it        |fi |}|S )Nr   r   r   r   r&  )convnext_tinyrZ  r[  s       r?   r  r    s1    \0CDJbbtJGaZ`GabELr@   c           	      V    t        g dg d      }t        dd| it        |fi |}|S )Nrk   rk      rk   r   r  r&  )convnext_smallrZ  r[  s       r?   r  r    s1    ]1DEJc*cZHb[aHbcELr@   c           	      V    t        g dg d      }t        dd| it        |fi |}|S )Nr  rW  rG  rK  rP  r  r&  )convnext_baserZ  r[  s       r?   r  r    s1    ]1FGJbbtJGaZ`GabELr@   c           	      V    t        g dg d      }t        dd| it        |fi |}|S )Nr  r   r   r      r  r&  )convnext_largerZ  r[  s       r?   r  r    s1    ]1FGJc*cZHb[aHbcELr@   c           	      X    t        g dg dd      }t        dd| it        |fi |}|S )Nr  r  r  )r   r   r   r&  )convnext_large_mlprZ  r[  s       r?   r  r    s5    ]1FY]^JgjgDQ[Lf_eLfgELr@   c           	      V    t        g dg d      }t        dd| it        |fi |}|S )Nr  )rG  rK  rP  i   r  r&  )convnext_xlargerZ  r[  s       r?   r  r    s1    ]1GHJd:djIc\bIcdELr@   c           	      x    t        g dg d|j                  dd            }t        dd| it        |fi |}|S )N)rk   rq      rk   )r   r   r  i   r   h㈵>)r   r   r   r&  )convnext_xxlarger   popr(  r[  s       r?   r  r    sC    ]1GRXR\R\]gimRnoJeJe$zJd]cJdeELr@   c           	      T    t        dddd d      }t        dd| it        |fi |}|S )Nr`  rb  Tr   r   rW   rX   rU   r&  )convnextv2_attorZ  r[  s       r?   r  r    s?     "4dRVaegJd:djIc\bIcdELr@   c           	      T    t        dddd d      }t        dd| it        |fi |}|S )Nr`  rm  Tr  r&  )convnextv2_femtorZ  r[  s       r?   r  r    s?     "4dRVaegJeJe$zJd]cJdeELr@   c           	      T    t        dddd d      }t        dd| it        |fi |}|S )Nr`  rs  Tr  r&  )convnextv2_picorZ  r[  s       r?   r  r    ?     "5tSWbfhJd:djIc\bIcdELr@   c           	      T    t        dddd d      }t        dd| it        |fi |}|S )Nry  rz  Tr  r&  )convnextv2_nanorZ  r[  s       r?   r  r    r  r@   c           	      R    t        dddd       }t        dd| it        |fi |}|S )Nr   r   Tr   r   rW   rX   r&  )convnextv2_tinyrZ  r[  s       r?   r  r    s6    \0CTaefJd:djIc\bIcdELr@   c           	      Z    t        g dg ddd       }t        dd| it        |fi |}|S )Nr  r   Tr  r&  )convnextv2_smallrZ  r[  s       r?   r  r    s6    ]1DdbfgJeJe$zJd]cJdeELr@   c           	      Z    t        g dg ddd       }t        dd| it        |fi |}|S )Nr  r  Tr  r&  )convnextv2_baserZ  r[  s       r?   r  r    s7    ]1FPTdhiJd:djIc\bIcdELr@   c           	      Z    t        g dg ddd       }t        dd| it        |fi |}|S )Nr  r  Tr  r&  )convnextv2_largerZ  r[  s       r?   r  r    s7    ]1FPTdhiJeJe$zJd]cJdeELr@   c           	      Z    t        g dg ddd       }t        dd| it        |fi |}|S )Nr  )i`  i  i  i   Tr  r&  )convnextv2_hugerZ  r[  s       r?   r  r  
  s7    ]1GQUeijJd:djIc\bIcdELr@   c           	      z    t        g dg d|j                  dd      d      }t        dd| it        |fi |}|S )	N)r    r1   rq   r1   )   r   rn  rV  r   r  	gelu_tanhr   r   r   rY   r&  )test_convnextr  r[  s       r?   r  r    sC    \0@6::V`bfKgs~JbbtJGaZ`GabELr@   c           	      z    t        g dg d|j                  dd      d      }t        dd| it        |fi |}|S )	Nr    r    r    r    r   rV  r   rW  r   r  r  r  r&  )test_convnext2r  r[  s       r?   r  r    sF    \0AFJJWacgLht  AJc*cZHb[aHbcELr@   c           	      |    t        g dg d|j                  dd      dd      }t        d	d| it        |fi |}|S )
Nr  r  r   r  )rp   rR  rR  rk   silu)r   r   r   r   rY   r&  )test_convnext3r  r[  s       r?   r  r    sM    "3fjjUY>Ziu  BHIJc*cZHb[aHbcELr@   )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   )arK   	functoolsr   typingr   r   r   r   r   r	   rM   torch.nnr6   	timm.datar
   r   r   r   timm.layersr   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*   rR   rx   r   rv   ru   rt   r   r(   r   r  r(  r;  rA  default_cfgsrY  r^  rf  ri  rk  ro  rq  rt  rw  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH    r@   r?   <module>r     s  N  ? ?   d dx x x x 0 = * + 4 Y Y, @WBII WtVBII Vt y)+,!:.7#W%	%x}!5 % %QV %$\ryy \~3")) 38C= 3RW 3bf 3('T % G&!4}C$IG&
 #D}C%IG& -d//3G& 1$/3G&  T A%T;!G&(   E%T";)G&0 "4%T$;1G&6 d B%T;7G&> !$ F%T#;?G&F T A%T;GG&N   E}C"IOG&V "4}C$IWG&\ d B}CI]G&d !$ F}C#IeG&l !$ F}C#ImG&t ' Hs)DuG&| &t8sh(X}G&B ' Hsx)YCG&J 45*KG&P  HsPU!WQG&V "4 HsPU$WWG&\ 45*]G&b D5*cG&j %dR%S':kG&r &tS%S(:sG&z %dR%S':{G&B &tS%S(:CG&J 'X%S):KG&T TR%S:UG&\ dS%S:]G&d TR%S:eG&l dS%S:mG&v )$R Hsh+XwG&~ *4S Hsh,XG&F )$R Hsh+XGG&N *4S Hsh,XOG&V +DX Hsh-XWG&` dOaG&h tP iG&p dOqG&x tP yG&@ Q!AG&J *6e%S,:KG&R .ve Hsh0XSG&Z *6e%S,:[G&b .ve Hsh0XcG&j *6e%S,:kG&r .ve Hsh0XsG&z +Ff%S-:{G&B /f Hsh1XCG&J .ve Hsh0XKG&R .ve Hsh0XSG&\ $Vc%T&;]G&d %fd%T';eG&l $Vc%T&;mG&t $Vc%S&:uG&| $Vc%S&:}G&D $Vc%S&:EG&L %fd%S':MG&T $Vc%S&:UG&^ Vh_G&f figG&n VhoG&v VhwG&~ VhG&F VhGG&N fiOG&V VhWG&` !$&aG&f 6t? FS8BgG&n :4? Hsh<XoG&v =d? Hs?DwG&~ =d? Hsh?XG&H	 0? FS2BI	G&P	 3D? Hs5DQ	G&X	 5d? FS7Y	G&b	 9$? Hsh;c	G&l	 1$? FS3Bm	G&v	 1$? FS3Bw	G&~	 8? Hs:D	G&F
 :4? Hsh<XG
G&N
 8? Hsh:XO
G&V
 24? FS4BW
G&b
 !$? FSc#Sc
G&j
 (? FSc*Sk
G&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EG& GT 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' r@   