
    RЦimj                        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  SSK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"  S/r# " S S\RH                  5      r% " S S\RH                  5      r& " S S\RH                  5      r' " S S\RH                  5      r( " S S\RH                  5      r)S1S jr*S2S jr+\!" \+" SS9\+" SS9\+" SS9\+" SS9\+" SS9\+" SS9\+" SSSSSS9\+" SSSSSS9\+" SSSSSS9\+" SSSSSS9\+" SSS9\+" SSS9S .5      r,S!\)4S" jr-S3S# jr.\"S3S$\)4S% jj5       r/\"S3S$\)4S& jj5       r0\"S3S$\)4S' jj5       r1\"S3S$\)4S( jj5       r2\"S3S$\)4S) jj5       r3\"S3S$\)4S* jj5       r4\"S3S$\)4S+ jj5       r5\"S3S$\)4S, jj5       r6\"S3S$\)4S- jj5       r7\"S3S$\)4S. jj5       r8\"S3S$\)4S/ jj5       r9\"S3S$\)4S0 jj5       r:g)4aZ  FocalNet

As described in `Focal Modulation Networks` - https://arxiv.org/abs/2203.11926

Significant modifications and refactoring from the original impl at https://github.com/microsoft/FocalNet

This impl is/has:
* fully convolutional, NCHW tensor layout throughout, seemed to have minimal performance impact but more flexible
* re-ordered downsample / layer so that striding always at beginning of layer (stage)
* no input size constraints or input resolution/H/W tracking through the model
* torchscript fixed and a number of quirks cleaned up
* feature extraction support via `features_only=True`
    )partial)CallableListOptionalTupleTypeUnionNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)MlpDropPathLayerNorm2dLayerScale2dtrunc_normal_ClassifierHeadNormMlpClassifierHeadcalculate_drop_path_rates   )build_model_with_cfg)feature_take_indices)named_apply
checkpoint)generate_default_cfgsregister_modelFocalNetc                      ^  \ rS rSrSSSSS\SS4S\S\S	\S
\S\S\S\S\S\\	R                     4U 4S jjjrS rSrU =r$ )FocalModulation-      TF        Ndimfocal_windowfocal_levelfocal_factorbiasuse_post_normnormalize_modulator	proj_drop
norm_layerc                   > XS.n[         TU ]  5         Xl        X l        X0l        X@l        X`l        Xpl        XU R                  S-   /U l        [        R                  " USU-  U R                  S-   -   4SUS.UD6U l        [        R                  " X4SUS.UD6U l        [        R                  " 5       U l        [        R                  " X4SS0UD6U l        [        R                   " U5      U l        [        R$                  " 5       U l        / U l        [+        U R                  5       H  nU R
                  U-  U R                  -   nU R&                  R-                  [        R.                  " [        R                  " X4XUS-  SS.UD6[        R                  " 5       5      5        U R(                  R-                  U5        M     U R                  (       a  U	" U40 UD6U l        g [        R0                  " 5       U l        g )Ndevicedtyper   r    )kernel_sizer&   r/   F)r/   groupspaddingr&   )super__init__r"   r#   r$   r%   r'   r(   input_splitnnConv2dfhGELUactprojDropoutr)   
ModuleListfocal_layerskernel_sizesrangeappend
SequentialIdentitynorm)selfr"   r#   r$   r%   r&   r'   r(   r)   r*   r-   r.   ddkr/   	__class__s                  S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/focalnet.pyr3   FocalModulation.__init__.   s    /(&(*#6 d&6&6&:;3C4+;+;a+? @aaVZa^`a3DDD779IIc<A<<	I.MMOt''(A++a/$2C2CCK$$R]]		#tQ\`aQahmtqst	&  $$[1 ) .2-?-?Js)b)	R[[]	    c                 &   U R                  U5      n[        R                  " XR                  S5      u  p#nSn[	        U R
                  5       H  u  pgU" U5      nXSUS S 2XfS-   24   -  -   nM!     U R                  UR                  SSS95      nXXUS S 2U R                  S 24   -  -   nU R                  (       a  XPR                  S-   -  nX R                  U5      -  n	U R                  U	5      n	U R                  U	5      n	U R                  U	5      n	U	$ )Nr   r   )r       T)keepdim)r7   torchsplitr4   	enumerater>   r:   meanr$   r(   r8   rD   r;   r)   )
