
    ^jT                        d 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 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	j:                        Z G d de	j:                        Z G d de	j@                        Z! G d de	j@                        Z" G d de	j@                        Z# G d de	j@                        Z$ G d de	j@                        Z% G d de	j@                        Z& G d de	j@                        Z' G d de	j@                        Z(d,dZ) e 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 !      d"      Z*d-d#Z+ed-d$       Z,ed-d%       Z-ed-d&       Z.ed-d'       Z/ed-d(       Z0ed-d)       Z1ed-d*       Z2ed-d+       Z3y).a   RepViT

Paper: `RepViT: Revisiting Mobile CNN From ViT Perspective`
    - https://arxiv.org/abs/2307.09283

@misc{wang2023repvit,
      title={RepViT: Revisiting Mobile CNN From ViT Perspective},
      author={Ao Wang and Hui Chen and Zijia Lin and Hengjun Pu and Guiguang Ding},
      year={2023},
      eprint={2307.09283},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Adapted from official impl at https://github.com/jameslahm/RepViT
    )ListOptionalTupleUnionTypeNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)SqueezeExcitetrunc_normal_	to_ntuple	to_2tuple   )build_model_with_cfg)feature_take_indices)
checkpointcheckpoint_seq)register_modelgenerate_default_cfgsRepVitc                        e Zd Z	 	 	 	 	 	 	 	 ddedededededededef fd	Z ej                         d
        Z xZ	S )ConvNormin_dimout_dimksstridepaddilationgroupsbn_weight_initc                    |	|
d}t         |           | j                  dt        j                  |||||||fddi|       | j                  dt        j
                  |fi |       t        j                  j                  | j                  j                  |       t        j                  j                  | j                  j                  d       y )NdevicedtypecbiasFbnr   )super__init__
add_modulennConv2dBatchNorm2dinit	constant_r'   weightr&   )selfr   r   r   r   r   r   r   r    r#   r$   dd	__class__s               ]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/repvit.pyr)   zConvNorm.__init__!   s     /RYYvwFCSYl`eliklmbnnW;;<
$''...9
$'',,*    c           
      b   | j                   j                         \  }}|j                  |j                  |j                  z   dz  z  }|j                  |d d d d d f   z  }|j
                  |j                  |j                  z  |j                  |j                  z   dz  z  z
  }t        j                  |j                  d      | j                  j                  z  |j                  d      |j                  dd  | j                  j                  | j                  j                  | j                  j                  | j                  j                  |j                  j                         }|j                  j"                  j%                  |       |j
                  j"                  j%                  |       |S )N      ?r   r      )r   paddingr   r   r#   )_modulesvaluesr0   running_varepsr&   running_meanr+   r,   sizer%   r   shaper   r9   r   r#   datacopy_)r1   r%   r'   wbms         r4   fusezConvNorm.fuse5   s/   $$&2II"&&0S88HHqD$,--GGboo		1R^^bff5LQT4TTTIIFF1I%FF1IGGABK66==FFNNVV__66==88??	
 	
A	!r5   )r   r   r   r   r   r   NN)
__name__
__module____qualname__intfloatr)   torchno_gradrF   __classcell__r3   s   @r4   r   r       s    
 $%++ + 	+
 + + + + "+( U]]_ r5   r   c            	       h     e Zd Z	 	 	 	 ddedededef fdZ ej                         d        Z	 xZ
