Ë
    éÓ^j€  ã                   óJ  — d 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c m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mZ ddlmZmZ d	d
lmZ d	dl m!Z! d	dl"m#Z# d	dl$m%Z%m&Z& d	dl'm(Z(m)Z) dgZ* G d„ de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edee2e2f   fd„Z3e#dedee2e2f   d e2d!e2fd"„«       Z4 G d#„ d$ejV                  «      Z5 G d%„ d&ejV                  «      Z6 G d'„ d(ejV                  «      Z7 G d)„ dejV                  «      Z8d>d*„Z9d+„ Z:d?d,„Z;d@d-„Z< e( e<d.¬/«       e<d.¬/«       e<d.¬/«       e<«        e<«        e<«        e<d0dd1¬2«       e<d3dd1¬2«      d4œ«      Z=e)d?d5e8fd6„«       Z>e)d?d5e8fd7„«       Z?e)d?d5e8fd8„«       Z@e)d?d5e8fd9„«       ZAe)d?d5e8fd:„«       ZBe)d?d5e8fd;„«       ZCe)d?d5e8fd<„«       ZDe)d?d5e8fd=„«       ZEy)Aaf   DaViT: Dual Attention Vision Transformers

As described in https://arxiv.org/abs/2204.03645

Input size invariant transformer architecture that combines channel and spacial
attention in each block. The attention mechanisms used are linear in complexity.

DaViT model defs and weights adapted from https://github.com/dingmyu/davit, original copyright below

é    )Úpartial)ÚListÚOptionalÚTupleÚTypeÚUnionN)ÚTensor©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚDropPathÚcalculate_drop_path_ratesÚ	to_2tupleÚtrunc_normal_ÚMlpÚLayerNorm2dÚget_norm_layerÚuse_fused_attn)ÚNormMlpClassifierHeadÚClassifierHeadé   )Úbuild_model_with_cfg)Úfeature_take_indices)Úregister_notrace_function)Ú
checkpointÚcheckpoint_seq)Úgenerate_default_cfgsÚregister_modelÚDaVitc                   óB   ‡ — e Zd Z	 	 	 	 ddededefˆ fd„Zdefd„Zˆ xZS )Ú
ConvPosEncÚdimÚkÚactc                 óÞ   •— ||dœ}t         ‰| �  «        t        j                  ||f|d|dz  |dœ|¤Ž| _        |rt        j
                  «       | _        y t        j                  «       | _        y )N©ÚdeviceÚdtyper   é   )Úkernel_sizeÚstrideÚpaddingÚgroups)ÚsuperÚ__init__ÚnnÚConv2dÚprojÚGELUÚIdentityr$   )Úselfr"   r#   r$   r'   r(   ÚddÚ	__class__s          €ú\/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/davit.pyr/   zConvPosEnc.__init__#   sn   ø€ ð ¨Ñ/ˆÜ‰ÑÔä—I‘IØØð
ð ØØ˜‘FØñ
ð ñ
ˆŒ	ñ !$”2—7‘7“9ˆ�¬¯©«ˆ�ó    Úxc                 óP   — | j                  |«      }|| j                  |«      z   }|S ©N)r2   r$   )r5   r:   Úfeats      r8   ÚforwardzConvPosEnc.forward9   s&   € Ø�y‰y˜‹|ˆØ�—‘˜“ÑˆØˆr9   )é   FNN©	Ú__name__Ú
__module__Ú__qualname__ÚintÚboolr/   r	   r>   Ú__classcell__©r7   s   @r8   r!   r!   "   s>   ø„ ð ØØØñ7àð7ð ð7ð õ	7ð,˜÷ r9   r!   c            
       óh   ‡ — e Zd ZdZdddeddfdededed	eej                     fˆ fd
„Z	de
fd„Zˆ xZS )ÚStemzŒ Size-agnostic implementation of 2D image to patch embedding,
        allowing input size to be adjusted during model forward operation
    r?   é`   é   NÚin_chsÚout_chsr+   Ú
norm_layerc                 óÜ   •— ||dœ}t         ‰| �  «        t        |«      }|| _        || _        || _        |d   dk(  sJ ‚t        j                  ||fd|ddœ|¤Ž| _         ||fi |¤Ž| _	        y )Nr&   r   rK   é   r?   ©r*   r+   r,   )
r.   r/   r   r+   rL   rM   r0   r1   ÚconvÚnorm)	r5   rL   rM   r+   rN   r'   r(   r6   r7   s	           €r8   r/   zStem.__init__D   sŒ   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ˜6Ó"ˆØˆŒØˆŒØˆŒØ�a‰y˜AŠ~Ðˆ~Ü—I‘IØØð
ð ØØñ
ð ñ
ˆŒ	ñ ˜wÑ-¨"Ñ-ˆ�	r9   r:   c                 óh  — |j                   \  }}}}| j                  d   || j                  d   z  z
  | j                  d   z  }| j                  d   || j                  d   z  z
  | j                  d   z  }t        j                  |d|d|f«      }| j	                  |«      }| j                  |«      }|S )Nr   r   )Úshaper+   ÚFÚpadrR   rS   )r5   r:   ÚBÚCÚHÚWÚpad_rÚpad_bs           r8   r>   zStem.forward^   s£   € Ø—W‘W‰
ˆˆ1ˆa�Ø—‘˜Q‘ ! d§k¡k°!¡nÑ"4Ñ4¸¿¹ÀA¹ÑFˆØ—‘˜Q‘ ! d§k¡k°!¡nÑ"4Ñ4¸¿¹ÀA¹ÑFˆÜ�E‰E�!�a˜  5Ð)Ó*ˆØ�I‰I�a‹LˆØ�I‰I�a‹LˆØˆr9   )rA   rB   rC   Ú__doc__r   rD   r   r0   ÚModuler/   r	   r>   rF   rG   s   @r8   rI   rI   ?   s[   ø„ ñð ØØØ*5ØØñ.àð.ð ð.ð ð	.ð
 ˜RŸY™Y™õ.ð4˜÷ r9   rI   c            
       ó`   ‡ — e Zd Zdeddfdedededeej                     fˆ fd„Zde	fd	„Z
ˆ xZS )
Ú
Downsampler?   NrL   rM   r*   rN   c                 óà   •— ||dœ}t         ‰| �  «        || _        || _         ||fi |¤Ž| _        |dz  dk(  | _        t        j                  ||f|d| j
                  rdn|dz  dœ|¤Ž| _        y )Nr&   r)   r   rQ   )	r.   r/   rL   rM   rS   Úeven_kr0   r1   rR   )	r5   rL   rM   r*   rN   r'   r(   r6   r7   s	           €r8   r/   zDownsample.__init__i   s†   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØˆŒá˜vÑ,¨Ñ,ˆŒ	Ø! A‘o¨Ñ*ˆŒÜ—I‘IØØð
