
    ^j`?                        d Z ddlm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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m Z  dgZ! G d dejD                        Z# G d dejD                        Z$ G d dejD                        Z%d Z&d'dZ'd(dZ( e e(d       e(dd       e(d       e(d       e(d       e(ddd       e(ddd       e(ddd       e(d       e(dd      d
      Z)ed'de%fd       Z*ed'de%fd       Z+ed'de%fd        Z,ed'de%fd!       Z- e e.d"d#d$d%d&       y))z
TResNet: High Performance GPU-Dedicated Architecture
https://arxiv.org/pdf/2003.13630.pdf

Original model: https://github.com/mrT23/TResNet

    )OrderedDict)partial)ListOptionalTupleUnionTypeN)SpaceToDepth
BlurPool2dClassifierHeadSEModuleConvNormActDropPathcalculate_drop_path_rates   )build_model_with_cfg)feature_take_indices)
checkpointcheckpoint_seq)register_modelgenerate_default_cfgsregister_model_deprecationsTResNetc                        e Zd ZdZ	 	 	 	 	 	 	 ddedededeej                     dedee	ej                        d	e
d
df fdZd Z xZS )
BasicBlockr   Ninplanesplanesstride
downsampleuse_seaa_layerdrop_path_ratereturnc
                    ||	d}
t         |           || _        || _        t	        t
        j                  d      }t        ||fd|||d|
| _        t        ||fdddd|
| _	        t        j                  d	
      | _        t        || j                  z  dz  d      }|rt        || j                  z  fd|i|
nd | _        |dkD  rt!        |      | _        y t        j"                         | _        y )NdevicedtypeMbP?negative_slope   kernel_sizer   	act_layerr!   r   Fr-   r   	apply_actTinplace   @   rd_channelsr   )super__init__r   r   r   nn	LeakyReLUr   conv1conv2ReLUactmax	expansionr   ser   Identity	drop_path)selfr   r   r   r   r    r!   r"   r&   r'   ddr.   rd_chs	__class__s                ^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/tresnet.pyr7   zBasicBlock.__init__   s     /$BLL>	 
 
 

 !`QqTY`]_`
774(Vdnn,126QW(6DNN2MM"M]a5Ca5G.1R[[]    c                    | j                   | j                  |      }n|}| j                  |      }| j                  |      }| j                  | j                  |      }| j	                  |      |z   }| j                  |      }|S N)r   r:   r;   r@   rB   r=   rC   xshortcutouts       rG   forwardzBasicBlock.forward=   su    ??&q)HHjjmjjo77''#,CnnS!H,hhsm
rH   )r   NTN        NN__name__
__module____qualname__r?   intr   r8   Moduleboolr	   floatr7   rO   __classcell__rF   s   @rG   r   r      s    I .226$& [ [  [ 	 [
 !+ [  [ tBII/ [ " [ 
 [DrH   r   c                        e Zd ZdZ	 	 	 	 	 	 	 	 ddedededeej                     dedee	ej                        d	ee	ej                        d
e
ddf fdZd Z xZS )
Bottleneckr3   Nr   r   r   r   r    r.   r!   r"   r#   c                    |	|
d}t         |           || _        || _        |xs t	        t
        j                  d      }t        ||fdd|d|| _        t        ||fd|||d|| _	        t        || j                  z  dz  d	      }|rt        |fd
|i|nd | _        t        ||| j                  z  fdddd|| _        |dkD  rt        |      nt        j                          | _        t        j$                  d      | _        y )Nr%   r(   r)   r   )r-   r   r.   r+   r,      r4   r5   Fr/   r   Tr1   )r6   r7   r   r   r   r8   r9   r   r:   r;   r>   r?   r   r@   conv3r   rA   rB   r<   r=   )rC   r   r   r   r   r    r.   r!   r"   r&   r'   rD   reduction_chsrF   s                rG   r7   zBottleneck.__init__N   s    /$Kd!K	 6fqV_fcef
 
 
 

 FT^^3q8"=GM(6C}CCSW $..)@qaXYejqnpq
5Ca5G.1R[[]774(rH   c                 0   | j                   | j                  |      }n|}| j                  |      }| j                  |      }| j                  | j                  |      }| j	                  |      }| j                  |      |z   }| j                  |      }|S rJ   )r   r:   r;   r@   r_   rB   r=   rK   s       rG   rO   zBottleneck.forwardt   s    ??&q)HHjjmjjo77''#,CjjonnS!H,hhsm
rH   )r   NTNNrP   NNrQ   rZ   s   @rG   r\   r\   K   s    I .23726$&$)$) $) 	$)
 !+$) $)  RYY0$) tBII/$) "$) 
