
    kh+h                        d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
mZ ddlmZmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ dgZ  G d dejB                        Z" G d dejB                        Z# G d dejB                        Z$ G d dejB                        Z% G d dejB                        Z& G d dejB                        Z'd3dZ(d4dZ) e e)d       e)d       e)d       e)d       e)d       e)d       e)ddddd        e)ddddd        e)ddddd        e)ddddd        e)dd!       e)dd!      d"      Z*d#e'fd$Z+d5d%Z,ed5d&e'fd'       Z-ed5d&e'fd(       Z.ed5d&e'fd)       Z/ed5d&e'fd*       Z0ed5d&e'fd+       Z1ed5d&e'fd,       Z2ed5d&e'fd-       Z3ed5d&e'fd.       Z4ed5d&e'fd/       Z5ed5d&e'fd0       Z6ed5d&e'fd1       Z7ed5d&e'fd2       Z8y)6a[   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UnionNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)MlpDropPathLayerNorm2dtrunc_normal_ClassifierHeadNormMlpClassifierHead   )build_model_with_cfg)feature_take_indices)named_apply
checkpoint)generate_default_cfgsregister_modelFocalNetc                   T     e Zd Zdddddefdedededed	ed
ededef fdZd Z	 xZ
S )FocalModulation   TF        dimfocal_levelfocal_factorbiasuse_post_normnormalize_modulator	proj_drop
norm_layerc
                    t         |           || _        || _        || _        || _        || _        || _        ||| j                  dz   g| _        t        j                  |d|z  | j                  dz   z   d|      | _        t        j                  ||d|      | _        t        j                         | _        t        j                  ||d      | _        t        j                   |      | _        t        j$                         | _        g | _        t+        | j                        D ]  }
| j
                  |
z  | j                  z   }| j&                  j-                  t        j.                  t        j                  |||||dz  d      t        j                                      | j(                  j-                  |        | j                  r |	|      | _        y t        j0                         | _        y )Nr   r   )kernel_sizer!   )r'   F)r'   groupspaddingr!   )super__init__r   focal_windowr   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%   kr'   	__class__s               P/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/focalnet.pyr+   zFocalModulation.__init__%   s    	(&(*#6 d&6&6&:;3C4+;+;a+? @aVZ[3>779IIc3A6	I.MMOt''( 	2A++a/$2C2CCK$$R]]		#sCQ\`aQahmn	&  $$[1	2 (,'9'9JsO	r{{}	    c                 ,   | j                  |      }t        j                  || j                  d      \  }}}d}t	        | j
                        D ]!  \  }} ||      }|||d d ||dz   f   z  z   }# | j                  |j                  dd            }|||d d | j                  d f   z  z   }| j                  r|| j                  dz   z  }|| j                  |      z  }	| j                  |	      }	| j                  |	      }	| j                  |	      }	|	S )Nr   r   )r      T)keepdim)r0   torchsplitr-   	enumerater7   r3   meanr   r#   r1   r=   r4   r$   )
r>   xqctxgatesctx_alllfocal_layer
ctx_globalx_outs
             rA   forwardzFocalModulation.forwardM   s    FF1IAt'7'7;3 '(9(9: 	8NA{c"CeAqQwJ&7 77G	8 XXchhvth<=
Jq$2B2B2C/C)DDD ##!1!1A!56G DFF7O#		%  		% u%rB   )__name__
__module____qualname__r   intboolfloatr   r+   rS   __classcell__r@   s   @rA   r   r   $   sy     !""'(-!#.&M&M 	&M
 &M &M  &M "&&M &M !&MPrB   r   c                   &     e Zd Zd fd	Zd Z xZS )LayerScale2dc                     t         |           || _        t        j                  |t        j                  |      z        | _        y N)r*   r+   inplacer.   	ParameterrF   onesgamma)r>   r   init_valuesr`   r@   s       rA   r+   zLayerScale2d.__init__i   s2    \\+

