§
    ‚ŠtjY<  ã                   óô   — d dl Zd dl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mZmZmZmZmZ  e
¦   «         rd dlmZ  e	¦   «         rd dlmZ  G d„ d	e¦  «        Z G d
„ dej        ¦  «        Z	 	 	 	 dd„ZdS )é    Né   )Úis_scipy_availableÚis_vision_availableé   )ÚHungarianMatcherÚ_set_aux_lossÚbox_iouÚ	dice_lossÚgeneralized_box_iouÚnested_tensor_from_tensor_listÚsigmoid_focal_loss)Úcenter_to_corners_format©Úlinear_sum_assignmentc                   ó>   — e Zd Z ej        ¦   «         d„ ¦   «         ZdS )ÚLwDetrHungarianMatcherc                 ó"  ‡‡— |d         j         dd…         \  }}|d                              dd¦  «                             ¦   «         }|d                              dd¦  «        }t          j        d„ |D ¦   «         ¦  «        }t          j        d„ |D ¦   «         ¦  «        }	d	}
d
}d|
z
  ||z  z  d|z
  dz                        ¦   «          z  }|
d|z
  |z  z  |dz                        ¦   «          z  }|dd…|f         |dd…|f         z
  }|j        }|                     t          j        ¦  «        }|	                     t          j        ¦  «        }	t          j	        ||	d¬¦  «        }|                     |¦  «        }t          t          |¦  «        t          |	¦  «        ¦  «         }| j        |z  | j        |z  z   | j        |z  z   }|                     ||d¦  «                             ¦   «         }d„ |D ¦   «         }g }||z  Š|                     ‰d¬¦  «        }t%          |¦  «        D ]]Š|‰         }d„ t'          |                     |d¦  «        ¦  «        D ¦   «         }‰dk    r|}Œ@ˆˆfd„t)          ||¦  «        D ¦   «         }Œ^d„ |D ¦   «         S )zš
        Differences:
        - out_prob = outputs["logits"].flatten(0, 1).sigmoid() instead of softmax
        - class_cost uses alpha and gamma
        ÚlogitsNr   r   r   Ú
pred_boxesc                 ó   — g | ]
}|d          ‘ŒS ©Úclass_labels© ©Ú.0Úvs     ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/loss/loss_lw_detr.pyú
<listcomp>z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>6   s   € ÐCÐCÐC°a  .Ô 1ÐCÐCÐCó    c                 ó   — g | ]
}|d          ‘ŒS ©Úboxesr   r   s     r   r   z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>7   s   € Ð =Ð =Ð =°  7¤Ð =Ð =Ð =r   g      Ð?g       @g:Œ0âŽyE>)Úpéÿÿÿÿc                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS r!   ©Úlenr   s     r   r   z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>N   s"   € Ð2Ð2Ð2 Q•�Q�w”Z‘”Ð2Ð2Ð2r   ©Údimc                 ó>   — g | ]\  }}t          ||         ¦  «        ‘ŒS r   r   )r   ÚiÚcs      r   r   z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>T   s)   € ÐsÐsÐs¹T¸QÀÕ2°1°Q´4Ñ8Ô8ÐsÐsÐsr   c                 óª   •— g | ]O\  }}t          j        |d          |d          ‰‰z  z   g¦  «        t          j        |d         |d         g¦  «        f‘ŒPS )r   r   )ÚnpÚconcatenate)r   Úindice1Úindice2Úgroup_idÚgroup_num_queriess      €€r   r   z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>X   sq   ø€ ð ð ð ñ
 )˜ õ œ¨°¬
