Ë
    ëÓ^jt  ã                   ó²   — d Z ddlZddlZddlmZ ddlmZmZmZm	Z	 ddl
Z
 G d„ de
j                  j                  «      Z G d„ d«      Z G d	„ d
«      Zg d¢Zy)zLEMA model and best-metric tracking utilities (moved from rfdetr.util.utils).é    N)Údeepcopy)ÚCallableÚDictÚOptionalÚUnionc                   ó„  ‡ — e Zd ZdZ	 	 	 ddej
                  j                  dededeej                     ddf
ˆ fd„Z
defd	„Zdej
                  j                  d
eej                  ej                  gej                  f   ddfd„Zdej
                  j                  ddfd„Zdej
                  j                  ddfd„Zˆ xZS )ÚModelEmaz
EMA Model.NÚmodelÚdecayÚtauÚdeviceÚreturnc                 ó  •— t         t        | �  «        t        |«      | _        | j                  j                  «        || _        || _        d| _        || _	        | j                  �| j                  j                  |¬«       y y )Né   ©r   )Úsuperr	   Ú__init__r   ÚmoduleÚevalr   r   Úupdatesr   Úto)Úselfr
   r   r   r   Ú	__class__s        €úd/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/training/model_ema.pyr   zModelEma.__init__   sj   ø€ ô 	Œh˜Ñ&Ô(ä˜u“oˆŒØ�‰×ÑÔàˆŒ
ØˆŒØˆŒØˆŒØ�;‰;Ð"Ø�K‰K�N‰N &ˆNÕ)ð #ó    c                 óº   — | j                   dk(  r| j                  }|S | j                  dt        j                  | j                   | j                   z  «      z
  z  }|S )Nr   r   )r   r   ÚmathÚexpr   )r   r   s     r   Ú
_get_decayzModelEma._get_decay&   sO   € Ø�8‰8�qŠ=Ø—J‘JˆEð ˆð —J‘J !¤d§h¡h°·±¨}¸t¿x¹xÑ/GÓ&HÑ"HÑIˆEØˆr   Ú	update_fnc                 ó„  — t        j                  «       5  t        | j                  j	                  «       j                  «       |j	                  «       j                  «       «      D ]E  \  }}| j                  �|j                  | j                  ¬«      }|j                   |||«      «       ŒG 	 d d d «       y # 1 sw Y   y xY w)Nr   )	ÚtorchÚno_gradÚzipr   Ú
state_dictÚvaluesr   r   Úcopy_)r   r
   r    Úema_vÚmodel_vs        r   Ú_updatezModelEma._update-   s•   € ô
 �]‰]‹_ñ 	7Ü"% d§k¡k×&<Ñ&<Ó&>×&EÑ&EÓ&GÈ×IYÑIYÓI[×IbÑIbÓIdÓ"eò 7‘��wØ—;‘;Ð*Ø%Ÿj™j°·±˜jÓ<�GØ—‘™I e¨WÓ5Õ6ñ7÷	7÷ 	7ñ 	7ús   •BB6Â6B?c                 ó|   ‡— | j                  «       Š| j                  |ˆfd„¬«       | xj                  dz  c_        y )Nc                 ó    •— ‰| z  d‰z
  |z  z   S )Ng      ð?© )ÚeÚmr   s     €r   ú<lambda>z!ModelEma.update.<locals>.<lambda>:   s   ø€ °5¸1±9ÀÀeÁÈqÑ?PÑ3P€ r   ©r    r   )r   r*   r   )r   r
   r   s     @r   ÚupdatezModelEma.update8   s.   ø€ Ø—‘Ó!ˆØ�‰�UÓ&PˆÔQØ�Š˜ÑŽr   c                 ó,   — | j                  |d„ ¬«       y )Nc                 ó   — |S ©Nr-   )r.   r/   s     r   r0   zModelEma.set.<locals>.<lambda>>   s   € °1€ r   r1   )r*   )r   r
   s     r   ÚsetzModelEma.set=   s   € Ø�‰�U¡nˆÕ5r   )gZõ¹ÚŠýï?r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   ÚnnÚModuleÚfloatr   r   r   r   r   ÚTensorr*   r2   r6   Ú__classcell__)r   s   @r   r	   r	      sÝ   ø„ Ùð
 ØØ)-ñ*à�x‰x�‰ð*ð ð*ð ð	*ð
 ˜Ÿ™Ñ&ð*ð 