3"?@
rB   c                     | j                   j                  dddd      }| j                  r|j                  |      S ||z  S )Nr   )rc   viewr`   mul_)r>   rJ   rc   s      rA   rS   zLayerScale2d.forwardn   s7    

2q!, $qvve};!e);rB   )h㈵>F)rT   rU   rV   r+   rS   rZ   r[   s   @rA   r]   r]   h   s    A
<rB   r]   c                        e Zd ZdZdddddddddej
                  efded	ed
edede	de	de	dededede
de
f fdZd Z xZS )FocalNetBlockz% Focal Modulation Network Block.
          @r   rD   F-C6?r   r   	mlp_ratior   r,   r"   use_post_norm_in_modulationr#   layerscale_valuer$   	drop_path	act_layerr%   c           	      P   t         |           || _        || _        || _        || _        || _        |s ||      nt        j                         | _	        t        ||| j
                  |||	|      | _        |r ||      nt        j                         | _        |t        ||      nt        j                         | _        |
dkD  rt        |
      nt        j                         | _        |s ||      nt        j                         | _        t%        |t'        ||z        ||	d      | _        |r ||      nt        j                         | _        |t        ||      nt        j                         | _        |
dkD  rt        |
      | _        yt        j                         | _        y)ap  
        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%   Nr   T)in_featureshidden_featuresrr   dropuse_conv)r*   r+   r   rn   r,   r   r"   r.   r<   norm1r   
modulation
norm1_postr]   ls1r   
drop_path1norm2r   rW   mlp
norm2_postls2
drop_path2)r>   r   rn   r   r,   r"   ro   r#   rp   r$   rq   rr   r%   r@   s                rA   r+   zFocalNetBlock.__init__w   sQ   : 	"(&*,9Z_r{{}
)%((5 3!
 .;*S/:J:V<%56\^\g\g\i1:R(9-R[[],9Z_r{{}
i0
 .;*S/:J:V<%56\^\g\g\i1:R(9-R[[]rB   c                 V   |}| j                  |      }| j                  |      }| j                  |      }|| j                  | j	                  |            z   }|| j                  | j                  | j                  | j                  | j                  |                              z   }|S r_   )
rx   ry   rz   r|   r{   r   r   r   r~   r}   )r>   rJ   shortcuts      rA   rS   zFocalNetBlock.forward   s     JJqMOOAOOAttxx{33 $**Q-9P)Q RSSrB   )rT   rU   rV   __doc__r.   r2   r   rW   rY   rX   r   r+   rS   rZ   r[   s   @rA   rk   rk   s   s      "  !"'05(-&*!!"$''#.=S=S =S 	=S
 =S  =S *.=S "&=S $=S =S =S  =S !=S~rB   rk   c                        e Zd ZdZdddddddddddefded	ed
ededededededededededededef fdZ	e
j                  j                  dd       Zd Z xZS )FocalNetStagez4 A basic Focal Transformer layer for one stage.
    rl   Tr   Frm   r   r   out_dimdepthrn   
downsampler   r,   use_overlap_downr"   ro   r#   rp   r$   rq   r%   c                 l   t         |           || _        || _        d| _        |rt        ||d||      | _        nt        j                         | _        t        j                  t        |      D cg c]-  }t        |||||	|
|||t        |t              r||   n||      / c}      | _        yc c}w )a8  
        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.
        Fr   )in_chsout_chsstrideoverlapr%   )r   rn   r   r,   r"   ro   r#   rp   r$   rq   r%   N)r*   r+   r   r   grad_checkpointing
Downsampler   r.   r<   r6   r9   rk   
isinstancelistblocks)r>   r   r   r   rn   r   r   r,   r   r"   ro   r#   rp   r$   rq   r%   ir@   s                    rA   r+   zFocalNetStage.__init__   s    F 	
"'((%DO !kkmDO mm 5\%#  #')+,G$7!1#*4Y*E)A,9%%# $ %#s   22B1c                     || _         y r_   )r   )r>   enables     rA   set_grad_checkpointingz$FocalNetStage.set_grad_checkpointing  s
    "(rB   c                     | j                  |      }| j                  D ]A  }| j                  r+t        j                  j                         st        ||      }: ||      }C |S r_   )r   r   r   rF   jitis_scriptingr   )r>   rJ   blks      rA   rS   zFocalNetStage.forward  sW    OOA;; 	C&&uyy/E/E/GsA&F		
 rB   T)rT   rU   rV   r   r   rW   rY   rX   r   r+   rF   r   ignorer   rS   rZ   r[   s   @rA   r   r      s      "#  !%*"'05(-&*!!#.!B$B$ B$ 	B$
 B$ B$ B$ B$ #B$  B$ *.B$ "&B$ $B$ B$ B$  !!B$H YY) )rB   r   c                   H     e Zd Z	 	 	 ddededededee   f
 fdZd Z xZ	S )	r   r   r   r   r   r%   c                    t         |           || _        d}|}|r|dv sJ |dk(  rd\  }}n
|dk(  rd\  }}t        j                  |||||      | _        | ||      | _        yt        j                         | _        y)	a  

        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   )rD   r   )r'   r   r)   N)r*   r+   r   r.   r/   r4   r<   r=   )	r>   r   r   r   r   r%   r)   r'   r@   s	           rA   r+   zDownsample.__init__  s    " 	V###{'+$W1'+$WIIfg;v_fg	+5+AJw'	r{{}	rB   c                 J    | j                  |      }| j                  |      }|S r_   )r4   r=   r>   rJ   s     rA   rS   zDownsample.forward;  s!    IIaLIIaLrB   )r   FN)
rT   rU   rV   rW   rX   r   r   r+   rS   rZ   r[   s   @rA   r   r     sS     !-1UU U 	U
 U !*U<rB   r   c            '           e Zd ZdZdddddddd	d
d
d
d
dddddd eed      fdededededeedf   de	deedf   deedf   de
de
de
de
dee   de	d ee	   d!e
d"e
d#e
d$ef& fd%Zej                  j                   d&        Zej                  j                   d:d'       Zej                  j                   d;d(       Zej                  j                   d)ej*                  fd*       Zd<dedee   fd+Z	 	 	 	 	 d=d,ej0                  d-eeeee   f      d.e
d/e
d0ed1e
d)eeej0                     eej0                  eej0                     f   f   fd2Z	 	 	 d>d-eeee   f   d3e
d4e
fd5Zd6 Zd:d7e
fd8Zd9 Z xZ S )?r   z," Focal Modulation Networks (FocalNets)
    rD     avg`   r   r      r   rl   )r   r   r   r   rD   rD   rD   rD   FN      ?r   g?ri   )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         |           t        |      | _        t	        | j                        D cg c]
  }|d|z  z   }}|| _        || _        |d   x| _        | _        g | _	        t        ||d   |	|      | _        |d   }t        j                  d|t        |            D cg c]  }|j                          }}g }t	        | j                        D ]~  }||   }t!        ||||   ||dkD  ||   ||   |	|
