
    RЦi4              
          S r SSKJrJr  SSKrSSKJr  SSKJrJ	r	  SSK
Jr  SSKJr  SSKJrJr  S	/r " S
 S\R$                  5      r " S S\R(                  5      rSS jr " S S\R(                  5      r " S S	\R(                  5      rS rS S jr\" \" SS9\" SSS9\" SSS9\" SSS9\" SS9S.5      r\S!S\4S jj5       r\S!S\4S jj5       r\S!S\4S jj5       r\S!S\4S jj5       r\S!S\4S jj5       r g)"a  PyTorch SelecSLS Net example for ImageNet Classification
License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/legalcode)
Author: Dushyant Mehta (@mehtadushy)

SelecSLS (core) Network Architecture as proposed in "XNect: Real-time Multi-person 3D
Human Pose Estimation with a Single RGB Camera, Mehta et al."
https://arxiv.org/abs/1907.00837

Based on ResNet implementation in https://github.com/rwightman/pytorch-image-models
and SelecSLS Net implementation in https://github.com/mehtadushy/SelecSLS-Pytorch
    )ListTypeNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)create_classifier   )build_model_with_cfg)register_modelgenerate_default_cfgsSelecSlsc                   P   ^  \ rS rSrU 4S jrS\\R                     4S jrSr	U =r
