Ë
    ÛÓ^jY<  ã                   óä   — 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j0                  «      Z	 	 	 	 dd„Zy)é    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y)ÚLwDetrHungarianMatcherc                 óv  — |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
  }|j                  }|j                  t        j                  «      }|
j                  t        j                  «      }
t        j                  ||
d¬«      }|j                  |«      }t        t        |«      t        |
«      «       }| j                  |z  | j                  |z  z   | j                  |z  z   }|j                  ||d«      j!                  «       }|D �cg c]  }t#        |d   «      ‘Œ }}g }||z  }|j%                  |d¬«      }t'        |«      D ]¤  }||   }t)        |j%                  |d«      «      D ��cg c]  \  }}t+        ||   «      ‘Œ }}}|dk(  r|}ŒIt-        ||«      D ��cg c]E  \  }}t/        j0                  |d   |d   ||z  z   g«      t/        j0                  |d   |d   g«      f‘ŒG }}}Œ¦ |D ��cg c]O  \  }}t        j2                  |t        j4                  ¬«      t        j2                  |t        j4                  ¬«      f‘ŒQ c}}S c c}w 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éÿÿÿÿ©Údim)Údtype)ÚshapeÚflattenÚsigmoidÚtorchÚcatÚlogr   ÚtoÚfloat32Úcdistr   r   Ú	bbox_costÚ
class_costÚ	giou_costÚviewÚcpuÚlenÚsplitÚrangeÚ	enumerater   ÚzipÚnpÚconcatenateÚ	as_tensorÚint64) ÚselfÚoutputsÚtargetsÚ
group_detrÚ
batch_sizeÚnum_queriesÚout_probÚout_bboxÚvÚ
target_idsÚtarget_bboxÚalphaÚgammaÚneg_cost_classÚpos_cost_classr&   r   r%   r'   Úcost_matrixÚsizesÚindicesÚgroup_num_queriesÚcost_matrix_listÚgroup_idÚgroup_cost_matrixÚiÚcÚgroup_indicesÚindice1Úindice2Újs                                    úi/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/loss/loss_lw_detr.pyÚforwardzLwDetrHungarianMatcher.forward(   s=  € ð #*¨(Ñ"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ˆ
ð —‘ˆØ—;‘;œuŸ}™}Ó-ˆØ!—n‘n¤U§]¡]Ó3ˆÜ—K‘K ¨+¸Ô;ˆ	Ø—L‘L Ó'ˆ	ô )Ô)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ØˆØ'¨:Ñ5ÐØ&×,Ñ,Ð->ÀAÐ,ÓFÐÜ˜jÓ)ò 	ˆHØ 0°Ñ :ÐÜENÐO`×OfÑOfÐglÐnpÓOqÓEr×s¹T¸QÀÔ2°1°Q±4Õ8ÐsˆMÑsØ˜1Š}Ø'‘ô -0°¸Ó,G÷ñ
 )˜ ô Ÿ™¨°©
°G¸A±JÐARÐU]ÑA]Ñ4]Ð'^Ó_ÜŸ™¨°©
°G¸A±JÐ'?Ó@òð�ò ð	ð ls×sÑcgÐcdÐfg”—‘ ¬%¯+©+Ô6¼¿¹ÈÔQV×Q\ÑQ\Ô8]Ò^ÓsÐsùòS  DùÚ =ùò. 3ùó tùóùó ts&   Á!LÂLÇL$È<L)É.A
L/ËAL5N)Ú__name__Ú
__module__Ú__qualname__r   Úno_gradrP   © ó    rO   r   r   '   s   „ Ø€U‡]�]ƒ_ñ6tó ñ6trV   r   c                   óv   ‡ — 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                 óh   •— t         ‰| �  «        || _        || _        || _        || _        || _        y ©N)ÚsuperÚ__init__ÚmatcherÚnum_classesÚfocal_alphaÚlossesr6   )r3   r]   r^   r_   r`   r6   Ú	__class__s         €rO   r\   zLwDetrImageLoss.__init__c   s3   ø€ Ü‰ÑÔØˆŒØ&ˆÔØ&ˆÔØˆŒØ$ˆ�rV   c           	      óv  — d|vrt        d«      ‚|d   }|j                  }| j                  |«      }t        j                  t        ||«      D ��	�
cg c]  \  }\  }	}
|d   |
   ‘Œ c}
}	}«      }| j                  }d}|d   |   }t        j                  t        ||«      D ��	�cg c]  \  }\  }	}|d   |   ‘Œ c}}	}d¬«      }t        j                  t        t        |j                  «       «      t        |«      «      d   «      }|j                  |«      }|j                  «       j                  «       }|j                  «       }t        j                  |«      }|j                  |«      j                  |«      }||fz   }||   j                  |«      |j                  d	|z
  «      z  }t        j                   |d