$)LrH   r\   c                   L    e Zd Z	 	 	 	 	 	 	 	 	 ddee   dedededededed	ed
df fdZ	 	 	 	 	 	 d 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
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	 	 	 d%deeee   f   dedefdZd Zd!defdZd Z xZS )&r   Nlayersin_chansnum_classeswidth_factorv2global_pool	drop_rater"   r#   c                 |   t         |           |	|
d}|| _        || _        || _        d| _        t        }t        j                  }t        d|z        | _
        t        d|z        | _        |r.| j                  dz  dz  | _
        | j                  dz  dz  | _        t        ||d      }t        |dz  | j                  fdd	|d
|} | j                  |rt        nt         | j                  |d   fdd||d   d|} | j                  |rt        nt         | j                  dz  |d   fdd||d   d|} | j                  t        | j                  dz  |d   fdd||d   d|} | j                  t        | j                  dz  |d	   fdd||d	   d|}t        j"                  t%        dt'               fd|fd|fd|fd|fd|fg            | _        t+        | j                  dd      t+        | j                  |rt        j,                  ndz  dd      t+        | j                  dz  |rt        j,                  ndz  dd      t+        | j                  dz  t        j,                  z  dd      t+        | j                  dz  t        j,                  z  dd      g| _        | j                  dz  t        j,                  z  x| _        | _        t5        | j0                  |f||d|| _        | j9                         D ]  }t;        |t        j<                        r,t        j>                  jA                  |jB                  dd       t;        |t        jD                        sd|jB                  jF                  jI                  dd         | j9                         D ]  }t;        |t               r=t        j>                  jK                  |jL                  jN                  jB                         t;        |t              sat        j>                  jK                  |jP                  jN                  jB                          y )!Nr%   Fr4   r^   T)	stagewise   r   r+   )r   r-   r.   r   )r   r    r!   r"      r3   s2dr:   layer1layer2layer3layer4 )num_chs	reductionmodulezbody.layer1zbody.layer2zbody.layer3    zbody.layer4)	pool_typeri   fan_out
leaky_relu)modenonlinearityg{Gz?))r6   r7   re   rd   ri   grad_checkpointingr   r8   r9   rU   r   r   r   r   _make_layerr\   r   
Sequentialr   r
   bodydictr?   feature_infonum_featureshead_hidden_sizer   headmodules
isinstanceConv2dinitkaiming_normal_weightLineardatanormal_zeros_r;   bnr_   )rC   rc   rd   re   rf   rg   rh   ri   r"   r&   r'   rD   r!   r.   dprr:   ro   rp   rq   rr   mrF   s                        rG   r7   zTResNet.__init__   s    	/& ""'LL	 B-."|+, MMQ.2DM++*Q.DK'$OHrM4;;kqa[dkhjk!!!J*KKk+,TH]`ab]ckgik "!!J*KK!OVAYo/0adefagokmo "!!KK!OVAYo/0adefagokmo "!!KK!OVAYp/0befgbhplnp
 MM+LN#evvvv/
 # 	 "=
