§
    [�’jñ=  ã                   ó   — d dl Zd dlZd dlm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_torch_distributed_initialized)Ú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     úLC:\Projects\DSCons\.venv\Lib\site-packages\transformers\loss\loss_lw_detr.pyú
<listcomp>z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>7   s   € ÐCÐCÐC°a  .Ô 1ÐCÐCÐCó    c                 ó   — g | ]
}|d          ‘ŒS ©Úboxesr   r   s     r   r   z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>8   s   € Ð =Ð =Ð =°  7¤Ð =Ð =Ð =r    g      Ð?g       @g:Œ0âŽyE>)Úpéÿÿÿÿc                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS r"   ©Úlenr   s     r   r   z2LwDetrHungarianMatcher.forward.<locals>.<listcomp>O   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>U   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>Y   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Úsigmoidr7   ÚcatÚlogr6   Ú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_classrD   r6   rC   rE   Úcost_matrixÚsizesÚindicesÚcost_matrix_listÚgroup_cost_matrixÚgroup_indicesr3   r4   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__r7   Ú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ÚlossesrO   )rL   rk   rl   rm   rn   rO   Ú	__class__s         €r   rj   zLwDetrImageLoss.__init__d   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>t   s*   € Ð%bÐ%bÐ%b¹y¸qÁ&À1Àa a¨Ô&7¸Ô&:Ð%bÐ%bÐ%br    r   r   c                 ó6   — g | ]\  }\  }}|d          |         ‘ŒS r"   r   ©r   rr   rs   r,   s       r   r   z/LwDetrImageLoss.loss_labels.<locals>.<listcomp>x   ó(   € Ð!WÐ!WÐ!W±I°A±v¸¸1 ! G¤*¨Q¤-Ð!WÐ!WÐ!Wr    r   r)   r   g{®Gáz„?Úloss_ce)ÚKeyErrorr6   Ú_get_source_permutation_idxr7   r>   rK   rm   Údiagr
   r   Údetachr@   Úcloner=   Ú
zeros_likeÚpowÚclampr?   Úsum)rL   rM   rN   r\   Ú	num_boxesÚsource_logitsr6   ÚidxÚtarget_classes_orV   rW   Ú	src_boxesÚtarget_boxesÚiou_targetsÚpos_iousÚprobÚpos_weightsÚneg_weightsÚpos_indÚpos_qualityrx   rn   s                         r   Úloss_labelszLwDetrImageLoss.loss_labelsm   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’   r7   r8   r=   ÚmaxÚvaluesr�   ÚnnÚ
functionalÚl1_lossÚfloat)rL   rM   rN   r\   r‚   r   r’   Útarget_lengthsÚ	card_predÚcard_errrn   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   rv   s       r   r   z.LwDetrImageLoss.loss_boxes.<locals>.<listcomp>­   rw   r    r   r)   Únone)Ú	reductionÚ	loss_bboxr   Ú	loss_giou)ry   rz   r7   r>   rK   r–   r—   r˜   r�   r{   r   r   )rL   rM   rN   r\   r‚   r„   Úsource_boxesr‡   r¢   rn   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   rr   s     r   r   z.LwDetrImageLoss.loss_masks.<locals>.<listcomp>È   s   € Ð-Ð-Ð- ��7”Ð-Ð-Ð-r    NéþÿÿÿÚbilinearF)ÚsizeÚmodeÚalign_cornersr   r   )Ú	loss_maskÚ	loss_dice)ry   rz   Ú_get_target_permutation_idxr   Ú	decomposer@   r–   r—   Úinterpolater;   r<   rF   r   r   )rL   rM   rN   r\   r‚   Ú
source_idxÚ
target_idxÚsource_masksr©   Útarget_masksÚvalidrn   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   ©r7   Ú	full_like)r   r,   Úsourcers   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¿   rs   s      r   r   z?LwDetrImageLoss._get_source_permutation_idx.<locals>.<listcomp>à   s   € ÐBÐBÐB©;¨F°A ÐBÐBÐBr    ©r7   r>   rJ   )rL   r\   Ú	batch_idxrµ   s       r   rz   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,   rs   Ú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   rs   rÆ   s      r   r   z?LwDetrImageLoss._get_target_permutation_idx.<locals>.<listcomp>ç   s   € ÐBÐBÐB©;¨A¨v ÐBÐBÐBr    rÁ   )rL   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)rL   ÚlossrM   rN   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          ¦   «         r8t          j        |t          j        j        ¬¦  «         t          j        ¦   «         }t          j        ||z  d¬¦  «                             ¦   «         }i }| j        D ].}	|                     |                      |	||||¦  «        ¦  «         Œ/d|v r‘t/          |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    )r6   r’   )Úop)ÚminrÒ   r©   c                 ó(   •— i | ]\  }}|d ‰› �z   |“ŒS ©rs   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Ñ   )rO   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    )ÚtrainingrO   Úitemsrk   r�   r7   r8   r™   ÚnextÚiterr•   r’   r   ÚdistÚ
all_reduceÚReduceOpÚSUMÚget_world_sizer€   Úitemrn   ÚupdaterÎ   rJ   )rL   rM   rN   rO   Úoutputs_without_aux_and_encr\   r‚   Ú
world_sizern   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ˆ	Øˆ
Ý,Ñ.Ô.ð 	/ÝŒ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    )ra   rb   rc   rj   r�   r7   rd   r�   r¥   rº   rz   r²   rÎ   r`   Ú__classcell__)ro   s   @r   rf   rf   c   sÉ   ø€ € € € € ð%ð %ð %ð %ð %ð"ð "ð "ðH €U„]�_„_ðð ñ „_ðð ð ð ð2ð ð ðD%ð %ð %ð%ð %ð %ð	Dð 	Dð 	Dð6ð 6ð 6ð 6ð 6ð 6ð 6r    rf   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)rD   rC   rE   )rÉ   r#   rÊ   )rk   rl   rm   rn   rO   r   r   )r   r   rÑ   rÒ   )rx   r¢   r£   r   c                 ó(   •— i | ]\  }}|d ‰› �z   |“ŒS rÛ   r   rÜ   s      €r   rÕ   z0LwDetrForObjectDetectionLoss.<locals>.<dictcomp>[  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 rh   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   rD   rC   rE   rf   Ú
num_labelsrm   rO   r@   Úauxiliary_lossr	   Úclass_loss_coefficientÚbbox_loss_coefficientÚgiou_loss_coefficientrI   Údecoder_layersrê   rá   r�   )r   rÉ   r’   r   ÚconfigÚoutputs_classÚoutputs_coordÚenc_outputs_classÚenc_outputs_coordÚkwargsrk   rn   Ú	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/   r7   Útorch.distributedÚdistributedrä   Útorch.nnr–   Údistributed.utilsr   Úutilsr   r   Úloss_for_object_detectionr   r	   r
   r   r   r   r   Útransformers.image_transformsr   Úscipy.optimizer   r   ÚModulerf   r  r   r    r   ú<module>r     s¤  ðð Ð Ð Ð Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à AÐ AÐ AÐ AÐ AÐ AØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ÐÑÔð 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    