
    RЦi                        S SK Jr  S SKJr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s  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J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'  SS
K(J)r)  SSK*J+r+  SSK,J-r-  SSK.J/r/J0r0  SS/r1\" \Rd                  SS9r3\+ " S S\Rh                  5      5       r5 " S S\Rh                  5      r6 " S S\Rh                  5      r7S\\8\
Rr                  4   S\\8\
Rr                  4   4S jr:S/S\8S\;S\74S jjr<S/S\8S\;S\64S jjr=    S0S\8S\>S\;S\;S\74
S jjr?S1S \84S! jjr@\/" \@" S"S#S$S S%9\@" S&S"S#S$S S'S(9\@" S)S*9S+.5      rA\0S/S\;S\74S, jj5       rB\0S/S\;S\64S- jj5       rC\0S/S\;S\64S. jj5       rDg)2    )partial)CallableDictListOptionalSequenceTupleUnionNIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)	SelectAdaptivePool2dLinear	LayerType	RmsNorm2dConvNormActcreate_conv2dget_norm_layerget_norm_act_layer	to_2tuple   )build_model_with_cfg)SqueezeExciteUniversalInvertedResidual)	BlockArgsEfficientNetBuilderdecode_arch_defefficientnet_init_weightsround_channels)feature_take_indices)register_notrace_module)checkpoint_seq)generate_default_cfgsregister_modelMobileNetV5MobileNetV5Encodertanh)approximatec                      ^  \ rS rSrSr        SS\\\\   4   S\S\S\S\	S\
\   S	\S
\
\   S\
\   4U 4S jjjrS\\R                     S\R                  4S jrSrU =r$ )"MobileNetV5MultiScaleFusionAdapter'   a{  Multi-layer fusion token adapter.

Args:
  in_chs: List of input channel counts for each feature scale.
  out_chs: The number of output channels.
  output_resolution: The output resolution.
  expansion_ratio: The FFN expansion ratio.
  interpolation_mode: The upsampling interpolation mode.
  layer_scale_init_value: The initial value of the layer scale, no layer scale if None.
