Ë
    éÓ^jÊ¨  ã                   óð  — d Z ddlmZmZm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ZddlmZ ddlmZ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 m!Z! ddl"m#Z#m$Z$ dgZ%e G d„ d«      «       Z&d„ Z'e G d„ d«      «       Z(e G d„ d«      «       Z)	 	 	 	 	 	 	 	 	 dÍd„Z* G d„ dejV                  «      Z, G d„ dejV                  «      Z- G d„ dejV                  «      Z. G d„ dejV                  «      Z/ G d „ d!ejV                  «      Z0 G d"„ d#ejV                  «      Z1d$d%d$d&d'd'ejd                  ejf                  dddfd(e4d)e4d*e4d+e4d,e5d-e5d.eejV                     d/eejV                     d0eeejV                        fd1„Z6d2„ Z7d3„ Z8d4„ Z9	 	 dÎd5e)d6e:d7e4d8e	e5ef   fd9„Z; G d:„ dejV                  «      Z<dÏd;„Z= e>dÐi d< e) e&d=d>d?d@¬A«       e(dBdCdDdEdFdG¬H«      ¬I«      “dJ e) e&dKd$d?d@¬A«       e(dBdCdDdEdFddG¬L«      ¬I«      “dM e) e&dKd$d?d@¬A«       e(dBdNdDddOdFdG¬L«      ¬I«      “dP e) e&d=d>d?d@¬A«       e(dBdNdDd%dddFdG¬Q«      ¬I«      “dR e) e&d%d$dd'¬A«       e(dSdTd&dUdVdWdGd¬X«      ¬I«      “dY e) e&d%d$dd'¬A«       e(dZdTd[d\d]dd¬^«      ¬I«      “d_ e) e&d%d$dd'¬A«       e(d`dTd[d\d]dd¬^«      ¬I«      “da e) e&d%d$dd'¬A«       e(d`dTd&dFddbdd¬c«      ¬I«      “dd e) e&d%d$dd'¬A«       e(dSdTd&dFddd¬^«      ¬I«      “de e) e&d%d$dd'¬A«       e(dSdTd&dFddGdd¬f«      ¬I«      “dg e*dFdF¬h«      “di e*djdk¬h«      “dl e*«       “dm e*dndo¬h«      “dp e*dFdFdG¬q«      “dr e*djdkdG¬q«      “ds e*dG¬t«      “du e*dndodG¬q«      “dv e*db e>dO¬w«      ¬x«      “dy e*dbdndo¬z«      “d{ e) e&d|d$d&d'¬A«       e(d}dNd&d~dFdFdb¬«      d¬€«      “d� e*dndod‚dƒ¬„«      “d… e*dndod‚dƒdb e>dO¬w«      ¬†«      “ŽZ?dÏd‡„Z@dÑdˆ„ZA e$i d‰ eAdŠd‹¬Œ«      “d� eA«       “dŽ eA«       “d� eAdŠd�¬Œ«      “d‘ eAdŠd’¬Œ«      “d“ eA«       “d” eA«       “d• eA«       “d– eAdŠd—d˜d™d¬š«      “d› eAdŠdœd™d¬�«      “dž eAd˜¬Ÿ«      “d  eAdŠd¡d˜d™d¢¬š«      “d£ eAdŠd¤d˜d™d¢¬š«      “d¥ eAdŠd¦d˜d¢d™d¬§«      “d¨ eAdŠd©d©d˜dªd¬««      “d¬ eAdŠd­d˜d™d¢¬š«      “d® eAdŠd¯d˜d™d¢¬š«      “ eAd˜¬Ÿ«       eAdŠd°d˜d™d¢¬š«       eAdŠd±d˜d™d¬š«       eAd˜¬Ÿ«       eAdŠd²d˜d™d¬š«       eAdŠd³d˜d¢dªd¬§«      d´œ¥«      ZBe#dÏdµe<fd¶„«       ZCe#dÏdµe<fd·„«       ZDe#dÏdµe<fd¸„«       ZEe#dÏdµe<fd¹„«       ZFe#dÏdµe<fdº„«       ZGe#dÏdµe<fd»„«       ZHe#dÏdµe<fd¼„«       ZIe#dÏdµe<fd½„«       ZJe#dÏdµe<fd¾„«       ZKe#dÏdµe<fd¿„«       ZLe#dÏdµe<fdÀ„«       ZMe#dÏdµe<fdÁ„«       ZNe#dÏdµe<fdÂ„«       ZOe#dÏdµe<fdÃ„«       ZPe#dÏdµe<fdÄ„«       ZQe#dÏdµe<fdÅ„«       ZRe#dÏdµe<fdÆ„«       ZSe#dÏdµe<fdÇ„«       ZTe#dÏdµe<fdÈ„«       ZUe#dÏdµe<fdÉ„«       ZVe#dÏdµe<fdÊ„«       ZWe#dÏdµe<fdË„«       ZXe#dÏdµe<fdÌ„«       ZYy)Òa­  PyTorch CspNet

A PyTorch implementation of Cross Stage Partial Networks including:
* CSPResNet50
* CSPResNeXt50
* CSPDarkNet53
* and DarkNet53 for good measure

Based on paper `CSPNet: A New Backbone that can Enhance Learning Capability of CNN` - https://arxiv.org/abs/1911.11929

Reference impl via darknet cfg files at https://github.com/WongKinYiu/CrossStagePartialNetworks

Hacked together by / Copyright 2020 Ross Wightman
é    )Ú	dataclassÚasdictÚreplace)Úpartial)ÚAnyÚDictÚListÚOptionalÚTupleÚTypeÚUnionN©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚClassifierHeadÚConvNormActÚDropPathÚcalculate_drop_path_ratesÚget_attnÚcreate_act_layerÚmake_divisibleé   )Úbuild_model_with_cfg)Únamed_applyÚMATCH_PREV_GROUP)Úregister_modelÚgenerate_default_cfgsÚCspNetc                   óŒ   — e Zd ZU dZeeeedf   f   ed<   dZeeeedf   f   ed<   dZ	eed<   dZ
eeef   ed	<   dZee   ed
<   y)Ú
CspStemCfgé    .Úout_chsé   Ústrideé   Úkernel_sizeÚ ÚpaddingÚpoolN)Ú__name__Ú
__module__Ú__qualname__r"   r   Úintr   Ú__annotations__r$   r&   r(   Ústrr)   r
   © ó    ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/cspnet.pyr    r       sd   … à+-€GˆU�3˜˜c 3˜h™Ð'Ñ(Ó-Ø*+€FˆE�#�u˜S #˜X‘Ð&Ñ'Ó+Ø€K�ÓØ!€GˆU�3˜�8‰_Ó!Ø€Dˆ(�3‰-Ôr1   r    c                 ó’   — t        | t        t        f«      s| f} t        | «      }||z
  }|dk  r| d | S t        | | d   f|z  z   «      S )Nr   éÿÿÿÿ)Ú
