Ë
    S^(h§  ã                   ó¦   — 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	m
Z
mZmZ  e«       rd dlmZ  G d„ d	e«      Z G d
„ de	«      Z	 dd„Z	 dd„Zy)é    Né   )Úcenter_to_corners_format)Úis_scipy_availableé   )ÚHungarianMatcherÚ	ImageLossÚ_set_aux_lossÚgeneralized_box_iouÚsigmoid_focal_loss)Úlinear_sum_assignmentc                   ó:   — e Zd Z ej                  «       d„ «       Zy)ÚDeformableDetrHungarianMatcherc           	      óŽ  — |d   j                   dd \  }}|d   j                  dd«      j                  «       }|d   j                  dd«      }t        j                  |D �cg c]  }|d   ‘Œ	 c}«      }t        j                  |D �cg c]  }|d   ‘Œ	 c}«      }	d	}
d
}d|
z
  ||z  z  d|z
  dz   j                  «        z  }|
d|z
  |z  z  |dz   j                  «        z  }|dd…|f   |dd…|f   z
  }t        j                  ||	d¬«      }t        t        |«      t        |	«      «       }| j                  |z  | j                  |z  z   | j                  |z  z   }|j                  ||d«      j                  «       }|D �cg c]  }t        |d   «      ‘Œ }}t        |j!                  |d«      «      D ��cg c]  \  }}t#        ||   «      ‘Œ }}}|D ��cg c]O  \  }}t        j$                  |t        j&                  ¬«      t        j$                  |t        j&                  ¬«      f‘ŒQ c}}S c c}w c c}w c c}w c c}}w c c}}w )zš
        Differences:
        - out_prob = outputs["logits"].flatten(0, 1).sigmoid() instead of softmax
        - class_cost uses alpha and gamma
        ÚlogitsNr   r   r   Ú
pred_boxesÚclass_labelsÚboxesg      Ð?g       @g:Œ0âŽyE>)Úpéÿÿÿÿ)Údtype)ÚshapeÚflattenÚsigmoidÚtorchÚcatÚlogÚcdistr
   r   Ú	bbox_costÚ
