Ë
    ëÓ^jÍ   ã                   ó¸  — d dl Z d dlZd dlZd dl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  e«       Zddddd	œZd
dddœZddddœZd„ Z G d„ dej,                  «      Zedk(  rl e«       Zej5                  «         ej6                  dddd«      Zej;                   ee«      «        ee«      D ]  Zej;                  ej>                  «       Œ yy)é    N)ÚAutoBackbone)Ú#WindowedDinov2WithRegistersBackboneÚ!WindowedDinov2WithRegistersConfig)Ú
get_loggeréÀ   i€  i   i   )ÚtinyÚsmallÚbaseÚlargezdinov2_small.jsonzdinov2_base.jsonzdinov2_large.json)r	   r
   r   z dinov2_with_registers_small.jsonzdinov2_with_registers_base.jsonz dinov2_with_registers_large.jsonc                 ó–  — |rt         nt        }t        j                  j	                  t        j                  j                  t        «      «      }t        j                  j                  |d«      }t        j                  j                  |||    «      }t        |d«      5 }t        j                  |«      }d d d «       |S # 1 sw Y   S xY w)NÚdinov2_configsÚr)Úsize_to_config_with_registersÚsize_to_configÚosÚpathÚdirnameÚabspathÚ__file__ÚjoinÚopenÚjsonÚload)ÚsizeÚuse_registersÚconfig_dictÚcurrent_dirÚconfigs_dirÚconfig_pathÚfÚdino_configs           úh/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/models/backbone/dinov2.pyÚ
get_configr#   -   sŽ   € Ù3@Õ/Än€KÜ—'‘'—/‘/¤"§'¡'§/¡/´(Ó";Ó<€KÜ—'‘'—,‘,˜{Ð,<Ó=€KÜ—'‘'—,‘,˜{¨K¸Ñ,=Ó>€KÜ	ˆk˜3Ó	ð # 1Ü—i‘i “lˆ÷#àÐ÷#àÐús   ÂB>Â>Cc                   óF   ‡ — e Zd Zdg d¢ddddddddd	fˆ fd
„	Zd„ Zd„ Zˆ xZS )ÚDinoV2)é€  r&   )é   é   é   é	   r
   TFé   r(   é%   ç        c           	      ót  •— t         ‰| �  «        |rd|› �nd|› �}|| _        || _        |	| _        |s[|rJ d«       ‚|sJ d«       ‚|dkD  rt
        j                  d«       t        j                  ||D �cg c]  }d|› �‘Œ	 c}d¬	«      | _	        nÿt        t        |d
   dz   «      «      }|j                  |«       t        |«      }t        ||«      }d|d<   |D �cg c]  }d|› �‘Œ	 c}|d<   ||d<   |
|z  }||d   k7  rt
        j                  d«       ||d<   d}|dk7  r t
        j                  d|› d�«       ||d<   d}|rt        di |¤|	||dœ¤Ž}nt        di |¤|	|d|dœ¤Ž}|rt!        j                  ||¬«      n