°G¸A´JÐARÐU]ÑA]Ñ4]Ð'^Ñ_Ô_Ýœ¨°¬
°G¸A´JÐ'?Ñ@Ô@ððð ð r   c                 ó”   — g | ]E\  }}t          j        |t           j        ¬ ¦  «        t          j        |t           j        ¬ ¦  «        f‘ŒFS ))Údtype)ÚtorchÚ	as_tensorÚint64)r   r+   Újs      r   r   z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>_   sH   € ÐsÐsÐsÑcgÐcdÐfg•” ­%¬+Ð6Ñ6Ô6½¼ÈÕQVÔQ\Ð8]Ñ8]Ô8]Ð^ÐsÐsÐsr   )ÚshapeÚflattenÚsigmoidr6   ÚcatÚlogr5   ÚtoÚfloat32Úcdistr   r   Ú	bbox_costÚ
class_costÚ	giou_costÚviewÚcpuÚsplitÚrangeÚ	enumerateÚzip)ÚselfÚoutputsÚtargetsÚ
group_detrÚ
batch_sizeÚnum_queriesÚout_probÚout_bboxÚ
target_idsÚtarget_bboxÚalphaÚgammaÚneg_cost_classÚpos_cost_classrC   r5   rB   rD   Úcost_matrixÚsizesÚindicesÚcost_matrix_listÚgroup_cost_matrixÚgroup_indicesr2   r3   s                           @@r   ÚforwardzLwDetrHungarianMatcher.forward(   sä  øø€ ð #*¨(Ô"3Ô"9¸"¸1¸"Ô"=Ñˆ
�Kð ˜8Ô$×,Ò,¨Q°Ñ2Ô2×:Ò:Ñ<Ô<ˆØ˜<Ô(×0Ò0°°AÑ6Ô6ˆõ ”YÐCÐC¸7ÐCÑCÔCÑDÔDˆ
Ý”iÐ =Ð =°WÐ =Ñ =Ô =Ñ>Ô>ˆð ˆØˆØ˜e™)¨°%©Ñ8¸aÀ(¹lÈTÑ>Q×=VÒ=VÑ=XÔ=XÐ<XÑYˆØ 1 x¡<°EÑ"9Ñ:ÀÈ4Á×?TÒ?TÑ?VÔ?VÐ>VÑWˆØ# A A A z MÔ2°^ÀAÀAÀAÀzÀMÔ5RÑRˆ
ð ”ˆØ—;’;�uœ}Ñ-Ô-ˆØ!—n’n¥U¤]Ñ3Ô3ˆÝ”K ¨+¸Ð;Ñ;Ô;ˆ	Ø—L’L Ñ'Ô'ˆ	õ )Õ)AÀ(Ñ)KÔ)KÕMeÐfqÑMrÔMrÑsÔsÐsˆ	ð ”n yÑ0°4´?ÀZÑ3OÑOÐRVÔR`ÐclÑRlÑlˆØ!×&Ò& z°;ÀÑCÔC×GÒGÑIÔIˆà2Ð2¨'Ð2Ñ2Ô2ˆØˆØ'¨:Ñ5ÐØ&×,Ò,Ð->ÀAÐ,ÑFÔFÐÝ˜jÑ)Ô)ð 	ð 	ˆHØ 0°Ô :ÐØsÐsÅYÐO`×OfÒOfÐglÐnpÑOqÔOqÑErÔErÐsÑsÔsˆMØ˜1Š}ˆ}Ø'��ðð ð ð ð õ
 -0°¸Ñ,GÔ,Gðñ ô ��ð tÐsÐkrÐsÑsÔsÐsr   N)Ú__name__Ú
__module__Ú__qualname__r6   Úno_gradr_   r   r   r   r   r   '   s:   € € € € € Ø€U„]�_„_ð6tð 6tñ „_ð6tð 6tð 6tr   r   c                   óx   ‡ — e Zd Zˆ fd„Zd„ Z ej        ¦   «         d„ ¦   «         Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zˆ xZS )
ÚLwDetrImageLossc                 óŽ   •— t          ¦   «                              ¦   «          || _        || _        || _        || _        || _        d S ©N)ÚsuperÚ__init__ÚmatcherÚnum_classesÚfocal_alphaÚlossesrN   )rK   rj   rk   rl   rm   rN   Ú	__class__s         €r   ri   zLwDetrImageLoss.__init__c   sB   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ&ˆÔØ&ˆÔØˆŒØ$ˆŒˆˆr   c                 ó²  — d|vrt          d¦  «        ‚|d         }|j        }|                      |¦  «        }t          j        d„ t          ||¦  «        D ¦   «         ¦  «        }| j        }	d}
|d         |         }t          j        d„ t          ||¦  «        D ¦   «         d¬¦  «        }t          j        t          t          | 
                    ¦   «         ¦  «        t          |¦  «        ¦  «        d         ¦  «        }|                     |¦  «        }|                     ¦   «          
                    ¦   «         }|                     ¦   «         }t          j        |¦  «        }|                     |