class_costÚ	giou_costÚviewÚcpuÚlenÚ	enumerateÚsplitr   Ú	as_tensorÚint64)ÚselfÚoutputsÚtargetsÚ
batch_sizeÚnum_queriesÚout_probÚout_bboxÚvÚ
target_idsÚtarget_bboxÚalphaÚgammaÚneg_cost_classÚpos_cost_classr   r   r    Úcost_matrixÚsizesÚiÚcÚindicesÚjs                          úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/loss/loss_deformable_detr.pyÚforwardz&DeformableDetrHungarianMatcher.forward   s3  € ð #*¨(Ñ"3×"9Ñ"9¸"¸1Ð"=Ñˆ
�Kð ˜8Ñ$×,Ñ,¨Q°Ó2×:Ñ:Ó<ˆØ˜<Ñ(×0Ñ0°°AÓ6ˆô —Y‘Y¸7ÖC°a  .Ó 1ÒCÓDˆ
Ü—i‘i°WÖ =°  7£Ò =Ó>ˆð ˆØˆØ˜e™)¨°%©Ñ8¸aÀ(¹lÈTÑ>Q×=VÑ=VÓ=XÐ<XÑYˆØ 1 x¡<°EÑ"9Ñ:ÀÈ4Á×?TÑ?TÓ?VÐ>VÑWˆØ#¢A z MÑ2°^ÂAÀzÀMÑ5RÑRˆ
ô —K‘K ¨+¸Ô;ˆ	ô )Ô)AÀ(Ó)KÔMeÐfqÓMrÓsÐsˆ	ð —n‘n yÑ0°4·?±?ÀZÑ3OÑOÐRV×R`ÑR`ÐclÑRlÑlˆØ!×&Ñ& z°;ÀÓC×GÑGÓIˆà*1Ö2 Q”�Q�w‘Z•Ð2ˆÐ2Ü;DÀ[×EVÑEVÐW\Ð^`ÓEaÓ;b×c±4°1°aÔ(¨¨1©Õ.ÐcˆÑcØkr×sÑcgÐcdÐfg”—‘ ¬%¯+©+Ô6¼¿¹ÈÔQV×Q\ÑQ\Ô8]Ò^ÓsÐsùò-  DùÚ =ùò& 3ùÛcùÛss   Á!H,ÂH1Å?H6Æ4H;ÇAIN)Ú__name__Ú
__module__Ú__qualname__r   Úno_gradr=   © ó    r<   r   r      s   „ Ø€U‡]�]ƒ_ñ#tó ñ#trC   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚDeformableDetrImageLossc                 óz   — t         j                  j                  | «       || _        || _        || _        || _        y ©N)ÚnnÚModuleÚ__init__ÚmatcherÚnum_classesÚfocal_alphaÚlosses)r(   rK   rL   rM   rN   s        r<   rJ   z DeformableDetrImageLoss.__init__<   s2   € Ü
�	‰	×Ñ˜4Ô ØˆŒØ&ˆÔØ&ˆÔØˆ�rC   c           	      óö  — d|vrt        d«      ‚|d   }| j                  |«      }t        j                  t	        ||«      D ���	cg c]  \  }\  }}	|d   |	   ‘Œ c}	}}«      }
t        j
                  |j                  dd | j                  t        j                  |j                  ¬«      }|
||<   t        j                  |j                  d   |j                  d   |j                  d   dz   g|j                  |j                  |j                  ¬	«      }|j                  d|j                  d
«      d«       |dd…dd…dd
…f   }t        |||| j                   d¬«      |j                  d   z  }d|i}|S c c}	}}w )z 
        Classification loss (Binary focal loss) targets dicts must contain the key "class_labels" containing a tensor
        of dim [nb_target_boxes]
        r   z#No logits were found in the outputsr   Nr   )r   Údevicer   r   )r   ÚlayoutrP   r   )r2   r3   Úloss_ce)ÚKeyErrorÚ_get_source_permutation_idxr   r   ÚzipÚfullr   rL   r'   rP   Úzerosr   rQ   Úscatter_Ú	unsqueezer   rM   )r(   r)   r*   r:   Ú	num_boxesÚsource_logitsÚidxÚtÚ_ÚJÚtarget_classes_oÚtarget_classesÚtarget_classes_onehotrR   rN   s                  r<   Úloss_labelsz#DeformableDetrImageLoss.loss_labelsD   sƒ  € ð
 ˜7Ñ"ÜÐ@ÓAÐAØ Ñ)ˆà×.Ñ.¨wÓ7ˆÜ Ÿ9™9ÌCÐPWÐY`ÓLa×%bÐ%b¹y¸qÁ&À1Àa a¨Ñ&7¸Ó&:Ô%bÓcÐÜŸ™Ø×Ñ  Ð# T×%5Ñ%5¼U¿[¹[ÐQ^×QeÑQeô
ˆð /ˆ�sÑä %§¡Ø× Ñ  Ñ# ]×%8Ñ%8¸Ñ%;¸]×=PÑ=PÐQRÑ=SÐVWÑ=WÐXØ×%Ñ%Ø ×'Ñ'Ø ×'Ñ'ô	!
Ðð 	×&Ñ& q¨.×*BÑ*BÀ2Ó*FÈÔJà 5²aº¸C¸R¸C°iÑ @Ðä˜}Ð.CÀYÐVZ×VfÑVfÐnoÔpØ×!Ñ! !Ñ$ñ%ð 	ð ˜WÐ%ˆàˆùô+ &cs   ÁE4N)r>   r?   r@   rJ   rc   rB   rC   r<   rE   rE   ;   s   „ òórC   rE   c           
      óþ  ‡‡— t        |j                  |j                  |j                  ¬«      }	g d¢}
t	        |	|j
                  |j                  |
¬«      }|j                  |«       i }| |d<   ||d<   ||d<   d }|j                  rt        ||«      }||d<    |||«      Šd|j                  d	œŠ|j                  ‰d
<   |j                  ‰d<   |j                  ‰d<   |j                  rii }t        |j                  dz
  «      D ];  }|j!                  ‰j#                  «       D ��ci c]  \  }}|d|› �z   |“Œ c}}«       Œ= ‰j!                  |«       t%        ˆˆfd„‰j'                  «       D «       «      }|‰|fS c c}}w )N©r   r   r    )Úlabelsr   ÚcardinalityÚmasks©rK   rL   rM   rN   r   r   Ú
