
    0;ji                         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dS )    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dS )DeformableDetrHungarianMatcherc                    |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
  }t          j        ||d          }t          t          |          t          |                     }| j	        |z  | j
        |z  z   | j        |z  z   }|                    ||d                                          }d |D             }d t          |                    |d                    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     `/root/voice-cloning/.venv/lib/python3.11/site-packages/transformers/loss/loss_deformable_detr.py
<listcomp>z:DeformableDetrHungarianMatcher.forward.<locals>.<listcomp>"   s    CCCa. 1CCC    c                     g | ]
}|d          S boxesr   r   s     r   r   z:DeformableDetrHungarianMatcher.forward.<locals>.<listcomp>#   s     = = =7 = = =r   g      ?g       @g:0yE>)pc                 8    g | ]}t          |d                    S r   )lenr   s     r   r   z:DeformableDetrHungarianMatcher.forward.<locals>.<listcomp>6   s"    222QQwZ222r   c                 >    g | ]\  }}t          ||                   S r   r   )r   ics      r   r   z:DeformableDetrHungarianMatcher.forward.<locals>.<listcomp>7   s)    ccc41a(1..cccr   c                     g | ]E\  }}t          j        |t           j                   t          j        |t           j                   fFS ))dtype)torch	as_tensorint64)r   r%   js      r   r   z:DeformableDetrHungarianMatcher.forward.<locals>.<listcomp>8   sH    ssscgcdfg%+666QVQ\8]8]8]^sssr   )shapeflattensigmoidr)   catlogcdistr
   r   	bbox_cost
class_cost	giou_costviewcpu	enumeratesplit)selfoutputstargets
batch_sizenum_queriesout_probout_bbox
target_idstarget_bboxalphagammaneg_cost_classpos_cost_classr4   r3   r5   cost_matrixsizesindicess                      r   forwardz&DeformableDetrHungarianMatcher.forward   s	    #*("3"9"1""=
K 8$,,Q22::<<<(00A66 YCC7CCCDD
i = =W = = =>> e)%8a(lT>Q=V=V=X=X<XY1x<E"9:4?T?T?V?V>VW#AAAzM2^AAAzM5RR
 K+;;;	 ))A()K)KMefqMrMrsss	 ny04?Z3OORVR`clRll!&&z;CCGGII22'222cc9[EVEVW\^`EaEa;b;bcccsskrssssr   N)__name__
__module____qualname__r)   no_gradrJ   r   r   r   r   r      s:        U]__#t #t _#t #t #tr   r   c                       e Zd Zd Zd ZdS )DeformableDetrImageLossc                 |    t           j                            |            || _        || _        || _        || _        d S N)nnModule__init__matchernum_classesfocal_alphalosses)r:   rV   rW   rX   rY   s        r   rU   z DeformableDetrImageLoss.__init__<   s:    
	4   &&r   c                    d|vrt          d          |d         }|                     |          }t          j        d t	          ||          D                       }t          j        |j        dd         | j        t          j        |j	                  }|||<   t          j
        |j        d         |j        d         |j        d         dz   g|j        |j        |j	        	          }	|	                    d|                    d
          d           |	dddddd
f         }	t          ||	|| j        d          |j        d         z  }
d|
i}|S )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 outputsc                 6    g | ]\  }\  }}|d          |         S r   r   )r   t_Js       r   r   z7DeformableDetrImageLoss.loss_labels.<locals>.<listcomp>N   s*    %b%b%byq&1aa&7&:%b%b%br   Nr   )r(   devicer   r   )r(   layoutr_   r!   )rC   rD   loss_ce)KeyError_get_source_permutation_idxr)   r0   zipfullr-   rW   r+   r_   zerosr(   r`   scatter_	unsqueezer   rX   )r:   r;   r<   rI   	num_boxessource_logitsidxtarget_classes_otarget_classestarget_classes_onehotra   rY   s               r   loss_labelsz#DeformableDetrImageLoss.loss_labelsD   s   
 7""@AAA)..w77 9%b%bCPWY`LaLa%b%b%bcc#T%5U[Q^Qe
 
 
 /s % #]%8%;]=PQR=SVW=WX% ' '	!
 !
 !
 	&&q.*B*B2*F*FJJJ 5aaaCRCi @}.CYVZVfnoppp!!$% 	 W%r   N)rK   rL   rM   rU   ro   r   r   r   rP   rP   ;   s2              r   rP   c                    t          |j        |j        |j                  }	g d}