¦  «                             |¦  «        }||fz   }||                              |	¦  «        |                     d	|	z
  ¦  «        z  }t          j        |d
¦  «         
                    ¦   «                              |¦  «        }|||<   d	|z
  ||<   | |                     ¦   «         z  |d	|z
                       ¦   «         z  z
  }|                     ¦   «         |z  }d|i}|S )Nr   z#No logits were found in the outputsc                 ó6   — g | ]\  }\  }}|d          |         ‘ŒS r   r   )r   ÚtÚ_ÚJs       r   r   z/LwDetrImageLoss.loss_labels.<locals>.<listcomp>s   s*   € Ð%bÐ%bÐ%b¹y¸qÁ&À1Àa a¨Ô&7¸Ô&:Ð%bÐ%bÐ%br   r   r   c                 ó6   — g | ]\  }\  }}|d          |         ‘ŒS r!   r   ©r   rq   rr   r+   s       r   r   z/LwDetrImageLoss.loss_labels.<locals>.<listcomp>w   ó(   € Ð!WÐ!WÐ!W±I°A±v¸¸1 ! G¤*¨Q¤-Ð!WÐ!WÐ!Wr   r   r(   r   g{®Gáz„?Úloss_ce)ÚKeyErrorr5   Ú_get_source_permutation_idxr6   r=   rJ   rl   Údiagr	   r   Údetachr?   Úcloner<   Ú
zeros_likeÚpowÚclampr>   Úsum)rK   rL   rM   r[   Ú	num_boxesÚsource_logitsr5   ÚidxÚtarget_classes_orU   rV   Ú	src_boxesÚtarget_boxesÚiou_targetsÚpos_iousÚprobÚpos_weightsÚneg_weightsÚpos_indÚpos_qualityrw   rm   s                         r   Úloss_labelszLwDetrImageLoss.loss_labelsl   s1  € Ø˜7Ð"Ð"ÝÐ@ÑAÔAÐAØ Ô)ˆØÔ#ˆà×.Ò.¨wÑ7Ô7ˆÝ œ9Ð%bÐ%bÍCÐPWÐY`ÑLaÔLaÐ%bÑ%bÔ%bÑcÔcÐØÔ ˆØˆØ˜LÔ)¨#Ô.ˆ	Ý”yÐ!WÐ!WÅÀWÈgÑAVÔAVÐ!WÑ!WÔ!WÐ]^Ð_Ñ_Ô_ˆÝ”jÝÕ,¨Y×-=Ò-=Ñ-?Ô-?Ñ@Ô@ÕBZÐ[gÑBhÔBhÑiÔiÐjkÔlñ
ô 
ˆð "—n’n UÑ+Ô+ˆØ×$Ò$Ñ&Ô&×-Ò-Ñ/Ô/ˆØ×$Ò$Ñ&Ô&ˆåÔ& }Ñ5Ô5ˆà—h’h˜u‘o”o×(Ò(¨Ñ/Ô/ˆØÐ)Ð+Ñ+ˆà˜7”m×'Ò'¨Ñ.Ô.°·²¸aÀ%¹iÑ1HÔ1HÑHˆÝ”k +¨tÑ4Ô4×;Ò;Ñ=Ô=×@Ò@ÀÑGÔGˆà*ˆ�GÑØ  ;™ˆ�GÑØ�, §¢¡¤Ñ+¨k¸QÀ¹X¿NºNÑ<LÔ<LÑ.LÑLˆØ—+’+‘-”- )Ñ+ˆØ˜WÐ%ˆàˆr   c                 óz  — |d         }|j         }t          j        d„ |D ¦   «         |¬¦  «        }|                     ¦   «                              d¦  «        j        dk                         d¦  «        }t          j         	                    | 
                    ¦   «         | 
                    ¦   «         ¦  «        }	d|	i}