rE   xqctxgatesctx_alllfocal_layer
ctx_globalx_outs
             rI   forwardFocalModulation.forwardY   s   FF1IA'7'7; '(9(9:NAc"CeAqQwJ&7 77G ; XXchhvth<=
q$2B2B2C/C)DDD ##!1!1A!56G FF7O#		%  		% u%rK   )r:   r"   r7   r%   r>   r$   r#   r8   r4   r?   rD   r(   r;   r)   r'   )__name__
__module____qualname____firstlineno__r   intboolfloatr   r5   Moduler3   r\   __static_attributes____classcell__rH   s   @rI   r   r   -   s     !""'(-!*5)S)S )S 	)S
 )S )S  )S "&)S )S RYY)S )SV rK   r   c                      ^  \ rS rSrSrSSSSSSSSS\R                  \S	S	4S
\S\	S\S\S\
S\
S\
S\\	   S\	S\	S\\R                     S\\R                     4U 4S jjjrS rSrU =r$ )FocalNetBlockt   z$Focal Modulation Network Block.
          @r   rM   F-C6?r!   Nr"   	mlp_ratior$   r#   r'   use_post_norm_in_modulationr(   layerscale_valuer)   	drop_path	act_layerr*   c           
        > XS.n[         TU ]  5         Xl        X l        X@l        X0l        XPl        U(       d	  U" U40 UD6O[        R                  " 5       U l	        [        U4UU R
                  UUU	US.UD6U l        U(       a	  U" U40 UD6O[        R                  " 5       U l        Ub  [        X40 UD6O[        R                  " 5       U l        U
S:  a  [        U
5      O[        R                  " 5       U l        U(       d	  U" U40 UD6O[        R                  " 5       U l        [%        SU['        X-  5      UU	SS.UD6U l        U(       a	  U" U40 UD6O[        R                  " 5       U l        Ub  [        X40 UD6O[        R                  " 5       U l        U
S:  a  [        U
5      U l        g[        R                  " 5       U l        g)a  
Args:
    dim: Number of input channels.
    mlp_ratio: Ratio of mlp hidden dim to embedding dim.
    focal_level: Number of focal levels.
    focal_window: Focal window size at first focal level.
    use_post_norm: Whether to use layer norm after modulation.
    use_post_norm_in_modulation: Whether to use layer norm in modulation.
    layerscale_value: Initial layerscale value.
    proj_drop: Dropout rate.
    drop_path: Stochastic depth rate.
    act_layer: Activation layer.
    norm_layer: Normalization layer.
r,   )r#   r$   r'   r(   r)   r*   Nr!   T)in_featureshidden_featuresrr   dropuse_conv )r2   r3   r"   rn   r#   r$   r'   r5   rC   norm1r   
modulation
norm1_postr   ls1r   
drop_path1norm2r   rb   mlp
norm2_postls2
drop_path2)rE   r"   rn   r$   r#   r'   ro   r(   rp   r)   rq   rr   r*   r-   r.   rF   rH   s                   rI   r3   FocalNetBlock.__init__x   s   > /"(&*2?Z*r*R[[]
)	
%((5 3!	
 	
 4A*S/B/bkkm@P@\<<<bdbmbmbo1:R(9-R[[]2?Z*r*R[[]
 
0
 
 4A*S/B/bkkm@P@\<<<bdbmbmbo1:R(9-R[[]rK   c                 R   UnU R                  U5      nU R                  U5      nU R                  U5      nX R                  U R	                  U5      5      -   nXR                  U R                  U R                  U R                  U R                  U5      5      5      5      5      -   nU$ N)
ry   rz   r{   r}   r|   r   r   r   r   r~   )rE   rS   shortcuts      rI   r\   FocalNetBlock.forward   s     JJqMOOAOOAtxx{33 $**Q-9P)Q RSSrK   )r"   r}   r   r$   r#   r|   r   r   rn   rz   ry   r{   r~   r   r'   )r^   r_   r`   ra   __doc__r5   r9   r   rb   rd   rc   r   r   re   r3   r\   rf   rg   rh   s   @rI   rj   rj   t   s      "  !"'05(-04!!)+*5BSBS BS 	BS
 BS  BS *.BS "&BS 'uoBS BS BS BIIBS RYYBS BSH rK   rj   c                       ^  \ rS rSrSrSSSSSSSSSSS\S	S	4S
\S\S\S\S\S\S\S\S\S\S\S\	\   S\S\
\\\   4   S\\R                     4U 4S jjjr\R"                  R$                  SS j5       rS rSrU =r$ )FocalNetStage   z3A basic Focal Transformer layer for one stage.
    rl   Tr   Frm   r!   Nr"   out_dimdepthrn   
downsampler$   r#   use_overlap_downr'   ro   r(   rp   r)   rq   r*   c                   > UUS.n[         TU ]  5         Xl        X0l        SU l        U(       a  [        SUUSUUS.UD6U l        O[        R                  " 5       U l        [        R                  " [        U5       Vs/ s H4  n[        SUUUUU	U
UUU[        U[        5      (       a  UU   OUUS.UD6PM6     sn5      U l        gs  snf )a  
Args:
    dim: Number of input channels.
    out_dim: Number of output channels.
    depth: Number of blocks.
    mlp_ratio: Ratio of mlp hidden dim to embedding dim.
    downsample: Downsample layer at start of the layer.
    focal_level: Number of focal levels
    focal_window: Focal window size at first focal level
    use_overlap_down: User overlapped convolution in downsample layer.
    use_post_norm: Whether to use layer norm after modulation.
    use_post_norm_in_modulation: Whether to use layer norm in modulation.
    layerscale_value: Initial layerscale value
    proj_drop: Dropout rate for projections.
    drop_path: Stochastic depth rate.
    norm_layer: Normalization layer.
r,   Fr    )in_chsout_chsstrideoverlapr*   )r"   rn   r$   r#   r'   ro   r(   rp   r)   rq   r*   Nrx   )r2   r3   r"   r   grad_checkpointing
Downsampler   r5   rC   r=   r@   rj   
isinstancelistblocks)rE   r"   r   r   rn   r   r$   r#   r   r'   ro   r(   rp   r)   rq   r*   r-   r.   rF   irH   s                       rI   r3   FocalNetStage.__init__   s    J /
"'( (% DO !kkmDO mm 5\%# "  #')+,G$7!1#*4Y*E*E)A,9%  "%# $ %#s   =;Cc                     Xl         g r   )r   )rE   enables     rI   set_grad_checkpointing$FocalNetStage.set_grad_checkpointing  s    "(rK   c                     U R                  U5      nU R                   HL  nU R                  (       a0  [        R                  R                  5       (       d  [        X!5      nMD  U" U5      nMN     U$ r   )r   r   r   rO   jitis_scriptingr   )rE   rS   blks      rI   r\   FocalNetStage.forward  sS    OOA;;C&&uyy/E/E/G/Gs&F	 
 rK   )r   r   r"   r   r   T)r^   r_   r`   ra   r   r   rb   rd   rc   r   r	   r   r   r5   re   r3   rO   r   ignorer   r\   rf   rg   rh   s   @rI   r   r      s&     "#  !%*"'05(-04!35*5%G$G$ G$ 	G$
 G$ G$ G$ G$ #G$  G$ *.G$ "&G$ 'uoG$ G$ UDK/0G$  RYY!G$ G$R YY) ) rK   r   c                   t   ^  \ rS rSr     S
S\S\S\S\S\\\R                        4
U 4S jjjr
S rS	rU =r$ )r   i&  r   r   r   r   r*   c                   > XgS.n[         TU ]  5         X0l        Sn	Un
U(       a  US;   d   eUS:X  a  Su  pO
US:X  a  Su  p[        R                  " X4XU	S.UD6U l        Ub  U" U40 UD6U l        g	[        R                  " 5       U l        g	)
z

Args:
    in_chs: Number of input image channels.
    out_chs: Number of linear projection output channels.
    stride: Downsample stride.
    overlap: Use overlapping convolutions if True.
    norm_layer: Normalization layer.
r,   r   )r       r   )   r    r    )rM   r   )r/   r   r1   N)r2   r3   r   r5   r6   r;   rC   rD   )rE   r   r   r   r   r*   r-   r.   rF   r1   r/   rH   s              rI   r3   Downsample.__init__(  s    & /V###{'+$W1'+$IIfm;_fmjlm	1;1GJw-"-	R[[]	rK   c                 J    U R                  U5      nU R                  U5      nU$ r   )r;   rD   rE   rS   s     rI   r\   Downsample.forwardI  s!    IIaLIIaLrK   )rD   r;   r   )r   FNNN)r^   r_   r`   ra   rb   rc   r   r   r5   re   r3   r\   rf   rg   rh   s   @rI   r   r   &  sm     !48[[ [ 	[
 [ !bii1[ [B rK   r   c            (          ^  \ rS rSrSrSSSSSSS	S
SSSSSSSSSS\" \SS9SS4S\S\S\S\S\	\S4   S\
S\	\S4   S\	\S4   S\S\S\S\S\\   S \
S!\\
   S"\
S#\
S$\
S%\\R                     4&U 4S& jjjr\R$                  R&                  S' 5       r\R$                  R&                  S<S( j5       r\R$                  R&                  S=S) j5       r\R$                  R&                  S*\R                  4S+ j5       rS>S\S\\   4S, jjr     S?S-\R2                  S.\\\\\   4      S/\S0\S1\S2\S*\\\R2                     \	\R2                  \\R2                     4   4   4S3 jjr   S@S.\\\\   4   S4\S5\4S6 jjrS7 rS<S8\4S9 jjrS: r S;r!U =r"$ )Ar   iO  z," Focal Modulation Networks (FocalNets)
    rM     avg`   r    r       r    rl   )r    r    r    r    rM   rM   rM   rM   FN      ?r!   g?gh㈵>)epsin_chansnum_classesglobal_pool	embed_dimdepths.rn   focal_levelsfocal_windowsr   r'   ro   r(   head_hidden_sizehead_init_scalerp   	drop_rateproj_drop_ratedrop_path_rater*   c                   > [         TU ]  5         UUS.n[        U5      U l        [	        U R                  5       Vs/ s H  nUSU-  -  PM     nnX l        Xl        X@l        US   =U l        U l	        / U l
        [        SUUS   U	US.UD6U l        US   n[        U[        U5      5      n/ n[	        U R                  5       H}  nUU   n[        SUUUU   UUS:  UU   UU   U	U
UUUUU[        USU 5      [        USUS-    5       US.UD6nUnUU/-  nU =R                  [!        US	SU-  -  S
U 3S9/-  sl
        M     ["        R$                  " U6 U l        U(       aB  ["        R(                  " 5       U l        Xl	        [-        U R                  U4UUUUS.UD6U l        O7U" U R                  40 UD6U l        [1        U R                  U4UUS.UD6U l        [3        [5        [6        US9U 5        gs  snf )a  
Args:
    in_chans: Number of input image channels.
    num_classes: Number of classes for classification head.
    embed_dim: Patch embedding dimension.
    depths: Depth of each Focal Transformer layer.
    mlp_ratio: Ratio of mlp hidden dim to embedding dim.
    focal_levels: How many focal levels at all stages. Note that this excludes the finest-grain level.
    focal_windows: The focal window size at all stages.
    use_overlap_down: Whether to use convolutional embedding.
    use_post_norm: Whether to use layernorm after modulation (it helps stabilize training of large models)
    layerscale_value: Value for layer scale.
    drop_rate: Dropout rate.
    drop_path_rate: Stochastic depth rate.
    norm_layer: Normalization layer.
r,   r    r   )r   r   r   r*   Nr   )r"   r   r   rn   r   r$   r#   r   r'   ro   r(   rp   r)   rq   r*   r   layers.)num_chs	reductionmodule)hidden_size	pool_typer   r*   )r   r   )r   rx   )r2   r3   len
num_layersr@   r   r   r   num_featuresr   feature_infor   stemr   sumr   dictr5   rB   layersrC   rD   r   headr   r   r   _init_weights)rE   r   r   r   r   r   rn   r   r   r   r'   ro   r(   r   r   rp   r   r   r   r*   r-   r.   rF   r   in_dimdprr   i_layerr   layerrH   s                                 rI   r3   FocalNet.__init__S  s_   P 	/f+383IJ3IaY!q&)3I	J& "4=bMAD1 
aL$!	

 
	 1'FDT__-G(G! Wo#"Q;(1*73!1+,G$7!1(c&'"23C|!8L4MN%  !E$ FugF$w!a7lBR]deldm[n"o!pp- .0 mmV,DI$4!-!! -%#% DI #4#4#4;;DI&!! &#	
 DI 	GM?KTRG Ks   G5c                     S1$ )N rx   rE   s    rI   no_weight_decayFocalNet.no_weight_decay  s	    trK   c                 4    [        SU(       a  SS/S9$ / SQS9$ )Nz^stem)z^layers\.(\d+)Nz^norm)i ))z^layers\.(\d+).downsample)r   )z^layers\.(\d+)\.\w+\.(\d+)Nr   )r   r   )r   )rE   coarses     rI   group_matcherFocalNet.group_matcher  s3      *$

 
	



 
	
rK   c                 T    Xl         U R                   H  nUR                  US9  M     g )N)r   )r   r   r   )rE   r   rX   s      rI   r   FocalNet.set_grad_checkpointing  s'    "(A$$F$3 rK   returnc                 .    U R                   R                  $ r   )r   fcr   s    rI   get_classifierFocalNet.get_classifier  s    yy||rK   c                 B    Xl         U R                  R                  XS9  g )N)r   )r   r   reset)rE   r   r   s      rI   reset_classifierFocalNet.reset_classifier  s    &		;rK   rS   indicesrD   
stop_early
output_fmtintermediates_onlyc                 4   US;   d   S5       e/ n[        [        U R                  5      U5      u  pU R                  U5      n[        R
                  R                  5       (       d  U(       d  U R                  n
OU R                  SU	S-    n
[        U R                  5      S-
  n[        U
5       HE  u  pU" U5      nX;   d  M  U(       a  X:X  a  U R                  U5      nOUnUR                  U5        MG     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:

)NCHWzOutput shape must be NCHW.Nr   )
r   r   r   r   rO   r   r   rQ   rD   rA   )rE   rS   r   rD   r   r   r   intermediatestake_indices	max_indexstageslast_idxfeat_idxstagex_inters                  rI   forward_intermediatesFocalNet.forward_intermediates  s    * Y&D(DD&"6s4;;7G"Q IIaL99!!##:[[F[[)a-0Ft{{#a'(0OHaA'H0"iilGG$$W-  1   x		!ArK   
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$ )z?Prune layers not required for specified intermediates.
        Nr   r   r   )r   r   r   r5   rC   rD   r   )rE   r   r   r  r   r   s         rI   prune_intermediate_layers"FocalNet.prune_intermediate_layers  s[     #7s4;;7G"Qkk.9q=1DI!!!R(rK   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r   r   rD   r   s     rI   forward_featuresFocalNet.forward_features%  s.    IIaLKKNIIaLrK   
pre_logitsc                 P    U(       a  U R                  XS9$ U R                  U5      $ )N)r  )r   )rE   rS   r  s      rI   forward_headFocalNet.forward_head+  s#    6@tyyy2RdiiPQlRrK   c                 J    U R                  U5      nU R                  U5      nU$ r   )r  r
  r   s     rI   r\   FocalNet.forward.  s'    !!!$a rK   )r   r   r   r   r   r   r   rD   r   r   r   r   Fr   r   )NFFr   F)r   FT)#r^   r_   r`   ra   r   r   r   rb   strr   rd   rc   r   r   r5   re   r3   rO   r   r   r   r   r   r   r   Tensorr	   r   r   r  r  r
  r\   rf   rg   rh   s   @rI   r   r   O  s   
 #$&2!,8-9%*"'05(-.2%(04!$&$'*1+4*H-nSnS nS 	nS
 nS #s(OnS nS  S/nS !c?nS #nS  nS *.nS "&nS 'smnS #nS  'uo!nS" #nS$ "%nS& "'nS( RYY)nS nS` YY  YY
 
 YY4 4
 YY		  <C <hsm < 8<$$',0 ||0  eCcN340  	0 
 0  0  !%0  
tELL!5tELL7I)I#JJ	K0 h ./$#	3S	>*  	 S$ S rK   r   c                 `   [        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  U R
                  b)  [        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 )Ng{Gz?)stdhead.fc)r   r5   r6   r   weightr&   initzeros_Lineardatamul_)r   namer   s      rI   r   r   4  s    &"))$$fmm-;;"GGNN6;;' #	FBII	&	&fmm-;;"GGNN6;;'I%MM##O4KK!!/2 &4	 
'rK   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr   )rM      r  )r   r   g?bicubicz	stem.projr  mit)urlr   
input_size	pool_sizecrop_pctinterpolationrR   r  
first_conv
classifierlicenser
   )r  kwargss     rI   _cfgr(  B  s3    =v%.B! # rK   ztimm/)	hf_hub_id)rM     r*  )   r+  iRU  )r)  r   r!  r"  r   )r)  r   )zfocalnet_tiny_srf.ms_in1kzfocalnet_small_srf.ms_in1kzfocalnet_base_srf.ms_in1kzfocalnet_tiny_lrf.ms_in1kzfocalnet_small_lrf.ms_in1kzfocalnet_base_lrf.ms_in1kzfocalnet_large_fl3.ms_in22kzfocalnet_large_fl4.ms_in22kzfocalnet_xlarge_fl3.ms_in22kzfocalnet_xlarge_fl4.ms_in22kzfocalnet_huge_fl3.ms_in22kzfocalnet_huge_fl4.ms_in22kmodelc                 Z   U R                  SU 5      n SU ;   a  U $ SS Kn0 nUR                  5       nU R                  5        H  u  pVUR	                  SSU5      nUR                  SS5      nUR	                  SS	 U5      nS
U;   a  XT;  a  UR	                  SSU5      nUR                  SS5      nUR                  SS5      nXT;   a]  XE   R                  5       UR                  5       :X  a9  XE   R                  UR                  :w  a  UR                  XE   R                  5      nXcU'   M     U$ )Nr,  zstem.proj.weightr   zgamma_([0-9])z
ls\1.gammapatch_embedr   zlayers.(\d+).downsamplec                 D    S[        U R                  S5      5      S-    S3$ )Nr   r   z.downsample)rb   group)rS   s    rI   <lambda>&checkpoint_filter_fn.<locals>.<lambda>z  s!    73qwwqz?UVCVBWWb9crK   rD   znorm([0-9])znorm\1_postzln.znorm.r   r  )	getre
state_dictitemssubreplacenumelshapereshape)r5  r,  r4  out_dict	dest_dictrG   vs          rI   checkpoint_filter_fnr?  p  s   4JZ'H  "I  "FF#]A6IImV,FF-/cefgQ;1-~~q9AIIeW%IIfi(>il002aggi?ILDVDVZ[ZaZaDa		),,,-A # OrK   c           	          [        S [        UR                  SS5      5       5       5      nUR                  SU5      n[	        [
        X4[        [        SUS9S.UD6nU$ )Nc              3   *   #    U  H	  u  pUv   M     g 7fr   rx   ).0r   _s      rI   	<genexpr>#_create_focalnet.<locals>.<genexpr>  s     \.[da.[s   r   )r   r   rM   r   out_indicesT)flatten_sequentialrF  )pretrained_filter_fnfeature_cfg)tuplerQ   r3  popr   r   r?  r   )variant
pretrainedr'  default_out_indicesrF  r,  s         rI   _create_focalnetrO    sf    \i

8\8Z.[\\**],?@K '1DkJ 	E
 LrK   r   c                 <    [        S/ SQSS.UD6n[        SSU 0UD6$ )Nr   r   r   r   rM  rx   )focalnet_tiny_srfr   rO  rM  r'  model_kwargss      rI   rR  rR    s)    D|rDVDLWJW,WWrK   c                 <    [        S/ SQSS.UD6n[        SSU 0UD6$ )Nr    r       r    r   rQ  rM  rx   )focalnet_small_srfrS  rT  s      rI   rY  rY    s)    E}EfELXZX<XXrK   c                 <    [        S/ SQSS.UD6n[        SSU 0UD6$ )NrW     rQ  rM  rx   )focalnet_base_srfrS  rT  s      rI   r\  r\    s)    F}FvFLWJW,WWrK   c                 B    [        S/ SQS/ SQS.UD6n[        SSU 0UD6$ )Nr   r   r   r   r   r   rM  rx   )focalnet_tiny_lrfrS  rT  s      rI   r_  r_    s,    _|r_X^_LWJW,WWrK   c                 B    [        S/ SQS/ SQS.UD6n[        SSU 0UD6$ )NrW  r   r   r^  rM  rx   )focalnet_small_lrfrS  rT  s      rI   ra  ra    s,    `}`Y_`LXZX<XXrK   c                 B    [        S/ SQS/ SQS.UD6n[        SSU 0UD6$ )NrW  r[  r   r^  rM  rx   )focalnet_base_lrfrS  rT  s      rI   rc  rc    s,    a},aZ`aLWJW,WWrK   c                 R    [        S
/ SQS/ SQS/S-  SSSS.UD6n[        SS	U 0UD6$ )NrW     r      r   Trm   r   r   r   r   r'   r   rp   rM  rx   )focalnet_large_fl3rS  rT  s      rI   rh  rh    sK     T,WXVY\]V]TDTLRTL XZX<XXrK   c           
      H    [        S/ SQS/ SQSSSS.UD6n[        S	SU 0UD6$ )
NrW  re  r   r   r   r   Trm   r   r   r   r'   r   rp   rM  rx   )focalnet_large_fl4rS  rT  s      rI   rl  rl    s?     T,TDTLRTL XZX<XXrK   c                 R    [        S
/ SQS/ SQS/S-  SSSS.UD6n[        SS	U 0UD6$ )NrW     r   rf  r   Trm   rg  rM  rx   )focalnet_xlarge_fl3rS  rT  s      rI   ro  ro    sK     T,WXVY\]V]TDTLRTL YjYLYYrK   c           
      H    [        S/ SQS/ SQSSSS.UD6n[        S	SU 0UD6$ )
NrW  rn  rj  Trm   rk  rM  rx   )focalnet_xlarge_fl4rS  rT  s      rI   rq  rq    s?     T,TDTLRTL YjYLYYrK   c                 T    [        S
/ SQS/ SQS/S-  SSSSS.UD6n[        SS	U 0UD6$ )NrW  `  r   rM   r   Trm   )r   r   r   r   r'   ro   r   rp   rM  rx   )focalnet_huge_fl3rS  rT  s      rI   rt  rt    sN     v,WXVY\]V]tfjvntvL WJW,WWrK   c                 J    [        S/ SQS/ SQSSSSS.UD6n[        S	SU 0UD6$ )
NrW  rs  rj  Trm   )r   r   r   r'   ro   r   rp   rM  rx   )focalnet_huge_fl4rS  rT  s      rI   rv  rv    sB     v,tfjvntvL WJW,WWrK   )Nr   )r   r  );r   	functoolsr   typingr   r   r   r   r   r	   rO   torch.nnr5   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   __all__re   r   rj   r   r   r   r   r(  default_cfgsr?  rO  rR  rY  r\  r_  ra  rc  rh  rl  ro  rq  rt  rv  rx   rK   rI   <module>r     s  &  ? ?   A	 	 	 + + 0 <,Dbii DNTBII TnXBII Xv& &Rbryy bJ3 %!%""&#!%"!%""&#!%" $( HsPU$W $( HsPU$W %) HsPU%W %) HsPU%W #'# #'#; &  FH *	 XX X X
 Yh Y Y
 XX X X
 XX X X
 Yh Y Y
 XX X X Yh Y Y Yh Y Y Zx Z Z Zx Z Z XX X X XX X XrK   