
    ^jmj                        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 ddlmZmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddl m!Z!m"Z" dgZ# G d dejH                        Z% G d dejH                        Z& G d dejH                        Z' G d dejH                        Z( G d dejH                        Z)d1dZ*d2d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-d3d#Z.e"d3d$e)fd%       Z/e"d3d$e)fd&       Z0e"d3d$e)fd'       Z1e"d3d$e)fd(       Z2e"d3d$e)fd)       Z3e"d3d$e)fd*       Z4e"d3d$e)fd+       Z5e"d3d$e)fd,       Z6e"d3d$e)fd-       Z7e"d3d$e)fd.       Z8e"d3d$e)fd/       Z9e"d3d$e)fd0       Z:y)4a[   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                   v     e Zd Zdddddeddfdededed	ed
ededededeej                     f fdZ
d Z xZS )FocalModulation   TF        Ndimfocal_windowfocal_levelfocal_factorbiasuse_post_normnormalize_modulator	proj_drop
norm_layerc                    |
|d}t         |           || _        || _        || _        || _        || _        || _        ||| j                  dz   g| _        t        j                  |d|z  | j                  dz   z   fd|d|| _        t        j                  ||fd|d|| _        t        j                         | _        t        j                  ||fddi|| _        t        j                   |      | _        t        j$                         | _        g | _        t+        | j                        D ]  }| j
                  |z  | j                  z   }| j&                  j-                  t        j.                  t        j                  ||f|||dz  dd|t        j                                      | j(                  j-                  |        | j                  r |	|fi || _        y t        j0                         | _        y )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                  _/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/focalnet.pyr2   zFocalModulation.__init__.   s    /(&(*#6 d&6&6&:;3C4+;+;a+? @aaVZa^`a3DDD779IIc3<A<<	I.MMOt''( 	2A++a/$2C2CCK$$R]]		#stCQ\`aQahmtqst	&  $$[1	2 .2-?-?Js)b)	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)r6   torchsplitr3   	enumerater=   r9   meanr#   r'   r7   rC   r:   r(   )
rD   xqctxgatesctx_alllfocal_layer
ctx_globalx_outs
             rH   forwardzFocalModulation.forwardY   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%rI   )__name__
__module____qualname__r   intboolfloatr   r4   Moduler2   rZ   __classcell__rG   s   @rH   r   r   -   s     !""'(-!*5)S)S )S 	)S
 )S )S  )S "&)S )S RYY)SVrI   r   c                        e Zd ZdZdddddddddej
                  eddfd	ed
ededede	de	de	de
e   dededeej                     deej                     f fdZd Z xZS )FocalNetBlockz% Focal Modulation Network Block.
          @r   rK   F-C6?r    Nr!   	mlp_ratior#   r"   r&   use_post_norm_in_modulationr'   layerscale_valuer(   	drop_path	act_layerr)   c           
      j   ||d}t         |           || _        || _        || _        || _        || _        |s	 ||fi |nt        j                         | _	        t        |f|| j
                  |||	|d|| _        |r	 ||fi |nt        j                         | _        |t        ||fi |nt        j                         | _        |
dkD  rt        |
      nt        j                         | _        |s	 ||fi |nt        j                         | _        t%        d|t'        ||z        ||	dd|| _        |r	 ||fi |nt        j                         | _        |t        ||fi |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(   r)   Nr    T)in_featureshidden_featuresrl   dropuse_conv )r1   r2   r!   rh   r"   r#   r&   r4   rB   norm1r   
modulation
norm1_postr   ls1r   
drop_path1norm2r   r^   mlp
norm2_postls2
drop_path2)rD   r!   rh   r#   r"   r&   ri   r'   rj   r(   rk   rl   r)   r,   r-   rE   rG   s                   rH   r2   zFocalNetBlock.__init__x   s   > /"(&*2?Z*r*R[[]
)	
%((5 3!	
 	
 4A*S/B/bkkm@P@\<%5<<bdbmbmbo1:R(9-R[[]2?Z*r*R[[]
 
i0
 
 4A*S/B/bkkm@P@\<%5<<bdbmbmbo1:R(9-R[[]rI   c                 V   |}| j                  |      }| j                  |      }| j                  |      }|| j                  | j	                  |            z   }|| j                  | j                  | j                  | j                  | j                  |                              z   }|S N)
