U
    ¯Ê¹j  ã                   @   s6   d Z ddlZddlZddlZddlZG dd„ dƒZdS )zï Real labels evaluator for ImageNet
Paper: `Are we done with ImageNet?` - https://arxiv.org/abs/2006.07159
Based on Numpy example at https://github.com/google-research/reassessed-imagenet

Hacked together by / Copyright 2020 Ross Wightman
é    Nc                   @   s(   e Zd Zd	dd„Zdd„ Zd
dd„ZdS )ÚRealLabelsImagenetN©é   é   c              	   C   s    |d k	r(t |ƒ�}t |¡}W 5 Q R X n"t t ttj 	dd¡¡ 
d¡¡}dd„ t|ƒD ƒ}|| _|| _t| jƒt| jƒks€t‚|| _dd„ |D ƒ| _d| _d S )NÚ_infozimagenet_real_labels.jsonzutf-8c                 S   s$   i | ]\}}d |d d›d�|“qS )ZILSVRC2012_val_r   Z08dz.JPEG© )Ú.0ÚiÚlabelsr   r   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/data/real_labels.pyÚ
<dictcomp>   s      z/RealLabelsImagenet.__init__.<locals>.<dictcomp>c                 S   s   i | ]
}|g “qS r   r   ©r   Úkr   r   r   r      s      r   )ÚopenÚjsonÚloadÚloadsÚpkgutilÚget_dataÚ__name__ÚosÚpathÚjoinÚdecodeÚ	enumerateÚreal_labelsÚ	filenamesÚlenÚAssertionErrorÚtopkÚ
is_correctÚ
sample_idx)Úselfr   Z	real_jsonr   r   r   r   r   Ú__init__   s    
ÿzRealLabelsImagenet.__init__c              	      s    t ˆjƒ}| |ddd¡\}}| ¡  ¡ }|D ]l}ˆjˆj ‰ tj ˆ ¡‰ ˆj	ˆ  rŒˆjD ]0}ˆj
|  t‡ ‡fdd„|d |… D ƒƒ¡ qZˆ jd7  _q.d S )Nr   Tc                    s   g | ]}|ˆj ˆ  k‘qS r   )r   )r   Úp©Úfilenamer"   r   r   Ú
<listcomp>(   s     z1RealLabelsImagenet.add_result.<locals>.<listcomp>)Úmaxr   ÚcpuÚnumpyr   r!   r   r   Úbasenamer   r    ÚappendÚany)r"   ÚoutputZmaxkÚ_Z
pred_batchÚpredr   r   r%   r   Ú
add_result   s    



ÿzRealLabelsImagenet.add_resultc                    s8   |d kr‡ fdd„ˆ j D ƒS tt ˆ j| ¡ƒd S d S )Nc                    s&   i | ]}|t t ˆ j| ¡ƒd  “qS )éd   )ÚfloatÚnpÚmeanr    r   ©r"   r   r   r   -   s      z3RealLabelsImagenet.get_accuracy.<locals>.<dictcomp>r2   )r   r3   r4   r5   r    )r"   r   r   r6   r   Úget_accuracy+   s    zRealLabelsImagenet.get_accuracy)Nr   )N)r   Ú
__module__Ú__qualname__r#   r1   r7   r   r   r   r   r      s   
r   )Ú__doc__r   r   r*   r4   r   r   r   r   r   r   Ú<module>   s
   