S )
NormLinearr   r   r&   stdc                 z   ||d}t         |           | j                  dt        j                  |fi |       | j                  dt        j
                  ||fd|i|       t        | j                  j                  |       |r5t        j                  j                  | j                  j                  d       y y )Nr"   r'   lr&   )rR   r   )r(   r)   r*   r+   BatchNorm1dLinearr   rT   r0   r.   r/   r&   )	r1   r   r   r&   rR   r#   r$   r2   r3   s	           r4   r)   zNormLinear.__init__K   s     /bnnV:r:;RYYvwHTHRHIdffmm-GGdffkk1- r5   c                 l   | j                   j                         \  }}|j                  |j                  |j                  z   dz  z  }|j
                  | j                  j                  | j                  j                  z  |j                  |j                  z   dz  z  z
  }|j                  |d d d f   z  }|j
                  $|| j                  j                  j                  z  }n<|j                  |d d d f   z  j                  d      | j                  j
                  z   }t        j                  |j                  d      |j                  d      |j                  j                        }|j                  j                  j!                  |       |j
                  j                  j!                  |       |S )Nr7   r   r   r#   )r:   r;   r0   r<   r=   r&   r'   r>   rT   Tviewr+   rV   r?   r#   rA   rB   )r1   r'   rT   rC   rD   rE   s         r4   rF   zNormLinear.fuse\   s6   $$&AII"&&0S88GGdgg**TWW^^;r~~PRPVPV?V[^>^^^HHqqz!66>DFFMMOO#AAagJ&,,R0466;;>AIIaffQi188??C	A	!r5   )Tg{Gz?NN)rG   rH   rI   rJ   boolrK   r)   rL   rM   rF   rN   rO   s   @r4   rQ   rQ   J   sX    
 .. . 	.
 ." U]]_ r5   rQ   c                   h     e Zd Z	 	 	 ddededef fdZd Z ej                         d        Z	 xZ
S )RepVggDwedkernel_sizelegacyc                 `   ||d}t         |           t        |||d|dz
  dz  fd|i|| _        |r1t        ||dddfd|i|| _        t        j                         | _        n<t        j                  ||dddfd|i|| _        t        j                  |fi || _        || _
        || _        y )Nr"   r   r8   r   r   )r(   r)   r   convconv1r+   Identityr'   r,   r-   dimra   )r1   r_   r`   ra   r#   r$   r2   r3   s          r4   r)   zRepVggDw.__init__m   s     /R[!kAo!5K]TV]Z\]	!"b!QC"CCDJkkmDG2r1aD2DDDJnnR.2.DGr5   c                 l    | j                  | j                  |      | j                  |      z   |z         S N)r'   rc   rd   r1   xs     r4   forwardzRepVggDw.forward   s+    wwtyy|djjm3a788r5   c           	         | j                   j                         }| j                  r| j                  j                         }n| j                  }|j                  }|j
                  }|j                  }|j
                  }t        j                  j                  |g d      }t        j                  j                  t        j                  |j                  d   |j                  d   dd|j                        g d      }||z   |z   }||z   }	|j                  j                  j                  |       |j
                  j                  j                  |	       | j                  s| j                  }
|
j                  |
j                   |
j"                  z   dz  z  }|j                  |d d d d d f   z  }|
j
                  |j
                  |
j$                  z
  |
j                  z  |
j                   |
j"                  z   dz  z  z   }|j                  j                  j                  |       |j
                  j                  j                  |       |S )N)r   r   r   r   r   r   rY   r7   )rc   rF   ra   rd   r0   r&   r+   
functionalr   rL   onesr@   r#   rA   rB   r'   r<   r=   r>   )r1   rc   rd   conv_wconv_bconv1_wconv1_bidentityfinal_conv_wfinal_conv_br'   rC   rD   s                r4   rF   zRepVggDw.fuse   s   yy~~;;JJOO%EJJE,,**--##G\:==$$JJw}}Q'q)91aWYe
 '(2'|,		\*{{B		R^^bff4<<Aa4t 344A499r6"))Cr~~XZX^X^G^cfFfffAKK""1%IINN  #r5   FNN)rG   rH   rI   rJ   r\   r)   rk   rL   rM   rF   rN   rO   s   @r4   r^   r^   l   sP    
 !  	*9 U]]_   r5   r^   c                   R     e Zd Z	 	 ddededeej                     f fdZd Z xZ	S )	RepVitMlpr   
hidden_dim	act_layerc                     ||d}t         |           t        ||dddfi || _         |       | _        t        ||dddfddi|| _        y )Nr"   r   r   r    )r(   r)   r   rd   actconv2)r1   r   ry   rz   r#   r$   r2   r3   s          r4   r)   zRepVitMlp.__init__   sZ     /fj!Q@R@
;j&!QR!RrR
r5   c                 `    | j                  | j                  | j                  |                  S rh   )r}   r|   rd   ri   s     r4   rk   zRepVitMlp.forward   s"    zz$((4::a=122r5   NN
rG   rH   rI   rJ   r   r+   Moduler)   rk   rN   rO   s   @r4   rx   rx      s=     SS S BII	S3r5   rx   c                   `     e Zd Z	 	 	 d	dededededeej                     def fdZ	d Z
 xZS )
