
    Ng                     B   d dl Z d dlZd dlZd dlZd dlZd dlmZ 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mZ d dlmc mZ  ej        e          Zg dZ G d d          Z G d	 d
e          Z G d de          Z G d de          Z G d de          ZddZdS )    N)NamedTemporaryFile)COCOeval   )synchronizeis_main_processall_gather_container)CocoEvaluatorPascalEvaluatorOpenImagesEvaluatorcreate_evaluatorc                   J    e Zd Zd	dZd Zd Zej        d
d            Zd Z	dS )	EvaluatorFc                 L    || _         d | _        || _        g | _        g | _        d S N)distributeddistributed_device	pred_yxyximg_indicespredictions)selfr   r   s      L/var/www/html/ai-engine/env/lib/python3.11/site-packages/effdet/evaluator.py__init__zEvaluator.__init__   s/    &"&"    c                    | j         rV| j        |j        | _        t                       t	          |          }t	          |d                   }t                      sd S n|d         }|                                                                }|                                                                }t          ||          D ]9\  }}| j	        
                    |           | j        
                    |           :d S )Nimg_idx)r   r   devicer   r   r   cpunumpyzipr   appendr   )r   
detectionstargetr   r   img_detss         r   add_predictionszEvaluator.add_predictions#   s     
	,&.*4*;'MMM-j99J.vi/@AAK"$$  !+K^^%%++--
!oo''--//!$[*!=!= 	. 	.GX##G,,,##H----	. 	.r   c                 `   g }g }t          | j        | j                  D ]\  }}| j        j        |         }|                    |           | j        r|d d g df         |d d ddf<   |d d dfxx         |d d df         z  cc<   |d d dfxx         |d d df         z  cc<   |D ]}t          |d                   }|dk     r nct          t          |          |dd         
                                |t          |d                   	          }|                    |           ||fS )
Nr   r         r      r(   r'   r   gMbP?   )image_idbboxscorecategory_id)r   r   r   _datasetimg_idsr    r   floatdictinttolist)	r   coco_predictionscoco_idsr   r#   img_iddetr-   coco_dets	            r   _coco_predictionszEvaluator._coco_predictions6   sj   !$T%5t7G!H!H 	2 	2GX]*73FOOF###~ =#+AAA|||O#<AaC QQQTNNNhqqq!tn,NNNQQQTNNNhqqq!tn,NNN 	2 	2c!f4<<E [[QqS** #CF	- - -
 !''1111))r    c                     d S r    )r   output_result_files     r   evaluatezEvaluator.evaluateO   s    r   c                     | j         rt          j                    dk    rTt          | j                  sJ |                                 \  }}t          j        |t          |d          d           d S d S )Nr   wr)   indent)	r   distget_ranklenr   r:   jsondumpopen)r   result_filer5   r6   s       r   savezEvaluator.saveS   s|     	J4=??a#7#7t'((((()-)?)?)A)A&hI&[#(>(>qIIIIII $8#7r   NFFr;   )
__name__
__module____qualname__r   r$   r:   abcabstractmethodr?   rK   r=   r   r   r   r      s~           . . .&* * *2 	   J J J J Jr   r   c                   .     e Zd Zd fd	Zd ZddZ xZS )r	   Fc                     t                                          ||           |j        | _        |j        j        | _        d S )Nr   r   )superr   parserr/   cocococo_apir   datasetr   r   	__class__s       r   r   zCocoEvaluator.__init__]   s9    [IFFF+r   c                 "    g | _         g | _        d S r   )r   r   r   s    r   resetzCocoEvaluator.resetb   s    r   r;   c                 ,   | j         rt          j                    dk    rt          | j                  sJ |                                 \  }}|r@t          j        |t          |d          d           | j	        
                    |          }nt          dddd          5 }t          j        ||d           d d d            n# 1 swxY w Y   | j	        
                    |j                  }	 t          j        |j                   n# t          $ r Y nw xY wt!          | j	        |d	          }||j        _        |                                 |                                 |                                 |j        d         }| j         r.t          j        t1          j        || j        
          d           nDt1          j        d| j        
          }t          j        |d           |                                }|                                  |S )Nr   rA   r)   rB   coco_z.jsonF)prefixsuffixdeletemoder,   r   )r   rD   rE   rF   r   r:   rG   rH   rI   rY   loadResr   nameosunlinkOSErrorr   paramsimgIdsr?   