«      j                  «       j                  |«      }|||<   d	|z
  ||<   | |j#                  «       z  |d	|z
  j#                  «       z  z
  }|j%                  «       |z  }d|i}|S c c}
}	}w c c}}	}w )Nr   z#No logits were found in the outputsr   r   r   r   r   r   r   g{®Gáz„?Úloss_ce)ÚKeyErrorr   Ú_get_source_permutation_idxr   r    r.   r_   Údiagr	   r   Údetachr"   Úcloner   Ú
zeros_likeÚpowÚclampr!   Úsum)r3   r4   r5   rD   Ú	num_boxesÚsource_logitsr   ÚidxÚtÚ_ÚJÚtarget_classes_or>   r?   Ú	src_boxesrI   Útarget_boxesÚiou_targetsÚpos_iousÚprobÚpos_weightsÚneg_weightsÚpos_indÚpos_qualityrc   r`   s                             rO   Úloss_labelszLwDetrImageLoss.loss_labelsl   s  € Ø˜7Ñ"ÜÐ@ÓAÐAØ Ñ)ˆØ×#Ñ#ˆà×.Ñ.¨wÓ7ˆÜ Ÿ9™9ÌCÐPWÐY`ÓLa×%bÐ%b¹y¸qÁ&À1Àa a¨Ñ&7¸Ó&:Ô%bÓcÐØ× Ñ ˆØˆØ˜LÑ)¨#Ñ.ˆ	Ü—y‘yÄÀWÈgÓAV×!WÐ!W±I°A±v¸¸1 ! G¡*¨Q£-Ô!WÐ]^Ô_ˆÜ—j‘jÜÔ,¨Y×-=Ñ-=Ó-?Ó@ÔBZÐ[gÓBhÓiÐjkÑló
ˆð "—n‘n UÓ+ˆØ×$Ñ$Ó&×-Ñ-Ó/ˆØ×$Ñ$Ó&ˆä×&Ñ& }Ó5ˆà—h‘h˜u“o×(Ñ(¨Ó/ˆØÐ)Ð+Ñ+ˆà˜7‘m×'Ñ'¨Ó.°·±¸aÀ%¹iÓ1HÑHˆÜ—k‘k +¨tÓ4×;Ñ;Ó=×@Ñ@ÀÓGˆà*ˆ�GÑØ  ;™ˆ�GÑØ�, §¡£Ñ+¨k¸QÀ¹X¿N¹NÓ<LÑ.LÑLˆØ—+‘+“- )Ñ+ˆØ˜WÐ%ˆàˆùô7 &cùô "Xs   ÁH-Â$H4c           	      óŠ  — |d   }|j                   }t        j                  |D �cg c]  }t        |d   «      ‘Œ c}|¬«      }|j	                  «       j                  d«      j                  dkD  j                  d«      }	t        j                  j                  |	j                  «       |j                  «       «      }
d|
i}|S c c}w )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   r   )Údevicer   g      à?r   Úcardinality_error)r   r   r1   r*   r   ÚmaxÚvaluesrl   ÚnnÚ
functionalÚl1_lossÚfloat)r3   r4   r5   rD   rm   r   r   r;   Útarget_lengthsÚ	card_predÚcard_errr`   s               rO   Úloss_cardinalityz LwDetrImageLoss.loss_cardinality�   s¥   € ð ˜Ñ"ˆØ—‘ˆÜŸ™È'Ö)RÀQ¬#¨a°Ñ.?Õ*@Ò)RÐ[aÔbˆà—^‘^Ó%×)Ñ)¨"Ó-×4Ñ4°sÑ:×?Ñ?ÀÓBˆ	Ü—=‘=×(Ñ(¨¯©Ó):¸N×<PÑ<PÓ<RÓSˆØ% xÐ0ˆØˆùò *Ss   ¥C c           	      óê  — d|vrt        d«      ‚| j                  |«      }|d   |   }t        j                  t	        ||«      D ���	cg c]  \  }\  }}	|d   |	   ‘Œ c}	}}d¬«      }
t
        j                  j                  ||
d¬«      }i }|j                  «       |z  |d<   d	t        j                  t        t        |«      t        |
«      «      «      z
  }|j                  «       |z  |d
<   |S c c}	}}w )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 outputsr   r   r   Únone)Ú	reductionÚ	loss_bboxr   Ú	loss_giou)rd   re   r   r    r.   rƒ   r„   r…   rl   rf   r   r   )r3   r4   r5   rD   rm   ro   Úsource_boxesrp   rq   rI   ru   rŽ   r`   r�   s                 rO   Ú
loss_boxeszLwDetrImageLoss.loss_boxes¡   sñ   € ð ˜wÑ&ÜÐ@ÓAÐAØ×.Ñ.¨wÓ7ˆØ˜|Ñ,¨SÑ1ˆÜ—y‘yÄÀWÈgÓAV×!WÐ!W±I°A±v¸¸1 ! G¡*¨Q£-Ô!WÐ]^Ô_ˆä—M‘M×)Ñ)¨,¸ÐPVÐ)ÓWˆ	àˆØ'Ÿm™m›o°	Ñ9ˆˆ{ÑàœŸ
™
ÜÔ 8¸Ó FÔH`ÐamÓHnÓoó
ñ 
ˆ	ð (Ÿm™m›o°	Ñ9ˆˆ{ÑØˆùô "Xs   ÁC.c                 ó:  — d|vrt        d«      ‚| j                  |«      }| j                  |«      }|d   }||   }|D �cg c]  }|d   ‘Œ	 }	}t        |	«      j	                  «       \  }
}|
j                  |«      }
|
|   }
t        j                  j                  |dd…df   |
j                  dd dd¬«      }|dd…d	f   j                  d
«      }|
j                  d
«      }
|
j                  |j                  «      }
t        ||
|«      t        ||
|«      dœ}|S c c}w )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 outputsÚmasksNéþÿÿÿÚbilinearF)ÚsizeÚmodeÚalign_cornersr   r   )Ú	loss_maskÚ	loss_dice)rd   re   Ú_get_target_permutation_idxr   Ú	decomposer"   rƒ   r„   Úinterpolater   r   r(   r   r
   )r3   r4   r5   rD   rm   Ú
source_idxÚ
target_idxÚsource_masksrp   r”   Útarget_masksÚvalidr`   s                rO   Ú
loss_maskszLwDetrImageLoss.loss_masksº   s:  € ð ˜wÑ&ÜÐ@ÓAÐAà×5Ñ5°gÓ>ˆ
Ø×5Ñ5°gÓ>ˆ
Ø˜|Ñ,ˆØ# JÑ/ˆØ%,Ö- ��7“Ð-ˆÐ-ä<¸UÓC×MÑMÓOÑˆ�eØ#—‘ |Ó4ˆØ# JÑ/ˆô —}‘}×0Ñ0Øš˜D˜Ñ!¨×(:Ñ(:¸2¸3Ð(?ÀjÐ`eð 1ó 
ˆð $¢A q DÑ)×1Ñ1°!Ó4ˆà#×+Ñ+¨AÓ.ˆØ#×(Ñ(¨×);Ñ);Ó<ˆä+¨L¸,È	ÓRÜ" <°¸yÓIñ
ˆð ˆùò% .s   Á Dc                 ó  — t        j                  t        |«      D ���cg c]  \  }\  }}t        j                  ||«      ‘Œ  c}}}«      }t        j                  |D ��cg c]  \  }}|‘Œ	 c}}«      }||fS c c}}}w c c}}w rZ   ©r   r    r-   Ú	full_like)r3   rD   rI   Úsourcerq   Ú	batch_idxrŸ   s          rO   re   z+LwDetrImageLoss._get_source_permutation_idxÜ   si   € ä—I‘IÔPYÐZaÓPb×cÐc¹n¸aÁÀ&È!œuŸ™¨v°qÕ9ÔcÓdˆ	Ü—Y‘Y¸'×B©;¨F°A¢ÓBÓCˆ
Ø˜*Ð$Ð$ùô dùÛBó   Ÿ#A7ÁA>
c                 ó  — t        j                  t        |«      D ���cg c]  \  }\  }}t        j                  ||«      ‘Œ  c}}}«      }t        j                  |D ��cg c]  \  }}|‘Œ	 c}}«      }||fS c c}}}w c c}}w rZ   r¦   )r3   rD   rI   rq   Útargetr©   r    s          rO   rœ   z+LwDetrImageLoss._get_target_permutation_idxã   si   € ä—I‘IÔPYÐZaÓPb×cÐc¹n¸aÁÀ!ÀVœuŸ™¨v°qÕ9ÔcÓdˆ	Ü—Y‘Y¸'×B©;¨A¨v¢ÓBÓCˆ
Ø˜*Ð$Ð$ùô dùÛBrª   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)r3   Úlossr4   r5   rD   rm   Úloss_maps          rO   Úget_losszLwDetrImageLoss.get_lossé   s^   € à×&Ñ&Ø×0Ñ0Ø—_‘_Ø—_‘_ñ	
ˆð �xÑÜ˜u T F¨.Ð9Ó:Ð:Øˆx˜‰~˜g w°¸ÓCÐCrV   c           
      ód  — | j                   r| j                  nd}|j                  «       D ��ci c]  \  }}|dk7  sŒ|dk7  sŒ||“Œ }}}| j                  |||«      }t	        d„ |D «       «      }||z  }t        j                  |gt
        j                  t        t        |j                  «       «      «      j                  ¬«      }d}	t        j                  «       rWt        j                  «       rCt        j                  |t        j                   j"                  ¬«       t        j$                  «       }	t        j&                  ||	z  d¬«      j)                  «       }i }