õ*ð&˜Eó ð	7à�x‰x�‰ð	7ð ˜UŸ\™\¨5¯<©<Ð8¸%¿,¹,ÐFÑGð	7ð 
ó		7ð˜EŸH™HŸO™Oð °ó ð
6˜Ÿ™Ÿ™ð 6¨T÷ 6r   r	   c                   ó‚   — e Zd Zddededdfd„Zdededefd„Zded	edefd
„Z	defd„Z
defd„Zdeeeeef   f   fd„Zy)ÚBestMetricSingleÚinit_resÚbetterr   Nc                 óH   — || _         || _        d| _        || _        |dv sJ ‚y )Néÿÿÿÿ)ÚlargeÚsmall)rB   Úbest_resÚbest_eprC   )r   rB   rC   s      r   r   zBestMetricSingle.__init__B   s-   € Ø ˆŒØ ˆŒØˆŒàˆŒØÐ+Ñ+Ð+Ñ+r   Únew_resÚold_resc                 ó‚   — | j                   dk(  r||kD  S | j                   dk(  r||k  S t        d| j                   ›�«      ‚)NrF   rG   zUnexpected value for 'better': )rC   Ú
ValueError)r   rJ   rK   s      r   ÚisbetterzBestMetricSingle.isbetterJ   sG   € Ø�;‰;˜'Ò!Ø˜WÑ$Ð$Ø�[‰[˜GÒ#Ø˜WÑ$Ð$äÐ>¸t¿{¹{¸oÐNÓOÐOr   Úepc                 óZ   — | j                  || j                  «      r|| _        || _        yy)NTF)rN   rH   rI   )r   rJ   rO   s      r   r2   zBestMetricSingle.updateR   s(   € Ø�=‰=˜ $§-¡-Ô0Ø#ˆDŒMØˆDŒLØØr   c                 óN   — dj                  | j                  | j                  «      S )Nzbest_res: {}	 best_ep: {})ÚformatrH   rI   ©r   s    r   Ú__str__zBestMetricSingle.__str__Y   s   € Ø+×2Ñ2°4·=±=À$Ç,Á,ÓOÐOr   c                 ó"   — | j                  «       S r5   )rT   rS   s    r   Ú__repr__zBestMetricSingle.__repr__\   s   € Ø�|‰|‹~Ðr   c                 ó4   — | j                   | j                  dœS )N©rH   rI   rX   rS   s    r   ÚsummaryzBestMetricSingle.summary_   s   € àŸ™Ø—|‘|ñ
ð 	
r   )ç        rF   )r7   r8   r9   r=   Ústrr   ÚboolrN   Úintr2   rT   rV   r   r   rY   r-   r   r   rA   rA   A   s�   „ ñ, ð ,°cð ,Èó ,ðP ð P°ð P¸$ó Pð˜eð ¨ð °ó ðP˜ó Pð˜#ó ð
˜˜c 5¨°¨Ñ#4Ð4Ñ5ô 
r   rA   c            	       óx   — e Zd Zddedededdfd„Zddeded	edefd
„Zde	ee
eef   f   fd„Zdefd„Zdefd„Zy)ÚBestMetricHolderrB   rC   Úuse_emar   Nc                 ó~   — t        ||«      | _        || _        |r#t        ||«      | _        t        ||«      | _        y y r5   )rA   Úbest_allr`   Úbest_emaÚbest_regular)r   rB   rC   r`   s       r   r   zBestMetricHolder.__init__g   s<   € Ü(¨°6Ó:ˆŒØˆŒÙÜ,¨X°vÓ>ˆDŒMÜ 0°¸6Ó BˆDÕð r   rJ   ÚepochÚis_emac                 ó6  — | j                   s| j                  j                  ||«      S |r8| j                  j                  ||«       | j                  j                  ||«      S | j                  j                  ||«       | j                  j                  ||«      S )z"Return if the results is the best.)r`   rb   r2   rc   rd   )r   rJ   re   rf   s       r   r2   zBestMetricHolder.updaten   s{   € à�|Š|Ø—=‘=×'Ñ'¨°Ó7Ð7áØ—‘×$Ñ$ W¨eÔ4Ø—}‘}×+Ñ+¨G°UÓ;Ð;à×!Ñ!×(Ñ(¨°%Ô8Ø—}‘}×+Ñ+¨G°UÓ;Ð;r   c                 óN  — | j                   s| j                  j                  «       S i }|j                  | j                  j                  «       j	                  «       D ��ci c]  \  }}d|› �|“Œ c}}«       |j                  | j
                  j                  «       j	                  «       D ��ci c]  \  }}d|› �|“Œ c}}«       |j                  | j                  j                  «       j	                  «       D ��ci c]  \  }}d|› �|“Œ c}}«       |S c c}}w c c}}w c c}}w )NÚall_Úregular_Úema_)r`   rb   rY   r2   Úitemsrd   rc   )r   ÚresÚkÚvs       r   rY   zBestMetricHolder.summaryz   sæ   € Ø�|Š|Ø—=‘=×(Ñ(Ó*Ð*àˆØ�
‰
¨d¯m©m×.CÑ.CÓ.E×.KÑ.KÓ.M×N¡d a¨�d˜1˜#�J ‘MÓNÔOØ�
‰
°$×2CÑ2C×2KÑ2KÓ2M×2SÑ2SÓ2U×V©$¨!¨Q�h˜q˜c�N AÑ%ÓVÔWØ�
‰
¨d¯m©m×.CÑ.CÓ.E×.KÑ.KÓ.M×N¡d a¨�d˜1˜#�J ‘MÓNÔOØˆ
ùó OùÛVùÛNs   ÁD
Â-D
Ã;D!
c                 óL   — t        j                  | j                  «       d¬«      S )Né   )Úindent)ÚjsonÚdumpsrY   rS   s    r   rV   zBestMetricHolder.__repr__„   s   € Ü�z‰z˜$Ÿ,™,›.°Ô3Ð3r   c                 ó"   — | j                  «       S r5   )rV   rS   s    r   rT   zBestMetricHolder.__str__‡   s   € Ø�}‰}‹Ðr   )rZ   rF   F)F)r7   r8   r9   r=   r[   r\   r   r]   r2   r   r   rY   rV   rT   r-   r   r   r_   r_   f   s�   „ ñC ð C°cð CÈdð CÐ_có Cñ
<˜eð 
<¨Cð 
<¸ð 
<È$ó 
<ð˜˜c 5¨°¨Ñ#4Ð4Ñ5ó ð4˜#ó 4ð˜ô r   r_   )r	   rA   r_   )r:   rs   r   Úcopyr   Útypingr   r   r   r   r"   r;   r<   r	   rA   r_   Ú__all__r-   r   r   ú<module>ry      sO   ðñ Sã Û Ý ß 2Ó 2ã ô.6ˆu�x‰x�‰ô .6÷b"
ñ "
÷J"ñ "òJ�r   