isinstanceÚtupleÚlistÚlen)ÚxÚnÚcurr_nÚpad_ns       r2   Ú_pad_argr=   (   sV   € ä�aœ%¤˜Ô'ØˆDˆÜ�‹V€FØ�‰J€EØ�‚zØ��!ˆuˆÜ��a˜‘e�X Ñ%Ñ%Ó&Ð&r1   c                   óÜ  — e Zd ZU dZeedf   ed<   dZeedf   ed<   dZe	eeedf   f   ed<   dZ
e	eeedf   f   ed	<   d
Ze	eeedf   f   ed<   d
Ze	eeedf   f   ed<   dZe	eeedf   f   ed<   dZee	eeedf   f      ed<   dZee	eee   f      ed<   dZe	eee   f   ed<   dZe	eee   f   ed<   d
Ze	eeedf   f   ed<   dZe	eeedf   f   ed<   dZe	eeedf   f   ed<   d„ Zy)ÚCspStagesCfg©r%   r%   é   r#   .Údepth©é€   é   é   é   r"   r#   r$   r   Úgroupsç      ð?Úblock_ratioÚbottle_ratioFÚavg_downNÚ
attn_layerÚattn_kwargsÚcspÚ
stage_typeÚbottleÚ
block_typeÚexpand_ratioÚcross_linearÚdown_growthc                 óê  — t        | j                  «      }t        | j                  «      |k(  sJ ‚t        | j                  |«      | _        t        | j
                  |«      | _        t        | j                  |«      | _        t        | j                  |«      | _        t        | j                  |«      | _        t        | j                  |«      | _	        t        | j                  |«      | _
        t        | j                  |«      | _        t        | j                  |«      | _        t        | j                  |«      | _        t        | j                  |«      | _        t        | j                  |«      | _        y ©N)r8   rB   r"   r=   r$   rH   rJ   rK   rL   rM   rN   rP   rR   rS   rT   rU   )Úselfr:   s     r2   Ú__post_init__zCspStagesCfg.__post_init__F   s  € Ü�—
‘
‹OˆÜ�4—<‘<Ó  AÒ%Ð%Ð%Ü˜tŸ{™{¨AÓ.ˆŒÜ˜tŸ{™{¨AÓ.ˆŒÜ# D×$4Ñ$4°aÓ8ˆÔÜ$ T×%6Ñ%6¸Ó:ˆÔÜ  §¡°Ó2ˆŒÜ" 4§?¡?°AÓ6ˆŒÜ# D×$4Ñ$4°aÓ8ˆÔÜ" 4§?¡?°AÓ6ˆŒÜ" 4§?¡?°AÓ6ˆŒä$ T×%6Ñ%6¸Ó:ˆÔÜ$ T×%6Ñ%6¸Ó:ˆÔÜ# D×$4Ñ$4°aÓ8ˆÕr1   )r*   r+   r,   rB   r   r-   r.   r"   r$   r   rH   rJ   ÚfloatrK   rL   ÚboolrM   r
   r/   rN   r   rP   rR   rS   rT   rU   rY   r0   r1   r2   r?   r?   3   s  … à)€Eˆ5��c�‰?Ó)Ø4€GˆU�3˜�8‰_Ó4Ø*+€FˆE�#�u˜S #˜X‘Ð&Ñ'Ó+Ø*+€FˆE�#�u˜S #˜X‘Ð&Ñ'Ó+Ø36€K��u˜e E¨3 JÑ/Ð/Ñ0Ó6Ø46€L�%˜˜u U¨C ZÑ0Ð0Ñ1Ó6Ø.3€Hˆe�D˜%  c 	Ñ*Ð*Ñ+Ó3Ø8<€J�˜˜s E¨#¨s¨(¡OÐ3Ñ4Ñ5Ó<Ø6:€K�˜%  e¨D¡kÐ 1Ñ2Ñ3Ó:Ø).€J��c˜5 ™:�oÑ&Ó.Ø)1€J��c˜5 ™:�oÑ&Ó1ð 58€L�%˜˜u U¨C ZÑ0Ð0Ñ1Ó7Ø27€L�%˜˜e D¨# IÑ.Ð.Ñ/Ó7Ø16€K��t˜U 4¨ 9Ñ-Ð-Ñ.Ó6ó9r1   r?   c                   ó`   — e Zd ZU eed<   eed<   dZeed<   dZe	ed<   dZ
e	ed<   d	Zee	   ed
<   y	)ÚCspModelCfgÚstemÚstagesTÚzero_init_lastÚ
leaky_reluÚ	act_layerÚ	batchnormÚ
norm_layerNÚaa_layer)r*   r+   r,   r    r.   r?   r`   r[   rb   r/   rd   re   r
   r0   r1   r2   r]   r]   X   s:   … à
ÓØÓØ€N�DÓØ!€IˆsÓ!Ø!€J�Ó!Ø"€Hˆh�s‰mÔ"r1   r]   rI   ÚsiluÚdarkc	                 ó�  — |rt        t        d| z  «      dddd¬«      }	n2t        t        dD �
cg c]  }
t        |
| z  «      ‘Œ c}
«      ddd¬«      }	t        |	t	        t        d	D �
cg c]  }
t        |
| z  «      ‘Œ c}
«      t        d
D �cg c]  }t        ||z  «      ‘Œ c}«      d|d|||d|¬«
      |¬«      S c c}
w c c}
w c c}w )Né@   é   r#   r'   )r"   r&   r$   r(   r)   ©r!   ri   r%   ©r"   r&   r$   r)   rC   )r%   rj   é	   r%   ç      à?Úcs3)
r"   rB   r$   rK   rJ   rL   rM   rN   rP   rR   ©r^   r_   rb   )r    r   r6   r]   r?   r-   )Úwidth_multiplierÚdepth_multiplierrL   rb   ÚfocusrM   rN   rK   rR   Ústem_cfgÚcÚds               r2   Ú_cs3_cfgrw   b   sÜ   € ñ ÜÜ" 2Ð(8Ñ#8Ó9Ø !¨Q°Rô9‰ô ÜÈÖRÀAœ>¨!Ð.>Ñ*>Õ?ÒRÓSØ !¨"ô.ˆô ØÜÜÐI^Ö_ÀAœ>¨!Ð.>Ñ*>Õ?Ò_Ó`Ü¸LÖI°qœ˜QÐ!1Ñ1Õ2ÒIÓJØØ%ØØØ!Ø#ØØ!ô
ð ôð ùò Sùò
 `ùÚIs   ®B9Á&B>Â
Cc                   ó  ‡ — e Zd ZdZdddej
                  ej                  ddddddfdeded	ed
edede	ej                     de	ej                     dedee	ej                        dee	ej                        defˆ fd„Zd„ Zd„ Zˆ xZS )ÚBottleneckBlockz  ResNe(X)t Bottleneck Block
    r   ç      Ð?FNç        Úin_chsr"   ÚdilationrK   rH   rb   rd   Ú	attn_lastrM   Ú
drop_blockÚ	drop_pathc                 ó&  •— ||dœ}t         ‰| �  «        t        t        ||z  «      «      }t	        ||¬«      }|	d uxr |}|	d uxr | }t        ||fddi|¤|¤Ž| _        t        ||fd|||
dœ|¤|¤Ž| _        |r |	|fd|i|¤Žnt        j                  «       | _
        t        ||fddd	œ|¤|¤Ž| _        |r |	|fd|i|¤Žnt        j                  «       | _        |rt        |«      nt        j                  «       | _        t        |«      | _        y )
N©ÚdeviceÚdtype©rb   rd   r&   r   r%   ©r&   r}   rH   Ú
drop_layerrb   F©r&   Ú	apply_act)ÚsuperÚ__init__r-   ÚroundÚdictr   Úconv1Úconv2ÚnnÚIdentityÚattn2Úconv3Úattn3r   r€   r   Úact3)rX   r|   r"   r}   rK   rH   rb   rd   r~   rM   r   r€   rƒ   r„   ÚddÚmid_chsÚckwargsÚ
attn_firstÚ	__class__s                     €r2   r‹   zBottleneckBlock.__init__‹   s?  ø€ ð  ¨Ñ/ˆÜ‰ÑÔÜ”e˜G lÑ2Ó3Ó4ˆÜ °zÔBˆØ dÐ*Ò8¨yˆ	Ø tÐ+Ò=°I°ˆ
ä  ¨ÑQ¸aÐQÀ7ÐQÈbÑQˆŒ
Ü ØØð	
ð ØØØ!ñ	
ð ð	
ð ñ	
ˆŒ
ñ HR‘Z ÑC°9ÐCÀÒCÔWY×WbÑWbÓWdˆŒ
Ü  ¨'Ðc¸qÈEÑcÐU\ÐcÐ`bÑcˆŒ
ÙGP‘Z ÑC°9ÐCÀÒCÔVX×VaÑVaÓVcˆŒ
Ù09œ )Ô,¼r¿{¹{»}ˆŒÜ$ YÓ/ˆ�	r1   c                 ó~   — t         j                  j                  | j                  j                  j
                  «       y rW   )r�   ÚinitÚzeros_r“   ÚbnÚweight©rX   s    r2   r`   zBottleneckBlock.zero_init_last³   ó    € Ü
�‰�‰�t—z‘z—}‘}×+Ñ+Õ,r1   c                 óþ   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      |z   }| j                  |«      }|S rW   )rŽ   r�   r’   r“   r”   r€   r•   ©rX   r9   Úshortcuts      r2   ÚforwardzBottleneckBlock.forward¶   so   € ØˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�N‰N˜1Ó Ñ(ˆð �I‰I�a‹LˆØˆr1   )r*   r+   r,   Ú__doc__r�   ÚReLUÚBatchNorm2dr-   rZ   r   ÚModuler[   r
   r‹   r`   r¥   Ú__classcell__©rš   s   @r2   ry   ry   ‡   sÙ   ø„ ñð Ø"&ØØ)+¯©Ø*,¯.©.Ø#Ø48Ø48Ø!ØØñ&0àð&0ð ð&0ð ð	&0ð
  ð&0ð ð&0ð ˜BŸI™I‘ð&0ð ˜RŸY™Y™ð&0ð ð&0ð !  b§i¡i¡Ñ1ð&0ð !  b§i¡i¡Ñ1ð&0ð õ&0òP-ör1   ry   c                   ó
  ‡ — e Zd ZdZdddej
                  ej                  dddddf