|||||t        |d|       t        |d|dz           |      }|}||gz  }| xj                  t#        |dd|z  z  d	| 
      gz  c_	         t%        j&                  | | _        |rAt%        j*                         | _        || _        t/        | j                  |||||      | _        n5 || j                        | _        t3        | j                  |||      | _        t5        t7        t8        |      |        yc c}w c c}w )aa  
        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   rf   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   )r*   r+   len
num_layersr9   r   r   num_featuresr   feature_infor   stemrF   linspacesumitemr   dictr.   r;   layersr<   r=   r   headr   r   r   _init_weights)r>   r   r   r   r   r   rn   r   r   r   r"   ro   r#   r   r   rp   r   r   r   r%   r   in_dimrJ   dprr   i_layerr   layerr@   s                               rA   r+   zFocalNet.__init__E  s5   L 	f+383IJaY!q&)J	J&"4=bMAD1aL$!	
	 1!&>3v;!OPAqvvxPPT__- 	q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+	q. mmV,DI$4D!-!!,%#%DI #4#4#45DI&!!%#	DI 	GM?KTR} K Qs   H,Hc                     dhS )N  r>   s    rA   no_weight_decayzFocalNet.no_weight_decay  s	    trB   c                 6    t        d|r	ddg      S g d      S )Nz^stem)z^layers\.(\d+)Nz^norm)i ))z^layers\.(\d+).downsample)r   )z^layers\.(\d+)\.\w+\.(\d+)Nr   )r   r   )r   )r>   coarses     rA   group_matcherzFocalNet.group_matcher  s3      *$

 
	



 
	
rB   c                 X    || _         | j                  D ]  }|j                  |        y )N)r   )r   r   r   )r>   r   rO   s      rA   r   zFocalNet.set_grad_checkpointing  s.    "( 	4A$$F$3	4rB   returnc                 .    | j                   j                  S r_   )r   fcr   s    rA   get_classifierzFocalNet.get_classifier  s    yy||rB   c                 L    || _         | j                  j                  ||       y )N)r   )r   r   reset)r>   r   r   s      rA   reset_classifierzFocalNet.reset_classifier  s    &		{;rB   rJ   indicesr=   
stop_early
output_fmtintermediates_onlyc                    |dv sJ d       g }t        t        | j                        |      \  }}	| j                  |      }t        j
                  j                         s|s| j                  }