| j*                  D ]&  }|
j-                  | j/                  |||||«      «       Œ( d|v r�t1        |d   «      D ]~  \  }}| j                  |||«      }| j*                  D ]W  }|dk(  rŒ	| j/                  |||||«      }|j                  «       D ��ci c]  \  }}|d	|› �z   |“Œ }}}|
j-                  |«       ŒY Œ€ d|v rv|d   }| j                  |||¬
«      }| j*                  D ]N  }| j/                  |||||«      }|j                  «       D ��ci c]  \  }}|dz   |“Œ }}}|
j-                  |«       ŒP |
S c c}}w c c}}w c c}}w )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   Úenc_outputsÚauxiliary_outputsc              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)r   N)r*   )Ú.0rp   s     rO   ú	<genexpr>z*LwDetrImageLoss.forward.<locals>.<genexpr>  s   è ø€ Ò@°1œ˜A˜nÑ-×.Ñ@ùs   ‚)r   r   )Úop)Úminr”   rq   )r6   Ú_enc)Útrainingr6   Úitemsr]   rl   r   r1   r†   ÚnextÚiterr‚   r   ÚdistÚis_availableÚis_initializedÚ
all_reduceÚReduceOpÚSUMÚget_world_sizerk   Úitemr`   Úupdater³   r-   )r3   r4   r5   r6   Úkr;   Úoutputs_without_aux_and_encrD   rm   Ú
world_sizer`   r±   rI   r¶   Úl_dictrµ   s                   rO   rP   zLwDetrImageLoss.forwardô   sŽ  € ð )-¯ª�T—_’_¸1ˆ
à$Ÿ]™]›_÷'
Ù�Q˜°°]Ó0BÀqÐL_ÓG_ˆAˆq‰Dð'
Ð#ñ '
ð
 —,‘,Ð:¸GÀZÓPˆô Ñ@¸Ô@Ó@ˆ	Ø 