dededed	ed
ede	ej                     de	ej                     dee	ej                        dee	ej                        defˆ fd„Zd„ Zd„ Zˆ xZS )Ú	DarkBlockz DarkNet Block
    r   rn   Nr{   r|   r"   r}   rK   rH   rb   rd   rM   r   r€   c                 óv  •— ||dœ}t         ‰| �  «        t        t        ||z  «      «      }t	        ||¬«      }t        ||fddi|¤|¤Ž| _        |� ||fd|i|¤Žnt        j                  «       | _	        t        ||fd|||	dœ|¤|¤Ž| _
        |
rt        |
«      | _        y t        j                  «       | _        y )Nr‚   r…   r&   r   rb   r%   r†   ©rŠ   r‹   r-   rŒ   r�   r   rŽ   r�   r‘   Úattnr�   r   r€   ©rX   r|   r"   r}   rK   rH   rb   rd   rM   r   r€   rƒ   r„   r–   r—   r˜   rš   s                   €r2   r‹   zDarkBlock.__init__È   sÓ   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ”e˜G lÑ2Ó3Ó4ˆÜ °zÔBˆä  ¨ÑQ¸aÐQÀ7ÐQÈbÑQˆŒ
ØFPÐF\‘J˜wÑB°)ÐB¸rÒBÔbd×bmÑbmÓboˆŒ	Ü ØØð	
ð ØØØ!ñ	
ð ð	
ð ñ	
ˆŒ
ñ 1:œ )Ó,ˆ�¼r¿{¹{»}ˆ�r1   c                 ó~   — t         j                  j                  | j                  j                  j
                  «       y rW   ©r�   rœ   r�   r�   rž   rŸ   r    s    r2   r`   zDarkBlock.zero_init_lastê   r¡   r1   c                 ó˜   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      |z   }|S rW   ©rŽ   r°   r�   r€   r£   s      r2   r¥   zDarkBlock.forwardí   óF   € ØˆØ�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØ�N‰N˜1Ó Ñ(ˆØˆr1   ©r*   r+   r,   r¦   r�   r§   r¨   r-   rZ   r   r©   r
   r‹   r`   r¥   rª   r«   s   @r2   r­   r­   Ä   ó×   ø„ ñð Ø"%ØØ)+¯©Ø*,¯.©.Ø48Ø48Ø!ØØñ Màð Mð ð Mð ð	 Mð
  ð Mð ð Mð ˜BŸI™I‘ð Mð ˜RŸY™Y™ð Mð !  b§i¡i¡Ñ1ð Mð !  b§i¡i¡Ñ1ð Mð õ MòD-ör1   r­   c                   ó
  ‡ — e Zd ZdZdddej
                  ej                  dddddf
dededed	ed
ede	ej                     de	ej                     dee	ej                        dee	ej                        defˆ fd„Zd„ Zd„ Zˆ xZS )Ú	EdgeBlockzZ EdgeResidual / Fused-MBConv / MobileNetV1-like 3x3 + 1x1 block (w/ activated output)
    r   rn   Nr{   r|   r"   r}   rK   rH   rb   rd   rM   r   r€   c                 óv  •— ||dœ}t         ‰| �  «        t        t        ||z  «      «      }t	        ||¬«      }t        ||fd|||	dœ|¤|¤Ž| _        |� ||fd|i|¤Žnt        j                  «       | _	        t        ||fddi|¤|¤Ž| _
        |
rt        |
«      | _        y t        j                  «       | _        y )Nr‚   r…   r%   r†   rb   r&   r   r¯   r±   s                   €r2   r‹   zEdgeBlock.__init__ú   sÕ   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ”e˜G lÑ2Ó3Ó4ˆÜ °zÔBˆä ØØð	
ð ØØØ!ñ	
ð ð	
ð ñ	
ˆŒ
ð GQÐF\‘J˜wÑB°)ÐB¸rÒBÔbd×bmÑbmÓboˆŒ	Ü  ¨'ÑR¸qÐRÀGÐRÈrÑRˆŒ
Ù09œ )Ó,ˆ�¼r¿{¹{»}ˆ�r1   c                 ó~   — t         j                  j                  | j                  j                  j
                  «       y rW   r³   r    s    r2   r`   zEdgeBlock.zero_init_last  r¡   r1   c                 ó˜   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      |z   }|S rW   rµ   r£   s      r2   r¥   zEdgeBlock.forward  r¶   r1   r·   r«   s   @r2   rº   rº   ö   r¸   r1   rº   c                    ó¬   ‡ — e Zd ZdZdddddddddeddfdededed	ed
edededededee   dedededee	e      de
ej                     fˆ fd„Zd„ Zˆ xZS )Ú
CrossStagezCross Stage.rI   r   NFr|   r"   r$   r}   rB   rJ   rK   rS   rH   Úfirst_dilationrL   rU   rT   Ú	block_dprÚblock_fnc                 óÆ  •— ||dœ}t         ‰| �  «        |
xs |}
|r|n|}t        t        ||z  «      «      x| _        }t        t        ||z  «      «      }t        |j                  d«      |j                  d«      ¬«      }|j                  dd «      }|dk7  s|
|k7  rx|rYt        j                  |dk(  rt        j                  d«      nt        j                  «       t        ||fdd|	dœ|¤|¤Ž«      | _        nt        ||fd	||
|	|d
œ|¤|¤Ž| _        |}nt        j                  «       | _        |}t        ||fd| dœ|¤|¤Ž| _        |dz  }t        j                  «       | _        t!        |«      D ]?  }| j                  j#                  t%        |«       |d|||||	|�||   nddœ|¤|¤Ž«       |}ŒA t        ||dz  fddi|¤|¤Ž| _        t        ||fddi|¤|¤Ž| _        y ©Nr‚   rb   rd   r…   re   r   r#   ©r&   r$   rH   r%   ©r&   r$   r}   rH   re   rˆ   r{   ©r|   r"   r}   rK   rH   r€   r&   r0   )rŠ   r‹   r-   rŒ   Ú
expand_chsr�   ÚgetÚpopr�   Ú
SequentialÚ	AvgPool2dr‘   r   Ú	conv_downÚconv_expÚblocksÚrangeÚ
add_moduler/   Úconv_transition_bÚconv_transition©rX   r|   r"   r$   r}   rB   rJ   rK   rS   rH   rÀ   rL   rU   rT   rÁ   rÂ   rƒ   r„   Úblock_kwargsr–   Údown_chsÚexp_chsÚblock_out_chsÚconv_kwargsre   Úprev_chsÚirš   s                              €r2   r‹   zCrossStage.__init__*  sG  ø€ ð* ¨Ñ/ˆÜ‰ÑÔØ'Ò3¨8ˆÙ)‘7¨vˆÜ$'¬¨g¸Ñ.DÓ(EÓ$FÐFˆŒ˜'ÜœE '¨KÑ"7Ó8Ó9ˆÜ \×%5Ñ%5°kÓ%BÈ|×O_ÑO_Ð`lÓOmÔnˆØ×#Ñ# J°Ó5ˆà�QŠ;˜.¨HÒ4ÙÜ!#§¡Ø'-°¢{”B—L‘L ”O¼¿¹»Ü ¨Ðm¸QÀqÐQWÑmÐ[fÐmÐjlÑmó"�•ô
 "-ØØð
"ð !"Ø!Ø+Ø!Ø%ñ
"ð "ð
"ð ñ
"�”ð  ‰HäŸ[™[›]ˆDŒNØˆHô
 $ØØð
ð Ø&Ð&ñ	
ð
 ð
ð ñ
ˆŒð ˜a‘<ˆä—m‘m“oˆŒÜ�u“ò 	%ˆAØ�K‰K×"Ñ"¤3 q£6©8ð 	,ØØ%Ø!Ø)ØØ*3Ð*?˜) Aš,ÀRñ	,ð ð	,ð ñ	,ô 	ð %‰Hð	%ô "-¨X°wÀ!±|Ñ!hÐQRÐ!hÐVaÐ!hÐegÑ!hˆÔÜ*¨7°GÑ`ÈÐ`ÈkÐ`Ð]_Ñ`ˆÕr1   c                 ó@  — | j                  |«      }| j                  |«      }|j                  | j                  dz  d¬«      \  }}| j	                  |«      }| j                  |«      j                  «       }| j                  t        j                  ||gd¬«      «      }|S ©Nr#   r   )Údim)
rÍ   rÎ   ÚsplitrÈ   rÏ   rÒ   Ú
contiguousrÓ   ÚtorchÚcat)rX   r9   ÚxsÚxbÚouts        r2   r¥   zCrossStage.forward~  s‡   € Ø�N‰N˜1ÓˆØ�M‰M˜!ÓˆØ—‘˜Ÿ™¨AÑ-°1�Ó5‰ˆˆBØ�[‰[˜‹_ˆØ×#Ñ# BÓ'×2Ñ2Ó4ˆØ×"Ñ"¤5§9¡9¨b°"¨X¸1Ô#=Ó>ˆØˆ
r1   ©r*   r+   r,   r¦   ry   r-   rZ   r
   r[   r	   r   r�   r©   r‹   r¥   rª   r«   s   @r2   r¿   r¿   (  s   ø„ Ùð "$Ø"$Ø"$ØØ,0Ø"Ø %Ø!&Ø/3Ø(7ØØñ%RaàðRað ðRað ð	Rað
 ðRað ðRað ðRað  ðRað  ðRað ðRað % S™MðRað ðRað ðRað ðRað    U¡Ñ,ðRað  ˜2Ÿ9™9‘oõ!Raöhr1   r¿   c                    ó¬   ‡ — e Zd ZdZdddddddddeddfdededed	ed
edededededee   dedededee	e      de
ej                     fˆ fd„Zd„ Zˆ xZS )ÚCrossStage3z`Cross Stage 3.
    Similar to CrossStage, but with only one transition conv for the output.
    rI   r   NFr|   r"   r$   r}   rB   rJ   rK   rS   rH   rÀ   rL   rU   rT   rÁ   rÂ   c                 óp  •— ||dœ}t         ‰| �  «        |
xs |}
|r|n|}t        t        ||z  «      «      x| _        }t        t        ||z  «      «      }t        |j                  d«      |j                  d«      ¬«      }|j                  dd «      }|dk7  s|
|k7  rx|rYt        j                  |dk(  rt        j                  d«      nt        j                  «       t        ||fdd|	dœ|¤|¤Ž«      | _        nt        ||fd	||
|	|d
œ|¤|¤Ž| _        |}n	d | _        |}t        ||fd| dœ|¤|¤Ž| _        |dz  }t        j                  «       | _        t!        |«      D ]?  }| j                  j#                  t%        |«       |d|||||	|�||   nddœ|¤|¤Ž«       |}ŒA t        ||fddi|¤|¤Ž| _        y rÄ   )rŠ   r‹   r-   rŒ   rÈ   r�   rÉ   rÊ   r�   rË   rÌ   r‘   r   rÍ   rÎ   rÏ   rÐ   rÑ   r/   rÓ   rÔ   s                              €r2   r‹   zCrossStage3.__init__Œ  s  ø€ ð* ¨Ñ/ˆÜ‰ÑÔØ'Ò3¨8ˆÙ)‘7¨vˆÜ$'¬¨g¸Ñ.DÓ(EÓ$FÐFˆŒ˜'ÜœE '¨KÑ"7Ó8Ó9ˆÜ \×%5Ñ%5°kÓ%BÈ|×O_ÑO_Ð`lÓOmÔnˆØ×#Ñ# J°Ó5ˆà�QŠ;˜.¨HÒ4ÙÜ!#§¡Ø'-°¢{”B—L‘L ”O¼¿¹»Ü ¨Ðm¸QÀqÐQWÑmÐ[fÐmÐjlÑmó"�•ô
 "-ØØð
"ð !"Ø!Ø+Ø!Ø%ñ
"ð "ð
"ð ñ
"�”ð  ‰Hà!ˆDŒNØˆHô $ØØð
ð Ø&Ð&ñ	
ð
 ð
ð ñ
ˆŒð ˜a‘<ˆä—m‘m“oˆŒÜ�u“ò 	%ˆAØ�K‰K×"Ñ"¤3 q£6©8ð 	,ØØ%Ø!Ø)ØØ*3Ð*?˜) Aš,ÀRñ	,ð ð	,ð ñ	,ô 	ð %‰Hð	%ô  +¨7°GÑ`ÈÐ`ÈkÐ`Ð]_Ñ`ˆÕr1   c                 ó  — | j                  |«      }| j                  |«      }|j                  | j                  dz  d¬«      \  }}| j	                  |«      }| j                  t        j                  ||gd¬«      «      }|S rÝ   )rÍ   rÎ   rß   rÈ   rÏ   rÓ   rá   râ   )rX   r9   Úx1Úx2rå   s        r2   r¥   zCrossStage3.forwardÝ  sn   € Ø�N‰N˜1ÓˆØ�M‰M˜!ÓˆØ—‘˜Ÿ™¨AÑ-°1�Ó5‰ˆˆBØ�[‰[˜‹_ˆØ×"Ñ"¤5§9¡9¨b°"¨X¸1Ô#=Ó>ˆØˆ
r1   ræ   r«   s   @r2   rè   rè   ˆ  s  ø„ ñð "$Ø"$Ø"$ØØ,0Ø"Ø %Ø!&Ø/3Ø(7ØØñ%OaàðOað ðOað ð	Oað
 ðOað ðOað ðOað  ðOað  ðOað ðOað % S™MðOað ðOað ðOað ðOað    U¡Ñ,ðOað  ˜2Ÿ9™9‘oõ!Oaöbr1   rè   c                   óš   ‡ — e Zd ZdZdddddedddf	dededed	ed
ededededee   dede	e
j                     deee      fˆ fd„Zd„ Zˆ xZS )Ú	DarkStagezDarkNet stage.rI   r   NFr|   r"   r$   r}   rB   rJ   rK   rH   rÀ   rL   rÂ   rÁ   c                 óš  •— ||dœ}t         ‰| �  «        |	xs |}	t        |j                  d«      |j                  d«      ¬«      }|j	                  dd «      }|
rYt        j                  |dk(  rt        j                  d«      nt        j                  «       t        ||fdd|dœ|¤|¤Ž«      | _
        nt        ||fd	||	||d
œ|¤|¤Ž| _
        |}t        t        ||z  «      «      }t        j                  «       | _        t        |«      D ]?  }| j                  j                  t!        |«       |d||||||�||   nddœ|¤|¤Ž«       |}ŒA y )Nr‚   rb   rd   r…   re   r#   r   rÅ   r%   rÆ   r{   rÇ   r0   )rŠ   r‹   r�   rÉ   rÊ   r�   rË   rÌ   r‘   r   rÍ   r-   rŒ   rÏ   rÐ   rÑ   r/   )rX   r|   r"   r$   r}   rB   rJ   rK   rH   rÀ   rL   rÂ   rÁ   rƒ   r„   rÕ   r–   rÙ   re   rÚ   rØ   rÛ   rš   s                         €r2   r‹   zDarkStage.__init__é  sy  ø€ ð$ ¨Ñ/ˆÜ‰ÑÔØ'Ò3¨8ˆÜ \×%5Ñ%5°kÓ%BÈ|×O_ÑO_Ð`lÓOmÔnˆØ×#Ñ# J°Ó5ˆáÜŸ]™]Ø#)¨Q¢;”—‘˜Q”´B·K±K³MÜ˜F GÐi¸À1ÈVÑiÐWbÐiÐfhÑióˆD�Nô
 )ØØð