n| j                  d|	dz    }
t        | j                        dz
  }t        |
      D ]>  \  }} ||      }||v s|r||k(  r| j                  |      }n|}|j                  |       @ |r|S |k(  r| j                  |      }||fS )a   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )NCHWzOutput shape must be NCHW.Nr   )
r   r   r   r   rF   r   r   rH   r=   r:   )r>   rJ   r   r=   r   r   r   intermediatestake_indices	max_indexstageslast_idxfeat_idxstagex_inters                  rA   forward_intermediateszFocalNet.forward_intermediates  s   * Y&D(DD&"6s4;;7G"Qi IIaL99!!#:[[F[[)a-0Ft{{#a'(0 	.OHeaA<'H0"iilGG$$W-	.   x		!A-rB   
prune_norm
prune_headc                     t        t        | j                        |      \  }}| j                  d|dz    | _        |rt        j                         | _        |r| j                  dd       |S )z@ Prune layers not required for specified intermediates.
        Nr   r   r   )r   r   r   r.   r<   r=   r   )r>   r   r   r   r   r   s         rA   prune_intermediate_layersz"FocalNet.prune_intermediate_layers   s]     #7s4;;7G"Qikk.9q=1DI!!!R(rB   c                 l    | j                  |      }| j                  |      }| j                  |      }|S r_   )r   r   r=   r   s     rA   forward_featureszFocalNet.forward_features  s.    IIaLKKNIIaLrB   
pre_logitsc                 N    |r| j                  ||      S | j                  |      S )N)r   )r   )r>   rJ   r   s      rA   forward_headzFocalNet.forward_head  s%    6@tyyzy2RdiiPQlRrB   c                 J    | j                  |      }| j                  |      }|S r_   )r   r   r   s     rA   rS   zFocalNet.forward  s'    !!!$a rB   Fr   r_   )NFFr   F)r   FT)!rT   rU   rV   r   r   r   rW   strr   rY   rX   r   r   r+   rF   r   r   r   r   r   r.   Moduler   r   Tensorr   r   r   r   r   r   rS   rZ   r[   s   @rA   r   r   A  s   
 #$&2!,8-9%*"'05(-.2%(04 #%#&#*;D#A)gSgS gS 	gS
 gS #s(OgS gS  S/gS !c?gS #gS  gS *.gS "&gS 'smgS #gS  'uo!gS" #gS$ !%gS& !'gS( !)gSR 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rB   r   c                 F   t        | t        j                        rNt        | j                  d       | j
                  *t        j                  j                  | j
                         y y t        | t        j                        rt        | j                  d       | j
                  )t        j                  j                  | j
                         |rPd|v rK| j                  j                  j                  |       | j
                  j                  j                  |       y y y y )Ng{Gz?)stdhead.fc)r   r.   r/   r   weightr!   initzeros_Lineardatarh   )r   namer   s      rA   r   r     s    &"))$fmm-;;"GGNN6;;' #	FBII	&fmm-;;"GGNN6;;'I%MM##O4KK!!/2 &4	 
'rB   c                 2    | dddddt         t        dddd	|S )
Nr   )rD      r	  )r   r   g?bicubicz	stem.projr  mit)urlr   
input_size	pool_sizecrop_pctinterpolationrI   r   
first_conv
classifierlicenser	   )r  kwargss     rA   _cfgr  -  s3    =v%.B! # rB   ztimm/)	hf_hub_id)rD     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                 P   | j                  d|       } d| v r| S dd l}i }|j                         }| j                         D ]  \  }}|j	                  dd|      }|j                  dd      }|j	                  dd	 |      }d
|v r||vr|j	                  dd|      }|j                  dd      }|j                  dd      }||v r^||   j                         |j                         k(  r:||   j                  |j                  k7  r|j                  ||   j                        }|||<    |S )Nr  zstem.proj.weightr   zgamma_([0-9])z
ls\1.gammapatch_embedr   zlayers.(\d+).downsamplec                 D    dt        | j                  d            dz    dS )Nr   r   z.downsample)rW   group)rJ   s    rA   <lambda>z&checkpoint_filter_fn.<locals>.<lambda>e  s#    73qwwqz?UVCVBWWb9c rB   r=   znorm([0-9])znorm\1_postzln.znorm.r   r  )	getre
state_dictitemssubreplacenumelshapereshape)r!  r  r   out_dict	dest_dictr?   vs          rA   checkpoint_filter_fnr+  [  s+   4JZ'H  "I  " 
1FF#]A6IImV,FF-/cefgQ;1I-~~q9AIIeW%IIfi(	>il002aggi?IaLDVDVZ[ZaZaDa		)A,,,-A
 OrB   c           	          t        d t        |j                  dd            D              }|j                  d|      }t	        t
        | |ft        t        d|      d|}|S )Nc              3   &   K   | ]	  \  }}|  y wr_   r   ).0r   _s      rA   	<genexpr>z#_create_focalnet.<locals>.<genexpr>q  s     \da\s   r   )r   r   rD   r   out_indicesT)flatten_sequentialr1  )pretrained_filter_fnfeature_cfg)tuplerH   r  popr   r   r+  r   )variant
