
    kh                     &   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y)    N)NamedTemporaryFile)COCOeval   )synchronizeis_main_processall_gather_container)CocoEvaluatorPascalEvaluatorOpenImagesEvaluatorcreate_evaluatorc                   L    e Zd ZddZd Zd Zej                  dd       Zd Z	y)		Evaluatorc                 J    || _         d | _        || _        g | _        g | _        y N)distributeddistributed_device	pred_yxyximg_indicespredictions)selfr   r   s      L/var/www/teggl/fontify/venv/lib/python3.12/site-packages/effdet/evaluator.py__init__zEvaluator.__init__   s)    &"&"    c                    | j                   rK| j                  |j                  | _        t                t	        |      }t	        |d         }t               sy |d   }|j                         j                         }|j                         j                         }t        ||      D ];  \  }}| j                  j                  |       | j                  j                  |       = y )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*;*;'M-j9J.vi/@AK"$ +K^^%++-
!oo'--/!$[*!= 	.GX##G,##H-	.r   c                    g }g }t        | j                  | j                        D ]  \  }}| j                  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 t        t        |      |dd j                         |t        |d         	      }|j                  |       _  ||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   s   !$T%5%5t7G7G!H 	2GX]]**73FOOF#~~#+A|O#<AaC QTNhq!tn,NQTNhq!tn,N 	2c!f4< [Qq* #CF	-
 !''1	2	2&  ))r   c                      y r    )r   output_result_files     r   evaluatezEvaluator.evaluateO   s    r   c                     | j                   rt        j                         dk(  rMt        | j                        sJ | j                         \  }}t        j                  |t        |d      d       y y )Nr   wr)   indent)	r   distget_ranklenr   r:   jsondumpopen)r   result_filer5   r6   s       r   savezEvaluator.saveS   s]    4==?a#7t''((()-)?)?)A&hII&[#(>qI $8r   NFF )
__name__
__module____qualname__r   r$   r:   abcabstractmethodr>   rJ   r<   r   r   r   r      s1    .&*2 	 Jr   r   c                   .     e Zd Zd fd	Zd ZddZ xZS )r	   c                     t         |   ||       |j                  | _        |j                  j                  | _        y )Nr   r   )superr   parserr/   cocococo_apir   datasetr   r   	__class__s       r   r   zCocoEvaluator.__init__]   s1    [IF++r   c                      g | _         g | _        y r   )r   r   r   s    r   resetzCocoEvaluator.resetb   s    r   c                 F   | j                   rt        j                         dk(  rt        | j                        sJ | j                         \  }}|r>t        j                  |t        |d      d       | j                  j                  |      }nut        dddd      5 }t        j                  ||d       d d d        | j                  j                  j                        }	 t        j                  |j                         t!        | j                  |d	      }||j"                  _        |j'                          |j)                          |j+                          |j,                  d   }| j                   r}t        j.                  t1        j2                  || j4                  
      d       nGt1        j2                  d| j4                  
      }t        j.                  |d       |j7                         }| j9                          |S # 1 sw Y   QxY w# t        $ r Y w xY w)Nr   r@   r)   rA   coco_z.jsonF)prefixsuffixdeletemoder,   r   )r   rC   rD   rE   r   r:   rF   rG   rH   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   s   4==?a#7t''((()-)?)?)A&h!		*D1CS,IRST--//0BC'wwu[^_ CcjII.BC--//=IIgll+ !@I&.I#   "!__Q'Fu||F4;R;RSUVW\\!D,C,CDFNN61%[[]F

)C C
  s   H%H H	H H rK   rL   )rN   rO   rP   r   r_   r>   __classcell__r\   s   @r   r	   r	   [   s    ,
r   r	   c                   L     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                  | _        y )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__   sM    [IF'7>>3K3KL!%!>!>q!Ar   c                 T    | j                   j                          g | _        g | _        y r   )r   clearr   r   r^   s    r   r_   zTfmEvaluator.reset   s"    r   c                 h   | j                   rt        j                         dk(  rkt        | j                  | j
                        D ]  \  }}| j                  j                  |      }| 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                  ||        | j                  j                         }t        j                  d       |j!                         D ]  \  }}	t        j                  | d|	        ! || j"                     }
| j                   rt        j$                  t'        j(                  |
| j*                        d       nt'        j(                  d| j*                        }
t        j$                  |
dd	
      }|j-                         s&t/        j0                  d       |j-                         s&|
j3                         }
|r| j5                  |       | j7                          |
S )Nr   r)   r&   r*   )r,   r-   clszMetrics:z: rf   T)async_opg      ?)r   rC   rD   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   rJ   r_   )r   r=   r   r#   gtr,   r8   metricskv
map_metricwaits               r   r>   zTfmEvaluator.evaluate   s   4==?a#7%()9)94;K;K%L M!]]//8BB7BO+/>>x1Q3'x<?XHQTNAO>>wLM oo..0GLL$ *1s"QC[)* !7!78Ju||Jt?V?VWYZ[a0G0GHJ>>*a$?D'')

3 '') $*JII()

r   rL   )
rN   rO   rP   __doc__tfm_evalObjectDetectionEvaluatorr   r_   r>   ry   rz   s   @r   r|   r|      s"    /',XMnMn'
r   r|   c                         e Zd Zd fd	Z xZS )r
   c                 H    t         |   |||t        j                         y N)r   r   r   )rV   r   r   PascalDetectionEvaluatorrZ   s       r   r   zPascalEvaluator.__init__   s&    	QYQrQr 	 	tr   rK   rN   rO   rP   r   ry   rz   s   @r   r
   r
      s    t tr   r
   c                         e Zd Zd fd	Z xZS )r   c                 H    t         |   |||t        j                         y r   )rV   r   r   OpenImagesDetectionEvaluatorrZ   s       r   r   zOpenImagesEvaluator.__init__   s&    	QYQvQv 	 	xr   rK   r   rz   s   @r   r   r      s    x xr   r   c                 f    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      s>    ~W+SS		"7yYYwK9UUr   rK   ) ri   rQ   rF   loggingr   tempfiler   r   nprr   torch.distributedr   rC   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 9 8 '

H
% Z>J >JB'I 'T)9 )Xtl tx, xVr   