rs   rt   ru   rw   rv   r|   r{   rz   ry   rx   )rD   rQ   shortcuts      rH   rZ   zFocalNetBlock.forward   s     JJqMOOAOOAttxx{33 $**Q-9P)Q RSSrI   )r[   r\   r]   __doc__r4   r8   r   r^   r`   r_   r   r   ra   r2   rZ   rb   rc   s   @rH   re   re   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HrI   re   c                         e Zd ZdZdddddddddddeddfd	ed
ededededededededededee   dede	ee
e   f   deej                     f fdZej                   j"                  dd       Zd Z xZS )FocalNetStagez4 A basic Focal Transformer layer for one stage.
    rf   Tr   Frg   r    Nr!   out_dimdepthrh   
downsampler#   r"   use_overlap_downr&   ri   r'   rj   r(   rk   r)   c                 z   ||d}t         |           || _        || _        d| _        |rt        d||d||d|| _        nt        j                         | _        t        j                  t        |      D cg c].  }t        d|||||	|
|||t        |t              r||   n||d|0 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.
        r+   Fr   )in_chsout_chsstrideoverlapr)   )r!   rh   r#   r"   r&   ri   r'   rj   r(   rk   r)   Nrr   )r1   r2   r!   r   grad_checkpointing
Downsampler   r4   rB   r<   r?   re   
isinstancelistblocks)rD   r!   r   r   rh   r   r#   r"   r   r&   ri   r'   rj   r(   rk   r)   r,   r-   rE   irG   s                       rH   r2   zFocalNetStage.__init__   s    J /
"'( (% DO !kkmDO mm 5\%#   #')+,G$7!1#*4Y*E)A,9% %# $ %#s   83B8c                     || _         y r~   )r   )rD   enables     rH   set_grad_checkpointingz$FocalNetStage.set_grad_checkpointing  s
    "(rI   c                     | j                  |      }| j                  D ]A  }| j                  r+t        j                  j                         st        ||      }: ||      }C |S r~   )r   r   r   rM   jitis_scriptingr   )rD   rQ   blks      rH   rZ   zFocalNetStage.forward  sW    OOA;; 	C&&uyy/E/E/GsA&F		
 rI   T)r[   r\   r]   r   r   r^   r`   r_   r   r	   r   r   r4   ra   r2   rM   r   ignorer   rZ   rb   rc   s   @rH   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$R YY) )rI   r   c                   f     e Zd Z	 	 	 	 	 ddededededeeej                        f
 fdZ	d Z
 xZS )	r   r   r   r   r   r)   c                    ||d}t         |           || _        d}	|}