|
S )zâ
        Compute the cardinality error, i.e. the absolute error in the number of predicted non-empty boxes.

        This is not really a loss, it is intended for logging purposes only. It doesn't propagate gradients.
        r   c                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS r   r&   r   s     r   r   z4LwDetrImageLoss.loss_cardinality.<locals>.<listcomp>™   s%   € Ð)RÐ)RÐ)RÀQ­#¨a°Ô.?Ñ*@Ô*@Ð)RÐ)RÐ)Rr   )Údevicer$   g      à?r   Úcardinality_error)r‘   r6   r7   r<   ÚmaxÚvaluesr€   ÚnnÚ
functionalÚl1_lossÚfloat)rK   rL   rM   r[   r�   r   r‘   Útarget_lengthsÚ	card_predÚcard_errrm   s              r   Úloss_cardinalityz LwDetrImageLoss.loss_cardinality�   s¨   € ð ˜Ô"ˆØ”ˆÝœÐ)RÐ)RÈ'Ð)RÑ)RÔ)RÐ[aÐbÑbÔbˆà—^’^Ñ%Ô%×)Ò)¨"Ñ-Ô-Ô4°sÒ:×?Ò?ÀÑBÔBˆ	Ý”=×(Ò(¨¯ªÑ):Ô):¸N×<PÒ<PÑ<RÔ<RÑSÔSˆØ% xÐ0ˆØˆr   c           	      óü  — d|vrt          d¦  «        ‚|                      |¦  «        }|d         |         }t          j        d„ t	          ||¦  «        D ¦   «         d¬¦  «        }t
          j                             ||d¬¦  «        }i }	|                     ¦   «         |z  |	d<   d	t          j	        t          t          |¦  «        t          |¦  «        ¦  «        ¦  «        z
  }
|
                     ¦   «         |z  |	d
<   |	S )a<  
        Compute the losses related to the bounding boxes, the L1 regression loss and the GIoU loss.

        Targets dicts must contain the key "boxes" containing a tensor of dim [nb_target_boxes, 4]. The target boxes
        are expected in format (center_x, center_y, w, h), normalized by the image size.
        r   z#No predicted boxes found in outputsc                 ó6   — g | ]\  }\  }}|d          |         ‘ŒS r!   r   ru   s       r   r   z.LwDetrImageLoss.loss_boxes.<locals>.<listcomp>¬   rv   r   r   r(   Únone)Ú	reductionÚ	loss_bboxr   Ú	loss_giou)rx   ry   r6   r=   rJ   r•   r–   r—   r€   rz   r   r   )rK   rL   rM   r[   r�   rƒ   Úsource_boxesr†   r¡   rm   r¢   s              r   Ú