RepViTBlockr   	mlp_ratior`   use_serz   ra   c	                     ||d}	t         
|           t        |||fi |	| _        |rt	        |dfi |	nt        j                         | _        t        |||z  |fi |	| _	        y )Nr"   g      ?)
r(   r)   r^   token_mixerr   r+   re   serx   channel_mixer)r1   r   r   r`   r   rz   ra   r#   r$   r2   r3   s             r4   r)   zRepViTBlock.__init__   si     /#FKF2F7=-332;;=&vv	/A9SPRSr5   c                 v    | j                  |      }| j                  |      }|}| j                  |      }||z   S rh   )r   r   r   r1   rj   rs   s      r4   rk   zRepViTBlock.forward   s>    QGGAJq!!|r5   rv   )rG   rH   rI   rJ   rK   r\   r   r+   r   r)   rk   rN   rO   s   @r4   r   r      sa     !TT T 	T
 T BIIT T"r5   r   c                   R     e Zd Z	 	 ddededeej                     f fdZd Z xZ	S )
RepVitStemin_chsout_chsrz   c                     ||d}t         |           t        ||dz  dddfi || _         |       | _        t        |dz  |dddfi || _        d| _        y )Nr"   r8      r      )r(   r)   r   rd   act1r}   r   )r1   r   r   rz   r#   r$   r2   r3   s          r4   r)   zRepVitStem.__init__   sd     /fglAq!BrB
K	glGQ1CC
r5   c                 `    | j                  | j                  | j                  |                  S rh   )r}   r   rd   ri   s     r4   rk   zRepVitStem.forward   s"    zz$))DJJqM233r5   r   r   rO   s   @r4   r   r      s9       BII	4r5   r   c                   `     e Zd Z	 	 	 d	dededededeej                     def fdZ	d Z
 xZS )