ð ØØ'ØØ!ñ
ð ð
ð ñ
ˆDŒNð ˆÜœE '¨KÑ"7Ó8Ó9ˆÜ—m‘m“oˆŒÜ�u“ò 	%ˆAØ�K‰K×"Ñ"¤3 q£6©8ð 	,ØØ%Ø!Ø)ØØ*3Ð*?˜) Aš,ÀRñ	,ð ð	,ð ñ	,ô 	ð %‰Hñ	%r1   c                 óJ   — | j                  |«      }| j                  |«      }|S rW   )rÍ   rÏ   ©rX   r9   s     r2   r¥   zDarkStage.forward#  s"   € Ø�N‰N˜1ÓˆØ�K‰K˜‹NˆØˆr1   )r*   r+   r,   r¦   ry   r-   rZ   r
   r[   r   r�   r©   r	   r‹   r¥   rª   r«   s   @r2   rî   rî   æ  s¹   ø„ Ùð "$Ø"$ØØ,0Ø"Ø(7Ø/3ØØñ8%àð8%ð ð8%ð ð	8%ð
 ð8%ð ð8%ð ð8%ð  ð8%ð ð8%ð % S™Mð8%ð ð8%ð ˜2Ÿ9™9‘oð8%ð    U¡Ñ,õ8%ötr1   rî   r%   r!   r#   r'   Úin_chansr"   r&   r$   r)   r(   rb   rd   re   c                 ór  — |	|
dœ}t        j                  «       }g }t        |t        t        f«      s|g}t        |«      }|sJ ‚|dv sJ ‚d }| }|dz
  }d}t        |«      D ]�  \  }}d|dz   › �}|dk(  r|dkD  s||k(  r	|dkD  r|sdnd}|dkD  r|�|j                  |«       |j                  |t        |||f||dk(  r|nd||dœ|¤Ž«       ||z  }|}t        ||d	j                  d