loss_boxeszLwDetrImageLoss.loss_boxes¡   sý   € ð ˜wÐ&Ð&ÝÐ@ÑAÔAÐAØ×.Ò.¨wÑ7Ô7ˆØ˜|Ô,¨SÔ1ˆÝ”yÐ!WÐ!WÅÀWÈgÑAVÔAVÐ!WÑ!WÔ!WÐ]^Ð_Ñ_Ô_ˆå”M×)Ò)¨,¸ÐPVÐ)ÑWÔWˆ	àˆØ'Ÿmšm™oœo°	Ñ9ˆˆ{Ñà�œ
ÝÕ 8¸Ñ FÔ FÕH`ÐamÑHnÔHnÑoÔoñ
ô 
ñ 
ˆ	ð (Ÿmšm™oœo°	Ñ9ˆˆ{ÑØˆr   c                 ó�  — d|vrt          d¦  «        ‚|                      |¦  «        }|                      |¦  «        }|d         }||         }d„ |D ¦   «         }t          |¦  «                             ¦   «         \  }	}
|	                     |¦  «        }	|	|         }	t          j                             |dd…df         |	j	        dd…         dd¬¦  «        }|dd…d	f          
                    d
¦  «        }|	 
                    d
¦  «        }	|	                     |j	        ¦  «        }	t          ||	|¦  «        t          ||	|¦  «        dœ}|S )zÄ
        Compute the losses related to the masks: the focal loss and the dice loss.

        Targets dicts must contain the key "masks" containing a tensor of dim [nb_target_boxes, h, w].
        Ú
pred_masksz#No predicted masks found in outputsc                 ó   — g | ]
}|d          ‘ŒS )Úmasksr   ©r   rq   s     r   r   z.LwDetrImageLoss.loss_masks.<locals>.<listcomp>Ç   s   € Ð-Ð-Ð- ��7”Ð-Ð-Ð-r   NéþÿÿÿÚbilinearF)ÚsizeÚmodeÚalign_cornersr   r   )Ú	loss_maskÚ	loss_dice)rx   ry   Ú_get_target_permutation_idxr   Ú	decomposer?   r•   r–   Úinterpolater:   r;   rE   r   r
   )rK   rL   rM   r[   r�   Ú
source_idxÚ
target_idxÚsource_masksr¨   Útarget_masksÚvalidrm   s               r   Ú
loss_maskszLwDetrImageLoss.loss_masksº   sa  € ð ˜wÐ&Ð&ÝÐ@ÑAÔAÐAà×5Ò5°gÑ>Ô>ˆ
Ø×5Ò5°gÑ>Ô>ˆ
Ø˜|Ô,ˆØ# JÔ/ˆØ-Ð- WÐ-Ñ-Ô-ˆå<¸UÑCÔC×MÒMÑOÔOÑˆ�eØ#—’ |Ñ4Ô4ˆØ# JÔ/ˆõ ”}×0Ò0Ø˜˜˜˜D˜Ô!¨Ô(:¸2¸3¸3Ô(?ÀjÐ`eð 1ñ 
ô 
ˆð $ A A A q DÔ)×1Ò1°!Ñ4Ô4ˆà#×+Ò+¨AÑ.Ô.ˆØ#×(Ò(¨Ô);Ñ<Ô<ˆå+¨L¸,È	ÑRÔRÝ" <°¸yÑIÔIð
ð 
ˆð ˆr   c                 óœ   — t          j        d„ t          |¦  «        D ¦   «         ¦  «        }t          j        d„ |D ¦   «         ¦  «        }||fS )Nc                 óD   — g | ]\  }\  }}t          j        ||¦  «        ‘ŒS r   ©r6   Ú	full_like)r   r+   Úsourcerr   s       r   r   z?LwDetrImageLoss._get_source_permutation_idx.<locals>.<listcomp>Þ   s,   € ÐcÐcÐc¹n¸aÁÀ&È!�uœ¨v°qÑ9Ô9ÐcÐcÐcr   c                 ó   — g | ]\  }}|‘ŒS r   r   )r   r¾   rr   s      r   r   z?LwDetrImageLoss._get_source_permutation_idx.<locals>.<listcomp>ß   s   € ÐBÐBÐB©;¨F°A ÐBÐBÐBr   ©r6   r=   rI   )rK   r[   Ú	batch_idxr´   s       r   ry   z+LwDetrImageLoss._get_source_permutation_idxÜ   óS   € å”IÐcÐcÕPYÐZaÑPbÔPbÐcÑcÔcÑdÔdˆ	Ý”YÐBÐB¸'ÐBÑBÔBÑCÔCˆ
Ø˜*Ð$Ð$r   c                 óœ   — t          j        d„ t          |¦  «        D ¦   «         ¦  «        }t          j        d„ |D ¦   «         ¦  «        }||fS )Nc                 óD   — g | ]\  }\  }}t          j        ||¦  «        ‘ŒS r   r¼   )r   r+   rr   Útargets       r   r   z?LwDetrImageLoss._get_target_permutation_idx.<locals>.<listcomp>å   s,   € ÐcÐcÐc¹n¸aÁÀ!ÀV�uœ¨v°qÑ9Ô9ÐcÐcÐcr   c                 ó   — g | ]\  }}|‘ŒS r   r   )r   rr   rÅ   s      r   r   z?LwDetrImageLoss._get_target_permutation_idx.<locals>.<listcomp>æ   s   € ÐBÐBÐB©;¨A¨v ÐBÐBÐBr   rÀ   )rK   r[   rÁ   rµ   s       r   r±   z+LwDetrImageLoss._get_target_permutation_idxã   rÂ   r   c                 óŽ   — | j         | j        | j        | j        dœ}||vrt	          d|› d�¦  «        ‚ ||         ||||¦  «        S )N)ÚlabelsÚcardinalityr"   r¨   zLoss z not supported)rŽ   rœ   r¤   r¹   Ú
ValueError)rK   ÚlossrL   rM   r[   r�   Úloss_maps          r   Úget_losszLwDetrImageLoss.get_lossé   se   € àÔ&ØÔ0Ø”_Ø”_ð	
ð 
ˆð �xÐÐÝÐ9 TÐ9Ð9Ð9Ñ:Ô:Ð:Øˆx˜Œ~˜g w°¸ÑCÔCÐCr   c           
      ó  ‡— | j         r| j        nd}d„ |                     ¦   «         D ¦   «         }|                      |||¦  «        }t	          d„ |D ¦   «         ¦  «        }||z  }t          j        |gt
          j        t          t          | 
                    ¦   «         ¦  «        ¦  «        j        ¬¦  «        }d}t          j        ¦   «         rKt          j        ¦   «         r8t          j        |t          j        j        ¬¦  «         t          j        ¦   «         }t          j        ||z  d¬¦  «                             ¦   «         }i }| j        D ].}	|                     |                      |	||||¦  «        ¦  «         Œ/d|v r‘t1          |d         ¦  «        D ]{\  Š}
