Ë
    éÓ^jÅ4  ã            	       ó  — d Z ddl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 ddlmZ ddlmZmZ d	gZ G d
„ dej$                  «      Z G d„ dej(                  «      Zdd„Z G d„ dej(                  «      Z G d„ d	ej(                  «      Zd„ Zd d„Z e ed¬«       edd¬«       edd¬«       edd¬«       e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d!defd„«       Z y)"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                   óD   ‡ — e Zd Zˆ fd„Zdeej                     fd„Zˆ xZS )ÚSequentialListc                 ó   •— t        ‰| �  |Ž  y ©N)ÚsuperÚ__init__)ÚselfÚargsÚ	__class__s     €ú_/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/selecsls.pyr   zSequentialList.__init__   s   ø€ Ü‰Ñ˜$Òó    Úreturnc                 ó$   — | D ]
  } ||«      }Œ |S r   © )r   ÚxÚmodules      r   ÚforwardzSequentialList.forward   s   € Øò 	ˆFÙ�q“	‰Að	àˆr   )	Ú__name__Ú
__module__Ú__qualname__r   r   ÚtorchÚTensorr   Ú__classcell__©r   s   @r   r   r      s   ø„ ô ð˜D §¡Ñ.÷ r   r   c                   ó@   ‡ — e Zd Zdˆ fd„	Zdej
                  fd„Zˆ xZS )Ú	SelectSeqc                 ó>   •— t         ‰| �  «        || _        || _        y r   )r   r   ÚmodeÚindex)r   r)   r*   r   s      €r   r   zSelectSeq.__init__%   s   ø€ Ü‰ÑÔØˆŒ	Øˆ�
r   r   c                 ól   — | j                   dk(  r|| j                     S t        j                  |d¬«      S )Nr*   r	   )Údim)r)   r*   r"   Úcat©r   r   s     r   r   zSelectSeq.forward*   s-   € Ø�9‰9˜ÒØ�T—Z‘Z‘=Ð ä—9‘9˜Q AÔ&Ð&r   )r*   r   )r   r    r!   r   r"   r#   r   r$   r%   s   @r   r'   r'   $   s   ø„ õð
'˜EŸL™L÷ 'r   r'   c           	      óæ   — ||dœ}|€|dz
  ||dz
  z  z   dz  }t        j                  t        j                  | |||f||ddœ|¤Žt        j                  |fi |¤Žt        j                  d¬«      «      S )N©ÚdeviceÚdtyper	   é   F)ÚpaddingÚdilationÚbiasT)Úinplace)ÚnnÚ
SequentialÚConv2dÚBatchNorm2dÚReLU)	Úin_chsÚout_chsÚkÚstrider4   r5   r1   r2   Údds	            r   Úconv_bnrB   1   s}   € Ø UÑ	+€BØ€Ø˜Q‘J (¨a°!©eÑ"4Ñ4¸Ñ:ˆÜ�=‰=Ü
�	‰	�&˜' 1 fÐc°gÈÐW\ÑcÐ`bÑcÜ
�‰�wÑ% "Ñ%Ü
�‰˜Ôóð r   c                   óˆ   ‡ — e Zd Z	 	 	 ddededededededefˆ fd„Zd	eej                     d
eej                     fd„Z	ˆ xZ
S )ÚSelecSlsBlockr=   Úskip_chsÚmid_chsr>   Úis_firstr@   r5   c
                 ód  •— ||	dœ}
t         ‰| �  «        || _        || _        |dv sJ ‚t	        ||d|fd|i|
¤Ž| _        t	        ||dfi |
¤Ž| _        t	        ||dz  dfi |
¤Ž| _        t	        |dz  |dfi |
¤Ž| _        t	        ||dz  dfi |
¤Ž| _	        t	        d|z  |rdn|z   |dfi |
¤Ž| _
        y )Nr0   ©r	   r3   é   r5   r	   r3   r   )r   r   r@   rG   rB   Úconv1Úconv2Úconv3Úconv4Úconv5Úconv6)r   r=   rE   rF   r>   rG   r@   r5   r1   r2   rA   r   s              €r   r   zSelecSlsBlock.__init__=   sØ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØ ˆŒØ˜ÑÐÐô ˜V W¨a°ÑQÀ(ÐQÈbÑQˆŒ
Ü˜W g¨qÑ7°BÑ7ˆŒ
Ü˜W g°¡l°AÑ<¸Ñ<ˆŒ
Ü˜W¨™\¨7°AÑ<¸Ñ<ˆŒ
Ü˜W g°¡l°AÑ<¸Ñ<ˆŒ
Ü˜Q ™[±©A¸xÑHÈ'ÐSTÑ[ÐXZÑ[ˆ�
r   r   r   c           	      óÀ  — t        |t        «      s|g}t        |«      dv sJ ‚| j                  |d   «      }| j	                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  r,| j                  t        j                  |||gd«      «      }||gS | j                  t        j                  ||||d   gd«      «      |d   gS )NrI   r   r	   )Ú
isinstanceÚlistÚlenrK   rM   rL   rO   rN   rG   rP   r"   r-   )r   r   Úd1Úd2Úd3Úouts         r   r   zSelecSlsBlock.forwardW   sÃ   € Ü˜!œTÔ"Ø�ˆAÜ�1‹v˜ÑÐÐà�Z‰Z˜˜!™ÓˆØ�Z‰Z˜Ÿ
™
 2›Ó'ˆØ�Z‰Z˜Ÿ