RepVitDownsampler   r   r   r`   rz   ra   c	                     ||d}	t         
|           t        |||fd||d|	| _        t	        |||fd|dz
  dz  |d|	| _        t	        ||ddfi |	| _        t        |||z  |fi |	| _        y )Nr"   F)r   rz   ra   r8   r   )r   r   r   )	r(   r)   r   	pre_blockr   spatial_downsamplechannel_downsamplerx   ffn)r1   r   r   r   r`   rz   ra   r#   r$   r2   r3   s             r4   r)   zRepVitDownsample.__init__   s     /$
 
 
 #+#
 qQ&#
 #
 #+67Aq"GB"GWg	&99KKr5   c                     | j                  |      }| j                  |      }| j                  |      }|}| j                  |      }||z   S rh   )r   r   r   r   r   s      r4   rk   zRepVitDownsample.forward  sL    NN1##A&##A&HHQK8|r5   rv   rG   rH   rI   rJ   rK   r   r+   r   r\   r)   rk   rN   rO   s   @r4   r   r      sb     ! L L  L 	 L
  L BII L  LDr5   r   c            	       n     e Zd Z	 	 	 	 ddedededef fdZd Z ej                         d        Z
 xZS )	RepVitClassifierrf   num_classesdistillationdropc                 <   ||d}t         |           t        j                  |      | _        |dkD  rt        ||fi |nt        j                         | _        || _        d| _	        || _
        |r,|dkD  rt        ||fi |nt        j                         | _        y y )Nr"   r   F)r(   r)   r+   Dropout	head_droprQ   re   headr   distilled_trainingr   	head_dist)	r1   rf   r   r   r   r#   r$   r2   r3   s	           r4   r)   zRepVitClassifier.__init__  s     /D):E/JsK626r{{}	("'&CNQR?Z[?B?XZXcXcXeDN r5   c                 *   | j                  |      }| j                  rd| j                  |      | j                  |      }}| j                  r.| j
                  r"t        j                  j                         s||fS ||z   dz  S | j                  |      }|S )Nr8   )	r   r   r   r   trainingr   rL   jitis_scripting)r1   rj   x1x2s       r4   rk   zRepVitClassifier.forward*  sz    NN1YYq\4>>!#4B}}!8!8AWAWAY2vR1}$		!AHr5   c                    | j                   dkD  st        j                         S | j                  j	                         }| j
                  r| j                  j	                         }|xj                  |j                  z  c_        |xj                  |j                  z  c_        |xj                  dz  c_        |xj                  dz  c_        |S |S )Nr   r8   )	r   r+   re   r   rF   r   r   r0   r&   )r1   r   r   s      r4   rF   zRepVitClassifier.fuse6  s    !#;;= yy~~++-IKK9+++KII'IKK1KIINIKKr5   )F        NN)rG   rH   rI   rJ   r\   rK   r)   rk   rL   rM   rF   rN   rO   s   @r4   r   r     sb    
 "'ff f 	f
 f&
 U]]_ r5   r   c                   l     e Zd Z	 	 	 	 	 ddededededeej                     dededef fd	Z	d
 Z
 xZS )RepVitStager   r   depthr   rz   r`   
downsamplera   c                 <   |	|
d}t         |           |rt        ||||f||d|| _        n ||k(  sJ t	        j
                         | _        g }d}t        |      D ]%  }|j                  t        ||||||fi |       | }' t	        j                  | | _
        y )Nr"   )rz   ra   T)r(   r)   r   r   r+   re   rangeappendr   
Sequentialblocks)r1   r   r   r   r   rz   r`   r   ra   r#   r$   r2   r   r   _r3   s                  r4   r)   zRepVitStage.__init__G  s     /.	
 $ DO W$$$ kkmDOu 	 AMM+gy+vyZ`gdfghZF	  mmV,r5   c                 J    | j                  |      }| j                  |      }|S rh   )r   r   ri   s     r4   rk   zRepVitStage.forwardl  s"    OOAKKNr5   )r   TFNNr   rO   s   @r4   r   r   F  su      !# #-#- #- 	#-
 #- BII#- #- #- #-Jr5   r   c                       e Zd Zddddddddej                  dd	d
ddfdededeedf   deedf   dedededede	ej                     dededef fdZej                  j                  d/d       Zej                  j                  d0d       Zej                  j                  dej                  fd       Zd1dedee   defdZej                  j                  d0d       Z	 	 	 	 	 d2d ej,                  d!eeeee   f      d"ed#ed$ed%edeeej,                     eej,                  eej,                     f   f   fd&Z	 	 	 d3d!eeee   f   d'ed(efd)Zd* Zd/d+efd,Zd- Z ej<                         d.        Z xZ S )4r   r      )0   )r8   r8   avg  Tr   FNin_chansimg_size	embed_dim.r   r   global_poolr`   r   rz   r   	drop_ratera   c                    t         |           ||d}d| _        || _        || _        || _        || _        |d   }t        |||	fi || _        | j                  j                  }t        t        t        |      t        |            D cg c]
  \  }}||z   c}}      }t        |      } t        |      |      }g | _        g }t!        |      D ]  }|dk7  rdnd}|j#                  t%        |||   ||   f||   |	|||d|       |rdnd}||z  }t        |D cg c]  }|dz
  |z  dz    c}      }| xj                  t'        ||   |d| 	      gz  c_        ||   } t)        j*                  | | _        |d
   x| _        | _        t)        j2                  |      | _        t7        |d
   ||
fi || _        y c c}}w c c}w )Nr"   Fr   T)r   rz   r`   r   ra   r8   r   zstages.)num_chs	reductionmodulerX   )r(   r)   grad_checkpointingr   r   r   r   r   stemr   tuplezipr   lenr   feature_infor   r   r   dictr+   r   stagesnum_featureshead_hidden_sizer   r   r   r   )r1   r   r   r   r   r   r   r`   r   rz   r   r   ra   r#   r$   r2   r   r   ip
resolution
num_stages
mlp_ratiosr   r   stage_striderr3   s                              r4   r)   zRepVit.__init__s  s   " 	/"'&"& 1xAbA	!!s9X3F	RXHY/Z[tq!AF[\
^
*Yz*95
z" 	"A!"aUJMMaL!H
 )m' +)!
 
 !+1Ll"FZPQ< 7! ;PQJ$y|vX_`a_bVc"d!eeq\F'	"( mmV,4=bMAD1I.$Yr]KTQST	? \0  Qs   G 