|                      |
||¦  «        }| j        D ]W}	|	dk    rŒ	|                      |	|
|||¦  «        }ˆfd	„|                     ¦   «         D ¦   «         }|                     |¦  «         ŒXŒ|d
|v rv|d
         }|                      |||¬¦  «        }| j        D ]N}	|                      |	||||¦  «        }d„ |                     ¦   «         D ¦   «         }|                     |¦  «         ŒO|S )aª  
        This performs the loss computation.

        Args:
             outputs (`dict`, *optional*):
                Dictionary of tensors, see the output specification of the model for the format.
             targets (`list[dict]`, *optional*):
                List of dicts, such that `len(targets) == batch_size`. The expected keys in each dict depends on the
                losses applied, see each loss' doc.
        r   c                 ó2   — i | ]\  }}|d k    ¯|dk    ¯||“ŒS )Úenc_outputsÚauxiliary_outputsr   ©r   Úkr   s      r   ú
<dictcomp>z+LwDetrImageLoss.forward.<locals>.<dictcomp>   s:   € ð '
ð '
ð '
Ù�Q˜°°]Ò0BÐ0BÀqÐL_ÒG_ÐG_ˆAˆqÐG_ÐG_ÐG_r   c              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )r   Nr&   r©   s     r   ú	<genexpr>z*LwDetrImageLoss.forward.<locals>.<genexpr>  s/   è è € Ð@Ð@°1�˜A˜nÔ-Ñ.Ô.Ð@Ð@Ð@Ð@Ð@Ð@r   )r5   r‘   )Úop)ÚminrÑ   r¨   c                 ó(   •— i | ]\  }}|d ‰› �z   |“ŒS ©rr   r   ©r   rÓ   r   r+   s      €r   rÔ   z+LwDetrImageLoss.forward.<locals>.<dictcomp>  s)   ø€ ÐHÐHÐH±°°A˜a ' a ' '™k¨1ÐHÐHÐHr   rÐ   )rN   c                 ó    — i | ]\  }}|d z   |“ŒS ©Ú_encr   rÒ   s      r   rÔ   z+LwDetrImageLoss.forward.<locals>.<dictcomp>'  s"   € ÐCÐCÐC©D¨A¨q˜!˜f™* aÐCÐCÐCr   )ÚtrainingrN   Úitemsrj   r€   r6   r7   r˜   ÚnextÚiterr”   r‘   ÚdistÚis_availableÚis_initializedÚ
all_reduceÚReduceOpÚSUMÚget_world_sizer   Úitemrm   ÚupdaterÍ   rI   )rK   rL   rM   rN   Úoutputs_without_aux_and_encr[   r�   Ú
world_sizerm   rË   rÑ   Úl_dictrÐ   r+   s                @r   r_   zLwDetrImageLoss.forwardô   sµ  ø€ ð )-¬Ð<�T”_�_¸1ˆ
ð'
ð '
Ø$Ÿ]š]™_œ_ð'
ñ '
ô '
Ð#ð
 —,’,Ð:¸GÀZÑPÔPˆõ Ð@Ð@¸Ð@Ñ@Ô@Ñ@Ô@ˆ	Ø 