accumulate	summarizestats	broadcasttorchtensorr   itemr_   )r   r>   r5   r6   resultstmpfile	coco_evalmetrics           r   r?   zCocoEvaluator.evaluatef   sM    	#4=??a#7#7t'((((()-)?)?)A)A&h! 
	*D1CS,I,IRSTTTT-//0BCC'wwu[^___ CcjI.BBBBC C C C C C C C C C C C C C C-//==Igl++++   D @@I&.I#     """!!!_Q'F Xu|F4;RSSSUVWWW\!D,CDDDFN61%%%[[]]F

s$   "CC
C
1D 
DDrL   rM   )rN   rO   rP   r   r_   r?   __classcell__r\   s   @r   r	   r	   [   s`        , , , , , ,
         r   r	   c                   B     e Zd ZdZddej        f fd	Zd ZddZ xZ	S )TfmEvaluatorz% Tensorflow Models Evaluator Wrapper Fc                     t                                          ||            ||j        j                  | _        | j        j        d         | _        |j        | _        d S )NrU   )
categoriesr   )rV   r   rW   	cat_dicts
_evaluator_metric_names_eval_metric_namer/   )r   r[   r   r   evaluator_clsr\   s        r   r   zTfmEvaluator.__init__   sX    [IFFF'-7>3KLLL!%!>q!Ar   c                 T    | j                                          g | _        g | _        d S r   )r   clearr   r   r^   s    r   r_   zTfmEvaluator.reset   s,    r   r;   c                 n   | j         rt          j                    dk    rht          | j        | j                  D ]\  }}| j                            |          }| j        	                    ||           | j
        r|d d ddf         n|d d g df         }t          ||d d df         |d d df                   }| j                            ||           | j                                        }t                              d           |                                D ]$\  }}	t                              | d|	            %|| j                 }
| j         r.t          j        t'          j        |
| j                  d           nt'          j        d| j                  }
t          j        |
dd	
          }|                                s(t/          j        d           |                                (|
                                }
|r|                     |           |                                  |
S )Nr   r)   r&   r*   )r,   r-   clszMetrics:z: rf   T)async_opg      ?)r   rD   rE   r   r   r   r/   get_ann_infor   "add_single_ground_truth_image_infor   r2   add_single_detected_image_infor?   _loggerinfoitemsr   rq   rr   rs   r   is_completedtimesleeprt   rK   r_   )r   r>   r   r#   gtr,   r8   metricskv
map_metricwaits               r   r?   zTfmEvaluator.evaluate   s+    	+4=??a#7#7%()94;K%L%L M M!]//88BB7BOOO+/>Xx1Q3''x<<<?XHQQQTNAOOO>>wLLLLo..00GLL$$$ * *1[[Q[[)))) !78J \u|Jt?VWWWYZ[[[a0GHHHJ>*a$???D''))  
3 ''))   $**J 	*II()))

r   rM   )
rN   rO   rP   __doc__tfm_evalObjectDetectionEvaluatorr   r_   r?   ry   rz   s   @r   r|   r|      sp        //',XMn' ' ' ' ' '  
       r   r|   c                         e Zd Zd fd	Z xZS )r
   Fc                 f    t                                          |||t          j                   d S N)r   r   r   )rV   r   r   PascalDetectionEvaluatorrZ   s       r   r   zPascalEvaluator.__init__   s@    	QYQr 	 	t 	t 	t 	t 	tr   rL   rN   rO   rP   r   ry   rz   s   @r   r
   r
      sG        t t t t t t t t t tr   r
   c                         e Zd Zd fd	Z xZS )r   Fc                 f    t                                          |||t          j                   d S r   )rV   r   r   OpenImagesDetectionEvaluatorrZ   s       r   r   zOpenImagesEvaluator.__init__   s@    	QYQv 	 	x 	x 	x 	x 	xr   rL   r   rz   s   @r   r   r      sG        x x x x x x x x x xr   r   Fc                 ~    d| v rt          |||          S d| v rt          |||          S t          |||          S )NrX   rU   
openimages)r	   r   r
   )rh   r[   r   r   s       r   r   r      sU    ~~W+SSSS			"7yYYYYwK9UUUUr   rL   ) ri   rQ   rG   loggingr   tempfiler   r   nprr   torch.distributedr   rD   pycocotools.cocoevalr   r   r   r   %effdet.evaluation.detection_evaluator
evaluationdetection_evaluatorr   	getLoggerrN   r   __all__r   r	   r|   r
   r   r   r=   r   r   <module>r      s   				 



    ' ' ' ' ' '                  ) ) ) ) ) ) K K K K K K K K K K 9 8 8 8 8 8 8 8 8 '
H
%
% Z
Y
Y>J >J >J >J >J >J >J >JB' ' ' ' 'I ' ' 'T) ) ) ) )9 ) ) )Xt t t t tl t t tx x x x x, x x xV V V V V Vr   