ð $ØØŸš‘A¨+¸Ñ*:ñ
ð ñ
ˆ�	r9   r:   c                 ó  — |j                   \  }}}}| j                  |«      }| j                  rI| j                  j                  \  }}|||z  z
  |z  }|||z  z
  |z  }	t        j                  |d|d|	f«      }| j                  |«      }|S )Nr   )rU   rS   rc   rR   r*   rV   rW   )
r5   r:   rX   rY   rZ   r[   Úk_hÚk_wr\   r]   s
             r8   r>   zDownsample.forward‚   s‰   € Ø—W‘W‰
ˆˆ1ˆa�Ø�I‰I�a‹LˆØ�;Š;Ø—y‘y×,Ñ,‰HˆC�Ø˜1˜s™7‘] cÑ)ˆEØ˜1˜s™7‘] cÑ)ˆEÜ—‘�a˜!˜U Q¨Ð.Ó/ˆAØ�I‰I�a‹LˆØˆr9   )rA   rB   rC   r   rD   r   r0   r_   r/   r	   r>   rF   rG   s   @r8   ra   ra   h   sP   ø„ ð
  !Ø*5ØØñ
àð
ð ð
ð ð	
ð
 ˜RŸY™Y™õ
ð2	˜÷ 	r9   ra   c            	       óB   ‡ — e Zd Z	 	 	 	 	 ddedededefˆ fd„Zd„ Zˆ xZS )ÚChannelAttentionV2r"   Ú	num_headsÚqkv_biasÚdynamic_scalec                 óÖ   •— ||dœ}t         ‰| �  «        || _        ||z  | _        || _        t        j                  ||dz  fd|i|¤Ž| _        t        j                  ||fi |¤Ž| _        y )Nr&   r?   Úbias)	r.   r/   r-   Úhead_dimrk   r0   ÚLinearÚqkvr2   )	r5   r"   ri   rj   rk   r'   r(   r6   r7   s	           €r8   r/   zChannelAttentionV2.__init__�   sl   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØ˜yÑ(ˆŒØ*ˆÔä—9‘9˜S #¨¡'Ñ?°Ð?¸BÑ?ˆŒÜ—I‘I˜c 3Ñ-¨"Ñ-ˆ�	r9   c                 ó:  — |j                   \  }}}| j                  |«      j                  ||d| j                  || j                  z  «      j	                  ddddd«      }|j                  d«      \  }}}| j                  r	||dz  z  }n|| j                  dz  z  }|j                  dd«      |z  }	|	j                  d¬	«      }	|	|j                  dd«      z  j                  dd«      }|j                  dd«      j                  |||«      }| j                  |«      }|S )
Nr?   r)   r   r   rK   ç      à¿éÿÿÿÿéþÿÿÿ©r"   )rU   rp   Úreshaper-   ÚpermuteÚunbindrk   rn   Ú	transposeÚsoftmaxr2   ©
r5   r:   rX   ÚNrY   rp   Úqr#   ÚvÚattns
             r8   r>   zChannelAttentionV2.forward¢   s
  € Ø—'‘'‰ˆˆ1ˆaà�h‰h�q‹k×!Ñ! ! Q¨¨4¯;©;¸¸T¿[¹[Ñ8HÓI×QÑQÐRSÐUVÐXYÐ[\Ð^_Ó`ˆØ—*‘*˜Q“-‰ˆˆ1ˆaà×ÒØ�A˜‘I‘‰Aà�D—M‘M TÑ)Ñ)ˆAØ�{‰{˜2˜rÓ" QÑ&ˆØ�|‰| ˆ|Ó#ˆØ�A—K‘K  BÓ'Ñ'×2Ñ2°2°rÓ:ˆà�K‰K˜˜1Ó×%Ñ% a¨¨AÓ.ˆØ�I‰I�a‹LˆØˆr9   )é   TTNN)rA   rB   rC   rD   rE   r/   r>   rF   rG   s   @r8   rh   rh   Ž   sD   ø„ ð
 Ø!Ø"&ØØñ.àð.ð ð.ð ð	.ð
  õ.ö$r9   rh   c                   óB   ‡ — e Zd Z	 	 	 	 ddededefˆ fd„Zdefd„Zˆ xZS )ÚChannelAttentionr"   ri   rj   c                 óÒ   •— ||dœ}t         ‰| �  «        || _        ||z  }|dz  | _        t	        j
                  ||dz  fd|i|¤Ž| _        t	        j
                  ||fi |¤Ž| _        y )Nr&   rr   r?   rm   )r.   r/   ri   Úscaler0   ro   rp   r2   )	r5   r"   ri   rj   r'   r(   r6   rn   r7   s	           €r8   r/   zChannelAttention.__init__¸   sn   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ"ˆŒØ˜)Ñ#ˆØ Ñ%ˆŒ
ä—9‘9˜S #¨¡'Ñ?°Ð?¸BÑ?ˆŒÜ—I‘I˜c 3Ñ-¨"Ñ-ˆ�	r9   r:   c                 ó
  — |j                   \  }}}| j                  |«      j                  ||d| j                  || j                  z  «      j	                  ddddd«      }|j                  d«      \  }}}|| j                  z  }|j                  dd«      |z  }	|	j                  d¬«      }	|	|j                  dd«      z  j                  dd«      }|j                  dd«      j                  |||«      }| j                  |«      }|S )	Nr?   r)   r   r   rK   rs   rt   ru   )
rU   rp   rv   ri   rw   rx   r„   ry   rz   r2   r{   s
             r8   r>   zChannelAttention.forwardÉ   sî   € Ø—'‘'‰ˆˆ1ˆaà�h‰h�q‹k×!Ñ! ! Q¨¨4¯>©>¸1ÀÇÁÑ;NÓO×WÑWÐXYÐ[\Ð^_ÐabÐdeÓfˆØ—*‘*˜Q“-‰ˆˆ1ˆaà�—
‘
‰NˆØ�{‰{˜2˜rÓ" QÑ&ˆØ�|‰| ˆ|Ó#ˆØ�A—K‘K  BÓ'Ñ'×2Ñ2°2°rÓ:ˆØ�K‰K˜˜1Ó×%Ñ% a¨¨AÓ.ˆØ�I‰I�a‹LˆØˆr9   )r€   FNNr@   rG   s   @r8   r‚   r‚   ¶   s>   ø„ ð
 Ø"ØØñ.àð.ð ð.ð õ	.ð"˜÷ r9   r‚   c                   óÆ   ‡ — e 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dedefˆ fd„Zdefd„Zˆ xZS )ÚChannelBlockç      @Fç        TNr"   ri   Ú	mlp_ratiorj   Ú	drop_pathÚ	act_layerrN   ÚffnÚcpe_actÚv2c                 ó4  •— ||dœ}t         ‰| �  «        t        d|d|	dœ|¤Ž| _        || _         ||fi |¤Ž| _        |
rt        nt        } ||f||dœ|¤Ž| _        |dkD  rt        |«      nt        j                  «       | _        t        d|d|	dœ|¤Ž| _        | j                  r^ ||fi |¤Ž| _        t        d|t!        ||z  «      |dœ|¤Ž| _        |dkD  rt        |«      | _        y t        j                  «       | _        y d | _        d | _        d | _        y ©Nr&   r?   )r"   r#   r$   )ri   rj   r‰   )Úin_featuresÚhidden_featuresrŒ   © )r.   r/   r!   Úcpe1r�   Únorm1rh   r‚   r   r   r0   r4   Ú
drop_path1Úcpe2Únorm2r   rD   ÚmlpÚ
drop_path2)r5   r"   ri   rŠ   rj   r‹   rŒ   rN   r�   rŽ   r�   r'   r(   r6   Ú
attn_layerr7   s                  €r8   r/   zChannelBlock.__init__Ú   s'  ø€ ð ¨Ñ/ˆÜ‰ÑÔäÐ? 3¨!°Ñ?¸BÑ?ˆŒ	ØˆŒÙ Ñ* rÑ*ˆŒ
Ù+-Õ'Ô3Cˆ
ÙØð
àØñ
ð ñ	
ˆŒ	ð 2;¸R²œ( 9Ô-ÄRÇ[Á[Ã]ˆŒÜÐ? 3¨!°Ñ?¸BÑ?ˆŒ	à�8Š8Ù# CÑ.¨2Ñ.ˆDŒJÜð ØÜ # C¨)¡OÓ 4Ø#ñð ñ	ˆDŒHð 6?À²^œh yÓ1ˆD�OÌÏÉËˆD�OàˆDŒJØˆDŒHØ"ˆD�Or9   r:   c                 ó`  — |j                   \  }}}}| j                  |«      j                  d«      j                  dd«      }| j	                  |«      }| j                  |«      }|| j                  |«      z   }| j                  |j                  dd«      j                  ||||«      «      }| j                  �w|j                  d«      j                  dd«      }|| j                  | j                  | j                  |«      «      «      z   }|j                  dd«      j                  ||||«      }|S )Nr)   r   )rU   r•   Úflattenry   r–   r   r—   r˜   Úviewrš   r›   r™   )r5   r:   rX   rY   rZ   r[   Úcurs          r8   r>   zChannelBlock.forward  sý   € Ø—W‘W‰
ˆˆ1ˆa�à�I‰I�a‹L× Ñ  Ó#×-Ñ-¨a°Ó3ˆà�j‰j˜‹mˆØ�i‰i˜‹nˆØ�—‘ Ó$Ñ$ˆà�I‰I�a—k‘k ! QÓ'×,Ñ,¨Q°°1°aÓ8Ó9ˆà�8‰8ÐØ—	‘	˜!“×&Ñ& q¨!Ó,ˆAØ�D—O‘O D§H¡H¨T¯Z©Z¸«]Ó$;Ó<Ñ<ˆAØ—‘˜A˜qÓ!×&Ñ& q¨!¨Q°Ó2ˆAàˆr9   )rA   rB   rC   r0   r3   Ú	LayerNormrD   ÚfloatrE   r   r_   r/   r	   r>   rF   rG   s   @r8   r‡   r‡   Ø   s¯   ø„ ð  "Ø"Ø!Ø)+¯©Ø*,¯,©,ØØ!ØØØñ+#àð+#ð ð+#ð ð	+#ð
 ð+#ð ð+#ð ˜BŸI™I‘ð+#ð ˜RŸY™Y™ð+#ð ð+#ð ð+#ð õ+#ðZ˜÷ r9   r‡   r:   Úwindow_sizec                 óð   — | j                   \  }}}}| j                  |||d   z  |d   ||d   z  |d   |«      } | j                  dddddd«      j                  «       j                  d|d   |d   |«      }|S )z™
    Args:
        x: (B, H, W, C)
        window_size (int): window size
    Returns:
        windows: (num_windows*B, window_size, window_size, C)
    r   r   r?   r)   rK   é   rs   ©rU   rŸ   rw   Ú