t!        |«      | _	        t"        |   gt%        |«      z  | _        d| _        y c c}w c c}w )Nzfacebook/dinov2-with-registers-zfacebook/dinov2-zBGradient checkpointing is not supported for non-windowed attentionzEUsing non-windowed attention requires loading dinov2 weights from hubr-   zcdrop_path_rate > 0.0 is not supported for non-windowed DinoV2 backbones. drop_path will be ignored.ÚstageF)Úout_featuresÚreturn_dictéÿÿÿÿé   r1   r0   Údrop_path_rateÚ
image_sizez´Using a different number of positional encodings than DINOv2, which means we're not loading DINOv2 backbone weights. This is not a problem if finetuning a pretrained RF-DETR model.r+   zUsing patch size z† instead of 14, which means we're not loading DINOv2 backbone weights. This is not a problem if finetuning a pretrained RF-DETR model.Ú
patch_size)Únum_windowsÚwindow_block_indexesÚgradient_checkpointingr   )r7   r8   Únum_register_tokensr9   )Úconfig© )ÚsuperÚ__init__Úshaper6   r7   ÚloggerÚwarningr   Úfrom_pretrainedÚencoderÚsetÚrangeÚdifference_updateÚlistr#   r   r   Úsize_to_widthÚlenÚ_out_feature_channelsÚ_export)Úselfr?   Úout_feature_indexesr   r   Úuse_windowed_attnr9   Úload_dinov2_weightsr6   r7   Úpositional_encoding_sizer4   ÚnameÚir8   r!   Úimplied_resolutionÚwindowed_dino_configÚ	__class__s                     €r"   r>   zDinoV2.__init__8   s:  ø€ ô 	‰ÑÔá;HÐ0°°Ñ7ÐP`ÐaeÐ`fÐNgˆàˆŒ
Ø$ˆŒØ&ˆÔñ !Ù-ÐsÐ/sÓsÐ-Ù&ÐoÐ(oÓoÐ&Ø Ò#Ü—‘ð2ôô (×7Ñ7ØØ3FÖG¨a  a SškÒGØ!ôˆD�Lô $'¤uÐ-@ÀÑ-DÀqÑ-HÓ'IÓ#JÐ Ø ×2Ñ2Ð3FÔGÜ#'Ð(<Ó#=Ð ä$ T¨=Ó9ˆKà).ˆK˜Ñ&Ø@SÖ*T¸1¨U°1°#ª;Ò*TˆK˜Ñ'Ø,:ˆKÐ(Ñ)à!9¸JÑ!FÐà! [°Ñ%>Ò>Ü—‘ð>ôð
 -?�˜LÑ)Ø&+Ð#à˜RÒÜ—‘Ø'¨
 |ð 4&ð &ôð
 -7�˜LÑ)Ø&+Ð#áÜ'Hñ (Ø!ð(à +Ø)=Ø+Aó	(Ñ$ô (Iñ (Ø!ð(à +Ø)=Ø()Ø+Aó(Ð$ñ 'ô	 4×CÑCØØ/õô
 9Ð9MÓNð ŒLô '4°DÑ&9Ð%:¼SÐATÓ=UÑ%UˆÔ"Øˆ�ùòw Hùò +Us   Á3F0
ÃF5c                 ód  ‡— | j                   ry d| _         | j                  }d„ }t        j                  «       5   || j                  j
                  j                  | j                  j                  j                  |d   |d   «      }d d d «       | j                  j
                  j                  Šˆfd„}t        j                  «      | j                  j
                  _        t        j                  || j                  j
                  «      | j                  j
                  _	        y # 1 sw Y   Œ xY w)NTc           	      ó@  — | j                   d   dz
  }| j                   d   }||z  }||z  }| d d …df   }| d d …dd …f   }|j                  dt        t        j                  |«      «      t        t        j                  |«      «      |«      }|j                  dddd«      }t        j                  |||fdd|j                  j                  dk7  ¬	«      }|j                  dddd«      j                  dd|«      }t        j                  |j                  d«      |fd¬
«      S )Nr3   r2   r   é   r'   ÚbicubicFÚmps)r   ÚmodeÚalign_cornersÚ	antialias)Údim)r?   ÚreshapeÚintÚmathÚsqrtÚpermuteÚFÚinterpolateÚdeviceÚtypeÚtorchÚcatÚ	unsqueeze)Úposition_embeddingsr6   ÚheightÚwidthÚnum_positionsr^   Úclass_pos_embedÚpatch_pos_embeds           r"   Ú"make_new_interpolated_pos_encodingz9DinoV2.export.<locals>.make_new_interpolated_pos_encoding�   s'  € à/×5Ñ5°aÑ8¸1Ñ<ˆMØ%×+Ñ+¨BÑ/ˆCØ˜zÑ)ˆFØ˜ZÑ'ˆEà1²!°Q°$Ñ7ˆOØ1²!°Q±R°%Ñ8ˆOð .×5Ñ5Ø”3”t—y‘y Ó/Ó0´#´d·i±iÀÓ6NÓ2OÐQTóˆOð .×5Ñ5°a¸¸A¸qÓAˆOô  Ÿm™mØØ˜e�_ØØ#Ø)×0Ñ0×5Ñ5¸Ñ>ôˆOð .×5Ñ5°a¸¸A¸qÓA×IÑIÈ!ÈRÐQTÓUˆOÜ—9‘9˜o×7Ñ7¸Ó:¸OÐLÐRSÔTÐTó    r   r3   c                 ó    •— |j                   d   dz
  }| j                  j                   d   dz
  }||k(  r||k(  r| j                  S  ‰|||«      S )Nr3   )r?   rk   )Úself_modÚ