(<(<JVW`mnqBJ,@,@ANZ[dqrq:+?+??2Vcdq:+?+??2Vcd
 6:[[1_
H\H\4\\D1"4#4#4kt[dmtqst	  	/A!RYY'''y|'\!RYY'%%a.		/  	2A!Z(qwwzz001!Z(qwwzz001		2rH   c
                 4   ||	d}
d }|dk7  s| j                   ||j                  z  k7  rmg }|dk(  r(|j                  t        j                  dddd             |t        | j                   ||j                  z  fdddd|
gz  }t        j                  | }g }t        |      D ]b  }|j                   || j                   |f|dk(  r|nd|dk(  r|nd ||t        |t              r||   n|d	|
       ||j                  z  | _         d t        j                  | S )
Nr%   r   rm   TF)r-   r   	ceil_modecount_include_padr/   r   )r   r   r    r!   r"   )
r   r?   appendr8   	AvgPool2dr   r   ranger   list)rC   blockr   blocksr   r    r!   r"   r&   r'   rD   r   rc   is                 rG   r~   zTResNet._make_layer   s?    /
Q;$--6EOO+CCF{bllqdfklm{v7iEFq\aiegi j jF/Jv 	5AMM%	 "#avQ)*a:T!4>~t4T~a0Zh	 	 	 #U__4DM	5 }}f%%rH   c                 (    t        d|rdnd      }|S )Nz^body\.conv1z^body\.layer(\d+)z^body\.layer(\d+)\.(\d+))stemr   )r   )rC   coarsematchers      rG   group_matcherzTResNet.group_matcher   s    OF4HXstrH   c                     || _         y rJ   )r}   )rC   enables     rG   set_grad_checkpointingzTResNet.set_grad_checkpointing  s
    "(rH   c                 .    | j                   j                  S rJ   )r   fc)rC   s    rG   get_classifierzTResNet.get_classifier  s    yy||rH   c                 L    || _         | j                  j                  ||       y )N)rx   )re   r   reset)rC   re   rh   s      rG   reset_classifierzTResNet.reset_classifier	  s    &		{;rH   rL   indicesnorm
stop_early
output_fmtintermediates_onlyc                    |dv sJ d       g }g d}t        t        |      |      \  }	}
|	D cg c]  }||   	 }	}||
   }
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 c c}w )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.r   rm   r+   r3      Nr   )
r   lentorchjitis_scriptingr   	enumerater}   r   r   )rC   rL   r   r   r   r   r   intermediates
stage_endstake_indices	max_indexr   stagesfeat_idxstages                  rG   forward_intermediateszTResNet.forward_intermediates  s    * Y&D(DD&$
"6s:"Pi/;<!
1<<y)	99!!#:YYFYY~	A.F(0 	(OHe&&uyy/E/E/Gua(!H<'$$Q'	(   -' =s   C0
prune_norm
prune_headc                     g d}t        t        |      |      \  }}||   }| j                  d|dz    | _        |r| j                  dd       |S )z@ Prune layers not required for specified intermediates.
        r   Nr   r   rs   )r   r   r   r   )rC   r   r   r   r   r   r   s          rG   prune_intermediate_layersz!TResNet.prune_intermediate_layers;  sW     %
"6s:"Piy)	IIny1}-	!!!R(rH   c                    | j                   rt        j                  j                         s| j                  j                  |      }| j                  j                  |      }t        | j                  j                  | j                  j                  | j                  j                  | j                  j                  g|d      }|S | j	                  |      }|S )NT)flatten)r}   r   r   r   r   rn   r:   r   ro   rp   rq   rr   rC   rL   s     rG   forward_featureszTResNet.forward_featuresK  s    ""599+A+A+C		a A		"A		  		  		  		  	 "
 4!A  		!ArH   
pre_logitsc                 N    |r| j                  ||      S | j                  |      S )N)r   )r   )rC   rL   r   s      rG   forward_headzTResNet.forward_headY  s%    6@tyyzy2RdiiPQlRrH   c                 J    | j                  |      }| j                  |      }|S rJ   )r   r   r   s     rG   rO   zTResNet.forward\  s'    !!!$a rH   )	r+           ?FfastrP   rP   NN)r   TNrP   NNF)TrJ   )NFFr   F)r   FT)rR   rS   rT   r   rU   rX   rW   strr7   r~   r   r   ignorer   r   r8   rV   r   r   r   Tensorr   r   r   r   r   r   rO   rY   rZ   s   @rG   r   r      s    #"%%!$&O2IO2 O2 	O2
  O2 O2 O2 O2 "O2 
O2l %&N YY  YY) ) YY		  <C <hsm < 8<$$',, ||,  eCcN34,  	, 
 ,  ,  !%,  
tELL!5tELL7I)I#JJ	K, ` ./$#	3S	>*  	 S$ SrH   c                    d| v r| S dd l }| j                  d|       } | j                  d|       } i }| j                         D ]  \  }}|j                  dd |      }|j                  dd |      }|j                  d	d
 |      }|j                  dd |      }|j                  dd |      }|j                  dd |      }|j	                  d      r|j                         j                  d      }|||<    |S )Nzbody.conv1.conv.weightr   model