™
 2›Ó'ˆØ�=Š=Ø—*‘*œUŸY™Y¨¨B° |°QÓ7Ó8ˆCØ˜�:Ðà—J‘JœuŸy™y¨"¨b°"°a¸±dÐ);¸QÓ?Ó@À!ÀAÁ$ÐGÐGr   )r	   NN)r   r    r!   ÚintÚboolr   r   r"   r#   r   r$   r%   s   @r   rD   rD   <   s‡   ø„ ð ØØñ\àð\ð ð\ð ð	\ð
 ð\ð ð\ð ð\ð õ\ð4H˜˜eŸl™lÑ+ð H°°U·\±\Ñ0B÷ Hr   rD   c            	       ó4  ‡ — e Zd ZdZ	 	 	 	 	 	 ddedededefˆ f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fd„Zd„ Zddefd„Zd„ Zˆ xZS )r   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           
      ó´  •— || _         || _        t        ‰| �  «        ||dœ}t	        |dfddi|¤Ž| _        t        |d   D �	cg c]  }	 |d   |	i |¤Ž‘Œ c}	Ž | _        t        «       | _	        t        j                  |d   D �
cg c]  }
t	        |
i |¤Ž‘Œ c}
Ž | _        |d   x| _        | _        |d	   | _        t!        | j                  | j                   f||d
œ|¤Ž\  | _        | _        | _        | j)                  «       D ]L  \  }}t+        |t        j,                  «      sŒ!t        j.                  j1                  |j2                  dd¬«       ŒN y c c}	w c c}
w )Nr0   é    r@   r3   ÚfeaturesÚblockÚheadÚnum_featuresÚfeature_info)Ú	pool_typer^   Úfan_outÚrelu)r)   Únonlinearity)r\   r]   r   r   rB   Ústemr   rb   r'   Úfrom_seqr8   r9   rd   re   Úhead_hidden_sizerf   r   r_   Ú	head_dropÚfcÚnamed_modulesrR   r:   ÚinitÚkaiming_normal_Úweight)r   Úcfgr\   r]   r^   r_   r1   r2   rA   Ú
block_argsÚ	conv_argsÚnÚmr   s                €r   r   zSelecSls.__init__v   sY  ø€ ð 'ˆÔØ ˆŒÜ‰ÑÔØ¨Ñ/ˆä˜H bÑ9°Ð9°bÑ9ˆŒ	Ü&Ð[^Ð_iÑ[jÖ(kÈZ¨¨¨W©°zÐ)HÀRÓ)HÒ(kÐlˆŒÜ!›ˆŒÜ—M‘MÈsÐSYÉ{Ö#[À)¤G¨YÐ$=¸"Ó$=Ò#[Ð\ˆŒ	Ø47¸Ñ4GÐGˆÔ˜DÔ1Ø Ñ/ˆÔä4EØ×ÑØ×Ñð5
ð "Øñ	5
ð
 ñ5