t	          |	|j        |j        |
          }|                    |           i }| |d<   ||d<   ||d<   d }|j        rt          ||          }||d<    |||          d|j
        d	|j        d
<   |j        d<   |j        d<   |j        rdi }t          |j        dz
            D ]5|                    fd                                D                        6                    |           t%          fd                                D                       }||fS )Nr4   r3   r5   )labelsr   cardinalitymasksrV   rW   rX   rY   r   r   
pred_masksauxiliary_outputsr   ra   	loss_bbox	loss_giou	loss_mask	loss_dicec                 (    i | ]\  }}|d  z   |S r]   r   r   kr   r%   s      r   
<dictcomp>z5DeformableDetrForSegmentationLoss.<locals>.<dictcomp>   )    #S#S#Stq!AAK#S#S#Sr   c              3   B   K   | ]}|v |         |         z  V  d S rR   r   r   r   	loss_dictweight_dicts     r   	<genexpr>z4DeformableDetrForSegmentationLoss.<locals>.<genexpr>   :      [[!{JZJZy|k!n,JZJZJZJZ[[r   )r   r4   r3   r5   rP   
num_labelsrX   toauxiliary_lossr	   bbox_loss_coefficientgiou_loss_coefficientmask_loss_coefficientdice_loss_coefficientrangedecoder_layersupdateitemssumkeys)r   rr   r_   r   rv   configoutputs_classoutputs_coordkwargsrV   rY   	criterionoutputs_lossrw   aux_weight_dictlossr%   r   r   s                   @@@r   !DeformableDetrForSegmentationLossr   f   s    &*;vGWcicstttG888F'%&	  I LLL#L!+L!+L >)-GG,=()	,//If.JKKK%;K%;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?+++[[[[[inn6F6F[[[[[D---r   c                    t          |j        |j        |j                  }g d}	t	          ||j        |j        |	          }
|
                    |           i }d }| |d<   ||d<   |j        rt          ||          }||d<    |
||          d|j
        d|j        d	<   |j        rdi }t          |j        dz
            D ]5|                    fd
                                D                        6                    |           t!          fd                                D                       }||fS )Nrq   )rr   r   rs   ru   r   r   rw   r   rx   rz   c                 (    i | ]\  }}|d  z   |S r~   r   r   s      r   r   z8DeformableDetrForObjectDetectionLoss.<locals>.<dictcomp>   r   r   c              3   B   K   | ]}|v |         |         z  V  d S rR   r   r   s     r   r   z7DeformableDetrForObjectDetectionLoss.<locals>.<genexpr>   r   r   )r   r4   r3   r5   rP   r   rX   r   r   r	   r   r   r   r   r   r   r   r   )r   rr   r_   r   r   r   r   r   rV   rY   r   r   rw   r   r   r%   r   r   s                  @@@r   $DeformableDetrForObjectDetectionLossr      s    -$0@FL\  G 0//F'%&	  I LLL#L!+L >)-GG,=()	,//If.JKKK%;K ,v,q011 	U 	UA""#S#S#S#S{?P?P?R?R#S#S#STTTT?+++[[[[[inn6F6F[[[[[D---r   )NN)r)   torch.nnrS   image_transformsr   utilsr   loss_for_object_detectionr   r   r	   r
   r   scipy.optimizer   r   rP   r   r   r   r   r   <module>r      sO          7 7 7 7 7 7 & & & & & &               5444444%t %t %t %t %t%5 %t %t %tP( ( ( ( (i ( ( (X _c&. &. &. &.T SW#. #. #. #. #. #.r   