contiguous)r:   r£   rX   rZ   r[   rY   Úwindowss          r8   Úwindow_partitionr©     sŒ   € ð —‘�J€A€qˆ!ˆQØ	�‰ˆq�!�{ 1‘~Ñ% {°1¡~°q¸KÈ¹NÑ7JÈKÐXYÉNÐ\]Ó^€AØ�i‰i˜˜1˜a  A qÓ)×4Ñ4Ó6×;Ñ;¸BÀÈAÁÐP[Ð\]ÑP^Ð`aÓb€GØ€Nr9   r¨   rZ   r[   c                 óà   — | j                   d   }| j                  d||d   z  ||d   z  |d   |d   |«      }|j                  dddddd«      j                  «       j                  d|||«      }|S )zÚ
    Args:
        windows: (num_windows*B, window_size, window_size, C)
        window_size (int): Window size
        H (int): Height of image
        W (int): Width of image
    Returns:
        x: (B, H, W, C)
    rs   r   r   r?   r)   rK   r¥   r¦   )r¨   r£   rZ   r[   rY   r:   s         r8   Úwindow_reverser«   (  s   € ð 	�‰�bÑ€AØ�‰�R˜˜k¨!™nÑ,¨a°;¸q±>Ñ.AÀ;ÈqÁ>ÐS^Ð_`ÑSaÐcdÓe€AØ	�	‰	�!�Q˜˜1˜a Ó#×.Ñ.Ó0×5Ñ5°b¸!¸QÀÓB€AØ€Hr9   c            	       óŒ   ‡ — e Zd ZU dZej
                  j                  e   ed<   	 	 	 d
de	de
e	e	f   de	defˆ fd„Zdefd	„Zˆ xZS )ÚWindowAttentiona§   Window based multi-head self attention (W-MSA) module with relative position bias.
    It supports both of shifted and non-shifted window.
    Args:
        dim (int): Number of input channels.
        window_size (tuple[int]): The height and width of the window.
        num_heads (int): Number of attention heads.
        qkv_bias (bool, optional):  If True, add a learnable bias to query, key, value. Default: True
    Ú
fused_attnr"   r£   ri   rj   c                 óB  •— ||dœ}t         ‰	| �  «        || _        || _        || _        ||z  }|dz  | _        t        «       | _        t        j                  ||dz  fd|i|¤Ž| _
        t        j                  ||fi |¤Ž| _        t        j                  d¬«      | _        y )Nr&   rr   r?   rm   rs   ru   )r.   r/   r"   r£   ri   r„   r   r®   r0   ro   rp   r2   ÚSoftmaxrz   )
r5   r"   r£   ri   rj   r'   r(   r6   rn   r7   s
            €r8   r/   zWindowAttention.__init__D  s—   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØ&ˆÔØ"ˆŒØ˜)Ñ#ˆØ Ñ%ˆŒ