Ñ*ˆ	Ü—O‘O Y K´u·{±{Ì4ÔPTÐU\×UcÑUcÓUeÓPfÓKg×KnÑKnÔoˆ	Øˆ
Ü×ÑÔ¤4×#6Ñ#6Ô#8Ü�O‰O˜I¬$¯-©-×*;Ñ*;Õ<Ü×,Ñ,Ó.ˆJÜ—K‘K 	¨JÑ 6¸AÔ>×CÑCÓEˆ	ð ˆØ—K‘Kò 	UˆDØ�M‰M˜$Ÿ-™-¨¨g°wÀÈÓSÕTð	Uð  'Ñ)Ü(1°'Ð:MÑ2NÓ(Oò *Ñ$�Ð$ØŸ,™,Ð'8¸'À:ÓN�Ø ŸK™Kò *�DØ˜w’à Ø!Ÿ]™]¨4Ð1BÀGÈWÐV_Ó`�FØ9?¿¹»×H±°°A˜a A a S '™k¨1™nÐH�FÑHØ—M‘M &Õ)ñ*ð*ð ˜GÑ#Ø! -Ñ0ˆKØ—l‘l ;°ÀJ�lÓOˆGØŸ™ò &�ØŸ™ t¨[¸'À7ÈIÓV�Ø4:·L±L³N×C©D¨A¨q˜!˜f™* a™-ÐC�ÑCØ—‘˜fÕ%ð&ð
 ˆùóU'
ùó> Iùó Ds   ®J ¼J ÁJ Ç9J&
É8J,)rQ   rR   rS   r\   r}   r   rT   rŠ   r‘   r¤   re   rœ   r³   rP   Ú__classcell__)ra   s   @rO   rX   rX   b   sJ   ø„ ô%ò"ðH €U‡]�]ƒ_ñó ðò ò2òD%ò%ò	Dö6rV   rX   c	           
      óP  ‡‡— t        |j                  |j                  |j                  ¬«      }