|g«      ¬«      }Œ‘ |r°|dkD  sJ ‚|�|j                  |«       |�F|j                  dt        j                  ddd¬«      «       |j                  d |d|ddœ|¤Ž«       d}n*|j                  dt        j                  ddd¬«      «       d}|dz  }t        ||d	j                  d
|g«      ¬«      }|j                  |«       ||fS )Nr‚   )r   r#   é   r   Úconvr   r#   r'   )r$   r(   rb   rd   ú.r^   ©Únum_chsÚ	reductionÚmoduler)   r%   )r&   r$   r(   Úaa)Úchannelsr$   r0   )r�   rË   r5   r6   r7   r8   Ú	enumerateÚappendrÑ   r   r�   ÚjoinÚ	MaxPool2d)rò   r"   r&   r$   r)   r(   rb   rd   re   rƒ   r„   r–   r^   Úfeature_infoÚ
stem_depthÚ	prev_featrÚ   Úlast_idxÚstem_striderÛ   ÚchsÚ	conv_nameÚconv_strideÚ	pool_names                           r2   Úcreate_csp_stemr
  )  s
  € ð  UÑ	+€BÜ�=‰=‹?€DØ€LÜ�g¤¤t˜}Ô-Ø�)ˆÜ�W“€JÙÐˆ:Ø�YÑÐÐØ€IØ€HØ˜A‰~€HØ€KÜ˜GÓ$ò h‰ˆˆ3Ø˜1˜q™5˜'�Nˆ	Ø šF v°¢z°q¸H²}ÈÐRSÊÑ\`‘aÐghˆØ˜Š?˜yÐ4Ø×Ñ 	Ô*Ø�‰˜	¤;Ø�c˜;ð$
àØ  Ašv‘G¨2ØØ!ñ$
ð ñ$
ô 	ð 	�{Ñ"ˆØˆÜ °[ÈÏÉÐSYÐ[dÐReÓIfÔg‰	ðhñ  Ø˜ŠzÐˆzØÐ Ø×Ñ 	Ô*ØÐØ�O‰O˜F¤B§L¡L¸QÀqÐRSÔ$TÔUØ�O‰O˜D¡(Ð"M°HÀQÑ"MÈ"Ñ"MÔNØ‰Ià�O‰O˜F¤B§L¡L¸QÀqÐRSÔ$TÔUØˆIØ�qÑˆÜ °[ÈÏÉÐSYÐ[dÐReÓIfÔgˆ	Ø×Ñ˜	Ô"Ø�ÐÐr1   c                 óì   — | j                  d«      }|dv sJ ‚|dk(  r@| j                  dd «       | j                  dd «       | j                  dd «       t        }|| fS |dk(  r
t        }|| fS t        }|| fS )NrP   )rg   rO   ro   rg   rS   rT   rU   rO   )rÊ   rî   r¿   rè   )Ú
stage_argsrP   Ústage_fns      r2   Ú_get_stage_fnr  c  s‘   € Ø—‘ Ó-€JØÐ/Ñ/Ð/Ð/Ø�VÒØ�‰�~ tÔ,Ø�‰�~ tÔ,Ø�‰�} dÔ+Üˆð
 �ZÐÐð	 