embeddingsrl   rm   Únum_patchesrn   Úold_interpolate_pos_encodings         €r"   Únew_interpolate_pos_encodingz3DinoV2.export.<locals>.new_interpolate_pos_encodingÆ   s\   ø€ Ø$×*Ñ*¨1Ñ-°Ñ1ˆKØ$×8Ñ8×>Ñ>¸qÑAÀAÑEˆMØ˜mÒ+°¸%²Ø×3Ñ3Ð3Ù/°
¸FÀEÓJÐJrr   )rK   r?   rh   Úno_gradrC   ru   rk   r;   r6   Úinterpolate_pos_encodingÚnnÚ	ParameterÚtypesÚ
MethodType)rL   r?   rq   Únew_positionsrx   rw   s        @r"   ÚexportzDinoV2.export—   sè   ø€ Ø�<Š<ØØˆŒØ—
‘
ˆò	Uô> �]‰]‹_ñ 	Ù>Ø—‘×'Ñ'×;Ñ;Ø—‘×#Ñ#×.Ñ.Ø�a‘Ø�a‘ó	ˆM÷	ð (,§|¡|×'>Ñ'>×'WÑ'WÐ$ô	Kô 79·l±lÀ=Ó6Qˆ�‰×ÑÔ3Ü;@×;KÑ;KØ(¨$¯,©,×*AÑ*Aó<
ˆ�‰×ÑÕ8÷%	ð 	ús   ¹AD&Ä&D/c                 óô   — | j                   | j                  z  }|j                  d   |z  dk(  r|j                  d   |z  dk(  sJ d|› d|j                  › �«       ‚| j                  |«      }t	        |d   «      S )Nr'   r   rX   z1Backbone requires input shape to be divisible by z
, but got )r6   r7   r?   rC   rG   )rL   ÚxÚ
block_sizes      r"   ÚforwardzDinoV2.forwardÒ   s�   € Ø—_‘_ t×'7Ñ'7Ñ7ˆ
Ø�w‰w�q‰z˜JÑ&¨!Ò+°·±¸±
¸ZÑ0GÈ1Ò0Lð 	
Ø?À
¸|È:ÐVW×V]ÑV]ÐU^Ð_ó	
ÐLð �L‰L˜‹OˆÜ�A�a‘D‹zÐrr   )Ú__name__Ú
__module__Ú__qualname__r>   r€   r„   Ú__classcell__)rU   s   @r"   r%   r%   7   s8   ø„ ð Ú(ØØØØ$Ø ØØØ!#Øõ]ò~9
övrr   r%   Ú__main__r3   rX   r&   ) r   ra   r   r}   rh   Útorch.nnr{   Útorch.nn.functionalÚ
functionalrd   Útransformersr   Ú0rfdetr.models.backbone.dinov2_with_windowed_attnr   r   Úrfdetr.utilities.loggerr   r@   rH   r   r   r#   ÚModuler%   r…   Úmodelr€   Úrandnr‚   ÚinfoÚjr?   r<   rr   r"   ú<module>r•      sí   ðó Û Û 	Û ã Ý ß Ð Ý %÷õ /á	‹€ð ØØØñ	€ð !ØØ ñ€ð 0Ø-Ø/ñ!Ð òôaˆR�Y‰Yô aðH ˆzÒÙ‹H€EØ	‡L�L„NØˆ�‰�A�q˜#˜sÓ#€AØ
‡K�K‘�a“ÔÙ�1‹Xò ˆØ�‰�A—G‘GÕñð rr   