state_dictzconv(\d+)\.0.0c                 >    dt        | j                  d             dS Nconvr   .convrU   grouprL   s    rG   <lambda>z&checkpoint_filter_fn.<locals>.<lambda>k  s    $s1771:6Gu0M rH   zconv(\d+)\.0.1c                 >    dt        | j                  d             dS Nr   r   .bnr   r   s    rG   r   z&checkpoint_filter_fn.<locals>.<lambda>l  s    $s1771:6Gs0K rH   zconv(\d+)\.0c                 >    dt        | j                  d             dS r   r   r   s    rG   r   z&checkpoint_filter_fn.<locals>.<lambda>m  s    S_4EU.K rH   zconv(\d+)\.1c                 >    dt        | j                  d             dS r   r   r   s    rG   r   z&checkpoint_filter_fn.<locals>.<lambda>n  s    S_4ES.I rH   zdownsample\.(\d+)\.0c                 >    dt        | j                  d             dS )Ndownsample.r   r   r   r   s    rG   r   z&checkpoint_filter_fn.<locals>.<lambda>o  s    CPQ
OCTTY6Z rH   zdownsample\.(\d+)\.1c                 >    dt        | j                  d             dS )Nr   r   r   r   r   s    rG   r   z&checkpoint_filter_fn.<locals>.<lambda>p  s    CPQ
OCTTW6X rH   z	bn.weightgh㈵>)regetitemssubendswithabsadd)r   r   r   out_dictkvs         rG   checkpoint_filter_fnr   b  s    :-4Jj9JH  " 
1FF$&MqQFF$&KQOFF?$KQOFF?$I1MFF*,Z\]^FF*,XZ[\::k"D!A
 OrH   c                 J    t        t        | |ft        t        dd      d|S )N)r   rm   r+   r3   T)out_indicesflatten_sequential)pretrained_filter_fnfeature_cfg)r   r   r   r   )variant
pretrainedkwargss      rG   _create_tresnetr   x  s6     2\dK  rH   c                 "    | ddddddddd	d
d|S )Nr   )r+      r   )   r   g      ?bilinear)rP   rP   rP   )r   r   r   zbody.conv1.convzhead.fcz
apache-2.0)urlre   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicense )r   r   s     rG   _cfgr
    s2    4}SYJ\'y  rH   ztimm/)	hf_hub_idi+  )r  re   )r+     r  )   r  )r   r  r  )
ztresnet_m.miil_in21k_ft_in1ktresnet_m.miil_in21kztresnet_m.miil_in1kztresnet_l.miil_in1kztresnet_xl.miil_in1ktresnet_m.miil_in1k_448tresnet_l.miil_in1k_448tresnet_xl.miil_in1k_448ztresnet_v2_l.miil_in21k_ft_in1kztresnet_v2_l.miil_in21kr#   c           	      L    t        g d      }t        dd| it        |fi |S )N)r+   r3      r+   )rc   r   )	tresnet_mr   r   r   r   
model_argss      rG   r  r    s*    ]+J\:\jA[TZA[\\rH   c           	      N    t        g dd      }t        dd| it        |fi |S )N)r3   r      r+   g333333?rc   rf   r   )	tresnet_lr  r  s      rG   r  r    s,    ]=J\:\jA[TZA[\\rH   c           	      N    t        g dd      }t        dd| it        |fi |S )N)r3   r      r+   g?r  r   )
tresnet_xlr  r  s      rG   r  r    s,    ]=J]J]$zB\U[B\]]rH   c           	      P    t        g ddd      }t        dd| it        |fi |S )N)r+   r3      r+   r   T)rc   rf   rg   r   )tresnet_v2_lr  r  s      rG   r!  r!    s.    ]FJ_j_DD^W]D^__rH   r  r  r  r  )tresnet_m_miil_in21ktresnet_m_448tresnet_l_448tresnet_xl_448r   )rs   )/__doc__collectionsr   	functoolsr   typingr   r   r   r   r	   r   torch.nnr8   timm.layersr
   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   r   __all__rV   r   r\   r   r   r   r
  default_cfgsr  r  r  r!  rR   r	  rH   rG   <module>r2     s   $  5 5   | | | * + 3 Y Y+0 0f5 5p\bii \~, %$(7$; 7F'2'2 73# H   $ H  !% H! (,g'>#g5I#& * ]W ] ]
 ]W ] ]
 ^g ^ ^
 ` ` `
 H2..0	' rH   