�uÒ	Üˆð �ZÐÐô ˆØ�ZÐÐr1   c                 ót   — | j                  d«      }|dv sJ ‚|dk(  rt        | fS |dk(  rt        | fS t        | fS )NrR   )rg   ÚedgerQ   rg   r  )rÊ   r­   rº   ry   )r  rR   s     r2   Ú_get_block_fnr  r  sP   € Ø—‘ Ó-€JØÐ3Ñ3Ð3Ð3Ø�VÒÜ˜*Ð$Ð$Ø	�vÒ	Ü˜*Ð$Ð$ä 
Ð*Ð*r1   c                 óŽ   — | j                  d«      }| j                  dd «      xs i }|�t        |«      }|rt        |fi |¤Ž}|| fS )NrM   rN   )rÊ   r   r   )r  rM   rN   s      r2   Ú_get_attn_fnr  }  sR   € Ø—‘ Ó-€JØ—.‘. °Ó5Ò;¸€KØÐÜ˜jÓ)ˆ
ÙÜ  Ñ;¨{Ñ;ˆJØ�zÐ!Ð!r1   ÚcfgÚdrop_path_rateÚoutput_strideÚ	stem_featc                 óŒ  — ||dœ}t        | j                  «      }t        | j                  j                  «      }|sd g|z  n!t	        || j                  j                  d¬«      |d<   t        |j                  «       Ž D �	cg c]%  }	t        t        |j                  «       |	«      «      ‘Œ' }
}	t        | j                  | j                  ¬«      }d}|d   }|d   }|}g }g }t        |
«      D ]°  \  }}
t        |
«      \  }}
t        |
«      \  }}
t        |
«      \  }}
|
j                  d	«      }|dk7  r|r|j!                  |«       ||k\  r|dkD  r||z  }d}||z  }|d
v rdnd}| ||fi |
¤||||| j"                  |dœ¤|¤|¤Žgz  }|
d   }t        ||d|› �¬«      }Œ² |j!                  |«       t%        j&                  |Ž |fS c c}	w )Nr‚   T)Ú	stagewiserÁ   r…   r   rù   rø   r$   ©r   r#   r#   )r$   rÀ   r}   rÂ   re   rM   r"   zstages.r÷   )r   r_   r8   rB   r   ÚzipÚvaluesr�   Úkeysrb   rd   rý   r  r  r  rÊ   rþ   re   r�   rË   )r  r  r  r  rƒ   r„   r–   Úcfg_dictÚ
num_stagesr  r  rÕ   r}   Ú
net_striderÚ   r  r  r_   Ú	stage_idxr  rÂ   Úattn_fnr$   rÀ   s                           r2   Úcreate_csp_stagesr#  ‡  s  € ð  UÑ	+€BÜ�c—j‘jÓ!€HÜ�S—Z‘Z×%Ñ%Ó&€JÙ7E˜T˜F ZÒ/Ü! .°#·*±*×2BÑ2BÈdÔSð ˆ[ÑäCFÈÏÉÓHYÐCZÖ[¸”$”s˜8Ÿ=™=›?¨FÓ3Õ4Ð[€JÐ[ÜØ—-‘-Ø—>‘>ô€Lð
 €HØ˜;Ñ'€JØ˜Ñ#€HØ€IØ€LØ€FÜ!*¨:Ó!6ò _Ñˆ	�:Ü,¨ZÓ8Ñˆ�*Ü,¨ZÓ8Ñˆ�*Ü*¨:Ó6Ñˆ�Ø—‘ Ó)ˆØ�QŠ;™9Ø×Ñ 	Ô*Ø˜Ò&¨6°Aª:Ø˜ÑˆHØˆFØ�fÑˆ
Ø&¨&Ñ0™°aˆà‘8Øñ
àð
ð Ø)ØØØ—\‘\Øò
ð ð
ð ñ
ð ñ 	ˆð ˜iÑ(ˆÜ °ZÈ'ÐR[ÐQ\ÐH]Ô^‰	ð5_ð8 ×Ñ˜	Ô"Ü�=‰=˜&Ð! <Ð/Ð/ùòS \s   Á?*Gc                   óP  ‡ — e Zd 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                  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„ Zddefd„Zd„ Zˆ xZS )r   a‹  Cross Stage Partial base model.

    Paper: `CSPNet: A New Backbone that can Enhance Learning Capability of CNN` - https://arxiv.org/abs/1911.11929
    Ref Impl: https://github.com/WongKinYiu/CrossStagePartialNetworks

    NOTE: There are differences in the way I handle the 1x1 'expansion' conv in this impl vs the
    darknet impl. I did it this way for simplicity and less special cases.
    r  rò   Únum_classesr  Úglobal_poolÚ	drop_rater  r`   c                 ój  •— t         ‰| �  «        |	|
dœ}|| _        || _        || _        |dv sJ ‚t        |fi |¤Ž}t        |j                  |j                  |j                  ¬«      }g | _
        t        |fi t        |j                  «      ¤|¤|¤Ž\  | _        }| j                  j                  |dd «       t        |f|||d   dœ|¤Ž\  | _        }|d   d   }| j                  j                  |«       |x| _        | _        t'        d
||||dœ|¤Ž| _        t+        t-        t.        |¬	«      | «       y)a–  
        Args:
            cfg (CspModelCfg): Model architecture configuration
            in_chans (int): Number of input channels (default: 3)
            num_classes (int): Number of classifier classes (default: 1000)
            output_stride (int): Output stride of network, one of (8, 16, 32) (default: 32)
            global_pool (str): Global pooling type (default: 'avg')
            drop_rate (float): Dropout rate (default: 0.)
            drop_path_rate (float): Stochastic depth drop-path rate (default: 0.)
            zero_init_last (bool): Zero-init last weight of residual path
            kwargs (dict): Extra kwargs overlayed onto cfg
        r‚   )é   é   r!   )rb   rd   re   Nr4   )r  r  r  rø   )Úin_featuresr%  Ú	pool_typer'  )r`   r0   )rŠ   r‹   r%  rò   r'  r   r�   rb   rd   re   r  r
  r   r^   Úextendr#  r_   Únum_featuresÚhead_hidden_sizer   Úheadr   r   Ú_init_weights)rX   r  rò   r%  r  r&  r'  r  r`   rƒ   r„   Úkwargsr–   Ú