|r|dv sJ |dk(  rd\  }
}	n
|dk(  rd\  }
}	t        j                  ||f|
||	d|| _        | ||fi || _        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   r   )rK   r   )r.   r   r0   N)r1   r2   r   r4   r5   r:   rB   rC   )rD   r   r   r   r   r)   r,   r-   rE   r0   r.   rG   s              rH   r2   zDownsample.__init__(  s    & /V###{'+$W1'+$WIIfgm;v_fmjlm	1;1GJw-"-	R[[]	rI   c                 J    | j                  |      }| j                  |      }|S r~   )r:   rC   rD   rQ   s     rH   rZ   zDownsample.forwardI  s!    IIaLIIaLrI   )r   FNNN)r[   r\   r]   r^   r_   r   r   r4   ra   r2   rZ   rb   rc   s   @rH   r   r   &  sb     !48[[ [ 	[
 [ !bii1[BrI   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      d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ej                     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)
    rK     avg`   r   r      r   rf   )r   r   r   r   rK   rK   rK   rK   FN      ?r    g?gh㈵>)epsin_chansnum_classesglobal_pool	embed_dimdepths.rh   focal_levelsfocal_windowsr   r&   ri   r'   head_hidden_sizehead_init_scalerj   	drop_rateproj_drop_ratedrop_path_rater)   c                    t         |           ||d}t        |      | _        t	        | j                        D cg c]
  }|d|z  z   }}|| _        || _        || _        |d   x| _        | _	        g | _
        t        d||d   |	|d|| _        |d   }t        |t        |            }g }t	        | j                        D ]  }||   }t        d||||   ||dkD  ||   ||   |	|
|||||t        |d|       t        |d|dz           |d|}|}||gz  }| xj                  t!        |d	d|z  z  d
|       gz  c_
         t#        j$                  | | _        |rBt#        j(                         | _        || _	        t-        | j                  |f||||d|| _        n7 || j                  fi || _        t1        | j                  |f||d|| _        t3        t5        t6        |      |        y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+   r   r   )r   r   r   r)   Nr   )r!   r   r   rh   r   r#   r"   r   r&   ri   r'   rj   r(   rk   r)   r   layers.)num_chs	reductionmodule)hidden_size	pool_typer   r)   )r   r   )r   rr   )r1   r2   len
num_layersr?   r   r   r   num_featuresr   feature_infor   stemr   sumr   dictr4   rA   layersrB   rC   r   headr   r   r   _init_weights)rD   r   r   r   r   r   rh   r   r   r   r&   ri   r'   r   r   rj   r   r   r   r)   r,   r-   rE   r   in_dimdprr   i_layerr   layerrG   s                                 rH   r2   zFocalNet.__init__S  sk   P 	/f+383IJaY!q&)J	J& "4=bMAD1 
aL$!	

 
	 1'FD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0 mmV,DI$4D!-!! -%#% DI #4#4#4;;DI&!! &#	
 DI 	GM?KTRG Ks   G3c                     dhS )N rr   rD   s    rH   no_weight_decayzFocalNet.no_weight_decay  s	    trI   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   )rD   coarses     rH   group_matcherzFocalNet.group_matcher  s3      *$

 
	



 
	
rI   c                 X    || _         | j                  D ]  }|j                  |        y )N)r   )r   r   r   )rD   r   rV   s      rH   r   zFocalNet.set_grad_checkpointing  s.    "( 	4A$$F$3	4rI   returnc                 .    | j                   j                  S r~   )r   fcr   s    rH   get_classifierzFocalNet.get_classifier  s    yy||rI   c                 L    || _         | j                  j                  ||       y )N)r   )r   r   reset)rD   r   r   s      rH   reset_classifierzFocalNet.reset_classifier  s    &		{;rI   rQ   indicesrC   
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   rM   r   r   rO   rC   r@   )rD   rQ   r   rC   r   r   r   intermediatestake_indices	max_indexstageslast_idxfeat_idxstagex_inters                  rH   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-rI   
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   r4   rB   rC   r   )rD   r   r   r   r   r   s         rH   prune_intermediate_layersz"FocalNet.prune_intermediate_layers  s]     #7s4;;7G"Qikk.9q=1DI!!!R(rI   c                 l    | j                  |      }| j                  |      }| j                  |      }|S r~   )r   r   rC   r   s     rH   forward_featureszFocalNet.forward_features%  s.    IIaLKKNIIaLrI   
pre_logitsc                 N    |r| j                  ||      S | j                  |      S )N)r   )r   )rD   rQ   r   s      rH   forward_headzFocalNet.forward_head+  s%    6@tyyzy2RdiiPQlRrI   c                 J    | j                  |      }| j                  |      }|S r~   )r   r   r   s     rH   rZ   zFocalNet.forward.  s'    !!!$a rI   Fr   r~   )NFFr   F)r   FT)!r[   r\   r]   r   r   r   r^   strr   r`   r_   r   r   r4   ra   r2   rM   r   r   r   r   r   r   r   Tensorr	   r   r   r   r   r   rZ   rb   rc   s   @rH   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` 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rI   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   r4   r5   r   weightr%   initzeros_Lineardatamul_)r   namer   s      rH   r   r   4  s    &"))$fmm-;;"GGNN6;;' #	FBII	&fmm-;;"GGNN6;;'I%MM##O4KK!!/2 &4	 
'rI   c                 2    | dddddt         t        dddd	|S )
Nr   )rK      r  )r   r   g?bicubicz	stem.projr   mit)urlr   
input_size	pool_sizecrop_pctinterpolationrP   r   
first_conv
classifierlicenser
   )r  kwargss     rH   _cfgr  B  s3    =v%.B! # rI   ztimm/)	hf_hub_id)rK     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)r^   group)rQ   s    rH   <lambda>z&checkpoint_filter_fn.<locals>.<lambda>z  s#    73qwwqz?UVCVBWWb9c rI   rC   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_dictrF   vs          rH   checkpoint_filter_fnr%  p  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
 OrI   c           	          t        d t        |j                  dd            D              }|j                  d|      }t	        t
        | |ft        t        d|      d|}|S )Nc              3   &   K   | ]	  \  }}|  y wr~   rr   ).0r   _s      rH   	<genexpr>z#_create_focalnet.<locals>.<genexpr>  s     \da\s   r   )r   r   rK   r   out_indicesT)flatten_sequentialr+  )pretrained_filter_fnfeature_cfg)tuplerO   r  popr   r   r%  r   )variant
pretrainedr  default_out_indicesr+  r  s         rH   _create_focalnetr4    sh    \i

8\8Z.[\\**],?@K ':1DkJ 	E
 LrI   r   c                 <    t        dg ddd|}t        dd| i|S )Nr   r   r   r   r2  rr   )focalnet_tiny_srfr   r4  r2  r  model_kwargss      rH   r7  r7    s)    D|rDVDLWJW,WWrI   c                 <    t        dg ddd|}t        dd| i|S )Nr   r      r   r   r6  r2  rr   )focalnet_small_srfr8  r9  s      rH   r>  r>    s)    E}EfELXZX<XXrI   c                 <    t        dg ddd|}t        dd| i|S )Nr<     r6  r2  rr   )focalnet_base_srfr8  r9  s      rH   rA  rA    s)    F}FvFLWJW,WWrI   c                 B    t        dg ddg dd|}t        dd| i|S )Nr   r   r   r   r   r   r2  rr   )focalnet_tiny_lrfr8  r9  s      rH   rD  rD    s,    _|r_X^_LWJW,WWrI   c                 B    t        dg ddg dd|}t        dd| i|S )Nr<  r   r   rC  r2  rr   )focalnet_small_lrfr8  r9  s      rH   rF  rF    s,    `}`Y_`LXZX<XXrI   c                 B    t        dg ddg dd|}t        dd| i|S )Nr<  r@  r   rC  r2  rr   )focalnet_base_lrfr8  r9  s      rH   rH  rH    s,    a},aZ`aLWJW,WWrI   c                 R    t        d
g ddg ddgdz  dddd|}t        dd	| i|S )Nr<     r      r   Trg   r   r   r   r   r&   r   rj   r2  rr   )focalnet_large_fl3r8  r9  s      rH   rM  rM    sK     T,WXVY\]V]TDTLRTL XZX<XXrI   c           
      H    t        dg ddg ddddd|}t        d	d| i|S )
Nr<  rJ  r   r   r   r   Trg   r   r   r   r&   r   rj   r2  rr   )focalnet_large_fl4r8  r9  s      rH   rQ  rQ    s?     T,TDTLRTL XZX<XXrI   c                 R    t        d
g ddg ddgdz  dddd|}t        dd	| i|S )Nr<     r   rK  r   Trg   rL  r2  rr   )focalnet_xlarge_fl3r8  r9  s      rH   rT  rT    sK     T,WXVY\]V]TDTLRTL YjYLYYrI   c           
      H    t        dg ddg ddddd|}t        d	d| i|S )
Nr<  rS  rO  Trg   rP  r2  rr   )focalnet_xlarge_fl4r8  r9  s      rH   rV  rV    s?     T,TDTLRTL YjYLYYrI   c                 T    t        d
g ddg ddgdz  ddddd|}t        dd	| i|S )Nr<  `  r   rK   r   Trg   )r   r   r   r   r&   ri   r   rj   r2  rr   )focalnet_huge_fl3r8  r9  s      rH   rY  rY    sN     v,WXVY\]V]tfjvntvL WJW,WWrI   c                 J    t        dg ddg dddddd|}t        d	d| i|S )
Nr<  rX  rO  Trg   )r   r   r   r&   ri   r   rj   r2  rr   )focalnet_huge_fl4r8  r9  s      rH   r[  r[    sB     v,tfjvntvL WJW,WWrI   )Nr   )r   r   );r   	functoolsr   typingr   r   r   r   r   r	   rM   torch.nnr4   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   __all__ra   r   re   r   r   r   r   r  default_cfgsr%  r4  r7  r>  rA  rD  rF  rH  rM  rQ  rT  rV  rY  r[  rr   rI   rH   <module>rg     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rI   