o
    1j                     @   s   d dl Z d dlZd dlZd dlZddlmZ dd ZG dd dejjZ	G dd	 d	e	Z
d
d Zdd ZedkrAe Zee dS dS )    N   )loggingc                  C   sP   t  } | jdtdd | jdtdd | jdtd | jdtd |  }|S )	zParse all argumentsz--prediction_json_pathz./pre_res.json)typedefaultz--gt_val_pathz	./val.txtz--image_dir)r   z--num_classes)argparseArgumentParseradd_argumentstrint
parse_args)parserargs r   e/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/modules/base/utils/topk_eval.pyr      s   r   c                       s8   e Zd ZdZ fddZedd Zedd Z  ZS )
AvgMetricszAverage metricsc                    s   t    i | _d S )N)super__init__
avg_metersself	__class__r   r   r   (   s   

zAvgMetrics.__init__c                 C   s(   | j r| j D ]}| j | j  S dS dS )z#Return average value of each metricN)r   avg)r   Z
metric_keyr   r   r   r   ,   s
   
zAvgMetrics.avgc                    s   d  fdd jD S )z5Return a formatted string of average values and namesz, c                    s   g | ]} j | jqS r   )r   avg_info).0keyr   r   r   
<listcomp>6   s    z'AvgMetrics.avg_info.<locals>.<listcomp>)joinr   r   r   r   r   r   3   s   zAvgMetrics.avg_info)	__name__
__module____qualname____doc__r   propertyr   r   __classcell__r   r   r   r   r   %   s    
r   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )TopkAcczTop-k accuracy metric      c                    s>   t    t|tttfsJ t|tr|g}|| _d| _d S )NF)r   r   
isinstancer
   listtupletopkwarned)r   r+   r   r   r   r   <   s   


zTopkAcc.__init__c                 C   s   t |tr	|d }|jd }t }t| jD ]7\}}||k r=| js5d| d| d| d}t| d| _d|d	| < qtj	j
|||d
 |d	| < q|S )zforward functionZlogitszThe output dims(z) is less than k(z), so the Top-z metric is meaningless.Tr&   top)k)r(   dictshape	enumerater+   r,   r   infopaddleZmetricZaccuracyitem)r   xlabelZoutput_dimsmetric_dictidxr/   msgr   r   r   forwardD   s   


"zTopkAcc.forward)r%   )r   r   r    r!   r   r;   r#   r   r   r   r   r$   9   s    r$   c                 C   s2   dg| }t | d | d D ]\}}|||< q|S )z2Parse prediction information to probability vectorg        Z	class_idsZscores)zip)pt_infonum_classesZpre_listr9   valr   r   r   prase_pt_infoX   s   

r@   c                 C   s   t | jd}t|}W d   n1 sw   Y  i }g }g }t | jD ]}| d\}}|dd }t|||< q&|D ]}	tj	
|	d | j}|t|	| j ||| g qAt t|t|}
t|
 dS )zmain functionrN /r-   	file_name)openZprediction_json_pathjsonloadZgt_val_pathstripsplitr
   ospathrelpathZ	image_dirappendr@   r>   r$   r4   Z	to_tensorr   r3   )r   fpZpredication_resultZgt_infopredr7   lineZimg_fileZgt_labelr=   r8   r   r   r   main`   s    rQ   __main__)r   rF   rJ   r4   utilsr   r   nnZLayerr   r$   r@   rQ   r   r   r   r   r   r   <module>   s   