Ü(Ó*ˆŒä—9‘9˜S #¨¡'Ñ?°Ð?¸BÑ?ˆŒÜ—I‘I˜c 3Ñ-¨"Ñ-ˆŒ	ä—z‘z bÔ)ˆ�r9   r:   c                 ó  — |j                   \  }}}| j                  |«      j                  ||d| j                  || j                  z  «      j	                  ddddd«      }|j                  d«      \  }}}| j                  rt        j                  |||«      }n:|| j                  z  }||j                  dd«      z  }	| j                  |	«      }	|	|z  }|j                  dd«      j                  |||«      }| j                  |«      }|S )Nr?   r)   r   r   rK   rt   rs   )rU   rp   rv   ri   rw   rx   r®   rV   Úscaled_dot_product_attentionr„   ry   rz   r2   )
r5   r:   ÚB_r|   rY   rp   r}   r#   r~   r   s
             r8   r>   zWindowAttention.forward[  sî   € Ø—7‘7‰ˆˆAˆqà�h‰h�q‹k×!Ñ! " a¨¨D¯N©N¸AÀÇÁÑ<OÓP×XÑXÐYZÐ\]Ð_`ÐbcÐefÓgˆØ—*‘*˜Q“-‰ˆˆ1ˆaà�?Š?Ü×.Ñ.¨q°!°QÓ7‰Aà�D—J‘J‘ˆAØ˜Ÿ™ B¨Ó+Ñ+ˆDØ—<‘< Ó%ˆDØ�q‘ˆAà�K‰K˜˜1Ó×%Ñ% b¨!¨QÓ/ˆØ�I‰I�a‹LˆØˆr9   )TNN)rA   rB   rC   r^   ÚtorchÚjitÚFinalrE   Ú__annotations__rD   r   r/   r	   r>   rF   rG   s   @r8   r­   r­   9  sg   ø… ñð —	‘	—‘ Ñ%Ó%ð "ØØñ*àð*ð ˜s C˜x™ð*ð ð	*ð
 õ*ð.˜÷ r9   r­   c                   óÊ   ‡ — e Zd ZdZddddej
                  ej                  ddddf
ded	ed
edede	dede
ej                     de
ej                     de	de	fˆ fd„Zdefd„Zˆ xZS )ÚSpatialBlocka<   Windows Block.
    Args:
        dim (int): Number of input channels.
        num_heads (int): Number of attention heads.
        window_size (int): Window size.
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.
        qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True
        drop_path (float, optional): Stochastic depth rate. Default: 0.0
        act_layer (nn.Module, optional): Activation layer. Default: nn.GELU
        norm_layer (nn.Module, optional): Normalization layer.  Default: nn.LayerNorm
    rP   rˆ   Tr‰   FNr"   ri   r£   rŠ   rj   r‹   rŒ   rN   r�   rŽ   c                 ó‚  •— ||dœ}t         ‰| �  «        || _        |	| _        || _        t        |«      | _        || _        t        d|d|
dœ|¤Ž| _	         ||fi |¤Ž| _
        t        || j                  f||dœ|¤Ž| _        |dkD  rt        |«      nt        j                  «       | _        t        d|d|