layer_argsÚstem_feat_infoÚstage_feat_inforÚ   rš   s                    €r2   r‹   zCspNet.__init__Ê  sb  ø€ ô4 	‰ÑÔØ¨Ñ/ˆØ&ˆÔØ ˆŒØ"ˆŒØ Ñ+Ð+Ð+ä�cÑ$˜VÑ$ˆÜØ—m‘mØ—~‘~Ø—\‘\ô
ˆ
ð
 ˆÔô %4°HÑ$eÄÀsÇxÁxÓ@PÐ$eÐT^Ð$eÐbdÑ$eÑ!ˆŒ	�>Ø×Ñ× Ñ  °°Ð!4Ô5ô (9Øð(
à)Ø'Ø$ RÑ(ñ	(
ð
 ñ(
Ñ$ˆŒ�_ð # 2Ñ& yÑ1ˆØ×Ñ× Ñ  Ô1ð 5=Ð<ˆÔ˜DÔ1Ü"ð 
Ø Ø#Ø!Øñ	
ð
 ñ
ˆŒ	ô 	”GœM¸.ÔIÈ4ÕPr1   c                 ó:   — t        d|rdn
ddt        fdg¬«      }|S )Nz^stemú^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)Nz^stages\.(\d+)\..*transition)r7  )r   )r^   rÏ   )r�   r   )rX   ÚcoarseÚmatchers      r2   Úgroup_matcherzCspNet.group_matcher  s0   € äØÙ(.Ñ$Ø8Ø0Ô2BÐCØ)ð5ô
ˆð ˆr1   c                 ó   — |rJ d«       ‚y )Nz$gradient checkpointing not supportedr0   )rX   Úenables     r2   Úset_grad_checkpointingzCspNet.set_grad_checkpointing  s   € áÐAÐAÓAˆz�6r1   Úreturnc                 ó.   — | j                   j                  S rW   )r0  Úfcr    s    r2   Úget_classifierzCspNet.get_classifier  s   € à�y‰y�|‰|Ðr1   c                 óJ   — || _         | j                  j                  ||«       y rW   )r%  r0  Úreset)rX   r%  r&  s      r2   Úreset_classifierzCspNet.reset_classifier"  s   € Ø&ˆÔØ�	‰	�‰˜ [Õ1r1   c                 óJ   — | j                  |«      }| j                  |«      }|S rW   ©r^   r_   rñ   s     r2   Úforward_featureszCspNet.forward_features&  s!   € Ø�I‰I�a‹LˆØ�K‰K˜‹NˆØˆr1   Ú
pre_logitsc                 óN   — |r| j                  ||¬«      S | j                  |«      S )N)rH  )r0  )rX   r9   rH  s      r2   Úforward_headzCspNet.forward_head+  s%   € Ù6@ˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRr1   c                 óJ   — | j                  |«      }| j                  |«      }|S rW   )rG  rJ  rñ   s     r2   r¥   zCspNet.forward.  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr1   )	r%   éè  r!   Úavgr{   r{   TNN©F)TrW   )r*   r+   r,   r¦   r]   r-   r/   rZ   r[   r‹   rá   ÚjitÚignorer:  r=  r�   r©   rA  r
   rD  rG  rJ  r¥   rª   r«   s   @r2   r   r   À  s!  ø„ ñð Ø#Ø!#Ø$Ø!Ø$&Ø#'ØØñBQàðBQð ðBQð ð	BQð
 ðBQð ðBQð ðBQð "ðBQð !õBQðH ‡Y�Y×Ñò	ó ð	ð ‡Y�Y×ÑòBó ðBð ‡Y�Y×Ñð §	¡	ò ó ðñ2¨Cð 2¸hÀs¹mó 2òñ
S¨$ó Sör1   c                 ó8  — t        | t        j                  «      rct        j                  j	                  | j
                  dd¬«       | j                  �*t        j                  j                  | j                  «       y y t        | t        j                  «      rct        j                  j                  | j
                  dd¬«       | j                  �*t        j                  j                  | j                  «       y y |rt        | d«      r| j                  «        y y y )NÚfan_outÚrelu)ÚmodeÚnonlinearityr{   g{®Gáz„?)ÚmeanÚstdr`   )r5   r�   ÚConv2drœ   Úkaiming_normal_rŸ   Úbiasr�   ÚLinearÚnormal_Úhasattrr`   )rú   Únamer`   s      r2   r1  r1  4  s»   € Ü�&œ"Ÿ)™)Ô$Ü
�‰×Ñ §¡°IÈFÐÔSØ�;‰;Ð"Ü�G‰G�N‰N˜6Ÿ;™;Õ'ð #ä	�FœBŸI™IÔ	&Ü
�‰�‰˜Ÿ™¨C°TˆÔ:Ø�;‰;Ð"Ü�G‰G�N‰N˜6Ÿ;™;Õ'ð #á	œG FÐ,<Ô=Ø×ÑÕð >ˆr1   Úcspresnet50ri   é   rô   Úmaxrl   r@   rC   r  ç       @rn   T)rB   r"   r$   rS   rK   rT   rF  Úcspresnet50d)r!   r!   ri   )rB   r"   r$   rS   rK   rJ   rT   Úcspresnet50w)rE   rF   rG   i   rz   Úcspresnext50)rB   r"   r$   rH   rS   rK   rJ   rT   Úcspdarknet53)r   r#   r)  r)  rô   )ri   rD   rE   rF   rG   )rb  rI   )rn   rI   )rI   rn   )rB   r"   r$   rS   rK   rJ   rU   rR   Ú	darknet17)r   r   r   r   r   )r#   )rn   )rI   )rB   r"   r$   rK   rJ   rP   rR   Ú	darknet21)r   r   r   r#   r#   Úsedarknet21Úse)rB   r"   r$   rK   rJ   rM   rP   rR   Ú	darknet53Údarknetaa53)rB   r"   r$   rK   rJ   rL   rP   rR   Úcs3darknet_s)rq   rr   Úcs3darknet_mg      è?gq=
×£på?Úcs3darknet_lÚcs3darknet_xg      ô?gHáz®Gõ?Úcs3darknet_focus_s)rq   rr   rs   Úcs3darknet_focus_mÚcs3darknet_focus_l)rs   Úcs3darknet_focus_xÚcs3sedarknet_l)Úrd_ratio)rM   rN   Úcs3sedarknet_x)rM   rq   rr   Úcs3sedarknet_xdwrk   )r%   rj   é   rô   )r   r   rE   rF   )rB   r"   r$   rH   rK   rJ   rM   rp   Úcs3edgenet_xg      ø?r  )rq   rr   rK   rR   Úcs3se_edgenet_x)rq   rr   rK   rR   rM   rN   c                 óÂ   — | j                  d«      s| j                  d«      rd}nd}|j                  d|«      }t        t        | |ft        |    t        d|¬«      dœ|¤ŽS )	NÚdarknetÚ
cspdarknet)r   r   r#   r%   rô   rA   )r   r   r#   r%   rô   Úout_indicesT)Úflatten_sequentialr  )Ú	model_cfgÚfeature_cfg)Ú
startswithrÊ   r   r   Ú
model_cfgsr�   )ÚvariantÚ
pretrainedr2  Údefault_out_indicesr  s        r2   Ú_create_cspnetrˆ  â  so   € Ø×Ñ˜)Ô$¨×(:Ñ(:¸<Ô(Hà0Ñà-ÐØ—*‘*˜]Ð,?Ó@€KÜÜ�˜ðä˜WÑ%Ü¨D¸kÔJñð ñ	ð r1   c                 ó2   — | dddddt         t        dddd	œ|¥S )
NrL  )r%   rE   rE   )r)  r)  gü©ñÒMbì?Úbilinearzstem.conv1.convzhead.fcz
apache-2.0)Úurlr%  Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationrV  rW  Ú
first_convÚ
classifierÚlicenser   )r‹  r2  s     r2   Ú_cfgr“  ð  s2   € àØ¨=ÀvØ¨JÜ%Ô.BØ'°yÈ\ñð ðð r1   zcspresnet50.ra_in1kztimm/zlhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspresnet50_ra-d3e8d487.pth)Ú	hf_hub_idr‹  zcspresnet50d.untrainedzcspresnet50w.untrainedzcspresnext50.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspresnext50_ra_224-648b4713.pthzcspdarknet53.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/cspdarknet53_ra_256-d05c7c21.pthzdarknet17.untrainedzdarknet21.untrainedzsedarknet21.untrainedzdarknet53.c2ns_in1kzthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/darknet53_256_c2ns-3aeff817.pthÚbicubic)r%   é   r–  )r”  r‹  r�  Útest_input_sizeÚtest_crop_pctzdarknetaa53.c2ns_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/darknetaa53_c2ns-5c28ec8a.pth)r”  r‹  r—  r˜  zcs3darknet_s.untrained)r�  zcs3darknet_m.c2ns_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_m_c2ns-43f06604.pthgffffffî?zcs3darknet_l.c2ns_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_l_c2ns-16220c5d.pthzcs3darknet_x.c2ns_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_x_c2ns-4e4490aa.pth)r”  r‹  r�  rŽ  r—  r˜  z&cs3darknet_focus_s.ra4_e3600_r256_in1k)rn   rn   rn   )r%   é@  r™  )r”  rV  rW  r�  r—  r˜  zcs3darknet_focus_m.c2ns_in1kzyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_focus_m_c2ns-e23bed41.pthzcs3darknet_focus_l.c2ns_in1kzyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3darknet_focus_l_c2ns-65ef8888.pthzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3sedarknet_l_c2ns-e8d1dc13.pthzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3sedarknet_x_c2ns-b4d0abc0.pthzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3edgenet_x_c2-2e1610a9.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/cs3se_edgenet_x_c2ns-76f8e3ac.pth)zcs3darknet_focus_x.untrainedzcs3sedarknet_l.c2ns_in1kzcs3sedarknet_x.c2ns_in1kzcs3sedarknet_xdw.untrainedzcs3edgenet_x.c2_in1kzcs3se_edgenet_x.c2ns_in1kr>  c                 ó   — t        dd| i|¤ŽS )Nr†  )r_  ©rˆ  ©r†  r2  s     r2   r_  r_  H  ó   € äÑI°JÐIÀ&ÑIÐIr1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rc  r›  rœ  s     r2   rc  rc  M  ó   € äÑJ°ZÐJÀ6ÑJÐJr1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rd  r›  rœ  s     r2   rd  rd  R  rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )re  r›  rœ  s     r2   re  re  W  rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rf  r›  rœ  s     r2   rf  rf  \  rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rg  r›  rœ  s     r2   rg  rg  a  ó   € äÑG°*ÐGÀÑGÐGr1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rh  r›  rœ  s     r2   rh  rh  f  r¤  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )ri  r›  rœ  s     r2   ri  ri  k  r�  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rk  r›  rœ  s     r2   rk  rk  p  r¤  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rl  r›  rœ  s     r2   rl  rl  u  r�  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rm  r›  rœ  s     r2   rm  rm  z  rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rn  r›  rœ  s     r2   rn  rn    rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )ro  r›  rœ  s     r2   ro  ro  „  rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rp  r›  rœ  s     r2   rp  rp  ‰  rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rq  r›  rœ  s     r2   rq  rq  Ž  ó   € äÑP¸:ÐPÈÑPÐPr1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rr  r›  rœ  s     r2   rr  rr  “  r®  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rs  r›  rœ  s     r2   rs  rs  ˜  r®  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rt  r›  rœ  s     r2   rt  rt  �  r®  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )ru  r›  rœ  s     r2   ru  ru  ¢  ó   € äÑL°zÐLÀVÑLÐLr1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rw  r›  rœ  s     r2   rw  rw  §  r³  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rx  r›  rœ  s     r2   rx  rx  ¬  s   € äÑN¸ÐNÀvÑNÐNr1   c                 ó   — t        dd| i|¤ŽS )Nr†  )rz  r›  rœ  s     r2   rz  rz  ±  rŸ  r1   c                 ó   — t        dd| i|¤ŽS )Nr†  )r{  r›  rœ  s     r2   r{  r{  ¶  s   € äÑM¸
ÐMÀfÑMÐMr1   )	rI   rI   Frf   FNNrI   rg   )NNrN  r0   )r'   )Zr¦   Údataclassesr   r   r   Ú	functoolsr   Útypingr   r   r	   r
   r   r   r   rá   Útorch.nnr�   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   Ú_builderr   Ú_manipulater   r   Ú	_registryr   r   Ú__all__r    r=   r?   r]   rw   r©   ry   r­   rº   r¿   rè   rî   r§   r¨   r-   r/   r
  r  r  r  rZ   r#  r   r1  r�   r„  rˆ  r“  Údefault_cfgsr_  rc  rd  re  rf  rg  rh  ri  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rw  rx  rz  r{  r0   r1   r2   ú<module>rÃ     s  ðñ÷ 3Ñ 2Ý ß @× @Ñ @ã Ý ç A÷ E÷  Eñ  EÝ *ß 6ß <àˆ*€ð ÷ð ó ðò'ð ÷!9ð !9ó ð!9ðH ÷#ð #ó ð#ð ØØØØØØØØó"ôJ:�b—i‘iô :ôz/�—	‘	ô /ôd/�—	‘	ô /ôd]�—‘ô ]ô@[�"—)‘)ô [ô|@�—	‘	ô @ðH ØØØØØØ%'§W¡WØ&(§n¡nØ.2ØØñ7Øð7àð7ð ð7ð ð	7ð
 ð7ð ð7ð ˜Ÿ	™	‘?ð7ð ˜Ÿ™‘Oð7ð ˜4 §	¡	™?Ñ+ó7òt ò+ò"ð Øñ60Øð60àð60ð ð60ð ˜˜S˜‘>ó	60ôrqˆR�Y‰Yô qóh
 ñ ò ^ÙÙ °¸!À%ÔHÙØØ)ØØØØô
õ
ð^ñ Ù ¸!ÀAÈEÔRÙØØ)ØØØØØô
õð^ñ0 Ù ¸!ÀAÈEÔRÙØØ*ØØØØØô
õð1^ñH Ù °¸!À%ÔHÙØØ*ØØØØØØô	
õðI^ñb Ù °¸!À"ÔEÙØ!Ø-ØØ&Ø'Ø&ØØô	
õðc^ñ| Ù °¸!À"ÔEÙØØ-ØØØØØô
õð}^ñT Ù °¸!À"ÔEÙØ!Ø-ØØØØØô	
õðU^ñn Ù °¸!À"ÔEÙØ!Ø-ØØØØØØô

õðo^ñJ Ù °¸!À"ÔEÙØ!Ø-ØØØØØô
õðK^ñb Ù °¸!À"ÔEÙØ!Ø-ØØØØØØô	
õðc^ñ~ ¨3ÀÕEð^ñ@ ¨4À$ÕGðA^ñB ”ðC^ñD ¨4À$ÕGðE^ñH  °ÀsÐRVÕWðI^ñJ  °ÈÐTXÕYðK^ñL   dÕ+ðM^ñN  °ÈÐTXÕYðO^ñR  t¹ÀsÔ9KÕLðS^ñT  t¸dÐUYÕZðU^ñX !Ù °aÀÈÔKÙØØ*ØØ#ØØØô
ð õðY^ñt ¨4À$ÐUXÐekÕlðu^ñv Ø°À3ÐSYØ¡T°3Ô%7õ9ðw^€
óBóñ %ð J&Ø™4ØØzô|ðJ&ð ™d›fð	J&ð
 ™d›fðJ&ð ™DØØôðJ&ð ™DØØôAðJ&ð ™4›6ðJ&ð ™4›6ðJ&ð  ™T›Vð!J&ð" ™4Øð CØ°ÈcôSð#J&ð* ™TØð AØ%°Sô:ð+J&ð4 ™d°Ô;ð5J&ð6 ™dØð BØ°Èdôð7J&ð@ ™dØð BØ°ÈdôTðAJ&ðH ™dØð BØ¨$ÀÐ]`ôbðIJ&ðR -©dØØ /Ø°Ècô/SðSJ&ðZ #¡DØð HØ°Èdô%Tð[J&ðb #¡DØð HØ°Èdô%TðcJ&ñj %)°yÔ$Aá $Øð DØ°Èdô!Tñ !%Øð DØ°Ècô!Sñ
 #'°YÔ"?á ØØØ°ÈcôSñ "&Øð EØ¨$ÀÐ]`ô"bòMJ&ó J€ðZ ñJ¨vò Jó ðJð ñK°ò Kó ðKð ñK°ò Kó ðKð ñK°ò Kó ðKð ñK°ò Kó ðKð ñH¨Vò Hó ðHð ñH¨Vò Hó ðHð ñJ¨vò Jó ðJð ñH¨Vò Hó ðHð ñJ¨vò Jó ðJð ñK°ò Kó ðKð ñK°ò Kó ðKð ñK°ò Kó ðKð ñK°ò Kó ðKð ñQ°fò Qó ðQð ñQ°fò Qó ðQð ñQ°fò Qó ðQð ñQ°fò Qó ðQð ñM°&ò Mó ðMð ñM°&ò Mó ðMð ñO°Fò Oó ðOð ñK°ò Kó ðKð ñN°6ò Nó ñNr1   