$ )SequentialList   c                     > [         TU ]  " U6   g N)super__init__)selfargs	__class__s     S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/selecsls.pyr   SequentialList.__init__   s    $    returnc                 (    U  H  nU" U5      nM     U$ r    )r   xmodules      r   forwardSequentialList.forward   s    Fq	A r   r   )__name__
__module____qualname____firstlineno__r   r   torchTensorr    __static_attributes____classcell__r   s   @r   r   r      s"     D.  r   r   c                   N   ^  \ rS rSrSU 4S jjrS\R                  4S jrSrU =r	$ )	SelectSeq$   c                 :   > [         TU ]  5         Xl        X l        g r   )r   r   modeindex)r   r/   r0   r   s      r   r   SelectSeq.__init__%   s    	
r   r   c                 h    U R                   S:X  a  XR                     $ [        R                  " USS9$ )Nr0   r	   )dim)r/   r0   r&   catr   r   s     r   r    SelectSeq.forward*   s+    99ZZ= 99QA&&r   )r0   r/   )r0   r   )
r"   r#   r$   r%   r   r&   r'   r    r(   r)   r*   s   @r   r,   r,   $   s    
'ELL ' 'r   r,   c           	          XgS.nUc  US-
  XRS-
  -  -   S-  n[         R                  " [         R                  " XX#4XESS.UD6[         R                  " U40 UD6[         R                  " SS95      $ )Ndevicedtyper	      F)paddingdilationbiasT)inplace)nn
SequentialConv2dBatchNorm2dReLU)	in_chsout_chskstrider<   r=   r9   r:   dds	            r   conv_bnrJ   1   ss    	+BQJ(!e"44:==
		&1cgW\c`bc
w%"%
 r   c                      ^  \ rS rSr   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$ )SelecSlsBlock<   rE   skip_chsmid_chsrF   is_firstrH   r=   c
                 d  > XS.n
[         TU ]  5         X`l        XPl        US;   d   e[	        XSU4SU0U
D6U l        [	        X3S40 U
D6U l        [	        X3S-  S40 U
D6U l        [	        US-  US40 U
D6U l        [	        X3S-  S40 U
D6U l	        [	        SU-  U(       a  SOU-   US40 U
D6U l
        g )Nr8   r	   r;      r=   r	   r;   r   )r   r   rH   rP   rJ   conv1conv2conv3conv4conv5conv6)r   rE   rN   rO   rF   rP   rH   r=   r9   r:   rI   r   s              r   r   SelecSlsBlock.__init__=   s     /  VaQ(QbQ
Wq7B7
WlA<<
W\7A<<
WlA<<
Q[AxH'ST[XZ[
r   r   r   c           	         [        U[        5      (       d  U/n[        U5      S;   d   eU R                  US   5      nU R	                  U R                  U5      5      nU R                  U R                  U5      5      nU R                  (       a+  U R                  [        R                  " X#U/S5      5      nXU/$ U R                  [        R                  " X#XAS   /S5      5      US   /$ )NrR   r   r	   )
isinstancelistlenrT   rV   rU   rX   rW   rP   rY   r&   r4   )r   r   d1d2d3outs         r   r    SelecSlsBlock.forwardW   s    !T""A1vZZ!ZZ

2'ZZ

2'==**UYY|Q78C:JJuyy""d);Q?@!A$GGr   )rT   rU   rV   rW   rX   rY   rP   rH   )r	   NN)r"   r#   r$   r%   intboolr   r   r&   r'   r    r(   r)   r*   s   @r   rL   rL   <   s     \\ \ 	\
 \ \ \ \ \4Hell+ HU\\0B H Hr   rL   c            	       P  ^  \ rS rSrSr      SS\S\S\S\4U 4S jjjr\	R                  R                  SS j5       r\	R                  R                  SS	 j5       r\	R                  R                  S
\R                  4S j5       rSS\S\4S jjrS rSS\4S jjrS rSrU =r$ )r   f   a  SelecSls42 / SelecSls60 / SelecSls84

Parameters
----------
cfg : network config dictionary specifying block type, feature, and head args
num_classes : int, default 1000
    Number of classification classes.
in_chans : int, default 3
    Number of input (color) channels.
drop_rate : float, default 0.
    Dropout probability before classifier, for training
global_pool : str, default 'avg'
    Global pooling type. One of 'avg', 'max', 'avgmax', 'catavgmax'
num_classesin_chans	drop_rateglobal_poolc           
        > X l         X0l        [        TU ]  5         XgS.n[	        US4SS0UD6U l        [        US    V	s/ s H  oS   " U	0 UD6PM     sn	6 U l        [        5       U l	        [        R                  " US    V
s/ s H  n
[	        U
0 UD6PM     sn
6 U l        US   =U l        U l        US	   U l        [!        U R                  U R                   4UUS
.UD6u  U l        U l        U l        U R)                  5        HO  u  p[+        U[        R,                  5      (       d  M&  [        R.                  R1                  UR2                  SSS9  MQ     g s  sn	f s  sn
f )Nr8       rH   r;   featuresblockheadnum_featuresfeature_info)	pool_typerj   fan_outrelu)r/   nonlinearity)rh   ri   r   r   rJ   stemr   rn   r,   from_seqr@   rA   rp   rq   head_hidden_sizerr   r   rk   	head_dropfcnamed_modulesr\   rB   initkaiming_normal_weight)r   cfgrh   ri   rj   rk   r9   r:   rI   
block_args	conv_argsnmr   s                r   r   SelecSls.__init__v   sS    ' /Hb99b9	&[^_i[j(k[jZWz)HR)H[j(kl!MMsSY{#[{)GY$="$={#[\	474GGD1/4E5
 "	5

 5
1$.$' &&(DA!RYY''''yv'V ) )l#[s    EEc                     [        SSSS9$ )Nz^stemz^features\.(\d+)z^head)rw   blocksblocks_head)dict)r   coarses     r   group_matcherSelecSls.group_matcher   s    & 
 	
r   c                      U(       a   S5       eg )Nz$gradient checkpointing not supportedr   )r   enables     r   set_grad_checkpointingSelecSls.set_grad_checkpointing   s    AAAz6r   r   c                     U R                   $ r   )r{   )r   s    r   get_classifierSelecSls.get_classifier   s    wwr   c           
      X   Xl         [        U R                  U R                   U[        U R                  S5      (       a   U R                  R
                  R                  OS [        U R                  S5      (       a   U R                  R
                  R                  OS S9u  U l        U l        g )Nr   )rs   r9   r:   )	rh   r   rq   hasattrr{   r   r9   r:   rk   )r   rh   rk   s      r   reset_classifierSelecSls.reset_classifier   sw    &$5!,3DGGX,F,F477>>((D*1$''8*D*D$''..&&$%
!$'r   c                     U R                  U5      nU R                  U5      nU R                  U R                  U5      5      nU$ r   )rw   rn   rp   rx   r5   s     r   forward_featuresSelecSls.forward_features   s9    IIaLMM!IIdmmA&'r   
pre_logitsc                 z    U R                  U5      nU R                  U5      nU(       a  U$ U R                  U5      $ r   )rk   rz   r{   )r   r   r   s      r   forward_headSelecSls.forward_head   s5    QNN1q.DGGAJ.r   c                 J    U R                  U5      nU R                  U5      nU$ r   )r   r   r5   s     r   r    SelecSls.forward   s'    !!!$a r   )r{   rr   rn   rx   rk   rp   rz   ry   ri   rh   rq   rw   )  rS   g        avgNNF)T)r   )r"   r#   r$   r%   __doc__rd   floatstrr   r&   jitignorer   r   r@   Moduler   r   r   re   r   r    r(   r)   r*   s   @r   r   r   f   s    $  $"$ W  W 	 W
  W  W  WD YY
 
 YYB B YY		  
C 
c 
/$ /
 r   c           
         0 n[        SSSS9/nU R                  S5      (       a  [        US'   / SQUS'   UR                  [        S	S
SS9[        SSSS9[        SSSS9/5        UR	                  [        SSSS95        U S:X  a(  / SQUS'   UR	                  [        SSSS95        SUS'   GOs/ SQUS'   UR	                  [        SSSS95        SUS'   GOKU R                  S5      (       a  [        US'   / SQUS'   UR                  [        S	S
SS9[        SSSS9[        SSS S9/5        UR	                  [        SSSS95        U S!:X  a'  / S"QUS'   UR	                  [        SSSS95        SUS'   O/ S#QUS'   UR	                  [        SSSS95        SUS'   OU S$:X  aq  [        US'   / S%QUS'   UR                  [        S&S
SS9[        S'SS(S9[        S)SS*S9/5        / S+QUS'   SUS'   UR                  [        SSSS9[        SSSS9/5        O[        S,U -   S--   5      eXCS.'   [        [        U U4U[        S/S0S19S2.UD6$ )3Nrm   r;   zstem.2)num_chs	reductionr   
selecsls42ro   )rm   r   @   r   Tr;   r   r   r      Fr	   )r   r      r   Tr;   )r   r   r      Fr	   )r   r   0  r   Tr;   )r   r   r     Fr	   rn   r      z
features.1r      z
features.3r      z
features.5   zhead.1selecsls42b)r     rS   r;   r   r   rS   r	   r      rS   r;   r   r   r	   r	   rp   r   zhead.3rq   )r   r   r   r   rS   r;   r   r   r	   r	   r   
selecsls60)	r   r   )r   r   r   r   Tr;   )r   r   r   r   Fr	   )r   r   r   r   Fr	   )r   r   r   r   Tr;   r   r   r   r   Fr	   r   )r   r   r     Fr	   z
features.4r   z
features.8selecsls60b)r     rS   r;   r   r   rS   r	   r   r   )r   r   r   r   
selecsls84)r   )r   r   r   r   Fr	   )r   r   r   r   Tr;   r   r   r   r   Fr	   r   r   )r   r   r   r   Fr	   )r   r   r   r   Tr;   r   r   r   r   Fr	   r   r   r   )r   r   r      Fr	   r   r   z
features.6r   zfeatures.12))r   r   rS   r;   r   r   )r   r   rS   r	   zInvalid net configuration z !!!rr   )r   r	   r;   rS   r   T)out_indicesflatten_sequential)	model_cfgfeature_cfg)r   
startswithrL   extendappend
ValueErrorr
   r   )variant
pretrainedkwargsr   rr   s        r   _create_selecslsr      s   
CqBCL,''$G
J 	,?,?<@
 	 	DHMNm#CK TR QR"&CCK TR QR"&C			L	)	)$G
J 	,?,?<@
 	 	DHMNm#CK TR QR"&CCK TR QR"&C	L	 $G
J  	,?,?=A
 	
F #NH=H=
 	
 5?&HII&   _N  r   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr   )rS      r   )r   r   g      ?bilinearzstem.0r{   z	cc-by-4.0)urlrh   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicenser   )r   r   s     r   _cfgr   H  s3    =vJ%.Bd  r   bicubic)r   ztimm/)	hf_hub_idr   )zselecsls42.untrainedzselecsls42b.in1kzselecsls60.in1kzselecsls60b.in1kzselecsls84.untrainedr   c                     [        SU 40 UD6$ )z#Constructs a SelecSls42 model.
    r   r   r   r   s     r   r   r   e       L*???r   c                     [        SU 40 UD6$ )z%Constructs a SelecSls42_B model.
    r   r   r   s     r   r   r   l       M:@@@r   c                     [        SU 40 UD6$ )z#Constructs a SelecSls60 model.
    r   r   r   s     r   r   r   s  r   r   c                     [        SU 40 UD6$ )z%Constructs a SelecSls60_B model.
    r   r   r   s     r   r   r   z  r   r   c                     [        SU 40 UD6$ )z#Constructs a SelecSls84 model.
    r   r   r   s     r   r   r     r   r   )rS   r	   Nr	   NN) r   )!r   typingr   r   r&   torch.nnr@   	timm.datar   r   timm.layersr   _builderr
   	_registryr   r   __all__rA   r   r   r,   rJ   rL   r   r   r   default_cfgsr   r   r   r   r   r   r   r   <module>r      sl  
    A ) * <,R]] 
'		 
''HBII 'HTZryy ZzBJ	 % !! ! ! !!& " @h @ @ Ax A A @h @ @ Ax A A @h @ @r   