Ë
    ëÓ^j…#  ã            	       óª   — d Z ddlZddlmc mZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ  e«       ZdgZ G d	„ de«      Zdd
edededefd„Zdd„Zy)zBackbone modules.é    N)ÚBackboneBase)ÚDinoV2)ÚMultiScaleProjector)Ú
get_logger)ÚNestedTensorÚBackbonec            #       óØ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddededededededed	ed
eeef   dedededededededef"ˆ fd„Z	d„ Z
defd„Zdej                  fd„Zddefd„Zˆ xZS )r   z	backbone.ÚnameÚpretrained_encoderÚwindow_block_indexesÚout_feature_indexesÚprojector_scaleÚuse_cls_tokenÚfreeze_encoderÚ
layer_normÚtarget_shapeÚrms_normÚbackbone_loraÚgradient_checkpointingÚload_dinov2_weightsÚ
patch_sizeÚnum_windowsÚpositional_encoding_sizeÚdual_projectorc                 ó   •— t         ‰| �  «        |j                  d«      }|d   dk(  sJ ‚d}d|v rd}|j                  d«       d}d|v rd}|j                  d«       t	        |«      dk(  sJ d	«       ‚t        |d
   ||||||||||¬«      | _        |	r&| j                  j                  «       D ]	  }d|_        Œ || _	        t	        | j                  «      dkD  sJ ‚t        | j                  «      | j                  k(  sJ d«       ‚t        dddd¬«      }| j                  D �cg c]  }||   ‘Œ	 }}t        | j                  j                  |||
|¬«      | _        |r$t        | j                  j                  |||
|¬«      nd | _        d| _        y c c}w )NÚ_r   Údinov2FÚ	registersTÚwindowedé   zTname should be dinov2, then either registers, windowed, both, or none, then the sizeéÿÿÿÿ)Úsizer   ÚshapeÚuse_registersÚuse_windowed_attnr   r   r   r   r   Údrop_path_ratez<only support projector scale P3/P4/P5/P6 in ascending order.g       @ç      ð?g      à?g      Ð?)ÚP3ÚP4ÚP5ÚP6)Úin_channelsÚout_channelsÚscale_factorsr   r   )ÚsuperÚ__init__ÚsplitÚremoveÚlenr   ÚencoderÚ
parametersÚrequires_gradr   ÚsortedÚdictr   Ú_out_feature_channelsÚ	projectorÚcross_attn_projectorÚ_export)Úselfr
   r   r   Ú	drop_pathr-   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú
name_partsr$   r%   ÚparamÚlevel2scalefactorÚlvlr.   Ú	__class__s                              €új/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/models/backbone/backbone.pyr0   zBackbone.__init__"   sÒ  ø€ ô, 	‰ÑÔð —Z‘Z “_ˆ
Ø˜!‰} Ò(Ð(Ð(àˆØ˜*Ñ$Ø ˆMØ×Ñ˜kÔ*Ø!ÐØ˜Ñ#Ø $ÐØ×Ñ˜jÔ)Ü�:‹ !Ò#ð 	
Øbó	
Ð#ô Ø˜B‘Ø 3ØØ'Ø/Ø#9Ø 3Ø!Ø#Ø%=Ø$ô
ˆŒñ ØŸ™×0Ñ0Ó2ò ,�Ø&+�Õ#ð,ð  /ˆÔÜ�4×'Ñ'Ó(¨1Ò,Ð,Ð,ä�d×*Ñ*Ó+¨t×/CÑ/CÒCð 	
ØJó	
ÐCô ! C¨C°C¸DÔAÐØ;?×;OÑ;OÖP°CÐ*¨3Ó/ÐPˆÐPä,ØŸ™×:Ñ:Ø%Ø'Ø!Øô
ˆŒñ ô  Ø ŸL™L×>Ñ>Ø)Ø+Ø%Ø!õð ð 	Ô!ð ˆ�ùò+ Qs   ÄFc                 ó¶  — d| _         | j                  | _        | j                  | _        t	        | j
                  d«      sy 	 ddlm} t        | j
                  |«      r5t        j                  d«       | j
                  j                  «       | _        y y # t        $ r t        j                  d«       Y y t        $ r}t        j                  d|«       ‚ d }~ww xY w)NTÚmerge_and_unloadr   )Ú	PeftModelzBpeft is not installed; skipping LoRA weight merging during export.z6Failed to import PeftModel from peft during export: %sz"Merging and unloading LoRA weights)r<   ÚforwardÚ_forward_originÚforward_exportÚhasattrr4   ÚpeftrG   ÚModuleNotFoundErrorÚloggerÚwarningÚImportErrorÚ
isinstanceÚinforF   )r=   rG   Úexcs      rD   ÚexportzBackbone.export|   s¯   € ØˆŒØ#Ÿ|™|ˆÔØ×*Ñ*ˆŒä�t—|‘|Ð%7Ô8Øð	Ý&ô �d—l‘l IÔ.Ü�K‰KÐ<Ô=ØŸ<™<×8Ñ8Ó:ˆD�Lð /øô #ò 	Ü�N‰NÐ_Ô`ÙÜò 	Ü�N‰NÐSÐUXÔYØûð	ús   ÁB ÂCÂ4CÂ<CÃCÚtensor_listc                 óÄ  — | j                  |j                  «      }| j                  |«      }g }|D ]‚  }|j                  }|€J ‚t	        j
                  |d   j                  «       |j                  dd ¬«      j                  t        j                  «      d   }|j                  t        ||«      «       Œ„ d}| j                  �šg }| j                  |«      }	|	D ]‚  }|j                  }|€J ‚t	        j
                  |d   j                  «       |j                  dd ¬«      j                  t        j                  «      d   }|j                  t        ||«      «       Œ„ ||fS )Ú Néþÿÿÿ)r"   r   )r4   Útensorsr:   ÚmaskÚFÚinterpolateÚfloatr#   ÚtoÚtorchÚboolÚappendr   r;   )
r=   rU   Ú	raw_featsÚfeatsÚoutÚfeatÚmrZ   Úcross_attn_outÚcross_attn_featss
             rD   rH   zBackbone.forward‘   sE  € ð —L‘L ×!4Ñ!4Ó5ˆ	Ø—‘˜yÓ)ˆàˆØò 	1ˆDØ× Ñ ˆAØ�=Ð �=Ü—=‘=  4¡§¡£°t·z±zÀ"À#°ÔG×JÑJÌ5Ï:É:ÓVÐWXÑYˆDØ�J‰J”| D¨$Ó/Õ0ð		1ð ˆØ×$Ñ$Ð0ØˆNØ#×8Ñ8¸ÓCÐØ(ò @�Ø×$Ñ$�Ø�}Ð$�}Ü—}‘} Q t¡W§]¡]£_¸4¿:¹:ÀbÀc¸?ÔK×NÑNÌuÏzÉzÓZÐ[\Ñ]�Ø×%Ñ%¤l°4¸Ó&>Õ?ð	@ð �NÐ"Ð"ó    rY   c                 ó~  — | j                  |«      }| j                  |«      }g }g }|D ]f  }|j                  \  }}}	}
|j                  t	        j
                  ||	|
ft        j                  |j                  ¬«      «       |j                  |«       Œh d }| j                  �t        | j                  |«      «      }|||fS )N)ÚdtypeÚdevice)
r4   r:   r#   ra   r_   Úzerosr`   rl   r;   Úlist)r=   rY   rb   rc   Ú	out_featsÚ	out_masksre   Úbr   ÚhÚwrh   s               rD   rJ   zBackbone.forward_exportª   s·   € Ø—L‘L Ó)ˆ	Ø—‘˜yÓ)ˆØˆ	Øˆ	Øò 	#ˆDàŸ™‰JˆAˆq�!�QØ×ÑœUŸ[™[¨!¨Q°¨¼%¿*¹*ÈTÏ[É[ÔYÔZØ×Ñ˜TÕ"ð		#ð  ÐØ×$Ñ$Ð0Ü# D×$=Ñ$=¸iÓ$HÓIÐà˜)Ð%5Ð5Ð5ri   Úprefixc                 óB  — |j                   d   dz   }d}i }| j                  «       D ]u  \  }}|dz   |z   }||v sŒ|j                  sŒ |j                  t	        ||j
                  |¬«      z  |j                  dz  z  }|j                  t        |«      z  }	|||	dœ||<   Œw |S )Nr!   é   zbackbone.0.encoderú.)Úlr_decay_rateÚ