Ñ1ˆÔ˜$œ.¨$¬'ð ×&Ñ&Ó(ò 	W‰DˆAˆqÜ˜!œRŸY™YÕ'Ü—‘×'Ñ'¨¯©°yÈvÐ'ÕVñ	Wùò )lùâ#[s   ÁEÂEc                 ó   — t        ddd¬«      S )Nz^stemz^features\.(\d+)z^head)rk   ÚblocksÚblocks_head)Údict)r   Úcoarses     r   Úgroup_matcherzSelecSls.group_matcher˜   s   € äØØ&Ø ô
ð 	
r   c                 ó   — |rJ d«       ‚y )Nz$gradient checkpointing not supportedr   )r   Úenables     r   Úset_grad_checkpointingzSelecSls.set_grad_checkpointing    s   € áÐAÐAÓAˆz�6r   r   c                 ó   — | j                   S r   )ro   )r   s    r   Úget_classifierzSelecSls.get_classifier¤   s   € à�w‰wˆr   c           
      óL  — || _         t        | j                  | j                   |t        | j                  d«      r | j                  j
                  j                  nd t        | j                  d«      r | j                  j
                  j                  nd ¬«      \  | _        | _        y )Nrs   )rg   r1   r2   )	r\   r   re   Úhasattrro   rs   r1   r2   r_   )r   r\   r_   s      r   Úreset_classifierzSelecSls.reset_classifier¨   ss   € Ø&ˆÔÜ$5Ø×ÑØ×ÑØ!Ü,3°D·G±G¸XÔ,F�4—7‘7—>‘>×(Ò(ÈDÜ*1°$·'±'¸8Ô*D�$—'‘'—.‘.×&Ò&È$ô%
Ñ!ˆÔ˜$�'r   c                 óŠ   — | j                  |«      }| j                  |«      }| j                  | j                  |«      «      }|S r   )rk   rb   rd   rl   r.   s     r   Úforward_featureszSelecSls.forward_features²   s9   € Ø�I‰I�a‹LˆØ�M‰M˜!ÓˆØ�I‰I�d—m‘m AÓ&Ó'ˆØˆr   Ú
pre_logitsc                 óp   — | j                  |«      }| j                  |«      }|r|S | j                  |«      S r   )r_   rn   ro   )r   r   r‰   s      r   Úforward_headzSelecSls.forward_head¸   s5   € Ø×Ñ˜QÓˆØ�N‰N˜1ÓˆÙˆqÐ. D§G¡G¨A£JÐ.r   c                 óJ   — | j                  |«      }| j                  |«      }|S r   )rˆ   r‹   r.   s     r   r   zSelecSls.forward½   s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr   )éè  rJ   g        ÚavgNN©F)T)rŽ   )r   r    r!   Ú__doc__rY   ÚfloatÚstrr   r"   ÚjitÚignorer~   r�   r8   ÚModulerƒ   r†   rˆ   rZ   r‹   r   r$   r%   s   @r   r   r   f   sß   ø„ ñð$  $ØØ"Ø$ØØñ Wð ð Wð ð	 Wð
 ð Wð õ WðD ‡Y�Y×Ñò
ó ð
ð ‡Y�Y×ÑòBó ðBð ‡Y�Y×Ñð §	¡	ò ó ðñ
¨Cð 
¸có 
òñ/¨$ó /ö
r   c           	      óÚ  — i }t        ddd¬«      g}| j                  d«      rÀt        |d<   g d¢|d<   |j                  t        d	d
d¬«      t        ddd¬«      t        ddd¬«      g«       |j	                  t        ddd¬«      «       | dk(  r+g d¢|d<   |j	                  t        ddd¬«      «       d|d<   �n�g d¢|d<   |j	                  t        ddd¬«      «       d|d<   �ne| j                  d«      r¾t        |d<   g d¢|d<   |j                  t        d	d
d¬«      t        ddd¬«      t        ddd ¬«      g«       |j	                  t        ddd¬«      «       | d!k(  r*g d"¢|d<   |j	                  t        ddd¬«      «       d|d<   nÀg d#¢|d<   |j	                  t        ddd¬«      «       d|d<   n–| d$k(  r€t        |d<   g d%¢|d<   |j                  t        d&d
d¬«      t        d'dd(¬«      t        d)dd*¬«      g«       g d+¢|d<   d|d<   |j                  t        ddd¬«      t        ddd¬«      g«       nt        d,| z   d-z   «      ‚||d.<   t        t        | |f|t        d/d0¬1«      d2œ|¤ŽS )3Nra   r3   zstem.2)Únum_chsÚ	reductionr   Ú
selecsls42rc   )©ra   r   é@   r›   Tr3   ©r›   r›   r›   é€   Fr	   )r�   r   é�   rž   Tr3   )rž   rž   rž   é   Fr	   )rŸ   r   é0  r    Tr3   )r    r    r    éà  Fr	   rb   r�   é   z
features.1rŸ   é   z
features.3r¡   é   z
features.5é   zhead.1Úselecsls42b)©r¡   éÀ  rJ   r3   ©r¨   r¥   rJ   r	   ©r¥   é   rJ   r3   ©r«   r¥   r	   r	   rd   r›   zhead.3re   )r§   r©   ©r¥   r¥   rJ   r3   ©r¥   r«   r	   r	   r«   Ú
selecsls60)	rš   rœ   )r�   r   r�   r�   Tr3   )r�   r�   r�   r�   Fr	   )r�   r�   r�   rŸ   Fr	   )rŸ   r   rŸ   rŸ   Tr3   ©rŸ   rŸ   rŸ   rŸ   Fr	   r°   )rŸ   rŸ   rŸ   é   Fr	   z
features.4r±   z
features.8Úselecsls60b)©r±   éô  rJ   r3   ©r´   r¥   rJ   r	   rª   r¬   )r³   rµ   r­   r®   Ú
selecsls84)rš   )r›   r›   r›   rž   Fr	   )rž   r   rž   rž   Tr3   ©rž   rž   rž   rž   Fr	   r·   r·   )rž   rž   rž   r    Fr	   )r    r   r    r    Tr3   ©r    r    r    r    Fr	   r¸   r¸   r¸   )r    r    r    é   Fr	   rž   r    z
features.6r¹   zfeatures.12))r¹   r¨   rJ   r3   r©   r­   )r¥   r«   rJ   r	   zInvalid net configuration z !!!rf   )r   r	   r3   rJ   r¢   T)Úout_indicesÚflatten_sequential)Ú	model_cfgÚfeature_cfg)r|   Ú
startswithrD   ÚextendÚappendÚ
ValueErrorr
   r   )ÚvariantÚ