dœ|¤Ž| _        | j                  r` ||fi |¤Ž| _        t'        ||z  «      }t)        d|||dœ|¤Ž| _        |dkD  rt        |«      | _        y t        j                  «       | _        y d | _        d | _        d | _        y r‘   )r.   r/   r"   r�   ri   r   r£   rŠ   r!   r•   r–   r­   r   r   r0   r4   r—   r˜   r™   rD   r   rš   r›   )r5   r"   ri   r£   rŠ   rj   r‹   rŒ   rN   r�   rŽ   r'   r(   r6   Úmlp_hidden_dimr7   s                  €r8   r/   zSpatialBlock.__init__{  sN  ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØˆŒØ"ˆŒÜ$ [Ó1ˆÔØ"ˆŒäÐ? 3¨!°Ñ?¸BÑ?ˆŒ	Ù Ñ* rÑ*ˆŒ
Ü#ØØ×Ñð
ð  Øñ	
ð
 ñ
ˆŒ	ð 2;¸R²œ( 9Ô-ÄRÇ[Á[Ã]ˆŒäÐ? 3¨!°Ñ?¸BÑ?ˆŒ	Ø�8Š8Ù# CÑ.¨2Ñ.ˆDŒJÜ   y¡Ó1ˆNÜð ØØ .Ø#ñð ñ	ˆDŒHð 6?À²^œh yÓ1ˆD�OÌÏÉËˆD�OàˆDŒJØˆDŒHØ"ˆD�Or9   r:   c           	      ó4  — |j                   \  }}}}| j                  |«      j                  d«      j                  dd«      }| j	                  |«      }|j                  ||||«      }dx}}| j                  d   || j                  d   z  z
  | j                  d   z  }	| j                  d   || j                  d   z  z
  | j                  d   z  }
t        j                  |dd||	||
f«      }|j                   \  }}}}t        || j                  «      }|j                  d| j                  d   | j                  d   z  |«      }| j                  |«      }|j                  d| j                  d   | j                  d   |«      }t        || j                  ||«      }|d d …d |…d |…d d …f   j                  «       }|j                  |||z  |«      }|| j                  |«      z   }| j                  |j                  dd«      j                  ||||«      «      }| j                  �w|j                  d«      j                  dd«      }|| j!                  | j                  | j#                  |«      «      «      z   }|j                  dd«      j                  ||||«      }|S )Nr)   r   r   rs   )rU   r•   rž   ry   r–   rŸ   r£   rV   rW   r©   r   r«   r§   r—   r˜   rš   r›   r™   )r5   r:   rX   rY   rZ   r[   ÚshortcutÚpad_lÚpad_tr\   r]   Ú_ÚHpÚWpÚ	x_windowsÚattn_windowss                   r8   r>   zSpatialBlock.forward­  sy  € Ø—W‘W‰
ˆˆ1ˆa�à—9‘9˜Q“<×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆà�J‰J�xÓ ˆØ�F‰F�1�a˜˜AÓˆàÐˆ�Ø×!Ñ! !Ñ$ q¨4×+;Ñ+;¸AÑ+>Ñ'>Ñ>À$×BRÑBRÐSTÑBUÑUˆØ×!Ñ! !Ñ$ q¨4×+;Ñ+;¸AÑ+>Ñ'>Ñ>À$×BRÑBRÐSTÑBUÑUˆÜ�E‰E�!�a˜˜E 5¨%°Ð7Ó8ˆØ—w‘w‰ˆˆ2ˆr�1ä$ Q¨×(8Ñ(8Ó9ˆ	Ø—N‘N 2 t×'7Ñ'7¸Ñ':¸T×=MÑ=MÈaÑ=PÑ'PÐRSÓTˆ	ð —y‘y Ó+ˆð $×(Ñ(¨¨T×-=Ñ-=¸aÑ-@À$×BRÑBRÐSTÑBUÐWXÓYˆÜ˜<¨×)9Ñ)9¸2¸rÓBˆð Ša��!��R�a�Ršˆl‰O×&Ñ&Ó(ˆà�F‰F�1�a˜!‘e˜QÓˆØ�t—‘ qÓ)Ñ)ˆà�I‰I�a—k‘k ! QÓ'×,Ñ,¨Q°°1°aÓ8Ó9ˆà�8‰8ÐØ—	‘	˜!“×&Ñ& q¨!Ó,ˆAØ�D—O‘O D§H¡H¨T¯Z©Z¸«]Ó$;Ó<Ñ<ˆAØ—‘˜A˜qÓ!×&Ñ& q¨!¨Q°Ó2ˆAàˆr9   )rA   rB   rC   r^   r0   r3   r¡   rD   r¢   rE   r   r_   r/   r	   r>   rF   rG   s   @r8   r¹   r¹   n  s´   ø„ ñ
ð   !Ø!Ø!Ø!Ø)+¯©Ø*,¯,©,ØØ!ØØñ0#àð0#ð ð0#ð ð	0#ð
 ð0#ð ð0#ð ð0#ð ˜BŸI™I‘ð0#ð ˜RŸY™Y™ð0#ð ð0#ð õ0#ðd%˜÷ %r9   r¹   c            #       ó*  ‡ — e Zd Zddddddddeej
                  ddd	ddd
d
fdededededee	df   dedede
dedee
df   deej                     deej                     dededededef"ˆ fd„Zej                  j                   d!d„«       Zdefd „Zˆ xZS )"Ú
DaVitStager   T©ÚspatialÚchannelr?   rP   rˆ   )r   r   Fr)   NrL   rM   ÚdepthÚ
downsampleÚ
attn_types.ri   r£   rŠ   rj   Údrop_path_ratesrN   Únorm_layer_clr�   rŽ   Údown_kernel_sizeÚnamed_blocksÚchannel_attn_v2c                 óª  •— ||dœ}t         ‰| �  «        d| _        |rt        ||f||dœ|¤Ž| _        nt        j                  «       | _        	 g }t        |«      D ]Ú  }ddlm	} g }t        |«      D ]c  \  }}|dk(  r*|j                  dt        d||||	|
|   ||||dœ	|¤Žf«       Œ5|d	k(  sŒ;|j                  d
t        d||||	|
|   ||||dœ	|¤Žf«       Œe |r+|j                  t        j                   ||«      «      «       Œ©|j                  t        j                  |D �cg c]  }|d   ‘Œ	 c}Ž «       ŒÜ t        j                  |Ž | _        y c c}w )Nr&   F)r*   rN   r   )ÚOrderedDictrÈ   Úspatial_block)	r"   ri   rŠ   rj   r‹   rN   r�   rŽ   r£   rÉ   Úchannel_block)	r"   ri   rŠ   rj   r‹   rN   r�   rŽ   r�   r   r”   )r.   r/   Úgrad_checkpointingra   rË   r0   r4   ÚrangeÚcollectionsrÓ   Ú	enumerateÚappendr¹   r‡   Ú
SequentialÚblocks)r5   rL   rM   rÊ   rË   rÌ   ri   r£   rŠ   rj   rÍ   rN   rÎ   r�   rŽ   rÏ   rÐ   rÑ   r'   r(   r6   Ústage_blocksÚ	block_idxrÓ   Údual_attention_blockÚattn_idxÚ	attn_typeÚbr7   s                               €r8   r/   zDaVitStage.__init__Ö  s¥  ø€ ð, ¨Ñ/ˆÜ‰ÑÔà"'ˆÔñ Ü(¨°ÐtÐFVÐcmÑtÐqsÑtˆD�Oä Ÿk™k›mˆDŒOð	ð ˆÜ˜u›ò !	ZˆIÝ/Ø#%Ð Ü'0°Ó'<ò Ñ#�˜)Ø 	Ò)Ø(×/Ñ/°Ä,ð CØ#Ø"+Ø"+Ø!)Ø"1°)Ñ"<Ø#0ØØ 'Ø$/ñCð ñCð 1õ ð  )Ó+Ø(×/Ñ/°Ä,ð CØ#Ø"+Ø"+Ø!)Ø"1°)Ñ"<Ø#0ØØ 'Ø*ñCð ñCð 1õ ðñ6 Ø×#Ñ#¤B§M¡M±+Ð>RÓ2SÓ$TÕUà×#Ñ#¤B§M¡MÐBVÖ3W¸Q°A°a³DÒ3WÐ$XÕYðC!	ZôD —m‘m \Ð2ˆ�ùò 4Xs   Ä"Ec                 ó   — || _         y r<   )rÖ   )r5   Úenables     r8   Úset_grad_checkpointingz!DaVitStage.set_grad_checkpointing#  s
   € à"(ˆÕr9   r:   c                 óÎ   — | j                  |«      }| j                  r6t        j                  j	                  «       st        | j                  |«      }|S | j                  |«      }|S r<   )rË   rÖ   r´   rµ   Úis_scriptingr   rÜ   ©r5   r:   s     r8   r>   zDaVitStage.forward'  sS   € Ø�O‰O˜AÓˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.ˆAð ˆð —‘˜A“ˆAØˆr9   ©T)rA   rB   rC   r   r0   r¡   rD   rE   r   Ústrr¢   r   r_   r/   r´   rµ   Úignorerå   r	   r>   rF   rG   s   @r8   rÆ   rÆ   Õ  sG  ø„ ð
 Ø#Ø*@ØØ Ø!Ø!Ø17Ø*5Ø-/¯\©\ØØ!Ø$%Ø!&Ø$)ØØñ)K3àðK3ð ðK3ð ð	K3ð
 ðK3ð ˜c 3˜h™ðK3ð ðK3ð ðK3ð ðK3ð ðK3ð # 5¨# :Ñ.ðK3ð ˜RŸY™Y™ðK3ð   §	¡	™?ðK3ð ðK3ð ðK3ð  "ð!K3ð" ð#K3ð$ "õ%K3ðZ ‡Y�Y×Ñò)ó ð)ð˜÷ r9   rÆ   c            +       ó°  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-dedeedf   deedf   deedf   deded	ed
edededeedf   dedededededededededef*ˆ fd„Z	d„ Z
ej                  j                  d.d„«       Zej                  j                  d/d„«       Zej                  j                  dej"                  fd„«       Zd0dedee   fd„Z	 	 	 	 	 d1d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	 	 	 d2d 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 )3r   aè   DaViT
        A PyTorch implementation of `DaViT: Dual Attention Vision Transformers`  - https://arxiv.org/abs/2204.03645
        Supports arbitrary input sizes and pyramid feature extraction

    Args:
        in_chans (int): Number of input image channels. Default: 3
        num_classes (int): Number of classes for classification head. Default: 1000
        depths (tuple(int)): Number of blocks in each stage. Default: (1, 1, 3, 1)
        embed_dims (tuple(int)): Patch embedding dimension. Default: (96, 192, 384, 768)
        num_heads (tuple(int)): Number of attention heads in different layers. Default: (3, 6, 12, 24)
        window_size (int): Window size. Default: 7
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4
        qkv_bias (bool): If True, add a learnable bias to query, key, value. Default: True
        drop_path_rate (float): Stochastic depth rate. Default: 0.1
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    Úin_chansÚdepths.Ú
embed_dimsri   r£   rŠ   rj   rN   rÎ   Únorm_epsrÌ   r�   rŽ   rÏ   rÑ   rÐ   Ú	drop_rateÚdrop_path_rateÚnum_classesÚglobal_poolÚhead_norm_firstc                 ó  •— t         ‰ | �  «        ||dœ}t        |«      }|t        |«      cxk(  rt        |«      k(  sJ ‚ J ‚t        t	        |«      |
¬«      }t        t	        |	«      |
¬«      }	|| _        || _        |d   x| _        | _        || _	        d| _
        g | _        t        ||d   fd|i|¤Ž| _        |d   }t        ||d¬«      }g }t        |«      D ]n  }||   }t!        ||f||   |dkD  |||   |||||   ||	|||||d	œ|¤Ž}|}|j#                  |«       | xj                  t%        |d
|d
z   z  d|› �¬«      gz  c_        Œp t'        j(                  |Ž | _        |rB || j                  fi |¤Ž| _        t/        | j                  |f|| j                  dœ|¤Ž| _        nCt'        j2                  «       | _        t5        | j                  |f|| j                  |dœ|¤Ž| _        | j7                  | j8                  «       y )Nr&   )Úepsrs   Fr   rN   T)Ú	stagewise)rÊ   rË   rÌ   ri   r£   rŠ   rj   rÍ   rN   rÎ   r�   rŽ   rÏ   rÑ   rÐ   r)   zstages.)Únum_chsÚ	reductionÚmodule)Ú	pool_typerñ   )rü   rñ   rN   )r.   r/   Úlenr   r   ró   rí   Únum_featuresÚhead_hidden_sizerñ   rÖ   Úfeature_inforI   Ústemr   r×   rÆ   rÚ   Údictr0   rÛ   ÚstagesÚnorm_prer   Úheadr4   r   ÚapplyÚ_init_weights)!r5   rí   rî   rï   ri   r£   rŠ   rj   rN   rÎ   rð   rÌ   r�   rŽ   rÏ   rÑ   rÐ   rñ   rò   ró   rô   rõ   r'   r(   r6   Ú
num_stagesrL   Údprr  ÚirM   Ústager7   s!                                   €r8   r/   zDaVit.__init__B  sQ  ø€ ô4 	‰ÑÔØ¨Ñ/ˆÜ˜“_ˆ
ØœS ›^Ô:¬s°6«{Ò:Ð:Ñ:Ð:Ð:Üœ^¨JÓ7¸XÔFˆ
Ü¤¨}Ó =À8ÔLˆØ&ˆÔØ ˆŒØ4>¸r±NÐBˆÔ˜DÔ1Ø"ˆŒØ"'ˆÔØˆÔä˜ :¨a¡=ÑN¸ZÐNÈ2ÑNˆŒ	Ø˜A‘ˆä'¨¸È$ÔOˆØˆÜ�zÓ"ò 	cˆAØ  ‘mˆGÜØØðð ˜Q‘iØ˜q™5Ø%Ø# A™,Ø'Ø#Ø!Ø # A¡Ø%Ø+ØØØ!1Ø /Ø)ñ#ð$ ñ%ˆEð( ˆFØ�M‰M˜%Ô Ø×Ò¤$¨wÀ!ÀaÈÁcÁ(ÐU\Ð]^Ð\_ÐS`Ô"aÐ!bÑbÖð1	cô4 —m‘m VÐ,ˆŒñ
 Ù& t×'8Ñ'8Ñ?¸BÑ?ˆDŒMÜ&Ø×!Ñ!Øðð &ØŸ.™.ñ	ð
 ñˆD�Iô ŸK™K›MˆDŒMÜ-Ø×!Ñ!Øðð &ØŸ.™.Ø%ñð ñˆDŒIð 	�
‰
�4×%Ñ%Õ&r9   c                 ó  — t        |t        j                  «      rjt        |j                  d¬«       t        |t        j                  «      r8|j
                  �+t        j                  j                  |j
                  d«       y y y y )Ng{®Gáz”?)Ústdr   )Ú
isinstancer0   ro   r   Úweightrm   ÚinitÚ	constant_)r5   Úms     r8   r  zDaVit._init_weights¢  sZ   € Ü�aœŸ™Ô#Ü˜!Ÿ(™(¨Õ,Ü˜!œRŸY™YÔ'¨A¯F©FÐ,>Ü—‘×!Ñ! !§&¡&¨!Õ,ð -?Ð'ð $r9   c                 ó2   — t        d|rd¬«      S g d¢¬«      S )Nz^stemz^stages\.(\d+)))z^stages\.(\d+).downsample)r   )z^stages\.(\d+)\.blocks\.(\d+)N)z	^norm_pre)iŸ† )r  rÜ   )r  )r5   Úcoarses     r8   Úgroup_matcherzDaVit.group_matcher¨  s'   € äØÙ(.Ð$ô
ð 	
ò5ô
ð 	
r9   c                 óX   — || _         | j                  D ]  }|j                  |¬«       Œ y )N)rä   )rÖ   r  rå   )r5   rä   r  s      r8   rå   zDaVit.set_grad_checkpointing³  s.   € à"(ˆÔØ—[‘[ò 	8ˆEØ×(Ñ(°Ð(Õ7ñ	8r9   Úreturnc                 ó.   — | j                   j                  S r<   )r  Úfc)r5   s    r8   Úget_classifierzDaVit.get_classifier¹  s   € à�y‰y�|‰|Ðr9   c                 óJ   — || _         | j                  j                  ||«       y r<   )ró   r  Úreset)r5   ró   rô   s      r8   Úreset_classifierzDaVit.reset_classifier½  s   € Ø&ˆÔØ�	‰	�‰˜ [Õ1r9   r:   ÚindicesrS   Ú
stop_earlyÚ
output_fmtÚintermediates_onlyc                 ór  — |dv sJ d«       ‚g }t        t        | j                  «      |«      \  }}	| j                  |«      }t        | j                  «      dz
  }
t        j
                  j                  «       s|s| j                  }n| j                  d|	dz    }t        |«      D ]u  \  }}| j                  r+t        j
                  j                  «       st        ||«      }n ||«      }||v sŒJ|r||