num_layersr    )ÚparamsÚlrÚweight_decay)	r   Únamed_parametersr6   Ú
lr_encoderÚget_dinov2_lr_decay_rateÚlr_vit_layer_decayÚlr_component_decayr|   Úget_dinov2_weight_decay_rate)
r=   Úargsrt   ry   Úbackbone_keyÚnamed_param_lr_pairsÚnÚpr{   Úwds
             rD   Úget_named_param_lr_pairsz!Backbone.get_named_param_lr_pairs»   sÍ   € Ø×-Ñ-¨bÑ1°AÑ5ˆ
Ø+ˆØ!ÐØ×)Ñ)Ó+ò 	‰DˆAˆqØ˜‘˜qÑ ˆAØ˜qÒ  Q§_£_à—O‘OÜ.ØØ&*×&=Ñ&=Ø#-ôñð ×-Ñ-¨qÑ0ñ1ð ð ×&Ñ&Ô)EÀaÓ)HÑH�àØØ$&ñ+Ð$ QÒ'ð	ð$ $Ð#ri   )NNç        é   NNFFF)é€  rŒ   FFFTé   é   r   F)z
backbone.0)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrrn   r`   ÚtupleÚintr0   rT   r   rH   r_   ÚTensorrJ   r‰   Ú__classcell__)rC   s   @rD   r   r      s3  ø„ Ùð
 #'Ø%)ØØØ$(Ø $Ø#Ø$Ø Ø(2ØØ#Ø',Ø$(ØØØ()Ø$ñ)XàðXð  ðXð #ð	Xð "ðXð ðXð ðXð ðXð ðXð ˜C ˜H‘oðXð ðXð ðXð !%ðXð  "ð!Xð" ð#Xð$ ð%Xð& #&ð'Xð( õ)Xòt;ð*# <ó #ð26 e§l¡ló 6ñ"$°S÷ $ri   r
   rx   ry   Úreturnc                 óÆ   — |dz   }| j                  d«      rAd| v rd}n:d| v r6d| vr2t        | | j                  d«      d j                  d«      d	   «      dz   }||dz   |z
  z  S )
zñCalculate lr decay rate for different ViT blocks.

    Args:
        name: Parameter name.
        lr_decay_rate: Base lr decay rate.
        num_layers: Number of ViT blocks.

    Returns:
        Lr decay rate for the given parameter.
    rv   ÚbackboneÚ
embeddingsr   z.layer.z
.residual.Nrw   r    )Ú
startswithr•   Úfindr1   )r
   rx   ry   Úlayer_ids       rD   r   r   Ô   sy   € ð ˜A‰~€HØ‡��zÔ"Ø˜4ÑØ‰HØ˜$Ñ <°tÑ#;Ü˜4 §	¡	¨)Ó 4Ð 6Ð7×=Ñ=¸cÓBÀ1ÑEÓFÈÑJˆHØ˜Z¨!™^¨hÑ6Ñ7Ð7ri   c                 ó:   — d| v sd| v sd| v sd| v sd| v sd| v rd}|S )NÚgammaÚ	pos_embedÚrel_posÚbiasÚnormr›   rŠ   © )r
   Úweight_decay_rates     rD   r‚   r‚   è   s;   € à	�D‰Ø˜4ÑØ˜ÑØ�d‰NØ�d‰NØ˜DÑ àÐØÐri   )r'   é   )r'   )r’   r_   Útorch.nn.functionalÚnnÚ
functionalr[   Úrfdetr.models.backbone.baser   Úrfdetr.models.backbone.dinov2r   Ú rfdetr.models.backbone.projectorr   Úrfdetr.utilities.loggerr   Úrfdetr.utilities.tensorsr   rN   Ú__all__r   r“   r]   r•   r   r‚   r¥   ri   rD   ú<module>r±      sg   ðñ ã ß Ð å 4Ý 0Ý @Ý .Ý 1á	‹€àˆ,€ôr$ˆ|ô r$ñj8 3ð 8°uð 8ÐPSð 8Ð]bó 8ô(
ri   