Ñ*ˆ	Ý”O Y Kµu´{Í4ÕPTÐU\×UcÒUcÑUeÔUeÑPfÔPfÑKgÔKgÔKnÐoÑoÔoˆ	Øˆ
ÝÔÑÔð 	/¥4Ô#6Ñ#8Ô#8ð 	/ÝŒO˜I­$¬-Ô*;Ð<Ñ<Ô<Ð<ÝÔ,Ñ.Ô.ˆJÝ”K 	¨JÑ 6¸AÐ>Ñ>Ô>×CÒCÑEÔEˆ	ð ˆØ”Kð 	Uð 	UˆDØ�MŠM˜$Ÿ-š-¨¨g°wÀÈÑSÔSÑTÔTÐTÐTð  'Ð)Ð)Ý(1°'Ð:MÔ2NÑ(OÔ(Oð *ð *Ñ$�Ð$ØŸ,š,Ð'8¸'À:ÑNÔN�Ø œKð *ð *�DØ˜w’�à Ø!Ÿ]š]¨4Ð1BÀGÈWÐV_Ñ`Ô`�FØHÐHÐHÐH¸¿º¹¼ÐHÑHÔH�FØ—M’M &Ñ)Ô)Ð)Ð)ð*ð ˜GÐ#Ð#Ø! -Ô0ˆKØ—l’l ;°ÀJ�lÑOÔOˆGØœð &ð &�ØŸš t¨[¸'À7ÈIÑVÔV�ØCÐC°F·L²L±N´NÐCÑCÔC�Ø—’˜fÑ%Ô%Ð%Ð%àˆr   )r`   ra   rb   ri   rŽ   r6   rc   rœ   r¤   r¹   ry   r±   rÍ   r_   Ú__classcell__)rn   s   @r   re   re   b   sÉ   ø€ € € € € ð%ð %ð %ð %ð %ð"ð "ð "ðH €U„]�_„_ðð ñ „_ðð ð ð ð2ð ð ðD%ð %ð %ð%ð %ð %ð	Dð 	Dð 	Dð6ð 6ð 6ð 6ð 6ð 6ð 6r   re   c	                 óî  ‡‡‡— t          |j        |j        |j        ¬¦  «        }
g d¢}t	          |
|j        |j        ||j        ¬¦  «        }|                     |¦  «         i }d }| |d<   ||d<   ||dœ|d<   |j	        rt          ||¦  «        }||d<    |||¦  «        Š|j        |j        d	œŠ|j        ‰d
<   |j	        rdi }t          |j        dz
  ¦  «        D ]5Š|                     ˆfd„‰                     ¦   «         D ¦   «         ¦  «         Œ6‰                     |¦  «         d„ ‰                     ¦   «         D ¦   «         }‰                     |¦  «         t%          ˆˆfd„‰D ¦   «         ¦  «        }|‰|fS )N)rC   rB   rD   )rÈ   r"   rÉ   )rj   rk   rl   rm   rN   r   r   )r   r   rÐ   rÑ   )rw   r¡   r¢   r   c                 ó(   •— i | ]\  }}|d ‰› �z   |“ŒS rÚ   r   rÛ   s      €r   rÔ   z0LwDetrForObjectDetectionLoss.<locals>.<dictcomp>Z  s)   ø€ Ð#SÐ#SÐ#S±t°q¸! A¨¨A¨¨¡K°Ð#SÐ#SÐ#Sr   c                 ó    — i | ]\  }}|d z   |“ŒS rÝ   r   rÒ   s      r   rÔ   z0LwDetrForObjectDetectionLoss.<locals>.<dictcomp>\  s"   € ÐEÐEÐE©¨¨A�q˜6‘z 1ÐEÐEÐEr   c              3   óB   •K  — | ]}|‰v ¯‰|         ‰|         z  V — Œd S rg   r   )r   rÓ   Ú	loss_dictÚweight_dicts     €€r   rÖ   z/LwDetrForObjectDetectionLoss.<locals>.<genexpr>^  s:   øè è € ÐTÐT°À1ÈÐCSÐCSˆy˜Œ|˜k¨!œnÑ,ÐCSÐCSÐCSÐCSÐTÐTr   )r   rC   rB   rD   re   Ú