in_chsout_chsoutput_resolutionexpansion_ratiointerpolation_modelayer_scale_init_valuenoskip	act_layer
norm_layerc                   > XS.n[         TU ]  5         [        U[        5      (       a  [	        U5      OUU l        X l        [        U5      U l        X@l	        XPl
        X`l        Xpl        U=(       d    [        nU	=(       d    [        n	[        SU R
                  U R                  SU R                  UU	U R                  U R                  S.UD6U l        U	" U R                  40 UD6U l        g )Ndevicedtyper   )r,   r-   dw_kernel_size_mid	exp_ratior3   r4   r2   r1    )super__init__
isinstancer   sumin_channelsout_channelsr   r.   r/   r0   r1   r2   _GELUr   r   ffnnorm)selfr,   r-   r.   r/   r0   r1   r2   r3   r4   r7   r8   dd	__class__s                V/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/mobilenetv5.pyr=   +MobileNetV5MultiScaleFusionAdapter.__init__4   s     	+B	G&0&B&Bs6{D&'89D*0"8K"UI(yJ( 
!!&&{{#::
 
DH 4,,33DI    inputsreturnc                    US   R                   SS  n/ n[        U5       H\  u  pEUR                   SS  nUS   US   :  d  US   US   :  a  [        R                  " XRU R                  S9nUR                  U5        M^     [        R                  " USS9nU R                  U5      nUS   U R                  S   :w  d  US   U R                  S   :w  a  US   U R                  S   -  S:w  d  US   U R                  S   -  S:w  a   [        R                  " XPR                  SS9nOBUS   U R                  S   -  nUS   U R                  S   -  n	[        R                  " UX4X4S9nU R                  U5      nU$ )Nr   r   )sizemode)dimbilinear)kernel_sizestride)shape	enumerateFinterpolater0   appendtorchcatrC   r.   
avg_pool2drD   )
rE   rK   high_resolutionresized_inputs_img	feat_sizechannel_cat_imgs	h_strides	w_stridess
             rH   forward*MobileNetV5MultiScaleFusionAdapter.forward\   s   Qioobc*ONF#IIbcN	Q</!,,	!q?Q0Q--@W@WXCc"	 $ yyQ7
((#
$CqT33A66/!:LPTPfPfghPi:i A!7!7!::a?A!7!7!::a?--*@*@zRC'*d.D.DQ.GGI'*d.D.DQ.GGI,,&2!-C ))C.CJrJ   )	r/   rC   r@   r0   r1   rD   r2   rA   r.   )g       @nearestNTNNNN)__name__
__module____qualname____firstlineno____doc__r
   intr   floatstrr   boolr   r=   rZ   Tensorre   __static_attributes____classcell__rG   s   @rH   r*   r*   '   s    	  "%"+26)-*.&4c49n%&4 &4 	&4
 &4  &4 !)&4 &4 I&&4 Y'&4 &4PD. 5<<  rJ   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S4S\S\S\S\S\S\S\S\	S\S\
\   S\S\\   S\\   S\\   S\\   S\S\S\S \S!\\   S"\	4*U 4S# jjjrS$ r\R$                  R&                  S<S%\4S& jj5       r\R$                  R&                  S=S'\4S( jj5       r\R$                  R&                  S)\R.                  4S* j5       rS>S\S"\	4S+ jjr      S?S,\R4                  S-\\\\
\   4      S.\S/\S0\	S1\S2\S)\\
\R4                     \\R4                  \
\R4                     4   4   4S3 jjr    S@S-\\\
\   4   S4\S5\S2\4S6 jjrS,\R4                  S)\R4                  4S7 jrS<S,\R4                  S8\S)\R4                  4S9 jjr S,\R4                  S)\R4                  4S: jr!S;r"U =r#$ )Ar%   ~   zMobiletNet-V5
            TF    rN   N        avg
block_argsnum_classesin_chans	stem_size	stem_biasfix_stemnum_featurespad_typeuse_msfamsfa_indicesmsfa_output_resolutionr3   r4   aa_layerse_layerse_from_expround_chs_fn	drop_ratedrop_path_rater1   global_poolc                   > [         TU ]  5         UUS.nU=(       d    [        n[        U5      =(       d    [        n[        X5      nU=(       d    [        nX l        X0l        UU l	        SU l
        Xl        Xl        U(       d  U" U5      n[        UU4SSUUUUS.UD6U l        [        SSUUUUUUUUUS.
UD6n[         R"                  " U" XA5      6 U l        UR&                  U l        U R(                   Vs/ s H  nUS   PM
     snU l        UR,                  U l        U	(       a  U=U l        U l        [3        [5        U R(                  5      U R                  5      S	   U l        [7        U R                   Vs/ s H  nU R(                  U   S
   PM     sn5      U l        [;        SU R8                  UU R                  UUS.UD6U l        [?        US9U l         SU l!        SU l"        OUR,                  U l        Xpl        SU l        [?        US9U l         U R.                  U R@                  RG                  5       -  n[I        UU R0                  S4SU0UD6U l!        U" U R0                  40 UD6U l"        U(       a  [         RJ                  " S5      O[         RL                  " 5       U l'        US	:  a  [Q        U R0                  U40 UD6O[         RL                  " 5       U l)        [U        U 5        gs  snf s  snf )a3  
Args:
    block_args: Arguments for blocks of the network.
    num_classes: Number of classes for classification head.
    in_chans: Number of input image channels.
    stem_size: Number of output channels of the initial stem convolution.
    fix_stem: If True, don't scale stem by round_chs_fn.
    num_features: Number of output channels of the conv head layer.
    head_bias: If True, add a learnable bias to the conv head layer.
    pad_type: Type of padding to use for convolution layers.
    act_layer: Type of activation layer.
    norm_layer: Type of normalization layer.
    aa_layer: Type of anti-aliasing layer.
    se_layer: Type of Squeeze-and-Excite layer.
    se_from_exp: If True, calculate SE channel reduction from expanded mid channels.
    round_chs_fn: Callable to round number of filters based on depth multiplier.
    drop_rate: Dropout rate.
    drop_path_rate: Stochastic depth rate.
    layer_scale_init_value: Enable layer scale on compatible blocks if not None.
    global_pool: Type of pooling to use for global pooling features of the FC head.
r6   Frx      rS   rT   paddingbiasr4   r3       
output_strider   r   r   r3   r4   r   r   r   r1   stager   num_chsr,   r-   r.   r4   r3   	pool_typeNr   r   r;   )+r<   r=   rB   r   r   r   r   r   r   r   grad_checkpointingr   r   r   	conv_stemr   nn
Sequentialblocksfeaturesfeature_info
stage_endsr,   r   head_hidden_sizer    lenr?   msfa_in_chsr*   msfar   r   	conv_head	norm_head	feat_multr   FlattenIdentityflattenr   
classifierr   )rE   r   r   r   r   r   r   r   r   r   r   r   r3   r4   r   r   r   r   r   r   r1   r   r7   r8   rF   norm_act_layerbuilderfminum_pooled_chsrG   s                                 rH   r=   MobileNetV5.__init__   s   ^ 	/&	#J/<9
+JB,}& ""'(&<# $Y/I$

 !

 

 & 
%#!)#9
 
 mmWY%CD#,,/3/@/@A/@!1W:/@A#NN 8DDD 5 4S9J9J5KTM^M^ _`a bD"tO`O`#aO`D$5$5b$9)$DO`#abD: ''$"&"="=%# DI  4kJD!DN!DN 'D$0!DI3kJD!..1A1A1K1K1MMN*>4;P;PRSl]eliklDN+D,A,AHRHDN(3rzz!}NY\]o&!6!6JrJcecncncp!$'E B $bs   7K+8K0c                    U R                   U R                  /nUR                  U R                  5        UR	                  U R
                  5        U R                  b  UR	                  U R                  5        U R                  b  UR	                  U R                  5        UR                  [        R                  " 5       [        R                  " U R                  5      U R                  /5        [        R                  " U6 $ N)r   bn1extendr   rY   r   r   r   r   r   Dropoutr   r   r   )rE   layerss     rH   as_sequentialMobileNetV5.as_sequential  s    ..$((+dkk"d&&'>>%MM$..)>>%MM$..)rzz|RZZ%?QR}}f%%rJ   coarsec                 ,    [        SU(       a  SS9$ SS9$ )Nz^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+))stemr   )dict)rE   r   s     rH   group_matcherMobileNetV5.group_matcher  s%    "(.$
 	
4L
 	
rJ   enablec                     Xl         g r   )r   )rE   r   s     rH   set_grad_checkpointing"MobileNetV5.set_grad_checkpointing  s    "(rJ   rL   c                     U R                   $ r   )r   )rE   s    rH   get_classifierMobileNetV5.get_classifier  s    rJ   c                    Xl         [        US9U l        U(       a  [        R                  " S5      O[        R
                  " 5       U l        US:  a  [        U R                  U5      U l	        g [        R
                  " 5       U l	        g )Nr   r   r   )
r   r   r   r   r   r   r   r   r   r   )rE   r   r   s      rH   reset_classifierMobileNetV5.reset_classifier  sY    &/+F(3rzz!}HSVW&!6!6D]_]h]h]jrJ   xindicesrD   
stop_early
output_fmtintermediates_onlyextra_blocksc                    US;   d   S5       eU(       a  U(       d   S5       e/ nU(       a%  [        [        U R                  5      S-   U5      u  pON[        [        U R                  5      U5      u  pU	 Vs/ s H  oR                  U   PM     n	nU R                  U
   n
SnU R	                  U5      nX;   a  UR                  U5        [        R                  R                  5       (       d  U(       d  U R                  nOU R                  SU
 nU H(  nUS-  nU" U5      nX;   d  M  UR                  U5        M*     U(       a  U$ X4$ s  snf )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
    extra_blocks: Include outputs of all blocks and head conv in output, does not align with feature_info
Returns:

NCHWOutput shape must be NCHW./Must use intermediates_only for early stopping.r   r   N)	r    r   r   r   r   rY   rZ   jitis_scripting)rE   r   r   rD   r   r   r   r   intermediatestake_indices	max_indexifeat_idxr   blks                  rH   forward_intermediates!MobileNetV5.forward_intermediates"  s7   . Y&D(DD&%X'XX%&:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L8DE1OOA.LE	2I NN1#  #99!!##:[[F[[),FCMHAA'$$Q'	    
 ; Fs   6E
prune_norm
prune_headc                    U(       a%  [        [        U R                  5      S-   U5      u  pVO0[        [        U R                  5      U5      u  pVU R                  U   nU R                  SU U l        U[        U R                  5      :  a  SU l        SU l        U(       a   SU l        SU l        U R                  SS5        U$ )z?Prune layers not required for specified intermediates.
        r   Nr   r{   )r    r   r   r   r   r   r   )rE   r   r   r   r   r   r   s          rH   prune_intermediate_layers%MobileNetV5.prune_intermediate_layers`  s     &:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L	2Ikk*9-s4;;''!DN!DN!DN!DN!!!R(rJ   c                    U R                   b  Sn/ nU R                  U5      nX R                  ;   a  UR                  U5        U R                   H2  nUS-  nU" U5      nX R                  ;   d  M!  UR                  U5        M4     U R                  U5      nU$ U R                  U5      nU R
                  (       a:  [        R                  R                  5       (       d  [        U R                  USS9nU$ U R	                  U5      nU$ )Nr   r   T)r   )
r   r   r   rY   r   r   rZ   r   r   r"   rE   r   r   r   r   s        rH   forward_featuresMobileNetV5.forward_featuresx  s    99 HMq!A,,,$$Q'{{AF000!((+ # 		-(A  q!A&&uyy/E/E/G/G"4;;4@  KKNrJ   
pre_logitsc                 d   U R                  U5      nU R                  b  U R                  U5      nU R                  b  U R                  U5      nU R                  U5      nU R                  S:  a)  [
        R                  " XR                  U R                  S9nU(       a  U$ U R                  U5      $ )Nr~   )ptraining)	r   r   r   r   r   rW   dropoutr   r   )rE   r   r   s      rH   forward_headMobileNetV5.forward_head  s    Q>>%q!A>>%q!ALLO>>B		!~~FAHq!!rJ   c                 J    U R                  U5      nU R                  U5      nU$ r   )r   r   rE   r   s     rH   re   MobileNetV5.forward  s'    !!!$a rJ   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   F)T)r   NFFr   FF)r   FTF)$rh   ri   rj   rk   rl   r   r   rm   rp   ro   r   r   r   r   rn   r=   r   rZ   r   ignorer   r   r   Moduler   r   rq   r
   r	   r   r   r   r   re   rr   rs   rt   s   @rH   r%   r%   ~   s3     $"" $!&.*,-1.2,0,0 $%3!$&6:$1}(!}( }( 	}(
 }( }( }( }( }( }( s)}( %(}(  	*}( !+}( y)}(  y)!}(" #}($ #%}(& '}(( ")}(* %-UO+}(, -}( }(~	& YY
D 
 
 YY)T ) ) YY		  kC kc k 8<$$',!&< ||<  eCcN34<  	< 
 <  <  !%<  <  
tELL!5tELL7I)I#JJ	K< @ ./$#!&3S	>*  	
 0%,, 5<< ."ell " " " %,,  rJ   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
4S\S\S\S\S\S\	S\
\   S\S\\   S\\   S\\   S\\   S\S\S\S\S\\   4"U 4S jjjr      S+S\R"                  S\\\\\   4      S \S!\S"\	S#\S$\S%\\\R"                     \\R"                  \\R"                     4   4   4S& jjrS\R"                  S%\R"                  4S' jrS\R"                  S%\R"                  4S( jrS\R"                  S%\R"                  4S) jrS*rU =r$ ),r&   i  zMobileNetV5 Vision Encoderrx   @   TFr{   r|   ry   Nr~   r   r   r   r   r   r   r   r   r3   r4   r   r   r   r   r   r   r1   c                 n  > [         TU ]  5         UUS.nU	=(       d    [        n	[        U
5      =(       d    [        n
U=(       d    [
        nSU l        X l        Xl        SU l	        U(       d  U" U5      n[        UU4SSUUU
U	S.UD6U l        [        SSUUUU	U
UUUUS.
UD6n[        R                  " U" X15      6 U l        UR                   U l        U R"                   Vs/ s H  nUS	   PM
     snU l        S
=U l        U l        [+        [-        U R"                  5      U5      S   U l        [1        U R.                   Vs/ s H  nU R"                  U   S   PM     sn5      U l        Xl        [7        SU R2                  U R&                  U R4                  U
U	S.UD6U l        [;        U 5        g s  snf s  snf )Nr6   r   Frx   r   r   r   r   r   rz   r   r   r;   )r<   r=   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r?   r   r   r*   r   r   )rE   r   r   r   r   r   r   r   r   r3   r4   r   r   r   r   r   r   r1   r7   r8   rF   r   r   r   rG   s                           rH   r=   MobileNetV5Encoder.__init__  s   , 	/&	#J/<9
,} ""' $Y/I$

 !

 

 & 
%#!)#9
 
 mmWY%CD#,,/3/@/@A/@!1W:/@A488D10T5F5F1GVWXY4K\K\]K\R 1 1" 5i @K\]^&<#6 
##%%"99!
 
	 	"$'# B
  ^s    F-?F2r   r   rD   r   r   r   r   rL   c                 @   AUS;   d   S5       eU(       a  U(       d   S5       e/ n/ n	U(       a%  [        [        U R                  5      S-   U5      u  pON[        [        U R                  5      U5      u  pU
 Vs/ s H  oR                  U   PM     n
nU R                  U   nSnU R	                  U5      nX;   a  UR                  U5        XR                  ;   a  U	R                  U5        [        R                  R                  5       (       d  U(       d  U R                  nOU R                  SU nU HH  nUS-  nU" U5      nX;   a  UR                  U5        XR                  ;   d  M7  U	R                  U5        MJ     U(       a  U$ U R                  U	5      U4$ s  snf )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: (Unused) Applies 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
    extra_blocks: Include outputs of all blocks and head conv in output, does not align with feature_info
Returns:

r   r   r   r   r   N)r    r   r   r   r   rY   r   rZ   r   r   r   )rE   r   r   rD   r   r   r   r   r   msfa_intermediatesr   r   r   r   r   r   s                   rH   r   (MobileNetV5Encoder.forward_intermediates  s   . Y&D(DD&%X'XX% &:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L8DE1OOA.LE	2I NN1#  #(((%%a(99!!##:[[F[[),FCMHAA'$$Q',,,"))!,    yy+,m;;7 Fs   9Fc                    Sn/ nU R                  U5      nX R                  ;   a  UR                  U5        U R                   H2  nUS-  nU" U5      nX R                  ;   d  M!  UR                  U5        M4     U R	                  U5      $ )Nr   r   )r   r   rY   r   r   r   s        rH   r   #MobileNetV5Encoder.forward_features;  s    NN1(((  #;;CMHAA,,,$$Q'  yy''rJ   c                     [        S5      e)Nz=MobileNetV5Encoder does not support classification use cases.)NotImplementedErrorr   s     rH   r   MobileNetV5Encoder.forward_headL  s    !"abbrJ   c                 $    U R                  U5      $ r   )r   r   s     rH   re   MobileNetV5Encoder.forwardO  s    $$Q''rJ   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rh   ri   rj   rk   rl   r   r   rm   rp   ro   r   r   r   r   rn   r=   rZ   rq   r
   r   r	   r   r   r   re   rr   rs   rt   s   @rH   r&   r&     s*   $
 ""*2*,-1.2,0,0 $%3!$&6:)O(!O( O( 	O(
 O( O( O( #3-O( %(O(  	*O( !+O( y)O( y)O( O( #O(  !O(" "#O($ %-UO%O( O(h 8<$$',!&C<||C< eCcN34C< 	C<
 C< C< !%C< C< 
tELL!5tELL7I)I#JJ	KC<J(%,, (5<< ("cell cu|| c( (%,, ( (rJ   
state_dictrL   c                     U R                  SU 5      n U R                  SU 5      n SU ;   a>  SnU R                  5        VVs0 s H  u  p4X#;   d  M  UR                  US5      U_M!     n nnU $ s  snnf )z$convert weights from gemma encoders modelr
  z3model.vision_tower.timm_model.conv_stem.conv.weightzmodel.vision_tower.timm_model.r{   )getitemsreplace)r
  r  prefixkvs        rH   checkpoint_filter_fnr  S  sw    
 4Jj9J<
J1;E;K;K;M];M41QWQ\.aii+Q.;M
] ^s    A+A+variant
pretrainedc                 x    UR                  SS5      n[        USS9nSn[        [        U U4S[        UUS.UD6nU$ )Nout_indicesr   r   r   rx      getterr  feature_cls)r   r   	head_conv	head_bias	head_normr   F)pretrained_strictpretrained_filter_fnfeature_cfgkwargs_filter)popr   r   r&   r  )r  r  kwargsr  r"  r#  r  s          rH   _create_mnv5_encoderr&  `  s^    **]O<K;HEKM !	  1#	 	E LrJ   c                 p    UR                  SS5      n[        USS9n[        [        U U4[        US.UD6nU$ )Nr  r  r  r  )r!  r"  )r$  r   r   r%   r  )r  r  r%  r  r"  r  s         rH   _create_mnv5r(  x  sO    **]O<K;HEK  2 E LrJ   channel_multiplierencoderc           
          SU ;   a  / SQ/ SQ/ SQ/ SQ/nO/ SQ/ SQ/ SQ/ SQ/n[        [        XbS9S	US
:  [        [        US9[        [
        SS9n[        U40 UD6nU(       a  [        X40 UD6nU$ [        X40 UD6nU$ )Nmobilenetv5_base)er_r1_k3_s2_e4_c128er_r1_k3_s1_e4_c128r.  )uir_r1_a3_k5_s2_e6_c256uir_r1_a5_k0_s1_e4_c256uir_r1_a3_k0_s1_e4_c256r0  r1  )uir_r1_a5_k5_s2_e6_c512uir_r1_a5_k0_s1_e4_c512r3  uir_r1_a0_k0_s1_e1_c512mqa_r1_k3_h8_s2_d64_c512uir_r1_a0_k0_s1_e2_c512r5  r6  r5  r6  r5  r6  r5  r6  r5  r6  )uir_r1_a5_k5_s2_e6_c1024mqa_r1_k3_h16_s1_d64_c1024uir_r1_a0_k0_s1_e2_c1024r8  r9  r8  r9  r8  r9  r8  r9  r8  r9  r8  r9  )%uir_r1_a5_k5_s2_e6_c640uir_r1_a5_k0_s1_e4_c640r;  r;  r;  r;  r;  r;  uir_r1_a0_k0_s1_e1_c640mqa_r1_k3_h12_v2_s1_d64_c640uir_r1_a0_k0_s1_e2_c640r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  r=  r>  )'uir_r1_a5_k5_s2_e6_c1280mqa_r1_k3_h16_s1_d96_c1280uir_r1_a0_k0_s1_e2_c1280r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  r@  rA  )
group_sizer         ?)
multipliergh㈵>)r   r   r   r   r4   r3   r1   )r   r   r   r   r   rB   r&  r(  )	r  r)  rB  r  r*  r%  arch_defmodel_kwargsr  s	            rH   _gen_mobilenet_v5rG    s     W$&G4%
p&P(qa%
F "8C#c)^8JK#L //L$WILI L WALALrJ   urlc                 0    U SSSSS[         [        SSS.
UE$ )	Nrw   )rx      rJ  )ry   ry   rC  bicubiczconv_stem.convr   )
rH  r   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convr   r   )rH  r%  s     rH   _cfgrS  9  s0    4}S[)'0F&l	
  rJ   )r~   r~   r~   )rC  rC  rC  )rx      rT  )rP  rQ  rL  r   ztimm/gemma)	hf_hub_idrP  rQ  rL  r   licenserw   )r   )mobilenetv5_300m_enczmobilenetv5_300m.gemma3nzmobilenetv5_base.untrainedc                 J    UR                  SS5      n[         SU SUS.UD6nU$ )zMobileNet V5 Vision Encoderr   sameT)r  r*  r   )rX  )r$  rG  )r  r%  r   r  s       rH   rX  rX  Y  s@     zz*f-H	
 E LrJ   c                      [        SSU 0UD6nU$ )Nr  )mobilenetv5_300mrG  r  r%  r  s      rH   r\  r\  g      RZR6RELrJ   c                      [        SSU 0UD6nU$ )Nr  )r,  r]  r^  s      rH   r,  r,  m  r_  rJ   r   )rC  NFF)r{   )E	functoolsr   typingr   r   r   r   r   r	   r
   rZ   torch.nnr   torch.nn.functional
functionalrW   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   r   _builderr   _efficientnet_blocksr   r   _efficientnet_builderr   r   r   r   r   	_featuresr    _features_fxr!   _manipulater"   	_registryr#   r$   __all__GELUrB   r   r*   r%   r&   ro   rq   r  rp   r&  r(  rn   rG  rS  default_cfgsrX  r\  r,  r;   rJ   rH   <module>rr     s"    I I I     E
 
 
 + J  , 1 ' <.
/V, S S Sla")) aH	n( n(b
ell*+
 
#u||

# 4 N` 0# 4 k   %( pp!p 	p
 p pfc  % |  !%| ! #'#!& , 
T 
@R 
 
  K  
  K  rJ   