G
c                 $    t        dddg      }|S )Nz^stem)z^blocks\.(\d+)N)z^norm)i )r   r   )r   )r1   coarsematchers      r4   group_matcherzRepVit.group_matcher  s    H.GI]-^_r5   c                     || _         y rh   )r   r1   enables     r4   set_grad_checkpointingzRepVit.set_grad_checkpointing  s
    "(r5   returnc                     | j                   S rh   )r   )r1   s    r4   get_classifierzRepVit.get_classifier  s    yyr5   c                 n    || _         ||| _        ||d}t        | j                  d   ||fi || _        y )Nr"   rX   )r   r   r   r   r   )r1   r   r   r   r#   r$   r2   s          r4   reset_classifierzRepVit.reset_classifier  sA    &"*D/$T^^B%7lYVXY	r5   c                 &    || j                   _        y rh   )r   r   r   s     r4   set_distilled_trainingzRepVit.set_distilled_training  s    '-		$r5   rj   indicesnorm
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        |
      D ]Z  \  }}| j                  r+t        j
                  j                         st        ||      }n ||      }||v sJ|j                  |       \ |r|S ||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   rL   r   r   	enumerater   r   r   )r1   rj   r   r   r   r   r   intermediatestake_indices	max_indexr   feat_idxstages                r4   forward_intermediateszRepVit.forward_intermediates  s    * Y&D(DD&"6s4;;7G"Qi IIaL99!!#:[[F[[)a-0F(0 	(OHe&&uyy/E/E/Gua(!H<'$$Q'	(   -r5   
prune_norm
prune_headc                     t        t        | j                        |      \  }}| j                  d|dz    | _        |r| j                  dd       |S )z@ Prune layers not required for specified intermediates.
        Nr   r    )r   r   r   r   )r1   r   r   r   r   r   s         r4   prune_intermediate_layersz RepVit.prune_intermediate_layers  sM     #7s4;;7G"Qikk.9q=1!!!R(r5   c                     | j                  |      }| j                  r6t        j                  j	                         st        | j                  |      }|S | j                  |      }|S rh   )r   r   rL   r   r   r   r   ri   s     r4   forward_featureszRepVit.forward_features  sR    IIaL""599+A+A+Ct{{A.A  AAr5   
pre_logitsc                     | j                   dk(  r|j                  dd      }| j                  |      }|r|S | j                  |      S )Nr   )r8   r   F)keepdim)r   meanr   r   )r1   rj   r   s      r4   forward_headzRepVit.forward_head  sF    u$vu-ANN1Hyy|r5   c                 J    | j                  |      }| j                  |      }|S rh   )r   r  ri   s     r4   rk   zRepVit.forward  s'    !!!$a r5   c                      fd |        y )Nc                     | j                         D ]?  \  }}t        |d      r&|j                         }t        | ||        |       8 |       A y )NrF   )named_childrenhasattrrF   setattr)net
child_namechildfusedfuse_childrens       r4   r  z"RepVit.fuse.<locals>.fuse_children  sQ    %(%7%7%9 )!
E5&)!JJLECU3!%(!%()r5    )r1   r  s    @r4   rF   zRepVit.fuse  s    	) 	dr5   F)T)NFNN)NFFr   F)r   FT)!rG   rH   rI   r+   GELUrJ   r   rK   strr   r   r\   r)   rL   r   ignorer   r   r   r   r   r   Tensorr   r   r   r   r   r  rk   rM   rF   rN   rO   s   @r4   r   r   r  s    %*!% %'WW!;U;U ;U c?	;U
 S#X;U ;U ;U ;U ;U 		?;U ;U ;U ;Uz YY  YY) ) YY		  ZC Zhsm Zbf Z YY. . 8<$$',+ ||+  eCcN34+  	+ 
 +  +  !%+  
tELL!5tELL7I)I#JJ	K+ ^ ./$#	3S	>*  	$ 
 U]]_
 