k(  r| j                  |«      }n|}|j                  |«       Œw |r|S |
k(  r| j                  |«      }||fS )aï   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )ÚNCHWzOutput shape must be NCHW.r   N)r   rý   r  r  r´   rµ   rç   rÙ   rÖ   r   r  rÚ   )r5   r:   r  rS   r  r   r!  ÚintermediatesÚtake_indicesÚ	max_indexÚlast_idxr  Úfeat_idxr  Úx_inters                  r8   Úforward_intermediateszDaVit.forward_intermediatesÁ  s,  € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6´s¸4¿;¹;Ó7GÈÓ"QÑˆ�ið �I‰I�a‹LˆÜ�t—{‘{Ó# aÑ'ˆÜ�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )¨a¡-Ð0ˆFä(¨Ó0ò 
	.‰OˆH�eØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ˜u aÓ(‘á˜!“H�Ø˜<Ò'Ù˜H¨Ò0Ø"Ÿm™m¨AÓ.‘Gà�GØ×$Ñ$ WÕ-ð
	.ñ Ø Ð à�xÒØ—‘˜aÓ ˆAà�-ÐÐr9   Ú
prune_normÚ
prune_headc                 óÖ   — t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |rt        j                  «       | _        |r| j                  dd«       |S )z@ Prune layers not required for specified intermediates.
        Nr   r   Ú )r   rý   r  r0   r4   r  r  )r5   r  r+  r,  r%  r&  s         r8   Úprune_intermediate_layerszDaVit.prune_intermediate_layersö  s]   € ô #7´s¸4¿;¹;Ó7GÈÓ"QÑˆ�iØ—k‘k . 9¨q¡=Ð1ˆŒÙÜŸK™K›MˆDŒMÙØ×!Ñ! ! RÔ(ØÐr9   c                 óî   — | j                  |«      }| j                  r5t        j                  j	                  «       st        | j                  |«      }n| j                  |«      }| j                  |«      }|S r<   )r  rÖ   r´   rµ   rç   r   r  r  rè   s     r8   Úforward_featureszDaVit.forward_features  sW   € Ø�I‰I�a‹LˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.‰Aà—‘˜A“ˆAØ�M‰M˜!ÓˆØˆr9   Ú
pre_logitsc                 óN   — |r| j                  |d¬«      S | j                  |«      S )NT)r2  )r  )r5   r:   r2  s      r8   Úforward_headzDaVit.forward_head  s$   € Ù0:ˆt�y‰y˜ tˆyÓ,ÐLÀÇ	Á	È!ÃÐLr9   c                 óJ   — | j                  |«      }| j                  |«      }|S r<   )r1  r4  rè   s     r8   r>   zDaVit.forward  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr9   )r?   ©r   r   r?   r   ©rJ   éÀ   é€  é   ©r?   é   é   é   rP   rK   TÚlayernorm2dÚ	layernormgñhãˆµøä>rÇ   TFr)   FFr‰   r‰   éè  ÚavgFNN©Fré   r<   )NFFr#  F)r   FT)rA   rB   rC   r^   rD   r   r¢   rE   rê   r/   r  r´   rµ   rë   r  rå   r0   r_   r  r   r  r	   r   r   r*  r/  r1  r4  r>   rF   rG   s   @r8   r   r   0  sÈ  ø„ ñð& Ø&2Ø*=Ø)7Ø Ø Ø!Ø+Ø!,Ø"Ø*@ØØ!Ø$%Ø$)Ø!&Ø!Ø$&Ø#Ø$Ø$)ØØñ1^'àð^'ð ˜#˜s˜(‘Oð^'ð ˜c 3˜h™ð	^'ð
 ˜S #˜X‘ð^'ð ð^'ð ð^'ð ð^'ð ð^'ð ð^'ð ð^'ð ˜c 3˜h™ð^'ð ð^'ð ð^'ð "ð^'ð  "ð!^'ð" ð#^'ð$ ð%^'ð& "ð'^'ð( ð)^'ð* ð+^'ð, "õ-^'ò@-ð ‡Y�Y×Ñò
ó ð
ð ‡Y�Y×Ñò8ó ð8ð
 ‡Y�Y×Ñð §	¡	ò ó ðñ2¨Cð 2¸hÀs¹mó 2ð 8<ØØ$Ø$Ø',ñ3 à�|‰|ð3 ð ˜e C¨¨c© NÑ3Ñ4ð3 ð ð	3 ð
 ð3 ð ð3 ð !%ð3 ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó3 ðn ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	ò ñM¨$ó Mör9   c                 óN  — dd l }i }| j                  «       D �]
  \  }}|j                  |«      r|j                  |d«      }nŒ,|j	                  dd|«      }|j	                  dd|«      }|j                  dd«      }|j                  d	d
«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|||<   �Œ |S )Nr   r.  zconvs.([0-9]+)ústages.\1.downsamplezblocks.([0-9]+)ústages.\1.blocksúdownsample.projúdownsample.convústages.0.downsampler  zwindow_attn.norm.znorm1.zwindow_attn.fn.zattn.zchannel_attn.norm.zchannel_attn.fn.z	ffn.norm.znorm2.zffn.fn.net.zmlp.zconv1.fn.dwz	cpe1.projzconv2.fn.dwz	cpe2.proj)ÚreÚitemsÚ
startswithÚreplaceÚsub)Ú
state_dictÚmodelÚprefixrJ  Úout_dictr#   r~   s          r8   Ú_convert_florence2rS    s&  € ÛØ€Hà× Ñ Ó"ó ‰ˆˆ1Ø�<‰<˜ÔØ—	‘	˜& "Ó%‰AàØ�F‰FÐ$Ð&=¸qÓAˆØ�F‰FÐ%Ð':¸AÓ>ˆØ�I‰IÐ'Ð):Ó;ˆØ�I‰IÐ+¨VÓ4ˆð �I‰IÐ)¨8Ó4ˆØ�I‰IÐ'¨Ó1ˆØ�I‰IÐ*¨HÓ5ˆØ�I‰IÐ(¨'Ó2ˆØ�I‰I�k 8Ó,ˆØ�I‰I�m VÓ,ˆØ�I‰I�m [Ó1ˆØ�I‰I�m [Ó1ˆØˆ�‹ð'ð* €Or9   c                 ó®  — d| v r| S d| v r| d   } d| v rt        | |«      S ddl}i }| j                  «       D ]œ  \  }}|j                  dd|«      }|j                  dd	|«      }|j	                  d
d«      }|j	                  dd«      }|j	                  dd«      }|j	                  dd«      }|j	                  dd«      }|j	                  dd«      }|||<   Œž |S )z  Remap MSFT checkpoints -> timm zhead.fc.weightrO  z vision_tower.convs.0.proj.weightr   Nzpatch_embeds.([0-9]+)rE  zmain_blocks.([0-9]+)rF  rG  rH  rI  r  zhead.zhead.fc.znorms.z
head.norm.zcpe.0r•   zcpe.1r˜   )rS  rJ  rK  rN  rM  )rO  rP  rJ  rR  r#   r~   s         r8   Úcheckpoint_filter_fnrU  4  sö   € à˜:Ñ%ØÐà�zÑ!Ø Ñ-ˆ
à)¨ZÑ7Ü! *¨eÓ4Ð4ãØ€HØ× Ñ Ó"ò 	‰ˆˆ1Ø�F‰FÐ+Ð-DÀaÓHˆØ�F‰FÐ*Ð,?ÀÓCˆØ�I‰IÐ'Ð):Ó;ˆØ�I‰IÐ+¨VÓ4ˆØ�I‰I�g˜zÓ*ˆØ�I‰I�h Ó-ˆØ�I‰I�g˜vÓ&ˆØ�I‰I�g˜vÓ&ˆØˆ�Šð	ð €Or9   c           	      ó  — t        d„ t        |j                  dd«      «      D «       «      }|j                  d|«      }|j                  dd«      }| j	                  d«      rd}t        t        | |ft        t        d|¬	«      |d
œ|¤Ž}|S )Nc              3   ó&   K  — | ]	  \  }}|–— Œ y ­wr<   r”   )Ú.0r
  rÀ   s      r8   ú	<genexpr>z _create_davit.<locals>.<genexpr>O  s   è ø€ Ò\¡d a¨¤Ñ\ùs   ‚rî   r6  Úout_indicesÚpretrained_strictTÚ_flF)Úflatten_sequentialrZ  )Úpretrained_filter_fnÚfeature_cfgr[  )	ÚtuplerÙ   ÚgetÚpopÚendswithr   r   rU  r  )ÚvariantÚ