g d¢}t	        |
|j
                  |j                  ||j                  ¬«      }|j                  |«       i }d }| |d<   ||d<   ||dœ|d<   |j                  rt        ||«      }||d<    |||«      Š|j                  |j                  d	œŠ|j                  ‰d
<   |j                  rii }t        |j                  dz
  «      D ];  }|j!                  ‰j#                  «       D ��ci c]  \  }}|d|› �z   |“Œ c}}«       Œ= ‰j!                  |«       ‰j#                  «       D ��ci c]  \  }}|dz   |“Œ }}}‰j!                  |«       t%        ˆˆfd„‰D «       «      }|‰|fS c c}}w c c}}w )N)r&   r%   r'   )r®   r   r¯   )r]   r^   r_   r`   r6   r   r   )r   r   rµ   r¶   )rc   rŽ   r�   r   rq   r¼   c              3   ó>   •K  — | ]  }|‰v sŒ‰|   ‰|   z  –— Œ y ­wrZ   rU   )r¸   rÊ   Ú	loss_dictÚweight_dicts     €€rO   r¹   z/LwDetrForObjectDetectionLoss.<locals>.<genexpr>^  s%   øè ø€ ÒT°À1ÈÒCSˆy˜‰|˜k¨!™nÕ,ÑTùs   ƒ	�)r   r&   r%   r'   rX   Ú
num_labelsr_   r6   r"   Úauxiliary_lossr   Úclass_loss_coefficientÚbbox_loss_coefficientÚgiou_loss_coefficientr,   Údecoder_layersrÉ   r¾   rl   )r   r®   r   r   ÚconfigÚoutputs_classÚoutputs_coordÚenc_outputs_classÚenc_outputs_coordÚkwargsr]   r`   Ú	criterionÚoutputs_lossr¶   Úaux_weight_dictrI   rÊ   r;   Úenc_weight_dictr±   rÑ   rÒ   s                        @@rO   ÚLwDetrForObjectDetectionLossrã   -  s¼  ù€ ô %Ø×$Ñ$°×0@Ñ0@ÈF×L\ÑL\ô€Gò 0€FÜØØ×%Ñ%Ø×&Ñ&ØØ×$Ñ$ô€Ið ‡L�L�Ôà€LØÐØ#€L�ÑØ!+€L�Ñà#Ø'ñ#€L�Ñð ×ÒÜ)¨-¸ÓGÐØ,=ˆÐ(Ñ)Ù˜,¨Ó/€Ià$×;Ñ;È&×JfÑJfÑg€KØ%×;Ñ;€K�ÑØ×ÒØˆÜ�v×,Ñ,¨qÑ0Ó1ò 	UˆAØ×"Ñ"¸{×?PÑ?PÓ?R×#S±t°q¸! A¨!¨A¨3¨¡K°¡NÓ#SÕTð	Uà×Ñ˜?Ô+Ø1<×1BÑ1BÓ1D×E©¨¨A�q˜6‘z 1‘}ÐE€OÑEØ×Ñ�Ô'ÜÔT°iÔTÓT€DØ�Ð-Ð-Ð-ùó $TùãEs   ÄFÅF")NNNN)Únumpyr/   r   Útorch.distributedÚdistributedrÁ   Útorch.nnrƒ   Úutilsr   r   Úloss_for_object_detectionr   r   r	   r
   r   r   r   Útransformers.image_transformsr   Úscipy.optimizer   r   ÚModulerX   rã   rU   rV   rO   ú<module>rí      sq   ðó Û Ý  Ý ç ;÷÷ ñ ñ ÔÝFñ ÔÝ4ô8tÐ-ô 8tôvH�b—i‘iô Hðb ØØØô2.rV   