pred_masksÚauxiliary_outputsr   ©rR   Ú	loss_bboxÚ	loss_giouÚ	loss_maskÚ	loss_dicer^   c              3   ó>   •K  — | ]  }|‰v sŒ‰|   ‰|   z  –— Œ y ­wrG   rB   ©Ú.0ÚkÚ	loss_dictÚweight_dicts     €€r<   ú	<genexpr>z4DeformableDetrForSegmentationLoss.<locals>.<genexpr>‹   ó%   øè ø€ Ò[°È!È{ÒJZˆy˜‰|˜k¨!™nÕ,Ñ[ùó   ƒ	�)r   r   r   r    rE   Ú
num_labelsrM   ÚtoÚauxiliary_lossr	   Úbbox_loss_coefficientÚgiou_loss_coefficientÚmask_loss_coefficientÚdice_loss_coefficientÚrangeÚdecoder_layersÚupdateÚitemsÚsumÚkeys)r   rf   rP   r   rj   ÚconfigÚoutputs_classÚoutputs_coordÚkwargsrK   rN   Ú	criterionÚoutputs_lossrk   Úaux_weight_dictr8   rt   r/   Úlossru   rv   s                      @@r<   Ú!DeformableDetrForSegmentationLossr�   f   s�  ù€ ô ¨&×*;Ñ*;Àv×GWÑGWÐci×csÑcsÔt€Gâ8€FÜ'ØØ×%Ñ%Ø×&Ñ&Øô	€Ið ‡L�L�Ôà€LØ#€L�ÑØ!+€L�ÑØ!+€L�ÑàÐØ×ÒÜ)¨-¸ÓGÐØ,=ˆÐ(Ñ)á˜,¨Ó/€Ià¨f×.JÑ.JÑK€KØ%×;Ñ;€K�ÑØ%×;Ñ;€K�ÑØ%×;Ñ;€K�ÑØ×ÒØˆÜ�v×,Ñ,¨qÑ0Ó1ò 	UˆAØ×"Ñ"¸{×?PÑ?PÓ?R×#S±t°q¸! A¨!¨A¨3¨¡K°¡NÓ#SÕTð	Uà×Ñ˜?Ô+äÔ[°i·n±nÓ6FÔ[Ó[€DØ�Ð-Ð-Ð-ùó	 $Ts   Ä#E9c           
      ó¸  ‡‡— t        |j                  |j                  |j                  ¬«      }g d¢}	t	        ||j
                  |j                  |	¬«      }
|
j                  |«       i }d }| |d<   ||d<   |j                  rt        ||«      }||d<    |
||«      Šd|j                  dœŠ|j                  ‰d	<   |j                  rii }t        |j                  dz
  «      D ];  }|j                  ‰j                  «       D ��ci c]  \  }}|d
|› �z   |“Œ c}}«       Œ= ‰j                  |«       t!        ˆˆfd„‰j#                  «       D «       «      }|‰|fS c c}}w )Nre   )rf   r   rg   ri   r   r   rk   r   rl   rn   r^   c              3   ó>   •K  — | ]  }|‰v sŒ‰|   ‰|   z  –— Œ y ­wrG   rB   rr   s     €€r<   rw   z7DeformableDetrForObjectDetectionLoss.<locals>.<genexpr>±   rx   ry   )r   r   r   r    rE   rz   rM   r{   r|   r	   r}   r~   r�   r‚   rƒ   r„   r…   r†   )r   rf   rP   r   r‡   rˆ   r‰   rŠ   rK   rN   r‹   rŒ   rk   r�   r8   rt   r/   rŽ   ru   rv   s                     @@r<   Ú$DeformableDetrForObjectDetectionLossr’   �   sg  ù€ ô -Ø×$Ñ$°×0@Ñ0@ÈF×L\ÑL\ô€Gò 0€FÜ'ØØ×%Ñ%Ø×&Ñ&Øô	€Ið ‡L�L�Ôà€LØÐØ#€L�ÑØ!+€L�ÑØ×ÒÜ)¨-¸ÓGÐØ,=ˆÐ(Ñ)á˜,¨Ó/€Ià¨f×.JÑ.JÑK€KØ%×;Ñ;€K�ÑØ×ÒØˆÜ�v×,Ñ,¨qÑ0Ó1ò 	UˆAØ×"Ñ"¸{×?PÑ?PÓ?R×#S±t°q¸! A¨!¨A¨3¨¡K°¡NÓ#SÕTð	Uà×Ñ˜?Ô+ÜÔ[°i·n±nÓ6FÔ[Ó[€DØ�Ð-Ð-Ð-ùó $Ts   Ä E)NN)r   Útorch.nnrH   Úimage_transformsr   Úutilsr   Úloss_for_object_detectionr   r   r	   r
   r   Úscipy.optimizer   r   rE   r�   r’   rB   rC   r<   ú<module>r˜      s\   ðÛ Ý å 7Ý &÷õ ñ ÔÝ4ô%tÐ%5ô %tôP(˜iô (ðX _có&.ðT SWô#.rC   