pretrainedr  default_out_indicesr1  r  s         rA   _create_focalnetr:  p  sh    \i

8\8Z.[\\**],?@K ':1DkJ 	E
 LrB   r   c                 <    t        dg ddd|}t        dd| i|S )Nr   r   r   r   r8  r   )focalnet_tiny_srfr   r:  r8  r  model_kwargss      rA   r=  r=  |  s)    D|rDVDLWJW,WWrB   c                 <    t        dg ddd|}t        dd| i|S )Nr   r      r   r   r<  r8  r   )focalnet_small_srfr>  r?  s      rA   rD  rD    s)    E}EfELXZX<XXrB   c                 <    t        dg ddd|}t        dd| i|S )NrB     r<  r8  r   )focalnet_base_srfr>  r?  s      rA   rG  rG    s)    F}FvFLWJW,WWrB   c                 B    t        dg ddg dd|}t        dd| i|S )Nr   r   r   r   r   r   r8  r   )focalnet_tiny_lrfr>  r?  s      rA   rJ  rJ    s,    _|r_X^_LWJW,WWrB   c                 B    t        dg ddg dd|}t        dd| i|S )NrB  r   r   rI  r8  r   )focalnet_small_lrfr>  r?  s      rA   rL  rL    s,    `}`Y_`LXZX<XXrB   c                 B    t        dg ddg dd|}t        dd| i|S )NrB  rF  r   rI  r8  r   )focalnet_base_lrfr>  r?  s      rA   rN  rN    s,    a},aZ`aLWJW,WWrB   c                 R    t        d
g ddg ddgdz  dddd|}t        dd	| i|S )NrB     r      r   Trm   r   r   r   r   r"   r   rp   r8  r   )focalnet_large_fl3r>  r?  s      rA   rS  rS    sK     T,WXVY\]V]TDTLRTL XZX<XXrB   c           
      H    t        dg ddg ddddd|}t        d	d| i|S )
NrB  rP  r   r   r   r   Trm   r   r   r   r"   r   rp   r8  r   )focalnet_large_fl4r>  r?  s      rA   rW  rW    s?     T,TDTLRTL XZX<XXrB   c                 R    t        d
g ddg ddgdz  dddd|}t        dd	| i|S )NrB     r   rQ  r   Trm   rR  r8  r   )focalnet_xlarge_fl3r>  r?  s      rA   rZ  rZ    sK     T,WXVY\]V]TDTLRTL YjYLYYrB   c           
      H    t        dg ddg ddddd|}t        d	d| i|S )
NrB  rY  rU  Trm   rV  r8  r   )focalnet_xlarge_fl4r>  r?  s      rA   r\  r\    s?     T,TDTLRTL YjYLYYrB   c                 T    t        d
g ddg ddgdz  ddddd|}t        dd	| i|S )NrB  `  r   rD   r   Trm   )r   r   r   r   r"   ro   r   rp   r8  r   )focalnet_huge_fl3r>  r?  s      rA   r_  r_    sN     v,WXVY\]V]tfjvntvL WJW,WWrB   c                 J    t        dg ddg dddddd|}t        d	d| i|S )
NrB  r^  rU  Trm   )r   r   r   r"   ro   r   rp   r8  r   )focalnet_huge_fl4r>  r?  s      rA   ra  ra    sB     v,tfjvntvL WJW,WWrB   )Nr   )r   r   )9r   	functoolsr   typingr   r   r   r   r   rF   torch.nnr.   	timm.datar
   r   timm.layersr   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   __all__r   r   r]   rk   r   r   r   r   r  default_cfgsr+  r:  r=  rD  rG  rJ  rL  rN  rS  rW  rZ  r\  r_  ra  r   rB   rA   <module>rm     s  &  9 9   A h h * + 0 <,Abii AH<299 <OBII OdSBII Sl# #L[ryy [|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rB   