num_labelsrl   rN   r?   Úauxiliary_lossr   Úclass_loss_coefficientÚbbox_loss_coefficientÚgiou_loss_coefficientrH   Údecoder_layersrë   rà   r€   )r   rÈ   r‘   r   ÚconfigÚoutputs_classÚoutputs_coordÚenc_outputs_classÚenc_outputs_coordÚkwargsrj   rm   Ú	criterionÚoutputs_lossrÑ   Úaux_weight_dictÚenc_weight_dictrË   r+   rô   rõ   s                     @@@r   ÚLwDetrForObjectDetectionLossr  -  sê  øøø€ õ %ØÔ$°Ô0@ÈFÔL\ðñ ô €Gð 0Ð/Ð/€FÝØØÔ%ØÔ&ØØÔ$ðñ ô €Ið ‡L‚L�ÑÔÐà€LØÐØ#€L�ÑØ!+€L�Ñà#Ø'ð#ð #€L�Ñð Ôð >Ý)¨-¸ÑGÔGÐØ,=ˆÐ(Ñ)Ø�	˜,¨Ñ/Ô/€Ià$Ô;È&ÔJfÐgÐg€KØ%Ô;€K�ÑØÔð ,ØˆÝ�vÔ,¨qÑ0Ñ1Ô1ð 	Uð 	UˆAØ×"Ò"Ð#SÐ#SÐ#SÐ#S¸{×?PÒ?PÑ?RÔ?RÐ#SÑ#SÔ#SÑTÔTÐTÐTØ×Ò˜?Ñ+Ô+Ð+ØEÐE°×1BÒ1BÑ1DÔ1DÐEÑEÔE€OØ×Ò�Ñ'Ô'Ð'ÝÐTÐTÐTÐTÐT°iÐTÑTÔTÑTÔT€DØ�Ð-Ð-Ð-r   )NNNN)Únumpyr.   r6   Útorch.distributedÚdistributedrã   Útorch.nnr•   Úutilsr   r   Úloss_for_object_detectionr   r   r	   r
   r   r   r   Útransformers.image_transformsr   Úscipy.optimizer   r   ÚModulere   r  r   r   r   ú<module>r     s’  ðð Ð Ð Ð Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ÐÑÔð GØFÐFÐFÐFÐFÐFð ÐÑÔð 5Ø4Ð4Ð4Ð4Ð4Ð4ð8tð 8tð 8tð 8tð 8tÐ-ñ 8tô 8tð 8tðvHð Hð Hð Hð H�b”iñ Hô Hð Hðb ØØØð2.ð 2.ð 2.ð 2.ð 2.ð 2.r   