pretrainedÚkwargsÚdefault_out_indicesrZ  ÚstrictrP  s          r8   Ú_create_davitri  N  s“   € ÜÑ\¬i¸¿
¹
À8È\Ó8ZÓ.[Ô\Ó\ÐØ—*‘*˜]Ð,?Ó@€Kà�Z‰ZÐ+¨TÓ2€FØ×Ñ˜Ôàˆä ÜØØðô 2Ü¨D¸kÔJØ ñð ñ€Eð €Lr9   c                 ó2   — | dddddt         t        dddd	œ|¥S )
NrA  )r?   éà   rk  )rP   rP   gffffffî?Úbicubicz	stem.convzhead.fcz
apache-2.0)Úurlró   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanr  Ú
first_convÚ
classifierÚlicenser
   )rm  rf  s     r8   Ú_cfgrv  c  s3   € àØ¨=ÀvØ¨9Ü%Ô.BØ!°Øñð ðð r9   ztimm/)Ú	hf_hub_idzmicrosoft/Florence-2-base)r?   r:  r:  )rw  ró   rn  zmicrosoft/Florence-2-large)zdavit_tiny.msft_in1kzdavit_small.msft_in1kzdavit_base.msft_in1kÚdavit_largeÚ
davit_hugeÚdavit_giantzdavit_base_fl.msft_florence2zdavit_huge_fl.msft_florence2r  c           	      óL   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nr6  r7  r;  ©rî   rï   ri   re  )Ú
davit_tiny©r  ri  ©re  rf  Ú
model_argss      r8   r}  r}  „  s0   € ä˜\Ð6IÐUcÔd€JÜÑ[°*Ð[ÄÀZÑ@ZÐSYÑ@ZÑ[Ð[r9   c           	      óL   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N©r   r   é	   r   r7  r;  r|  re  )Údavit_smallr~  r  s      r8   r„  r„  Š  s0   € ä˜\Ð6IÐUcÔd€JÜÑ\°:Ð\ÄÀjÑA[ÐTZÑA[Ñ\Ð\r9   c           	      óL   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nr‚  ©é€   é   é   é   ©rK   r€   é   é    r|  re  )Ú
davit_baser~  r  s      r8   rŽ  rŽ  �  s0   € ä˜\Ð6KÐWeÔf€JÜÑ[°*Ð[ÄÀZÑ@ZÐSYÑ@ZÑ[Ð[r9   c           	      óL   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nr‚  )r8  r9  r:  é   )r<  r=  r>  é0   r|  re  )rx  r~  r  s      r8   rx  rx  –  s0   € ä˜\Ð6KÐWfÔg€JÜÑ\°:Ð\ÄÀjÑA[ÐTZÑA[Ñ\Ð\r9   c           	      óL   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nr‚  ©rˆ  r‰  rŠ  i   ©r€   rŒ  r�  é@   r|  re  )ry  r~  r  s      r8   ry  ry  œ  s0   € ä˜\Ð6LÐXgÔh€JÜÑ[°*Ð[ÄÀZÑ@ZÐSYÑ@ZÑ[Ð[r9   c           	      óL   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N)r   r   r=  r?   )r9  r:  r�  i   )r=  r>  r‘  rJ   r|  re  )rz  r~  r  s      r8   rz  rz  ¢  s0   € ä˜]Ð7MÐYiÔj€JÜÑ\°:Ð\ÄÀjÑA[ÐTZÑA[Ñ\Ð\r9   c           	      óT   — t        ddddddd¬«      }t        d	d| it        |fi |¤Ž¤ŽS )
Nr‚  r†  r‹  r=  r?   T©rî   rï   ri   r£   rÏ   rÑ   rÐ   re  )Údavit_base_flr~  r  s      r8   r™  r™  ©  s=   € äØÐ(=ÈØ¨¸DÈtô€Jô Ñ^°ZÐ^Ä4È
ÑC]ÐV\ÑC]Ñ^Ð^r9   c           	      óT   — t        ddddddd¬«      }t        d	d| it        |fi |¤Ž¤ŽS )
Nr‚  r“  r”  r=  r?   Tr˜  re  )Údavit_huge_flr~  r  s      r8   r›  r›  ²  s?   € ô ØÐ(>È/Ø¨¸DÈtô€Jô Ñ^°ZÐ^Ä4È
ÑC]ÐV\ÑC]Ñ^Ð^r9   )zvision_tower.rC  )r.  )Fr^   Ú	functoolsr   Útypingr   r   r   r   r   r´   Útorch.nnr0   Útorch.nn.functionalÚ
functionalrV   r	   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_features_fxr   Ú_manipulater   r   Ú	_registryr   r   Ú__all__r_   r!   rI   ra   rh   r‚   r‡   rD   r©   r«   r­   r¹   rÆ   r   rS  rU  ri  rv  Údefault_cfgsr}  r„  rŽ  rx  ry  rz  r™  r›  r”   r9   r8   ú<module>rª     s»  ðñ	õ ß 5Õ 5ã Ý ß Ð Ý ç A÷ H÷  Hó  Hß =Ý *Ý +Ý 3ß 3ß <àˆ)€ô�—‘ô ô:&ˆ2�9‰9ô &ôR#�—‘ô #ôL$˜Ÿ™ô $ôP�r—y‘yô ôD?�2—9‘9ô ?ðD˜ð ¨U°3¸°8©_ó ð ð˜Fð °°s¸C°x±ð ÀSð ÈSò ó ðô 2�b—i‘iô 2ôjd�2—9‘9ô dôNX�—‘ô XôveˆB�I‰Iô eóPò8ó4ó*	ñ %á Øôá!Øôá Øôá“6Ù“&Ù“6Ù$(Ø-Ø -ô%1ñ %)Ø.Ø -ô%1ñ&ó €ð( ñ\¨eò \ó ð\ð
 ñ]¨uò ]ó ð]ð
 ñ\¨eò \ó ð\ð
 ñ]¨uò ]ó ð]ð
 ñ\¨eò \ó ð\ð
 ñ]¨uò ]ó ð]ð ñ_°ò _ó ð_ð ñ_°ò _ó ñ_r9   