pretrainedÚkwargsrt   rf   s        r   Ú_create_selecslsrÅ   Ã   s·  € Ø
€CÜ ¨q¸ÔBÐC€LØ×Ñ˜,Ô'Ü$ˆˆG‰ò
ˆˆJ‰ð 	×ÑÜ˜¨°,Ô?Ü˜¨°,Ô?Ü˜¨°<Ô@ð
ô 	ð 	×ÑœD¨¸ÀHÔMÔNØ�mÒ#òˆC�‰Kð ×Ñ¤¨T¸RÈÔ QÔRØ"&ˆC�ÓòˆC�‰Kð ×Ñ¤¨T¸RÈÔ QÔRØ"&ˆC�Óà	×	Ñ	˜LÔ	)Ü$ˆˆG‰ò
ˆˆJ‰ð 	×ÑÜ˜¨°,Ô?Ü˜¨°,Ô?Ü˜¨°<Ô@ð
ô 	ð 	×ÑœD¨¸ÀHÔMÔNØ�mÒ#òˆC�‰Kð ×Ñ¤¨T¸RÈÔ QÔRØ"&ˆC�ÒòˆC�‰Kð ×Ñ¤¨T¸RÈÔ QÔRØ"&ˆC�Òà	�LÒ	 Ü$ˆˆG‰ò
ˆˆJ‰ð  	×ÑÜ˜¨°,Ô?Ü˜¨°,Ô?Ü˜¨°=ÔAð
ô 	ò
ˆˆF‰ð #ˆˆNÑØ×ÑÜ˜¨°HÔ=Ü˜¨°HÔ=ð
õ 	ô
 Ð5¸Ñ?À&ÑHÓIÐIØ&€CˆÑô  ÜØØðð Ü _ÈÔNñð ñð r   c                 ó2   — | dddddt         t        dddd	œ|¥S )
Nr�   )rJ   éà   rÇ   )r¢   r¢   g      ì?Úbilinearzstem.0ro   z	cc-by-4.0)Úurlr\   Ú
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                 ó   — t        d| fi |¤ŽS )z#Constructs a SelecSls42 model.
    r™   ©rÅ   ©rÃ   rÄ   s     r   r™   r™   e  ó   € ô ˜L¨*Ñ?¸Ñ?Ð?r   c                 ó   — t        d| fi |¤ŽS )z%Constructs a SelecSls42_B model.
    r¦   r×   rØ   s     r   r¦   r¦   l  ó   € ô ˜M¨:Ñ@¸Ñ@Ð@r   c                 ó   — t        d| fi |¤ŽS )z#Constructs a SelecSls60 model.
    r¯   r×   rØ   s     r   r¯   r¯   s  rÙ   r   c                 ó   — t        d| fi |¤ŽS )z%Constructs a SelecSls60_B model.
    r²   r×   rØ   s     r   r²   r²   z  rÛ   r   c                 ó   — t        d| fi |¤ŽS )z#Constructs a SelecSls84 model.
    r¶   r×   rØ   s     r   r¶   r¶   �  rÙ   r   )rJ   r	   Nr	   NN)Ú r�   )!r�   Útypingr   r   r"   Útorch.nnr8   Ú	timm.datar   r   Útimm.layersr   Ú_builderr
   Ú	_registryr   r   Ú__all__r9   r   r•   r'   rB   rD   r   rÅ   rÓ   Údefault_cfgsr™   r¦   r¯   r²   r¶   r   r   r   ú<module>rè      sl  ðñ
÷ ã Ý ç AÝ )Ý *ß <àˆ,€ô�R—]‘]ô ô
'�—	‘	ô 
'óô'H�B—I‘Iô 'HôTZˆr�y‰yô ZòzBóJ	ñ %Ù Øô!áØØô!ñ ØØô!ñ ØØô!ñ !Øô!ñ&ó €ð" ñ@¨hò @ó ð@ð ñA¨xò Aó ðAð ñ@¨hò @ó ð@ð ñA¨xò Aó ðAð ñ@¨hò @ó ñ@r   