r5   c                 2    | dddddt         t        dddd	|S )
Nr   )r   r   r   )   r  gffffff?bicubiczstem.conv1.c)zhead.head.lzhead.head_dist.lz
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationr  rR   
first_conv
classifierlicenser   )r  kwargss     r4   _cfgr!  &  s7    #"%#$9  r5   ztimm/)	hf_hub_id)zrepvit_m1.dist_in1kzrepvit_m2.dist_in1kzrepvit_m3.dist_in1kzrepvit_m0_9.dist_300e_in1kzrepvit_m0_9.dist_450e_in1kzrepvit_m1_0.dist_300e_in1kzrepvit_m1_0.dist_450e_in1kzrepvit_m1_1.dist_300e_in1kzrepvit_m1_1.dist_450e_in1kzrepvit_m1_5.dist_300e_in1kzrepvit_m1_5.dist_450e_in1kzrepvit_m2_3.dist_300e_in1kzrepvit_m2_3.dist_450e_in1kc                 h    |j                  dd      }t        t        | |fdt        d|      i|}|S )Nout_indices)r   r   r8   r   feature_cfgT)flatten_sequentialr$  )popr   r   r   )variant
pretrainedr   r$  models        r4   _create_repvitr+  d  sG    **]L9K  DkJ	
 E Lr5   c           	      L    t        ddd      }t        dd| it        |fi |S )z&
    Constructs a RepViT-M1 model
    r   `      i  r8   r8      r8   Tr   r   ra   r)  )	repvit_m1r   r+  r)  r   
model_argss      r4   r3  r3  p  s2    
  2-PTUJ[*[Z@ZSY@Z[[r5   c           	      L    t        ddd      }t        dd| it        |fi |S )z&
    Constructs a RepViT-M2 model
    @         i   r8   r8      r8   Tr2  r)  )	repvit_m2r4  r5  s      r4   r>  r>  y  2    
  3=QUVJ[*[Z@ZSY@Z[[r5   c           	      L    t        ddd      }t        dd| it        |fi |S )z&
    Constructs a RepViT-M3 model
    r8  )r   r      r8   Tr2  r)  )	repvit_m3r4  r5  s      r4   rB  rB    r?  r5   c           	      J    t        dd      }t        dd| it        |fi |S )z(
    Constructs a RepViT-M0.9 model
    r-  r0  r   r   r)  )repvit_m0_9r4  r5  s      r4   rE  rE    s/    
  2-HJ]J]$zB\U[B\]]r5   c           	      J    t        dd      }t        dd| it        |fi |S )z(
    Constructs a RepViT-M1.0 model
    )8   p   r   i  r0  rD  r)  )repvit_m1_0r4  r5  s      r4   rI  rI    /    
  3=IJ]J]$zB\U[B\]]r5   c           	      J    t        dd      }t        dd| it        |fi |S )z(
    Constructs a RepViT-M1.1 model
    r8  r<  rD  r)  )repvit_m1_1r4  r5  s      r4   rL  rL    rJ  r5   c           	      J    t        dd      }t        dd| it        |fi |S )z(
    Constructs a RepViT-M1.5 model
    r8  )r   r      r   rD  r)  )repvit_m1_5r4  r5  s      r4   rO  rO    rJ  r5   c           	      J    t        dd      }t        dd| it        |fi |S )z(
    Constructs a RepViT-M2.3 model
    )P      i@  i  )   rS  "   r8   rD  r)  )repvit_m2_3r4  r5  s      r4   rU  rU    rJ  r5   )r   r  )4__doc__typingr   r   r   r   r   rL   torch.nnr+   	timm.datar	   r
   timm.layersr   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   __all__r   r   rQ   r   r^   rx   r   r   r   r   r   r   r!  default_cfgsr+  r3  r>  rB  rE  rI  rL  rO  rU  r  r5   r4   <module>ra     sQ    6 5   A J J * + 3 <*'r}} 'T D:ryy :z3		 3&")) 44 4()ryy )X-ryy -`)")) )XqRYY qh" %# 
  $ 
  $ 
 '+'
 '+'
 '+'
 '+'
 '+'
 '+'
 '+'
 '+'
 '+'
 '+'
K(*Z	 \ \ \ \ \ \ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^r5   