Ë
    ëÓ^jI  ã            	       óº   — d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZ  e«       Zddededed	efd
„Zddeded	efd„Zdedej$                  d	eeeef      fd„Zy)zFunctions to get params dict.é    )ÚAnyÚDictÚListÚcastN)ÚJoiner)Ú
get_loggerÚnameÚlr_decay_rateÚ
num_layersÚreturnc                 ó*  — |dz   }| j                  d«      rEd| v sd| v rd}n:d| v r6d| vr2t        | | j                  d«      d j                  d	«      d
   «      dz   }t        j                  dj                  | ||dz   |z
  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.
    é   Úbackbonez
.pos_embedz.patch_embedr   z.blocks.z
.residual.Nú.é   zname: {}, lr_decay: {})Ú
startswithÚintÚfindÚsplitÚloggerÚdebugÚformat)r	   r
   r   Úlayer_ids       úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/training/param_groups.pyÚget_vit_lr_decay_rater      sª   € ð ˜A‰~€HØ‡��zÔ"Ø˜4Ñ >°TÑ#9Ø‰HØ˜4Ñ L¸Ñ$<Ü˜4 §	¡	¨*Ó 5Ð 7Ð8×>Ñ>¸sÓCÀAÑFÓGÈ!ÑKˆHÜ
‡L�LÐ)×0Ñ0°°}ÈÐVWÉÐZbÑIbÑ7cÓdÔeØ˜Z¨!™^¨hÑ6Ñ7Ð7ó    Úweight_decay_ratec                 ó|   — d| v sd| v sd| v sd| v sd| v rd}t         j                  dj                  | |«      «       |S )zÛCalculate weight decay rate for different ViT parameters.

    Args:
        name: parameter name.
        weight_decay_rate: base weight decay rate.

    Returns:
        weight decay rate for the given parameter.
    ÚgammaÚ	pos_embedÚrel_posÚbiasÚnormg        zname: {}, weight_decay rate: {})r   r   r   )r	   r   s     r   Úget_vit_weight_decay_rater$   *   sP   € ð 	�4‰˜[¨DÑ0°iÀ4Ñ6GÈVÐW[É^ÐagÐkoÑaoØÐÜ
‡L�LÐ2×9Ñ9¸$Ð@QÓRÔSØÐr   ÚargsÚmodel_without_ddpc                 óŒ  — t        |j                  t        «      sJ ‚t        t        |j                  d   «      }|j                  | d¬«      }|j                  «       D ��cg c]  \  }}|‘Œ	 }}}d}|j                  «       D ��	cg c]  \  }}	||v sŒ|	j                  sŒ|	‘Œ }
}}	|
D �cg c]  }|| j                  | j                  z  dœ‘Œ  }}|j                  «       D ��	cg c]  \  }}	||vr||vr|	j                  r|	‘Œ }}}	|D �cg c]  }|| j                  dœ‘Œ }}||z   |z   }|S c c}}w c c}	}w c c}w c c}	}w c c}w )Nr   z
backbone.0)Úprefixztransformer.decoder)ÚparamsÚlr)Ú
isinstancer   r   r   r   Úget_named_param_lr_pairsÚitemsÚnamed_parametersÚrequires_gradr*   Úlr_component_decay)r%   r&   r   Úbackbone_named_param_lr_pairsÚ_Ú
param_dictÚbackbone_param_lr_pairsÚdecoder_keyÚnÚpÚdecoder_paramsÚparamÚdecoder_param_lr_pairsÚother_paramsÚother_param_dictsÚfinal_param_dictss                   r   Úget_param_dictr>   :   s`  € ÜÐ'×0Ñ0´&Ô9Ð9Ð9Ü”CÐ*×3Ñ3°AÑ6Ó7€HØ$,×$EÑ$EÀdÐS_Ð$EÓ$`Ð!Ø?\×?bÑ?bÓ?d×e©m¨a°šzÐeÐÑeà'€KØ$5×$FÑ$FÓ$H×q™D˜A˜qÈKÐ[\ÒL\Ðab×apÓap’aÐq€NÑqàftÖuÐ]b¨°d·g±gÀ×@WÑ@WÑ6WÓXÐuÐÐuð &×6Ñ6Ó8÷áˆAˆqØÐ2Ñ2°{È!Ñ7KÐPQ×P_ÒP_ò 	
ð€Lñ ð
 HTÖT¸e E°·±Ó9ÐTÐÐTà)Ð,CÑCÐF\Ñ\ÐàÐùó! fùó rùâuùóùò
 Us*   Á D*ÂD0ÂD0ÂD0Â)#D6Ã! D;ÄE)ç      ð?é   )r?   )Ú__doc__Útypingr   r   r   r   Útorch.nnÚnnÚrfdetr.models.backboner   Úrfdetr.utilities.loggerr   r   ÚstrÚfloatr   r   r$   ÚModuler>   © r   r   ú<module>rK      s‡   ðñ $ç (Ó (å å )Ý .á	‹€ñ8 ð 8°Eð 8ÈSð 8ÐZ_ó 8ñ* Cð ¸Eð ÈEó ð ˜ð °·±ð ¸tÀDÈÈcÈÁNÑ?Sô r   